/** @license * * jsPDF - PDF Document creation from JavaScript * Version 2.3.1 Built on 2021-03-08T15:44:11.672Z * CommitID 00000000 * * Copyright (c) 2010-2020 James Hall , https://github.com/MrRio/jsPDF * 2015-2020 yWorks GmbH, http://www.yworks.com * 2015-2020 Lukas Holländer , https://github.com/HackbrettXXX * 2016-2018 Aras Abbasi * 2010 Aaron Spike, https://github.com/acspike * 2012 Willow Systems Corporation, willow-systems.com * 2012 Pablo Hess, https://github.com/pablohess * 2012 Florian Jenett, https://github.com/fjenett * 2013 Warren Weckesser, https://github.com/warrenweckesser * 2013 Youssef Beddad, https://github.com/lifof * 2013 Lee Driscoll, https://github.com/lsdriscoll * 2013 Stefan Slonevskiy, https://github.com/stefslon * 2013 Jeremy Morel, https://github.com/jmorel * 2013 Christoph Hartmann, https://github.com/chris-rock * 2014 Juan Pablo Gaviria, https://github.com/juanpgaviria * 2014 James Makes, https://github.com/dollaruw * 2014 Diego Casorran, https://github.com/diegocr * 2014 Steven Spungin, https://github.com/Flamenco * 2014 Kenneth Glassey, https://github.com/Gavvers * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * Contributor(s): * siefkenj, ahwolf, rickygu, Midnith, saintclair, eaparango, * kim3er, mfo, alnorth, Flamenco */ ! function(t, e) { "object" == typeof exports && "undefined" != typeof module ? e(exports) : "function" == typeof define && define.amd ? define(["exports"], e) : e((t = t || self).jspdf = {}) }(this, (function(t) { "use strict"; var e = function() { return "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof self ? self : this }(); function r() { e.console && "function" == typeof e.console.log && e.console.log.apply(e.console, arguments) } var n = { log: r, warn: function(t) { e.console && ("function" == typeof e.console.warn ? e.console.warn.apply(e.console, arguments) : r.call(null, arguments)) }, error: function(t) { e.console && ("function" == typeof e.console.error ? e.console.error.apply(e.console, arguments) : r(t)) } }; /** * @license * FileSaver.js * A saveAs() FileSaver implementation. * * By Eli Grey, http://eligrey.com * * License : https://github.com/eligrey/FileSaver.js/blob/master/LICENSE.md (MIT) * source : http://purl.eligrey.com/github/FileSaver.js */ function i(t, e, r) { var i = new XMLHttpRequest; i.open("GET", t), i.responseType = "blob", i.onload = function() { c(i.response, e, r) }, i.onerror = function() { n.error("could not download file") }, i.send() } function a(t) { var e = new XMLHttpRequest; e.open("HEAD", t, !1); try { e.send() } catch (t) {} return e.status >= 200 && e.status <= 299 } function o(t) { try { t.dispatchEvent(new MouseEvent("click")) } catch (r) { var e = document.createEvent("MouseEvents"); e.initMouseEvent("click", !0, !0, window, 0, 0, 0, 80, 20, !1, !1, !1, !1, 0, null), t.dispatchEvent(e) } } var s, u, c = e.saveAs || ("object" != typeof window || window !== e ? function() {} : "undefined" != typeof HTMLAnchorElement && "download" in HTMLAnchorElement.prototype ? function(t, r, n) { var s = e.URL || e.webkitURL, u = document.createElement("a"); r = r || t.name || "download", u.download = r, u.rel = "noopener", "string" == typeof t ? (u.href = t, u.origin !== location.origin ? a(u.href) ? i(t, r, n) : o(u, u.target = "_blank") : o(u)) : (u.href = s.createObjectURL(t), setTimeout((function() { s.revokeObjectURL(u.href) }), 4e4), setTimeout((function() { o(u) }), 0)) } : "msSaveOrOpenBlob" in navigator ? function(t, e, r) { if (e = e || t.name || "download", "string" == typeof t) if (a(t)) i(t, e, r); else { var s = document.createElement("a"); s.href = t, s.target = "_blank", setTimeout((function() { o(s) })) } else navigator.msSaveOrOpenBlob(function(t, e) { return void 0 === e ? e = { autoBom: !1 } : "object" != typeof e && (n.warn("Deprecated: Expected third argument to be a object"), e = { autoBom: !e }), e.autoBom && /^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(t.type) ? new Blob([String.fromCharCode(65279), t], { type: t.type }) : t }(t, r), e) } : function(t, r, n, a) { if ((a = a || open("", "_blank")) && (a.document.title = a.document.body.innerText = "downloading..."), "string" == typeof t) return i(t, r, n); var o = "application/octet-stream" === t.type, s = /constructor/i.test(e.HTMLElement) || e.safari, u = /CriOS\/[\d]+/.test(navigator.userAgent); if ((u || o && s) && "object" == typeof FileReader) { var c = new FileReader; c.onloadend = function() { var t = c.result; t = u ? t : t.replace(/^data:[^;]*;/, "data:attachment/file;"), a ? a.location.href = t : location = t, a = null }, c.readAsDataURL(t) } else { var l = e.URL || e.webkitURL, h = l.createObjectURL(t); a ? a.location = h : location.href = h, a = null, setTimeout((function() { l.revokeObjectURL(h) }), 4e4) } }); /** * A class to parse color values * @author Stoyan Stefanov * {@link http://www.phpied.com/rgb-color-parser-in-javascript/} * @license Use it if you like it */ function l(t) { var e; t = t || "", this.ok = !1, "#" == t.charAt(0) && (t = t.substr(1, 6)); t = { aliceblue: "f0f8ff", antiquewhite: "faebd7", aqua: "00ffff", aquamarine: "7fffd4", azure: "f0ffff", beige: "f5f5dc", bisque: "ffe4c4", black: "000000", blanchedalmond: "ffebcd", blue: "0000ff", blueviolet: "8a2be2", brown: "a52a2a", burlywood: "deb887", cadetblue: "5f9ea0", chartreuse: "7fff00", chocolate: "d2691e", coral: "ff7f50", cornflowerblue: "6495ed", cornsilk: "fff8dc", crimson: "dc143c", cyan: "00ffff", darkblue: "00008b", darkcyan: "008b8b", darkgoldenrod: "b8860b", darkgray: "a9a9a9", darkgreen: "006400", darkkhaki: "bdb76b", darkmagenta: "8b008b", darkolivegreen: "556b2f", darkorange: "ff8c00", darkorchid: "9932cc", darkred: "8b0000", darksalmon: "e9967a", darkseagreen: "8fbc8f", darkslateblue: "483d8b", darkslategray: "2f4f4f", darkturquoise: "00ced1", darkviolet: "9400d3", deeppink: "ff1493", deepskyblue: "00bfff", dimgray: "696969", dodgerblue: "1e90ff", feldspar: "d19275", firebrick: "b22222", floralwhite: "fffaf0", forestgreen: "228b22", fuchsia: "ff00ff", gainsboro: "dcdcdc", ghostwhite: "f8f8ff", gold: "ffd700", goldenrod: "daa520", gray: "808080", green: "008000", greenyellow: "adff2f", honeydew: "f0fff0", hotpink: "ff69b4", indianred: "cd5c5c", indigo: "4b0082", ivory: "fffff0", khaki: "f0e68c", lavender: "e6e6fa", lavenderblush: "fff0f5", lawngreen: "7cfc00", lemonchiffon: "fffacd", lightblue: "add8e6", lightcoral: "f08080", lightcyan: "e0ffff", lightgoldenrodyellow: "fafad2", lightgrey: "d3d3d3", lightgreen: "90ee90", lightpink: "ffb6c1", lightsalmon: "ffa07a", lightseagreen: "20b2aa", lightskyblue: "87cefa", lightslateblue: "8470ff", lightslategray: "778899", lightsteelblue: "b0c4de", lightyellow: "ffffe0", lime: "00ff00", limegreen: "32cd32", linen: "faf0e6", magenta: "ff00ff", maroon: "800000", mediumaquamarine: "66cdaa", mediumblue: "0000cd", mediumorchid: "ba55d3", mediumpurple: "9370d8", mediumseagreen: "3cb371", mediumslateblue: "7b68ee", mediumspringgreen: "00fa9a", mediumturquoise: "48d1cc", mediumvioletred: "c71585", midnightblue: "191970", mintcream: "f5fffa", mistyrose: "ffe4e1", moccasin: "ffe4b5", navajowhite: "ffdead", navy: "000080", oldlace: "fdf5e6", olive: "808000", olivedrab: "6b8e23", orange: "ffa500", orangered: "ff4500", orchid: "da70d6", palegoldenrod: "eee8aa", palegreen: "98fb98", paleturquoise: "afeeee", palevioletred: "d87093", papayawhip: "ffefd5", peachpuff: "ffdab9", peru: "cd853f", pink: "ffc0cb", plum: "dda0dd", powderblue: "b0e0e6", purple: "800080", red: "ff0000", rosybrown: "bc8f8f", royalblue: "4169e1", saddlebrown: "8b4513", salmon: "fa8072", sandybrown: "f4a460", seagreen: "2e8b57", seashell: "fff5ee", sienna: "a0522d", silver: "c0c0c0", skyblue: "87ceeb", slateblue: "6a5acd", slategray: "708090", snow: "fffafa", springgreen: "00ff7f", steelblue: "4682b4", tan: "d2b48c", teal: "008080", thistle: "d8bfd8", tomato: "ff6347", turquoise: "40e0d0", violet: "ee82ee", violetred: "d02090", wheat: "f5deb3", white: "ffffff", whitesmoke: "f5f5f5", yellow: "ffff00", yellowgreen: "9acd32" }[t = (t = t.replace(/ /g, "")).toLowerCase()] || t; for (var r = [{ re: /^rgb\((\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3})\)$/, example: ["rgb(123, 234, 45)", "rgb(255,234,245)"], process: function(t) { return [parseInt(t[1]), parseInt(t[2]), parseInt(t[3])] } }, { re: /^(\w{2})(\w{2})(\w{2})$/, example: ["#00ff00", "336699"], process: function(t) { return [parseInt(t[1], 16), parseInt(t[2], 16), parseInt(t[3], 16)] } }, { re: /^(\w{1})(\w{1})(\w{1})$/, example: ["#fb0", "f0f"], process: function(t) { return [parseInt(t[1] + t[1], 16), parseInt(t[2] + t[2], 16), parseInt(t[3] + t[3], 16)] } }], n = 0; n < r.length; n++) { var i = r[n].re, a = r[n].process, o = i.exec(t); o && (e = a(o), this.r = e[0], this.g = e[1], this.b = e[2], this.ok = !0) } this.r = this.r < 0 || isNaN(this.r) ? 0 : this.r > 255 ? 255 : this.r, this.g = this.g < 0 || isNaN(this.g) ? 0 : this.g > 255 ? 255 : this.g, this.b = this.b < 0 || isNaN(this.b) ? 0 : this.b > 255 ? 255 : this.b, this.toRGB = function() { return "rgb(" + this.r + ", " + this.g + ", " + this.b + ")" }, this.toHex = function() { var t = this.r.toString(16), e = this.g.toString(16), r = this.b.toString(16); return 1 == t.length && (t = "0" + t), 1 == e.length && (e = "0" + e), 1 == r.length && (r = "0" + r), "#" + t + e + r } } /** * @license * Joseph Myers does not specify a particular license for his work. * * Author: Joseph Myers * Accessed from: http://www.myersdaily.org/joseph/javascript/md5.js * * Modified by: Owen Leong */ function h(t, e) { var r = t[0], n = t[1], i = t[2], a = t[3]; r = d(r, n, i, a, e[0], 7, -680876936), a = d(a, r, n, i, e[1], 12, -389564586), i = d(i, a, r, n, e[2], 17, 606105819), n = d(n, i, a, r, e[3], 22, -1044525330), r = d(r, n, i, a, e[4], 7, -176418897), a = d(a, r, n, i, e[5], 12, 1200080426), i = d(i, a, r, n, e[6], 17, -1473231341), n = d(n, i, a, r, e[7], 22, -45705983), r = d(r, n, i, a, e[8], 7, 1770035416), a = d(a, r, n, i, e[9], 12, -1958414417), i = d(i, a, r, n, e[10], 17, -42063), n = d(n, i, a, r, e[11], 22, -1990404162), r = d(r, n, i, a, e[12], 7, 1804603682), a = d(a, r, n, i, e[13], 12, -40341101), i = d(i, a, r, n, e[14], 17, -1502002290), r = p(r, n = d(n, i, a, r, e[15], 22, 1236535329), i, a, e[1], 5, -165796510), a = p(a, r, n, i, e[6], 9, -1069501632), i = p(i, a, r, n, e[11], 14, 643717713), n = p(n, i, a, r, e[0], 20, -373897302), r = p(r, n, i, a, e[5], 5, -701558691), a = p(a, r, n, i, e[10], 9, 38016083), i = p(i, a, r, n, e[15], 14, -660478335), n = p(n, i, a, r, e[4], 20, -405537848), r = p(r, n, i, a, e[9], 5, 568446438), a = p(a, r, n, i, e[14], 9, -1019803690), i = p(i, a, r, n, e[3], 14, -187363961), n = p(n, i, a, r, e[8], 20, 1163531501), r = p(r, n, i, a, e[13], 5, -1444681467), a = p(a, r, n, i, e[2], 9, -51403784), i = p(i, a, r, n, e[7], 14, 1735328473), r = g(r, n = p(n, i, a, r, e[12], 20, -1926607734), i, a, e[5], 4, -378558), a = g(a, r, n, i, e[8], 11, -2022574463), i = g(i, a, r, n, e[11], 16, 1839030562), n = g(n, i, a, r, e[14], 23, -35309556), r = g(r, n, i, a, e[1], 4, -1530992060), a = g(a, r, n, i, e[4], 11, 1272893353), i = g(i, a, r, n, e[7], 16, -155497632), n = g(n, i, a, r, e[10], 23, -1094730640), r = g(r, n, i, a, e[13], 4, 681279174), a = g(a, r, n, i, e[0], 11, -358537222), i = g(i, a, r, n, e[3], 16, -722521979), n = g(n, i, a, r, e[6], 23, 76029189), r = g(r, n, i, a, e[9], 4, -640364487), a = g(a, r, n, i, e[12], 11, -421815835), i = g(i, a, r, n, e[15], 16, 530742520), r = m(r, n = g(n, i, a, r, e[2], 23, -995338651), i, a, e[0], 6, -198630844), a = m(a, r, n, i, e[7], 10, 1126891415), i = m(i, a, r, n, e[14], 15, -1416354905), n = m(n, i, a, r, e[5], 21, -57434055), r = m(r, n, i, a, e[12], 6, 1700485571), a = m(a, r, n, i, e[3], 10, -1894986606), i = m(i, a, r, n, e[10], 15, -1051523), n = m(n, i, a, r, e[1], 21, -2054922799), r = m(r, n, i, a, e[8], 6, 1873313359), a = m(a, r, n, i, e[15], 10, -30611744), i = m(i, a, r, n, e[6], 15, -1560198380), n = m(n, i, a, r, e[13], 21, 1309151649), r = m(r, n, i, a, e[4], 6, -145523070), a = m(a, r, n, i, e[11], 10, -1120210379), i = m(i, a, r, n, e[2], 15, 718787259), n = m(n, i, a, r, e[9], 21, -343485551), t[0] = L(r, t[0]), t[1] = L(n, t[1]), t[2] = L(i, t[2]), t[3] = L(a, t[3]) } function f(t, e, r, n, i, a) { return e = L(L(e, t), L(n, a)), L(e << i | e >>> 32 - i, r) } function d(t, e, r, n, i, a, o) { return f(e & r | ~e & n, t, e, i, a, o) } function p(t, e, r, n, i, a, o) { return f(e & n | r & ~n, t, e, i, a, o) } function g(t, e, r, n, i, a, o) { return f(e ^ r ^ n, t, e, i, a, o) } function m(t, e, r, n, i, a, o) { return f(r ^ (e | ~n), t, e, i, a, o) } function v(t) { var e, r = t.length, n = [1732584193, -271733879, -1732584194, 271733878]; for (e = 64; e <= t.length; e += 64) h(n, b(t.substring(e - 64, e))); t = t.substring(e - 64); var i = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; for (e = 0; e < t.length; e++) i[e >> 2] |= t.charCodeAt(e) << (e % 4 << 3); if (i[e >> 2] |= 128 << (e % 4 << 3), e > 55) for (h(n, i), e = 0; e < 16; e++) i[e] = 0; return i[14] = 8 * r, h(n, i), n } function b(t) { var e, r = []; for (e = 0; e < 64; e += 4) r[e >> 2] = t.charCodeAt(e) + (t.charCodeAt(e + 1) << 8) + (t.charCodeAt(e + 2) << 16) + (t.charCodeAt(e + 3) << 24); return r } s = e.atob.bind(e), u = e.btoa.bind(e); var y = "0123456789abcdef".split(""); function w(t) { for (var e = "", r = 0; r < 4; r++) e += y[t >> 8 * r + 4 & 15] + y[t >> 8 * r & 15]; return e } function N(t) { return String.fromCharCode((255 & t) >> 0, (65280 & t) >> 8, (16711680 & t) >> 16, (4278190080 & t) >> 24) } function A(t) { return function(t) { return t.map(N).join("") }(v(t)) } function L(t, e) { return t + e & 4294967295 } if ("5d41402abc4b2a76b9719d911017c592" != function(t) { for (var e = 0; e < t.length; e++) t[e] = w(t[e]); return t.join("") }(v("hello"))) { function L(t, e) { var r = (65535 & t) + (65535 & e); return (t >> 16) + (e >> 16) + (r >> 16) << 16 | 65535 & r } } /** * @license * FPDF is released under a permissive license: there is no usage restriction. * You may embed it freely in your application (commercial or not), with or * without modifications. * * Reference: http://www.fpdf.org/en/script/script37.php */ function x(t, e) { var r, n, i, a; if (t !== r) { for (var o = (i = t, a = 1 + (256 / t.length >> 0), new Array(a + 1).join(i)), s = [], u = 0; u < 256; u++) s[u] = u; var c = 0; for (u = 0; u < 256; u++) { var l = s[u]; c = (c + l + o.charCodeAt(u)) % 256, s[u] = s[c], s[c] = l } r = t, n = s } else s = n; var h = e.length, f = 0, d = 0, p = ""; for (u = 0; u < h; u++) d = (d + (l = s[f = (f + 1) % 256])) % 256, s[f] = s[d], s[d] = l, o = s[(s[f] + s[d]) % 256], p += String.fromCharCode(e.charCodeAt(u) ^ o); return p } /** * @license * Licensed under the MIT License. * http://opensource.org/licenses/mit-license * Author: Owen Leong (@owenl131) * Date: 15 Oct 2020 * References: * https://www.cs.cmu.edu/~dst/Adobe/Gallery/anon21jul01-pdf-encryption.txt * https://github.com/foliojs/pdfkit/blob/master/lib/security.js * http://www.fpdf.org/en/script/script37.php */ var S = { print: 4, modify: 8, copy: 16, "annot-forms": 32 }; function _(t, e, r, n) { this.v = 1, this.r = 2; let i = 192; t.forEach((function(t) { if (void 0 !== S.perm) throw new Error("Invalid permission: " + t); i += S[t] })), this.padding = "(¿N^NuŠAd\0NVÿú\b..\0¶Ðh>€/\f©þdSiz"; let a = (e + this.padding).substr(0, 32), o = (r + this.padding).substr(0, 32); this.O = this.processOwnerPassword(a, o), this.P = -(1 + (255 ^ i)), this.encryptionKey = A(a + this.O + this.lsbFirstWord(this.P) + this.hexToBytes(n)).substr(0, 5), this.U = x(this.encryptionKey, this.padding) } function P(t) { if ("object" != typeof t) throw new Error("Invalid Context passed to initialize PubSub (jsPDF-module)"); var r = {}; this.subscribe = function(t, e, n) { if (n = n || !1, "string" != typeof t || "function" != typeof e || "boolean" != typeof n) throw new Error("Invalid arguments passed to PubSub.subscribe (jsPDF-module)"); r.hasOwnProperty(t) || (r[t] = {}); var i = Math.random().toString(35); return r[t][i] = [e, !!n], i }, this.unsubscribe = function(t) { for (var e in r) if (r[e][t]) return delete r[e][t], 0 === Object.keys(r[e]).length && delete r[e], !0; return !1 }, this.publish = function(i) { if (r.hasOwnProperty(i)) { var a = Array.prototype.slice.call(arguments, 1), o = []; for (var s in r[i]) { var u = r[i][s]; try { u[0].apply(t, a) } catch (t) { e.console && n.error("jsPDF PubSub Error", t.message, t) } u[1] && o.push(s) } o.length && o.forEach(this.unsubscribe) } }, this.getTopics = function() { return r } } function k(t) { if (!(this instanceof k)) return new k(t); var e = "opacity,stroke-opacity".split(","); for (var r in t) t.hasOwnProperty(r) && e.indexOf(r) >= 0 && (this[r] = t[r]); this.id = "", this.objectNumber = -1 } function F(t, e) { this.gState = t, this.matrix = e, this.id = "", this.objectNumber = -1 } function I(t, e, r, n, i) { if (!(this instanceof I)) return new I(t, e, r, n, i); this.type = "axial" === t ? 2 : 3, this.coords = e, this.colors = r, F.call(this, n, i) } function C(t, e, r, n, i) { if (!(this instanceof C)) return new C(t, e, r, n, i); this.boundingBox = t, this.xStep = e, this.yStep = r, this.stream = "", this.cloneIndex = 0, F.call(this, n, i) } function j(t) { var r, i = "string" == typeof arguments[0] ? arguments[0] : "p", a = arguments[1], o = arguments[2], s = arguments[3], h = [], f = 1, d = 16, p = "S", g = null; "object" == typeof(t = t || {}) && (i = t.orientation, a = t.unit || a, o = t.format || o, s = t.compress || t.compressPdf || s, null !== (g = t.encryption || null) && (g.userPassword = g.userPassword || "", g.ownerPassword = g.ownerPassword || "", g.userPermissions = g.userPermissions || []), f = "number" == typeof t.userUnit ? Math.abs(t.userUnit) : 1, void 0 !== t.precision && (r = t.precision), void 0 !== t.floatPrecision && (d = t.floatPrecision), p = t.defaultPathOperation || "S"), h = t.filters || (!0 === s ? ["FlateEncode"] : h), a = a || "mm", i = ("" + (i || "P")).toLowerCase(); var m = t.putOnlyUsedFonts || !1, v = {}, b = { internal: {}, __private__: {} }; b.__private__.PubSub = P; var y = "1.3", w = b.__private__.getPdfVersion = function() { return y }; b.__private__.setPdfVersion = function(t) { y = t }; var N = { a0: [2383.94, 3370.39], a1: [1683.78, 2383.94], a2: [1190.55, 1683.78], a3: [841.89, 1190.55], a4: [595.28, 841.89], a5: [419.53, 595.28], a6: [297.64, 419.53], a7: [209.76, 297.64], a8: [147.4, 209.76], a9: [104.88, 147.4], a10: [73.7, 104.88], b0: [2834.65, 4008.19], b1: [2004.09, 2834.65], b2: [1417.32, 2004.09], b3: [1000.63, 1417.32], b4: [708.66, 1000.63], b5: [498.9, 708.66], b6: [354.33, 498.9], b7: [249.45, 354.33], b8: [175.75, 249.45], b9: [124.72, 175.75], b10: [87.87, 124.72], c0: [2599.37, 3676.54], c1: [1836.85, 2599.37], c2: [1298.27, 1836.85], c3: [918.43, 1298.27], c4: [649.13, 918.43], c5: [459.21, 649.13], c6: [323.15, 459.21], c7: [229.61, 323.15], c8: [161.57, 229.61], c9: [113.39, 161.57], c10: [79.37, 113.39], dl: [311.81, 623.62], letter: [612, 792], "government-letter": [576, 756], legal: [612, 1008], "junior-legal": [576, 360], ledger: [1224, 792], tabloid: [792, 1224], "credit-card": [153, 243] }; b.__private__.getPageFormats = function() { return N }; var A = b.__private__.getPageFormat = function(t) { return N[t] }; o = o || "a4"; var L = { COMPAT: "compat", ADVANCED: "advanced" }, x = L.COMPAT; function S() { this.saveGraphicsState(), ct(new Ht(xt, 0, 0, -xt, 0, Er() * xt).toString() + " cm"), this.setFontSize(this.getFontSize() / xt), p = "n", x = L.ADVANCED } function F() { this.restoreGraphicsState(), p = "S", x = L.COMPAT } var O = function(t, e) { if ("bold" == t && "normal" == e || "bold" == t && 400 == e || "normal" == t && "italic" == e || "bold" == t && "italic" == e) throw new Error("Invalid Combination of fontweight and fontstyle"); return e && t !== e && (t = 400 == e ? "italic" == t ? "italic" : "normal" : 700 == e && "italic" !== t ? "bold" : t + "" + e), t }; b.advancedAPI = function(t) { var e = x === L.COMPAT; return e && S.call(this), "function" != typeof t || (t(this), e && F.call(this)), this }, b.compatAPI = function(t) { var e = x === L.ADVANCED; return e && F.call(this), "function" != typeof t || (t(this), e && S.call(this)), this }, b.isAdvancedAPI = function() { return x === L.ADVANCED }; var B, M = function(t) { if (x !== L.ADVANCED) throw new Error(t + " is only available in 'advanced' API mode. You need to call advancedAPI() first.") }, E = b.roundToPrecision = b.__private__.roundToPrecision = function(t, e) { var n = r || e; if (isNaN(t) || isNaN(n)) throw new Error("Invalid argument passed to jsPDF.roundToPrecision"); return t.toFixed(n).replace(/0+$/, "") }; B = b.hpf = b.__private__.hpf = "number" == typeof d ? function(t) { if (isNaN(t)) throw new Error("Invalid argument passed to jsPDF.hpf"); return E(t, d) } : "smart" === d ? function(t) { if (isNaN(t)) throw new Error("Invalid argument passed to jsPDF.hpf"); return E(t, t > -1 && t < 1 ? 16 : 5) } : function(t) { if (isNaN(t)) throw new Error("Invalid argument passed to jsPDF.hpf"); return E(t, 16) }; var q = b.f2 = b.__private__.f2 = function(t) { if (isNaN(t)) throw new Error("Invalid argument passed to jsPDF.f2"); return E(t, 2) }, R = b.__private__.f3 = function(t) { if (isNaN(t)) throw new Error("Invalid argument passed to jsPDF.f3"); return E(t, 3) }, T = b.scale = b.__private__.scale = function(t) { if (isNaN(t)) throw new Error("Invalid argument passed to jsPDF.scale"); return x === L.COMPAT ? t * xt : x === L.ADVANCED ? t : void 0 }, D = function(t) { return x === L.COMPAT ? Er() - t : x === L.ADVANCED ? t : void 0 }, U = function(t) { return T(D(t)) }; b.__private__.setPrecision = b.setPrecision = function(t) { "number" == typeof parseInt(t, 10) && (r = parseInt(t, 10)) }; var z, H = "00000000000000000000000000000000", W = b.__private__.getFileId = function() { return H }, V = b.__private__.setFileId = function(t) { return H = void 0 !== t && /^[a-fA-F0-9]{32}$/.test(t) ? t.toUpperCase() : H.split("").map((function() { return "ABCDEF0123456789".charAt(Math.floor(16 * Math.random())) })).join(""), null !== g && (Ve = new _(g.userPermissions, g.userPassword, g.ownerPassword, H)), H }; b.setFileId = function(t) { return V(t), this }, b.getFileId = function() { return W() }; var G = b.__private__.convertDateToPDFDate = function(t) { var e = t.getTimezoneOffset(), r = e < 0 ? "+" : "-", n = Math.floor(Math.abs(e / 60)), i = Math.abs(e % 60), a = [r, Z(n), "'", Z(i), "'"].join(""); return ["D:", t.getFullYear(), Z(t.getMonth() + 1), Z(t.getDate()), Z(t.getHours()), Z(t.getMinutes()), Z(t.getSeconds()), a].join("") }, Y = b.__private__.convertPDFDateToDate = function(t) { var e = parseInt(t.substr(2, 4), 10), r = parseInt(t.substr(6, 2), 10) - 1, n = parseInt(t.substr(8, 2), 10), i = parseInt(t.substr(10, 2), 10), a = parseInt(t.substr(12, 2), 10), o = parseInt(t.substr(14, 2), 10); return new Date(e, r, n, i, a, o, 0) }, J = b.__private__.setCreationDate = function(t) { var e; if (void 0 === t && (t = new Date), t instanceof Date) e = G(t); else { if (!/^D:(20[0-2][0-9]|203[0-7]|19[7-9][0-9])(0[0-9]|1[0-2])([0-2][0-9]|3[0-1])(0[0-9]|1[0-9]|2[0-3])(0[0-9]|[1-5][0-9])(0[0-9]|[1-5][0-9])(\+0[0-9]|\+1[0-4]|-0[0-9]|-1[0-1])'(0[0-9]|[1-5][0-9])'?$/.test(t)) throw new Error("Invalid argument passed to jsPDF.setCreationDate"); e = t } return z = e }, X = b.__private__.getCreationDate = function(t) { var e = z; return "jsDate" === t && (e = Y(z)), e }; b.setCreationDate = function(t) { return J(t), this }, b.getCreationDate = function(t) { return X(t) }; var K, Z = b.__private__.padd2 = function(t) { return ("0" + parseInt(t)).slice(-2) }, $ = b.__private__.padd2Hex = function(t) { return ("00" + (t = t.toString())).substr(t.length) }, Q = 0, tt = [], et = [], rt = 0, nt = [], it = [], at = !1, ot = et, st = function() { Q = 0, rt = 0, et = [], tt = [], nt = [], Zt = Jt(), $t = Jt() }; b.__private__.setCustomOutputDestination = function(t) { at = !0, ot = t }; var ut = function(t) { at || (ot = t) }; b.__private__.resetCustomOutputDestination = function() { at = !1, ot = et }; var ct = b.__private__.out = function(t) { return t = t.toString(), rt += t.length + 1, ot.push(t), ot }, lt = b.__private__.write = function(t) { return ct(1 === arguments.length ? t.toString() : Array.prototype.join.call(arguments, " ")) }, ht = b.__private__.getArrayBuffer = function(t) { for (var e = t.length, r = new ArrayBuffer(e), n = new Uint8Array(r); e--;) n[e] = t.charCodeAt(e); return r }, ft = [ ["Helvetica", "helvetica", "normal", "WinAnsiEncoding"], ["Helvetica-Bold", "helvetica", "bold", "WinAnsiEncoding"], ["Helvetica-Oblique", "helvetica", "italic", "WinAnsiEncoding"], ["Helvetica-BoldOblique", "helvetica", "bolditalic", "WinAnsiEncoding"], ["Courier", "courier", "normal", "WinAnsiEncoding"], ["Courier-Bold", "courier", "bold", "WinAnsiEncoding"], ["Courier-Oblique", "courier", "italic", "WinAnsiEncoding"], ["Courier-BoldOblique", "courier", "bolditalic", "WinAnsiEncoding"], ["Times-Roman", "times", "normal", "WinAnsiEncoding"], ["Times-Bold", "times", "bold", "WinAnsiEncoding"], ["Times-Italic", "times", "italic", "WinAnsiEncoding"], ["Times-BoldItalic", "times", "bolditalic", "WinAnsiEncoding"], ["ZapfDingbats", "zapfdingbats", "normal", null], ["Symbol", "symbol", "normal", null] ]; b.__private__.getStandardFonts = function() { return ft }; var dt = t.fontSize || 16; b.__private__.setFontSize = b.setFontSize = function(t) { return dt = x === L.ADVANCED ? t / xt : t, this }; var pt, gt = b.__private__.getFontSize = b.getFontSize = function() { return x === L.COMPAT ? dt : dt * xt }, mt = t.R2L || !1; b.__private__.setR2L = b.setR2L = function(t) { return mt = t, this }, b.__private__.getR2L = b.getR2L = function() { return mt }; var vt, bt = b.__private__.setZoomMode = function(t) { var e = [void 0, null, "fullwidth", "fullheight", "fullpage", "original"]; if (/^\d*\.?\d*%$/.test(t)) pt = t; else if (isNaN(t)) { if (-1 === e.indexOf(t)) throw new Error('zoom must be Integer (e.g. 2), a percentage Value (e.g. 300%) or fullwidth, fullheight, fullpage, original. "' + t + '" is not recognized.'); pt = t } else pt = parseInt(t, 10) }; b.__private__.getZoomMode = function() { return pt }; var yt, wt = b.__private__.setPageMode = function(t) { if (-1 == [void 0, null, "UseNone", "UseOutlines", "UseThumbs", "FullScreen"].indexOf(t)) throw new Error('Page mode must be one of UseNone, UseOutlines, UseThumbs, or FullScreen. "' + t + '" is not recognized.'); vt = t }; b.__private__.getPageMode = function() { return vt }; var Nt = b.__private__.setLayoutMode = function(t) { if (-1 == [void 0, null, "continuous", "single", "twoleft", "tworight", "two"].indexOf(t)) throw new Error('Layout mode must be one of continuous, single, twoleft, tworight. "' + t + '" is not recognized.'); yt = t }; b.__private__.getLayoutMode = function() { return yt }, b.__private__.setDisplayMode = b.setDisplayMode = function(t, e, r) { return bt(t), Nt(e), wt(r), this }; var At = { title: "", subject: "", author: "", keywords: "", creator: "" }; b.__private__.getDocumentProperty = function(t) { if (-1 === Object.keys(At).indexOf(t)) throw new Error("Invalid argument passed to jsPDF.getDocumentProperty"); return At[t] }, b.__private__.getDocumentProperties = function() { return At }, b.__private__.setDocumentProperties = b.setProperties = b.setDocumentProperties = function(t) { for (var e in At) At.hasOwnProperty(e) && t[e] && (At[e] = t[e]); return this }, b.__private__.setDocumentProperty = function(t, e) { if (-1 === Object.keys(At).indexOf(t)) throw new Error("Invalid arguments passed to jsPDF.setDocumentProperty"); return At[t] = e }; var Lt, xt, St, _t, Pt, kt = {}, Ft = {}, It = [], Ct = {}, jt = {}, Ot = {}, Bt = {}, Mt = null, Et = 0, qt = [], Rt = new P(b), Tt = t.hotfixes || [], Dt = {}, Ut = {}, zt = [], Ht = function(t, e, r, n, i, a) { if (!(this instanceof Ht)) return new Ht(t, e, r, n, i, a); isNaN(t) && (t = 1), isNaN(e) && (e = 0), isNaN(r) && (r = 0), isNaN(n) && (n = 1), isNaN(i) && (i = 0), isNaN(a) && (a = 0), this._matrix = [t, e, r, n, i, a] }; Object.defineProperty(Ht.prototype, "sx", { get: function() { return this._matrix[0] }, set: function(t) { this._matrix[0] = t } }), Object.defineProperty(Ht.prototype, "shy", { get: function() { return this._matrix[1] }, set: function(t) { this._matrix[1] = t } }), Object.defineProperty(Ht.prototype, "shx", { get: function() { return this._matrix[2] }, set: function(t) { this._matrix[2] = t } }), Object.defineProperty(Ht.prototype, "sy", { get: function() { return this._matrix[3] }, set: function(t) { this._matrix[3] = t } }), Object.defineProperty(Ht.prototype, "tx", { get: function() { return this._matrix[4] }, set: function(t) { this._matrix[4] = t } }), Object.defineProperty(Ht.prototype, "ty", { get: function() { return this._matrix[5] }, set: function(t) { this._matrix[5] = t } }), Object.defineProperty(Ht.prototype, "a", { get: function() { return this._matrix[0] }, set: function(t) { this._matrix[0] = t } }), Object.defineProperty(Ht.prototype, "b", { get: function() { return this._matrix[1] }, set: function(t) { this._matrix[1] = t } }), Object.defineProperty(Ht.prototype, "c", { get: function() { return this._matrix[2] }, set: function(t) { this._matrix[2] = t } }), Object.defineProperty(Ht.prototype, "d", { get: function() { return this._matrix[3] }, set: function(t) { this._matrix[3] = t } }), Object.defineProperty(Ht.prototype, "e", { get: function() { return this._matrix[4] }, set: function(t) { this._matrix[4] = t } }), Object.defineProperty(Ht.prototype, "f", { get: function() { return this._matrix[5] }, set: function(t) { this._matrix[5] = t } }), Object.defineProperty(Ht.prototype, "rotation", { get: function() { return Math.atan2(this.shx, this.sx) } }), Object.defineProperty(Ht.prototype, "scaleX", { get: function() { return this.decompose().scale.sx } }), Object.defineProperty(Ht.prototype, "scaleY", { get: function() { return this.decompose().scale.sy } }), Object.defineProperty(Ht.prototype, "isIdentity", { get: function() { return 1 === this.sx && (0 === this.shy && (0 === this.shx && (1 === this.sy && (0 === this.tx && 0 === this.ty)))) } }), Ht.prototype.join = function(t) { return [this.sx, this.shy, this.shx, this.sy, this.tx, this.ty].map(B).join(t) }, Ht.prototype.multiply = function(t) { var e = t.sx * this.sx + t.shy * this.shx, r = t.sx * this.shy + t.shy * this.sy, n = t.shx * this.sx + t.sy * this.shx, i = t.shx * this.shy + t.sy * this.sy, a = t.tx * this.sx + t.ty * this.shx + this.tx, o = t.tx * this.shy + t.ty * this.sy + this.ty; return new Ht(e, r, n, i, a, o) }, Ht.prototype.decompose = function() { var t = this.sx, e = this.shy, r = this.shx, n = this.sy, i = this.tx, a = this.ty, o = Math.sqrt(t * t + e * e), s = (t /= o) * r + (e /= o) * n; r -= t * s, n -= e * s; var u = Math.sqrt(r * r + n * n); return s /= u, t * (n /= u) < e * (r /= u) && (t = -t, e = -e, s = -s, o = -o), { scale: new Ht(o, 0, 0, u, 0, 0), translate: new Ht(1, 0, 0, 1, i, a), rotate: new Ht(t, e, -e, t, 0, 0), skew: new Ht(1, 0, s, 1, 0, 0) } }, Ht.prototype.toString = function(t) { return this.join(" ") }, Ht.prototype.inversed = function() { var t = this.sx, e = this.shy, r = this.shx, n = this.sy, i = this.tx, a = this.ty, o = 1 / (t * n - e * r), s = n * o, u = -e * o, c = -r * o, l = t * o; return new Ht(s, u, c, l, -s * i - c * a, -u * i - l * a) }, Ht.prototype.applyToPoint = function(t) { var e = t.x * this.sx + t.y * this.shx + this.tx, r = t.x * this.shy + t.y * this.sy + this.ty; return new kr(e, r) }, Ht.prototype.applyToRectangle = function(t) { var e = this.applyToPoint(t), r = this.applyToPoint(new kr(t.x + t.w, t.y + t.h)); return new Fr(e.x, e.y, r.x - e.x, r.y - e.y) }, Ht.prototype.clone = function() { var t = this.sx, e = this.shy, r = this.shx, n = this.sy, i = this.tx, a = this.ty; return new Ht(t, e, r, n, i, a) }, b.Matrix = Ht; var Wt = b.matrixMult = function(t, e) { return e.multiply(t) }, Vt = new Ht(1, 0, 0, 1, 0, 0); b.unitMatrix = b.identityMatrix = Vt; var Gt = function(t, e) { if (!jt[t]) { var r = (e instanceof I ? "Sh" : "P") + (Object.keys(Ct).length + 1).toString(10); e.id = r, jt[t] = r, Ct[r] = e, Rt.publish("addPattern", e) } }; b.ShadingPattern = I, b.TilingPattern = C, b.addShadingPattern = function(t, e) { return M("addShadingPattern()"), Gt(t, e), this }, b.beginTilingPattern = function(t) { M("beginTilingPattern()"), Cr(t.boundingBox[0], t.boundingBox[1], t.boundingBox[2] - t.boundingBox[0], t.boundingBox[3] - t.boundingBox[1], t.matrix) }, b.endTilingPattern = function(t, e) { M("endTilingPattern()"), e.stream = it[K].join("\n"), Gt(t, e), Rt.publish("endTilingPattern", e), zt.pop().restore() }; var Yt = b.__private__.newObject = function() { var t = Jt(); return Xt(t, !0), t }, Jt = b.__private__.newObjectDeferred = function() { return Q++, tt[Q] = function() { return rt }, Q }, Xt = function(t, e) { return e = "boolean" == typeof e && e, tt[t] = rt, e && ct(t + " 0 obj"), t }, Kt = b.__private__.newAdditionalObject = function() { var t = { objId: Jt(), content: "" }; return nt.push(t), t }, Zt = Jt(), $t = Jt(), Qt = b.__private__.decodeColorString = function(t) { var e = t.split(" "); if (2 !== e.length || "g" !== e[1] && "G" !== e[1]) { if (5 === e.length && ("k" === e[4] || "K" === e[4])) { e = [(1 - e[0]) * (1 - e[3]), (1 - e[1]) * (1 - e[3]), (1 - e[2]) * (1 - e[3]), "r"] } } else { var r = parseFloat(e[0]); e = [r, r, r, "r"] } for (var n = "#", i = 0; i < 3; i++) n += ("0" + Math.floor(255 * parseFloat(e[i])).toString(16)).slice(-2); return n }, te = b.__private__.encodeColorString = function(t) { var e; "string" == typeof t && (t = { ch1: t }); var r = t.ch1, n = t.ch2, i = t.ch3, a = t.ch4, o = "draw" === t.pdfColorType ? ["G", "RG", "K"] : ["g", "rg", "k"]; if ("string" == typeof r && "#" !== r.charAt(0)) { var s = new l(r); if (s.ok) r = s.toHex(); else if (!/^\d*\.?\d*$/.test(r)) throw new Error('Invalid color "' + r + '" passed to jsPDF.encodeColorString.') } if ("string" == typeof r && /^#[0-9A-Fa-f]{3}$/.test(r) && (r = "#" + r[1] + r[1] + r[2] + r[2] + r[3] + r[3]), "string" == typeof r && /^#[0-9A-Fa-f]{6}$/.test(r)) { var u = parseInt(r.substr(1), 16); r = u >> 16 & 255, n = u >> 8 & 255, i = 255 & u } if (void 0 === n || void 0 === a && r === n && n === i) if ("string" == typeof r) e = r + " " + o[0]; else switch (t.precision) { case 2: e = q(r / 255) + " " + o[0]; break; case 3: default: e = R(r / 255) + " " + o[0] } else if (void 0 === a || "object" == typeof a) { if (a && !isNaN(a.a) && 0 === a.a) return e = ["1.", "1.", "1.", o[1]].join(" "); if ("string" == typeof r) e = [r, n, i, o[1]].join(" "); else switch (t.precision) { case 2: e = [q(r / 255), q(n / 255), q(i / 255), o[1]].join(" "); break; default: case 3: e = [R(r / 255), R(n / 255), R(i / 255), o[1]].join(" ") } } else if ("string" == typeof r) e = [r, n, i, a, o[2]].join(" "); else switch (t.precision) { case 2: e = [q(r), q(n), q(i), q(a), o[2]].join(" "); break; case 3: default: e = [R(r), R(n), R(i), R(a), o[2]].join(" ") } return e }, ee = b.__private__.getFilters = function() { return h }, re = b.__private__.putStream = function(t) { var e = (t = t || {}).data || "", r = t.filters || ee(), n = t.alreadyAppliedFilters || [], i = t.addLength1 || !1, a = e.length, o = t.objectId, s = function(t) { return t }; if (null !== g && void 0 === o) throw new Error("ObjectId must be passed to putStream for file encryption"); null !== g && (s = Ve.encryptor(o, 0)); var u = {}; !0 === r && (r = ["FlateEncode"]); var c = t.additionalKeyValues || [], l = (u = void 0 !== j.API.processDataByFilters ? j.API.processDataByFilters(e, r) : { data: e, reverseChain: [] }).reverseChain + (Array.isArray(n) ? n.join(" ") : n.toString()); if (0 !== u.data.length && (c.push({ key: "Length", value: u.data.length }), !0 === i && c.push({ key: "Length1", value: a })), 0 != l.length) if (l.split("/").length - 1 == 1) c.push({ key: "Filter", value: l }); else { c.push({ key: "Filter", value: "[" + l + "]" }); for (var h = 0; h < c.length; h += 1) if ("DecodeParms" === c[h].key) { for (var f = [], d = 0; d < u.reverseChain.split("/").length - 1; d += 1) f.push("null"); f.push(c[h].value), c[h].value = "[" + f.join(" ") + "]" } } ct("<<"); for (var p = 0; p < c.length; p++) ct("/" + c[p].key + " " + c[p].value); ct(">>"), 0 !== u.data.length && (ct("stream"), ct(s(u.data)), ct("endstream")) }, ne = b.__private__.putPage = function(t) { var e = t.number, r = t.data, n = t.objId, i = t.contentsObjId; Xt(n, !0), ct("<>"), ct("endobj"); var a = r.join("\n"); return x === L.ADVANCED && (a += "\nQ"), Xt(i, !0), re({ data: a, filters: ee(), objectId: i }), ct("endobj"), n }, ie = b.__private__.putPages = function() { var t, e, r = []; for (t = 1; t <= Et; t++) qt[t].objId = Jt(), qt[t].contentsObjId = Jt(); for (t = 1; t <= Et; t++) r.push(ne({ number: t, data: it[t], objId: qt[t].objId, contentsObjId: qt[t].contentsObjId, mediaBox: qt[t].mediaBox, cropBox: qt[t].cropBox, bleedBox: qt[t].bleedBox, trimBox: qt[t].trimBox, artBox: qt[t].artBox, userUnit: qt[t].userUnit, rootDictionaryObjId: Zt, resourceDictionaryObjId: $t })); Xt(Zt, !0), ct("<>"), ct("endobj"), Rt.publish("postPutPages") }, ae = function(t) { var e = function(t, e) { return -1 !== t.indexOf(" ") ? "(" + Fe(t, e) + ")" : Fe(t, e) }; Rt.publish("putFont", { font: t, out: ct, newObject: Yt, putStream: re, pdfEscapeWithNeededParanthesis: e }), !0 !== t.isAlreadyPutted && (t.objectNumber = Yt(), ct("<<"), ct("/Type /Font"), ct("/BaseFont /" + e(t.postScriptName)), ct("/Subtype /Type1"), "string" == typeof t.encoding && ct("/Encoding /" + t.encoding), ct("/FirstChar 32"), ct("/LastChar 255"), ct(">>"), ct("endobj")) }, oe = function() { for (var t in kt) kt.hasOwnProperty(t) && (!1 === m || !0 === m && v.hasOwnProperty(t)) && ae(kt[t]) }, se = function(t) { t.objectNumber = Yt(); var e = []; e.push({ key: "Type", value: "/XObject" }), e.push({ key: "Subtype", value: "/Form" }), e.push({ key: "BBox", value: "[" + [B(t.x), B(t.y), B(t.x + t.width), B(t.y + t.height)].join(" ") + "]" }), e.push({ key: "Matrix", value: "[" + t.matrix.toString() + "]" }); var r = t.pages[1].join("\n"); re({ data: r, additionalKeyValues: e, objectId: t.objectNumber }), ct("endobj") }, ue = function() { for (var t in Dt) Dt.hasOwnProperty(t) && se(Dt[t]) }, ce = function(t, e) { var r, n = [], i = 1 / (e - 1); for (r = 0; r < 1; r += i) n.push(r); if (n.push(1), 0 != t[0].offset) { var a = { offset: 0, color: t[0].color }; t.unshift(a) } if (1 != t[t.length - 1].offset) { var o = { offset: 1, color: t[t.length - 1].color }; t.push(o) } for (var s = "", u = 0, c = 0; c < n.length; c++) { for (r = n[c]; r > t[u + 1].offset;) u++; var l = t[u].offset, h = (r - l) / (t[u + 1].offset - l), f = t[u].color, d = t[u + 1].color; s += $(Math.round((1 - h) * f[0] + h * d[0]).toString(16)) + $(Math.round((1 - h) * f[1] + h * d[1]).toString(16)) + $(Math.round((1 - h) * f[2] + h * d[2]).toString(16)) } return s.trim() }, le = function(t, e) { e || (e = 21); var r = Yt(), n = ce(t.colors, e), i = []; i.push({ key: "FunctionType", value: "0" }), i.push({ key: "Domain", value: "[0.0 1.0]" }), i.push({ key: "Size", value: "[" + e + "]" }), i.push({ key: "BitsPerSample", value: "8" }), i.push({ key: "Range", value: "[0.0 1.0 0.0 1.0 0.0 1.0]" }), i.push({ key: "Decode", value: "[0.0 1.0 0.0 1.0 0.0 1.0]" }), re({ data: n, additionalKeyValues: i, alreadyAppliedFilters: ["/ASCIIHexDecode"], objectId: r }), ct("endobj"), t.objectNumber = Yt(), ct("<< /ShadingType " + t.type), ct("/ColorSpace /DeviceRGB"); var a = "/Coords [" + B(parseFloat(t.coords[0])) + " " + B(parseFloat(t.coords[1])) + " "; 2 === t.type ? a += B(parseFloat(t.coords[2])) + " " + B(parseFloat(t.coords[3])) : a += B(parseFloat(t.coords[2])) + " " + B(parseFloat(t.coords[3])) + " " + B(parseFloat(t.coords[4])) + " " + B(parseFloat(t.coords[5])), ct(a += "]"), t.matrix && ct("/Matrix [" + t.matrix.toString() + "]"), ct("/Function " + r + " 0 R"), ct("/Extend [true true]"), ct(">>"), ct("endobj") }, he = function(t, e) { var r = Jt(), n = Yt(); e.push({ resourcesOid: r, objectOid: n }), t.objectNumber = n; var i = []; i.push({ key: "Type", value: "/Pattern" }), i.push({ key: "PatternType", value: "1" }), i.push({ key: "PaintType", value: "1" }), i.push({ key: "TilingType", value: "1" }), i.push({ key: "BBox", value: "[" + t.boundingBox.map(B).join(" ") + "]" }), i.push({ key: "XStep", value: B(t.xStep) }), i.push({ key: "YStep", value: B(t.yStep) }), i.push({ key: "Resources", value: r + " 0 R" }), t.matrix && i.push({ key: "Matrix", value: "[" + t.matrix.toString() + "]" }), re({ data: t.stream, additionalKeyValues: i, objectId: t.objectNumber }), ct("endobj") }, fe = function(t) { var e; for (e in Ct) Ct.hasOwnProperty(e) && (Ct[e] instanceof I ? le(Ct[e]) : Ct[e] instanceof C && he(Ct[e], t)) }, de = function(t) { for (var e in t.objectNumber = Yt(), ct("<<"), t) switch (e) { case "opacity": ct("/ca " + q(t[e])); break; case "stroke-opacity": ct("/CA " + q(t[e])) } ct(">>"), ct("endobj") }, pe = function() { var t; for (t in Ot) Ot.hasOwnProperty(t) && de(Ot[t]) }, ge = function() { for (var t in ct("/XObject <<"), Dt) Dt.hasOwnProperty(t) && Dt[t].objectNumber >= 0 && ct("/" + t + " " + Dt[t].objectNumber + " 0 R"); Rt.publish("putXobjectDict"), ct(">>") }, me = function() { Ve.oid = Yt(), ct("<<"), ct("/Filter /Standard"), ct("/V " + Ve.v), ct("/R " + Ve.r), ct("/U <" + Ve.toHexString(Ve.U) + ">"), ct("/O <" + Ve.toHexString(Ve.O) + ">"), ct("/P " + Ve.P), ct(">>"), ct("endobj") }, ve = function() { for (var t in ct("/Font <<"), kt) kt.hasOwnProperty(t) && (!1 === m || !0 === m && v.hasOwnProperty(t)) && ct("/" + t + " " + kt[t].objectNumber + " 0 R"); ct(">>") }, be = function() { if (Object.keys(Ct).length > 0) { for (var t in ct("/Shading <<"), Ct) Ct.hasOwnProperty(t) && Ct[t] instanceof I && Ct[t].objectNumber >= 0 && ct("/" + t + " " + Ct[t].objectNumber + " 0 R"); Rt.publish("putShadingPatternDict"), ct(">>") } }, ye = function(t) { if (Object.keys(Ct).length > 0) { for (var e in ct("/Pattern <<"), Ct) Ct.hasOwnProperty(e) && Ct[e] instanceof b.TilingPattern && Ct[e].objectNumber >= 0 && Ct[e].objectNumber < t && ct("/" + e + " " + Ct[e].objectNumber + " 0 R"); Rt.publish("putTilingPatternDict"), ct(">>") } }, we = function() { if (Object.keys(Ot).length > 0) { var t; for (t in ct("/ExtGState <<"), Ot) Ot.hasOwnProperty(t) && Ot[t].objectNumber >= 0 && ct("/" + t + " " + Ot[t].objectNumber + " 0 R"); Rt.publish("putGStateDict"), ct(">>") } }, Ne = function(t) { Xt(t.resourcesOid, !0), ct("<<"), ct("/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]"), ve(), be(), ye(t.objectOid), we(), ge(), ct(">>"), ct("endobj") }, Ae = function() { var t = []; oe(), pe(), ue(), fe(t), Rt.publish("putResources"), t.forEach(Ne), Ne({ resourcesOid: $t, objectOid: Number.MAX_SAFE_INTEGER }), Rt.publish("postPutResources") }, Le = function() { Rt.publish("putAdditionalObjects"); for (var t = 0; t < nt.length; t++) { var e = nt[t]; Xt(e.objId, !0), ct(e.content), ct("endobj") } Rt.publish("postPutAdditionalObjects") }, xe = function(t) { Ft[t.fontName] = Ft[t.fontName] || {}, Ft[t.fontName][t.fontStyle] = t.id }, Se = function(t, e, r, n, i) { var a = { id: "F" + (Object.keys(kt).length + 1).toString(10), postScriptName: t, fontName: e, fontStyle: r, encoding: n, isStandardFont: i || !1, metadata: {} }; return Rt.publish("addFont", { font: a, instance: this }), kt[a.id] = a, xe(a), a.id }, _e = function(t) { for (var e = 0, r = ft.length; e < r; e++) { var n = Se.call(this, t[e][0], t[e][1], t[e][2], ft[e][3], !0); !1 === m && (v[n] = !0); var i = t[e][0].split("-"); xe({ id: n, fontName: i[0], fontStyle: i[1] || "" }) } Rt.publish("addFonts", { fonts: kt, dictionary: Ft }) }, Pe = function(t) { return t.foo = function() { try { return t.apply(this, arguments) } catch (t) { var r = t.stack || ""; ~r.indexOf(" at ") && (r = r.split(" at ")[1]); var n = "Error in function " + r.split("\n")[0].split("<")[0] + ": " + t.message; if (!e.console) throw new Error(n); e.console.error(n, t), e.alert && alert(n) } }, t.foo.bar = t, t.foo }, ke = function(t, e) { var r, n, i, a, o, s, u, c, l; if (i = (e = e || {}).sourceEncoding || "Unicode", o = e.outputEncoding, (e.autoencode || o) && kt[Lt].metadata && kt[Lt].metadata[i] && kt[Lt].metadata[i].encoding && (a = kt[Lt].metadata[i].encoding, !o && kt[Lt].encoding && (o = kt[Lt].encoding), !o && a.codePages && (o = a.codePages[0]), "string" == typeof o && (o = a[o]), o)) { for (u = !1, s = [], r = 0, n = t.length; r < n; r++)(c = o[t.charCodeAt(r)]) ? s.push(String.fromCharCode(c)) : s.push(t[r]), s[r].charCodeAt(0) >> 8 && (u = !0); t = s.join("") } for (r = t.length; void 0 === u && 0 !== r;) t.charCodeAt(r - 1) >> 8 && (u = !0), r--; if (!u) return t; for (s = e.noBOM ? [] : [254, 255], r = 0, n = t.length; r < n; r++) { if ((l = (c = t.charCodeAt(r)) >> 8) >> 8) throw new Error("Character at position " + r + " of string '" + t + "' exceeds 16bits. Cannot be encoded into UCS-2 BE"); s.push(l), s.push(c - (l << 8)) } return String.fromCharCode.apply(void 0, s) }, Fe = b.__private__.pdfEscape = b.pdfEscape = function(t, e) { return ke(t, e).replace(/\\/g, "\\\\").replace(/\(/g, "\\(").replace(/\)/g, "\\)") }, Ie = b.__private__.beginPage = function(t) { it[++Et] = [], qt[Et] = { objId: 0, contentsObjId: 0, userUnit: Number(f), artBox: null, bleedBox: null, cropBox: null, trimBox: null, mediaBox: { bottomLeftX: 0, bottomLeftY: 0, topRightX: Number(t[0]), topRightY: Number(t[1]) } }, Oe(Et), ut(it[K]) }, Ce = function(t, e) { var r, a, s; switch (i = e || i, "string" == typeof t && (r = A(t.toLowerCase()), Array.isArray(r) && (a = r[0], s = r[1])), Array.isArray(t) && (a = t[0] * xt, s = t[1] * xt), isNaN(a) && (a = o[0], s = o[1]), (a > 14400 || s > 14400) && (n.warn("A page in a PDF can not be wider or taller than 14400 userUnit. jsPDF limits the width/height to 14400"), a = Math.min(14400, a), s = Math.min(14400, s)), o = [a, s], i.substr(0, 1)) { case "l": s > a && (o = [s, a]); break; case "p": a > s && (o = [s, a]) } Ie(o), hr(lr), ct(yr), 0 !== Sr && ct(Sr + " J"), 0 !== _r && ct(_r + " j"), Rt.publish("addPage", { pageNumber: Et }) }, je = function(t) { t > 0 && t <= Et && (it.splice(t, 1), qt.splice(t, 1), Et--, K > Et && (K = Et), this.setPage(K)) }, Oe = function(t) { t > 0 && t <= Et && (K = t) }, Be = b.__private__.getNumberOfPages = b.getNumberOfPages = function() { return it.length - 1 }, Me = function(t, e, r) { var i, a = void 0; return r = r || {}, t = void 0 !== t ? t : kt[Lt].fontName, e = void 0 !== e ? e : kt[Lt].fontStyle, i = t.toLowerCase(), void 0 !== Ft[i] && void 0 !== Ft[i][e] ? a = Ft[i][e] : void 0 !== Ft[t] && void 0 !== Ft[t][e] ? a = Ft[t][e] : !1 === r.disableWarning && n.warn("Unable to look up font label for font '" + t + "', '" + e + "'. Refer to getFontList() for available fonts."), a || r.noFallback || null == (a = Ft.times[e]) && (a = Ft.times.normal), a }, Ee = b.__private__.putInfo = function() { var t = Yt(), e = function(t) { return t }; for (var r in null !== g && (e = Ve.encryptor(t, 0)), ct("<<"), ct("/Producer (" + Fe(e("jsPDF " + j.version)) + ")"), At) At.hasOwnProperty(r) && At[r] && ct("/" + r.substr(0, 1).toUpperCase() + r.substr(1) + " (" + Fe(e(At[r])) + ")"); ct("/CreationDate (" + Fe(e(z)) + ")"), ct(">>"), ct("endobj") }, qe = b.__private__.putCatalog = function(t) { var e = (t = t || {}).rootDictionaryObjId || Zt; switch (Yt(), ct("<<"), ct("/Type /Catalog"), ct("/Pages " + e + " 0 R"), pt || (pt = "fullwidth"), pt) { case "fullwidth": ct("/OpenAction [3 0 R /FitH null]"); break; case "fullheight": ct("/OpenAction [3 0 R /FitV null]"); break; case "fullpage": ct("/OpenAction [3 0 R /Fit]"); break; case "original": ct("/OpenAction [3 0 R /XYZ null null 1]"); break; default: var r = "" + pt; "%" === r.substr(r.length - 1) && (pt = parseInt(pt) / 100), "number" == typeof pt && ct("/OpenAction [3 0 R /XYZ null null " + q(pt) + "]") } switch (yt || (yt = "continuous"), yt) { case "continuous": ct("/PageLayout /OneColumn"); break; case "single": ct("/PageLayout /SinglePage"); break; case "two": case "twoleft": ct("/PageLayout /TwoColumnLeft"); break; case "tworight": ct("/PageLayout /TwoColumnRight") } vt && ct("/PageMode /" + vt), Rt.publish("putCatalog"), ct(">>"), ct("endobj") }, Re = b.__private__.putTrailer = function() { ct("trailer"), ct("<<"), ct("/Size " + (Q + 1)), ct("/Root " + Q + " 0 R"), ct("/Info " + (Q - 1) + " 0 R"), null !== g && ct("/Encrypt " + Ve.oid + " 0 R"), ct("/ID [ <" + H + "> <" + H + "> ]"), ct(">>") }, Te = b.__private__.putHeader = function() { ct("%PDF-" + y), ct("%ºß¬à") }, De = b.__private__.putXRef = function() { var t = "0000000000"; ct("xref"), ct("0 " + (Q + 1)), ct("0000000000 65535 f "); for (var e = 1; e <= Q; e++) { "function" == typeof tt[e] ? ct((t + tt[e]()).slice(-10) + " 00000 n ") : void 0 !== tt[e] ? ct((t + tt[e]).slice(-10) + " 00000 n ") : ct("0000000000 00000 n ") } }, Ue = b.__private__.buildDocument = function() { st(), ut(et), Rt.publish("buildDocument"), Te(), ie(), Le(), Ae(), null !== g && me(), Ee(), qe(); var t = rt; return De(), Re(), ct("startxref"), ct("" + t), ct("%%EOF"), ut(it[K]), et.join("\n") }, ze = b.__private__.getBlob = function(t) { return new Blob([ht(t)], { type: "application/pdf" }) }, He = b.output = b.__private__.output = Pe((function(t, r) { switch ("string" == typeof(r = r || {}) ? r = { filename: r } : r.filename = r.filename || "generated.pdf", t) { case void 0: return Ue(); case "save": b.save(r.filename); break; case "arraybuffer": return ht(Ue()); case "blob": return ze(Ue()); case "bloburi": case "bloburl": if (void 0 !== e.URL && "function" == typeof e.URL.createObjectURL) return e.URL && e.URL.createObjectURL(ze(Ue())) || void 0; n.warn("bloburl is not supported by your system, because URL.createObjectURL is not supported by your browser."); break; case "datauristring": case "dataurlstring": var i = "", a = Ue(); try { i = u(a) } catch (t) { i = u(unescape(encodeURIComponent(a))) } return "data:application/pdf;filename=" + r.filename + ";base64," + i; case "pdfobjectnewwindow": if ("[object Window]" === Object.prototype.toString.call(e)) { var o = '