sakuga 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,1782 @@
1
+ import { createRequire } from "node:module";
2
+ var __create = Object.create;
3
+ var __getProtoOf = Object.getPrototypeOf;
4
+ var __defProp = Object.defineProperty;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __toESM = (mod, isNodeMode, target) => {
8
+ target = mod != null ? __create(__getProtoOf(mod)) : {};
9
+ const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target;
10
+ for (let key of __getOwnPropNames(mod))
11
+ if (!__hasOwnProp.call(to, key))
12
+ __defProp(to, key, {
13
+ get: () => mod[key],
14
+ enumerable: true
15
+ });
16
+ return to;
17
+ };
18
+ var __require = /* @__PURE__ */ createRequire(import.meta.url);
19
+
20
+ // src/lib/markdown.ts
21
+ import { Effect } from "effect";
22
+
23
+ // node_modules/marked/lib/marked.esm.js
24
+ function L() {
25
+ return { async: false, breaks: false, extensions: null, gfm: true, hooks: null, pedantic: false, renderer: null, silent: false, tokenizer: null, walkTokens: null };
26
+ }
27
+ var T = L();
28
+ function Z(u) {
29
+ T = u;
30
+ }
31
+ var C = { exec: () => null };
32
+ function k(u, e = "") {
33
+ let t = typeof u == "string" ? u : u.source, n = { replace: (r, i) => {
34
+ let s = typeof i == "string" ? i : i.source;
35
+ return s = s.replace(m.caret, "$1"), t = t.replace(r, s), n;
36
+ }, getRegex: () => new RegExp(t, e) };
37
+ return n;
38
+ }
39
+ var me = (() => {
40
+ try {
41
+ return !!new RegExp("(?<=1)(?<!1)");
42
+ } catch {
43
+ return false;
44
+ }
45
+ })();
46
+ var m = { codeRemoveIndent: /^(?: {1,4}| {0,3}\t)/gm, outputLinkReplace: /\\([\[\]])/g, indentCodeCompensation: /^(\s+)(?:```)/, beginningSpace: /^\s+/, endingHash: /#$/, startingSpaceChar: /^ /, endingSpaceChar: / $/, nonSpaceChar: /[^ ]/, newLineCharGlobal: /\n/g, tabCharGlobal: /\t/g, multipleSpaceGlobal: /\s+/g, blankLine: /^[ \t]*$/, doubleBlankLine: /\n[ \t]*\n[ \t]*$/, blockquoteStart: /^ {0,3}>/, blockquoteSetextReplace: /\n {0,3}((?:=+|-+) *)(?=\n|$)/g, blockquoteSetextReplace2: /^ {0,3}>[ \t]?/gm, listReplaceTabs: /^\t+/, listReplaceNesting: /^ {1,4}(?=( {4})*[^ ])/g, listIsTask: /^\[[ xX]\] +\S/, listReplaceTask: /^\[[ xX]\] +/, listTaskCheckbox: /\[[ xX]\]/, anyLine: /\n.*\n/, hrefBrackets: /^<(.*)>$/, tableDelimiter: /[:|]/, tableAlignChars: /^\||\| *$/g, tableRowBlankLine: /\n[ \t]*$/, tableAlignRight: /^ *-+: *$/, tableAlignCenter: /^ *:-+: *$/, tableAlignLeft: /^ *:-+ *$/, startATag: /^<a /i, endATag: /^<\/a>/i, startPreScriptTag: /^<(pre|code|kbd|script)(\s|>)/i, endPreScriptTag: /^<\/(pre|code|kbd|script)(\s|>)/i, startAngleBracket: /^</, endAngleBracket: />$/, pedanticHrefTitle: /^([^'"]*[^\s])\s+(['"])(.*)\2/, unicodeAlphaNumeric: /[\p{L}\p{N}]/u, escapeTest: /[&<>"']/, escapeReplace: /[&<>"']/g, escapeTestNoEncode: /[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/, escapeReplaceNoEncode: /[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/g, unescapeTest: /&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/ig, caret: /(^|[^\[])\^/g, percentDecode: /%25/g, findPipe: /\|/g, splitPipe: / \|/, slashPipe: /\\\|/g, carriageReturn: /\r\n|\r/g, spaceLine: /^ +$/gm, notSpaceStart: /^\S*/, endingNewline: /\n$/, listItemRegex: (u) => new RegExp(`^( {0,3}${u})((?:[ ][^\\n]*)?(?:\\n|$))`), nextBulletRegex: (u) => new RegExp(`^ {0,${Math.min(3, u - 1)}}(?:[*+-]|\\d{1,9}[.)])((?:[ ][^\\n]*)?(?:\\n|$))`), hrRegex: (u) => new RegExp(`^ {0,${Math.min(3, u - 1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`), fencesBeginRegex: (u) => new RegExp(`^ {0,${Math.min(3, u - 1)}}(?:\`\`\`|~~~)`), headingBeginRegex: (u) => new RegExp(`^ {0,${Math.min(3, u - 1)}}#`), htmlBeginRegex: (u) => new RegExp(`^ {0,${Math.min(3, u - 1)}}<(?:[a-z].*>|!--)`, "i") };
47
+ var xe = /^(?:[ \t]*(?:\n|$))+/;
48
+ var be = /^((?: {4}| {0,3}\t)[^\n]+(?:\n(?:[ \t]*(?:\n|$))*)?)+/;
49
+ var Re = /^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/;
50
+ var I = /^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/;
51
+ var Te = /^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/;
52
+ var N = /(?:[*+-]|\d{1,9}[.)])/;
53
+ var re = /^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\n {0,3}(=+|-+) *(?:\n+|$)/;
54
+ var se = k(re).replace(/bull/g, N).replace(/blockCode/g, /(?: {4}| {0,3}\t)/).replace(/fences/g, / {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g, / {0,3}>/).replace(/heading/g, / {0,3}#{1,6}/).replace(/html/g, / {0,3}<[^\n>]+>\n/).replace(/\|table/g, "").getRegex();
55
+ var Oe = k(re).replace(/bull/g, N).replace(/blockCode/g, /(?: {4}| {0,3}\t)/).replace(/fences/g, / {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g, / {0,3}>/).replace(/heading/g, / {0,3}#{1,6}/).replace(/html/g, / {0,3}<[^\n>]+>\n/).replace(/table/g, / {0,3}\|?(?:[:\- ]*\|)+[\:\- ]*\n/).getRegex();
56
+ var Q = /^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/;
57
+ var we = /^[^\n]+/;
58
+ var F = /(?!\s*\])(?:\\[\s\S]|[^\[\]\\])+/;
59
+ var ye = k(/^ {0,3}\[(label)\]: *(?:\n[ \t]*)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n[ \t]*)?| *\n[ \t]*)(title))? *(?:\n+|$)/).replace("label", F).replace("title", /(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex();
60
+ var Pe = k(/^( {0,3}bull)([ \t][^\n]+?)?(?:\n|$)/).replace(/bull/g, N).getRegex();
61
+ var v = "address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul";
62
+ var j = /<!--(?:-?>|[\s\S]*?(?:-->|$))/;
63
+ var Se = k("^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|<![A-Z][\\s\\S]*?(?:>\\n*|$)|<!\\[CDATA\\[[\\s\\S]*?(?:\\]\\]>\\n*|$)|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:(?:\\n[ \t]*)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ \t]*)+\\n|$)|</(?!script|pre|style|textarea)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ \t]*)+\\n|$))", "i").replace("comment", j).replace("tag", v).replace("attribute", / +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex();
64
+ var ie = k(Q).replace("hr", I).replace("heading", " {0,3}#{1,6}(?:\\s|$)").replace("|lheading", "").replace("|table", "").replace("blockquote", " {0,3}>").replace("fences", " {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list", " {0,3}(?:[*+-]|1[.)]) ").replace("html", "</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag", v).getRegex();
65
+ var $e = k(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace("paragraph", ie).getRegex();
66
+ var U = { blockquote: $e, code: be, def: ye, fences: Re, heading: Te, hr: I, html: Se, lheading: se, list: Pe, newline: xe, paragraph: ie, table: C, text: we };
67
+ var te = k("^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)").replace("hr", I).replace("heading", " {0,3}#{1,6}(?:\\s|$)").replace("blockquote", " {0,3}>").replace("code", "(?: {4}| {0,3}\t)[^\\n]").replace("fences", " {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list", " {0,3}(?:[*+-]|1[.)]) ").replace("html", "</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag", v).getRegex();
68
+ var _e = { ...U, lheading: Oe, table: te, paragraph: k(Q).replace("hr", I).replace("heading", " {0,3}#{1,6}(?:\\s|$)").replace("|lheading", "").replace("table", te).replace("blockquote", " {0,3}>").replace("fences", " {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list", " {0,3}(?:[*+-]|1[.)]) ").replace("html", "</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag", v).getRegex() };
69
+ var Le = { ...U, html: k(`^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:"[^"]*"|'[^']*'|\\s[^'"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))`).replace("comment", j).replace(/tag/g, "(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(), def: /^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/, heading: /^(#{1,6})(.*)(?:\n+|$)/, fences: C, lheading: /^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/, paragraph: k(Q).replace("hr", I).replace("heading", ` *#{1,6} *[^
70
+ ]`).replace("lheading", se).replace("|table", "").replace("blockquote", " {0,3}>").replace("|fences", "").replace("|list", "").replace("|html", "").replace("|tag", "").getRegex() };
71
+ var Me = /^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/;
72
+ var ze = /^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/;
73
+ var oe = /^( {2,}|\\)\n(?!\s*$)/;
74
+ var Ae = /^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?= {2,}\n)))/;
75
+ var D = /[\p{P}\p{S}]/u;
76
+ var K = /[\s\p{P}\p{S}]/u;
77
+ var ae = /[^\s\p{P}\p{S}]/u;
78
+ var Ce = k(/^((?![*_])punctSpace)/, "u").replace(/punctSpace/g, K).getRegex();
79
+ var le = /(?!~)[\p{P}\p{S}]/u;
80
+ var Ie = /(?!~)[\s\p{P}\p{S}]/u;
81
+ var Ee = /(?:[^\s\p{P}\p{S}]|~)/u;
82
+ var Be = k(/link|precode-code|html/, "g").replace("link", /\[(?:[^\[\]`]|(?<a>`+)[^`]+\k<a>(?!`))*?\]\((?:\\[\s\S]|[^\\\(\)]|\((?:\\[\s\S]|[^\\\(\)])*\))*\)/).replace("precode-", me ? "(?<!`)()" : "(^^|[^`])").replace("code", /(?<b>`+)[^`]+\k<b>(?!`)/).replace("html", /<(?! )[^<>]*?>/).getRegex();
83
+ var ue = /^(?:\*+(?:((?!\*)punct)|[^\s*]))|^_+(?:((?!_)punct)|([^\s_]))/;
84
+ var qe = k(ue, "u").replace(/punct/g, D).getRegex();
85
+ var ve = k(ue, "u").replace(/punct/g, le).getRegex();
86
+ var pe = "^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)punctSpace(\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|notPunctSpace(\\*+)(?=notPunctSpace)";
87
+ var De = k(pe, "gu").replace(/notPunctSpace/g, ae).replace(/punctSpace/g, K).replace(/punct/g, D).getRegex();
88
+ var He = k(pe, "gu").replace(/notPunctSpace/g, Ee).replace(/punctSpace/g, Ie).replace(/punct/g, le).getRegex();
89
+ var Ze = k("^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)", "gu").replace(/notPunctSpace/g, ae).replace(/punctSpace/g, K).replace(/punct/g, D).getRegex();
90
+ var Ge = k(/\\(punct)/, "gu").replace(/punct/g, D).getRegex();
91
+ var Ne = k(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace("scheme", /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace("email", /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex();
92
+ var Qe = k(j).replace("(?:-->|$)", "-->").getRegex();
93
+ var Fe = k("^comment|^</[a-zA-Z][\\w:-]*\\s*>|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^<![a-zA-Z]+\\s[\\s\\S]*?>|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>").replace("comment", Qe).replace("attribute", /\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex();
94
+ var q = /(?:\[(?:\\[\s\S]|[^\[\]\\])*\]|\\[\s\S]|`+[^`]*?`+(?!`)|[^\[\]\\`])*?/;
95
+ var je = k(/^!?\[(label)\]\(\s*(href)(?:(?:[ \t]*(?:\n[ \t]*)?)(title))?\s*\)/).replace("label", q).replace("href", /<(?:\\.|[^\n<>\\])+>|[^ \t\n\x00-\x1f]*/).replace("title", /"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex();
96
+ var ce = k(/^!?\[(label)\]\[(ref)\]/).replace("label", q).replace("ref", F).getRegex();
97
+ var he = k(/^!?\[(ref)\](?:\[\])?/).replace("ref", F).getRegex();
98
+ var Ue = k("reflink|nolink(?!\\()", "g").replace("reflink", ce).replace("nolink", he).getRegex();
99
+ var ne = /[hH][tT][tT][pP][sS]?|[fF][tT][pP]/;
100
+ var W = { _backpedal: C, anyPunctuation: Ge, autolink: Ne, blockSkip: Be, br: oe, code: ze, del: C, emStrongLDelim: qe, emStrongRDelimAst: De, emStrongRDelimUnd: Ze, escape: Me, link: je, nolink: he, punctuation: Ce, reflink: ce, reflinkSearch: Ue, tag: Fe, text: Ae, url: C };
101
+ var Ke = { ...W, link: k(/^!?\[(label)\]\((.*?)\)/).replace("label", q).getRegex(), reflink: k(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label", q).getRegex() };
102
+ var G = { ...W, emStrongRDelimAst: He, emStrongLDelim: ve, url: k(/^((?:protocol):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/).replace("protocol", ne).replace("email", /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(), _backpedal: /(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/, del: /^(~~?)(?=[^\s~])((?:\\[\s\S]|[^\\])*?(?:\\[\s\S]|[^\s~\\]))\1(?=[^~]|$)/, text: k(/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\<!\[`*~_]|\b_|protocol:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)))/).replace("protocol", ne).getRegex() };
103
+ var We = { ...G, br: k(oe).replace("{2,}", "*").getRegex(), text: k(G.text).replace("\\b_", "\\b_| {2,}\\n").replace(/\{2,\}/g, "*").getRegex() };
104
+ var E = { normal: U, gfm: _e, pedantic: Le };
105
+ var M = { normal: W, gfm: G, breaks: We, pedantic: Ke };
106
+ var Xe = { "&": "&amp;", "<": "&lt;", ">": "&gt;", '"': "&quot;", "'": "&#39;" };
107
+ var ke = (u) => Xe[u];
108
+ function w(u, e) {
109
+ if (e) {
110
+ if (m.escapeTest.test(u))
111
+ return u.replace(m.escapeReplace, ke);
112
+ } else if (m.escapeTestNoEncode.test(u))
113
+ return u.replace(m.escapeReplaceNoEncode, ke);
114
+ return u;
115
+ }
116
+ function X(u) {
117
+ try {
118
+ u = encodeURI(u).replace(m.percentDecode, "%");
119
+ } catch {
120
+ return null;
121
+ }
122
+ return u;
123
+ }
124
+ function J(u, e) {
125
+ let t = u.replace(m.findPipe, (i, s, a) => {
126
+ let o = false, l = s;
127
+ for (;--l >= 0 && a[l] === "\\"; )
128
+ o = !o;
129
+ return o ? "|" : " |";
130
+ }), n = t.split(m.splitPipe), r = 0;
131
+ if (n[0].trim() || n.shift(), n.length > 0 && !n.at(-1)?.trim() && n.pop(), e)
132
+ if (n.length > e)
133
+ n.splice(e);
134
+ else
135
+ for (;n.length < e; )
136
+ n.push("");
137
+ for (;r < n.length; r++)
138
+ n[r] = n[r].trim().replace(m.slashPipe, "|");
139
+ return n;
140
+ }
141
+ function z(u, e, t) {
142
+ let n = u.length;
143
+ if (n === 0)
144
+ return "";
145
+ let r = 0;
146
+ for (;r < n; ) {
147
+ let i = u.charAt(n - r - 1);
148
+ if (i === e && !t)
149
+ r++;
150
+ else if (i !== e && t)
151
+ r++;
152
+ else
153
+ break;
154
+ }
155
+ return u.slice(0, n - r);
156
+ }
157
+ function de(u, e) {
158
+ if (u.indexOf(e[1]) === -1)
159
+ return -1;
160
+ let t = 0;
161
+ for (let n = 0;n < u.length; n++)
162
+ if (u[n] === "\\")
163
+ n++;
164
+ else if (u[n] === e[0])
165
+ t++;
166
+ else if (u[n] === e[1] && (t--, t < 0))
167
+ return n;
168
+ return t > 0 ? -2 : -1;
169
+ }
170
+ function ge(u, e, t, n, r) {
171
+ let i = e.href, s = e.title || null, a = u[1].replace(r.other.outputLinkReplace, "$1");
172
+ n.state.inLink = true;
173
+ let o = { type: u[0].charAt(0) === "!" ? "image" : "link", raw: t, href: i, title: s, text: a, tokens: n.inlineTokens(a) };
174
+ return n.state.inLink = false, o;
175
+ }
176
+ function Je(u, e, t) {
177
+ let n = u.match(t.other.indentCodeCompensation);
178
+ if (n === null)
179
+ return e;
180
+ let r = n[1];
181
+ return e.split(`
182
+ `).map((i) => {
183
+ let s = i.match(t.other.beginningSpace);
184
+ if (s === null)
185
+ return i;
186
+ let [a] = s;
187
+ return a.length >= r.length ? i.slice(r.length) : i;
188
+ }).join(`
189
+ `);
190
+ }
191
+ var y = class {
192
+ options;
193
+ rules;
194
+ lexer;
195
+ constructor(e) {
196
+ this.options = e || T;
197
+ }
198
+ space(e) {
199
+ let t = this.rules.block.newline.exec(e);
200
+ if (t && t[0].length > 0)
201
+ return { type: "space", raw: t[0] };
202
+ }
203
+ code(e) {
204
+ let t = this.rules.block.code.exec(e);
205
+ if (t) {
206
+ let n = t[0].replace(this.rules.other.codeRemoveIndent, "");
207
+ return { type: "code", raw: t[0], codeBlockStyle: "indented", text: this.options.pedantic ? n : z(n, `
208
+ `) };
209
+ }
210
+ }
211
+ fences(e) {
212
+ let t = this.rules.block.fences.exec(e);
213
+ if (t) {
214
+ let n = t[0], r = Je(n, t[3] || "", this.rules);
215
+ return { type: "code", raw: n, lang: t[2] ? t[2].trim().replace(this.rules.inline.anyPunctuation, "$1") : t[2], text: r };
216
+ }
217
+ }
218
+ heading(e) {
219
+ let t = this.rules.block.heading.exec(e);
220
+ if (t) {
221
+ let n = t[2].trim();
222
+ if (this.rules.other.endingHash.test(n)) {
223
+ let r = z(n, "#");
224
+ (this.options.pedantic || !r || this.rules.other.endingSpaceChar.test(r)) && (n = r.trim());
225
+ }
226
+ return { type: "heading", raw: t[0], depth: t[1].length, text: n, tokens: this.lexer.inline(n) };
227
+ }
228
+ }
229
+ hr(e) {
230
+ let t = this.rules.block.hr.exec(e);
231
+ if (t)
232
+ return { type: "hr", raw: z(t[0], `
233
+ `) };
234
+ }
235
+ blockquote(e) {
236
+ let t = this.rules.block.blockquote.exec(e);
237
+ if (t) {
238
+ let n = z(t[0], `
239
+ `).split(`
240
+ `), r = "", i = "", s = [];
241
+ for (;n.length > 0; ) {
242
+ let a = false, o = [], l;
243
+ for (l = 0;l < n.length; l++)
244
+ if (this.rules.other.blockquoteStart.test(n[l]))
245
+ o.push(n[l]), a = true;
246
+ else if (!a)
247
+ o.push(n[l]);
248
+ else
249
+ break;
250
+ n = n.slice(l);
251
+ let p = o.join(`
252
+ `), c = p.replace(this.rules.other.blockquoteSetextReplace, `
253
+ $1`).replace(this.rules.other.blockquoteSetextReplace2, "");
254
+ r = r ? `${r}
255
+ ${p}` : p, i = i ? `${i}
256
+ ${c}` : c;
257
+ let g = this.lexer.state.top;
258
+ if (this.lexer.state.top = true, this.lexer.blockTokens(c, s, true), this.lexer.state.top = g, n.length === 0)
259
+ break;
260
+ let h = s.at(-1);
261
+ if (h?.type === "code")
262
+ break;
263
+ if (h?.type === "blockquote") {
264
+ let R = h, f = R.raw + `
265
+ ` + n.join(`
266
+ `), O = this.blockquote(f);
267
+ s[s.length - 1] = O, r = r.substring(0, r.length - R.raw.length) + O.raw, i = i.substring(0, i.length - R.text.length) + O.text;
268
+ break;
269
+ } else if (h?.type === "list") {
270
+ let R = h, f = R.raw + `
271
+ ` + n.join(`
272
+ `), O = this.list(f);
273
+ s[s.length - 1] = O, r = r.substring(0, r.length - h.raw.length) + O.raw, i = i.substring(0, i.length - R.raw.length) + O.raw, n = f.substring(s.at(-1).raw.length).split(`
274
+ `);
275
+ continue;
276
+ }
277
+ }
278
+ return { type: "blockquote", raw: r, tokens: s, text: i };
279
+ }
280
+ }
281
+ list(e) {
282
+ let t = this.rules.block.list.exec(e);
283
+ if (t) {
284
+ let n = t[1].trim(), r = n.length > 1, i = { type: "list", raw: "", ordered: r, start: r ? +n.slice(0, -1) : "", loose: false, items: [] };
285
+ n = r ? `\\d{1,9}\\${n.slice(-1)}` : `\\${n}`, this.options.pedantic && (n = r ? n : "[*+-]");
286
+ let s = this.rules.other.listItemRegex(n), a = false;
287
+ for (;e; ) {
288
+ let l = false, p = "", c = "";
289
+ if (!(t = s.exec(e)) || this.rules.block.hr.test(e))
290
+ break;
291
+ p = t[0], e = e.substring(p.length);
292
+ let g = t[2].split(`
293
+ `, 1)[0].replace(this.rules.other.listReplaceTabs, (O) => " ".repeat(3 * O.length)), h = e.split(`
294
+ `, 1)[0], R = !g.trim(), f = 0;
295
+ if (this.options.pedantic ? (f = 2, c = g.trimStart()) : R ? f = t[1].length + 1 : (f = t[2].search(this.rules.other.nonSpaceChar), f = f > 4 ? 1 : f, c = g.slice(f), f += t[1].length), R && this.rules.other.blankLine.test(h) && (p += h + `
296
+ `, e = e.substring(h.length + 1), l = true), !l) {
297
+ let O = this.rules.other.nextBulletRegex(f), V = this.rules.other.hrRegex(f), Y = this.rules.other.fencesBeginRegex(f), ee = this.rules.other.headingBeginRegex(f), fe = this.rules.other.htmlBeginRegex(f);
298
+ for (;e; ) {
299
+ let H = e.split(`
300
+ `, 1)[0], A;
301
+ if (h = H, this.options.pedantic ? (h = h.replace(this.rules.other.listReplaceNesting, " "), A = h) : A = h.replace(this.rules.other.tabCharGlobal, " "), Y.test(h) || ee.test(h) || fe.test(h) || O.test(h) || V.test(h))
302
+ break;
303
+ if (A.search(this.rules.other.nonSpaceChar) >= f || !h.trim())
304
+ c += `
305
+ ` + A.slice(f);
306
+ else {
307
+ if (R || g.replace(this.rules.other.tabCharGlobal, " ").search(this.rules.other.nonSpaceChar) >= 4 || Y.test(g) || ee.test(g) || V.test(g))
308
+ break;
309
+ c += `
310
+ ` + h;
311
+ }
312
+ !R && !h.trim() && (R = true), p += H + `
313
+ `, e = e.substring(H.length + 1), g = A.slice(f);
314
+ }
315
+ }
316
+ i.loose || (a ? i.loose = true : this.rules.other.doubleBlankLine.test(p) && (a = true)), i.items.push({ type: "list_item", raw: p, task: !!this.options.gfm && this.rules.other.listIsTask.test(c), loose: false, text: c, tokens: [] }), i.raw += p;
317
+ }
318
+ let o = i.items.at(-1);
319
+ if (o)
320
+ o.raw = o.raw.trimEnd(), o.text = o.text.trimEnd();
321
+ else
322
+ return;
323
+ i.raw = i.raw.trimEnd();
324
+ for (let l of i.items) {
325
+ if (this.lexer.state.top = false, l.tokens = this.lexer.blockTokens(l.text, []), l.task) {
326
+ if (l.text = l.text.replace(this.rules.other.listReplaceTask, ""), l.tokens[0]?.type === "text" || l.tokens[0]?.type === "paragraph") {
327
+ l.tokens[0].raw = l.tokens[0].raw.replace(this.rules.other.listReplaceTask, ""), l.tokens[0].text = l.tokens[0].text.replace(this.rules.other.listReplaceTask, "");
328
+ for (let c = this.lexer.inlineQueue.length - 1;c >= 0; c--)
329
+ if (this.rules.other.listIsTask.test(this.lexer.inlineQueue[c].src)) {
330
+ this.lexer.inlineQueue[c].src = this.lexer.inlineQueue[c].src.replace(this.rules.other.listReplaceTask, "");
331
+ break;
332
+ }
333
+ }
334
+ let p = this.rules.other.listTaskCheckbox.exec(l.raw);
335
+ if (p) {
336
+ let c = { type: "checkbox", raw: p[0] + " ", checked: p[0] !== "[ ]" };
337
+ l.checked = c.checked, i.loose ? l.tokens[0] && ["paragraph", "text"].includes(l.tokens[0].type) && "tokens" in l.tokens[0] && l.tokens[0].tokens ? (l.tokens[0].raw = c.raw + l.tokens[0].raw, l.tokens[0].text = c.raw + l.tokens[0].text, l.tokens[0].tokens.unshift(c)) : l.tokens.unshift({ type: "paragraph", raw: c.raw, text: c.raw, tokens: [c] }) : l.tokens.unshift(c);
338
+ }
339
+ }
340
+ if (!i.loose) {
341
+ let p = l.tokens.filter((g) => g.type === "space"), c = p.length > 0 && p.some((g) => this.rules.other.anyLine.test(g.raw));
342
+ i.loose = c;
343
+ }
344
+ }
345
+ if (i.loose)
346
+ for (let l of i.items) {
347
+ l.loose = true;
348
+ for (let p of l.tokens)
349
+ p.type === "text" && (p.type = "paragraph");
350
+ }
351
+ return i;
352
+ }
353
+ }
354
+ html(e) {
355
+ let t = this.rules.block.html.exec(e);
356
+ if (t)
357
+ return { type: "html", block: true, raw: t[0], pre: t[1] === "pre" || t[1] === "script" || t[1] === "style", text: t[0] };
358
+ }
359
+ def(e) {
360
+ let t = this.rules.block.def.exec(e);
361
+ if (t) {
362
+ let n = t[1].toLowerCase().replace(this.rules.other.multipleSpaceGlobal, " "), r = t[2] ? t[2].replace(this.rules.other.hrefBrackets, "$1").replace(this.rules.inline.anyPunctuation, "$1") : "", i = t[3] ? t[3].substring(1, t[3].length - 1).replace(this.rules.inline.anyPunctuation, "$1") : t[3];
363
+ return { type: "def", tag: n, raw: t[0], href: r, title: i };
364
+ }
365
+ }
366
+ table(e) {
367
+ let t = this.rules.block.table.exec(e);
368
+ if (!t || !this.rules.other.tableDelimiter.test(t[2]))
369
+ return;
370
+ let n = J(t[1]), r = t[2].replace(this.rules.other.tableAlignChars, "").split("|"), i = t[3]?.trim() ? t[3].replace(this.rules.other.tableRowBlankLine, "").split(`
371
+ `) : [], s = { type: "table", raw: t[0], header: [], align: [], rows: [] };
372
+ if (n.length === r.length) {
373
+ for (let a of r)
374
+ this.rules.other.tableAlignRight.test(a) ? s.align.push("right") : this.rules.other.tableAlignCenter.test(a) ? s.align.push("center") : this.rules.other.tableAlignLeft.test(a) ? s.align.push("left") : s.align.push(null);
375
+ for (let a = 0;a < n.length; a++)
376
+ s.header.push({ text: n[a], tokens: this.lexer.inline(n[a]), header: true, align: s.align[a] });
377
+ for (let a of i)
378
+ s.rows.push(J(a, s.header.length).map((o, l) => ({ text: o, tokens: this.lexer.inline(o), header: false, align: s.align[l] })));
379
+ return s;
380
+ }
381
+ }
382
+ lheading(e) {
383
+ let t = this.rules.block.lheading.exec(e);
384
+ if (t)
385
+ return { type: "heading", raw: t[0], depth: t[2].charAt(0) === "=" ? 1 : 2, text: t[1], tokens: this.lexer.inline(t[1]) };
386
+ }
387
+ paragraph(e) {
388
+ let t = this.rules.block.paragraph.exec(e);
389
+ if (t) {
390
+ let n = t[1].charAt(t[1].length - 1) === `
391
+ ` ? t[1].slice(0, -1) : t[1];
392
+ return { type: "paragraph", raw: t[0], text: n, tokens: this.lexer.inline(n) };
393
+ }
394
+ }
395
+ text(e) {
396
+ let t = this.rules.block.text.exec(e);
397
+ if (t)
398
+ return { type: "text", raw: t[0], text: t[0], tokens: this.lexer.inline(t[0]) };
399
+ }
400
+ escape(e) {
401
+ let t = this.rules.inline.escape.exec(e);
402
+ if (t)
403
+ return { type: "escape", raw: t[0], text: t[1] };
404
+ }
405
+ tag(e) {
406
+ let t = this.rules.inline.tag.exec(e);
407
+ if (t)
408
+ return !this.lexer.state.inLink && this.rules.other.startATag.test(t[0]) ? this.lexer.state.inLink = true : this.lexer.state.inLink && this.rules.other.endATag.test(t[0]) && (this.lexer.state.inLink = false), !this.lexer.state.inRawBlock && this.rules.other.startPreScriptTag.test(t[0]) ? this.lexer.state.inRawBlock = true : this.lexer.state.inRawBlock && this.rules.other.endPreScriptTag.test(t[0]) && (this.lexer.state.inRawBlock = false), { type: "html", raw: t[0], inLink: this.lexer.state.inLink, inRawBlock: this.lexer.state.inRawBlock, block: false, text: t[0] };
409
+ }
410
+ link(e) {
411
+ let t = this.rules.inline.link.exec(e);
412
+ if (t) {
413
+ let n = t[2].trim();
414
+ if (!this.options.pedantic && this.rules.other.startAngleBracket.test(n)) {
415
+ if (!this.rules.other.endAngleBracket.test(n))
416
+ return;
417
+ let s = z(n.slice(0, -1), "\\");
418
+ if ((n.length - s.length) % 2 === 0)
419
+ return;
420
+ } else {
421
+ let s = de(t[2], "()");
422
+ if (s === -2)
423
+ return;
424
+ if (s > -1) {
425
+ let o = (t[0].indexOf("!") === 0 ? 5 : 4) + t[1].length + s;
426
+ t[2] = t[2].substring(0, s), t[0] = t[0].substring(0, o).trim(), t[3] = "";
427
+ }
428
+ }
429
+ let r = t[2], i = "";
430
+ if (this.options.pedantic) {
431
+ let s = this.rules.other.pedanticHrefTitle.exec(r);
432
+ s && (r = s[1], i = s[3]);
433
+ } else
434
+ i = t[3] ? t[3].slice(1, -1) : "";
435
+ return r = r.trim(), this.rules.other.startAngleBracket.test(r) && (this.options.pedantic && !this.rules.other.endAngleBracket.test(n) ? r = r.slice(1) : r = r.slice(1, -1)), ge(t, { href: r && r.replace(this.rules.inline.anyPunctuation, "$1"), title: i && i.replace(this.rules.inline.anyPunctuation, "$1") }, t[0], this.lexer, this.rules);
436
+ }
437
+ }
438
+ reflink(e, t) {
439
+ let n;
440
+ if ((n = this.rules.inline.reflink.exec(e)) || (n = this.rules.inline.nolink.exec(e))) {
441
+ let r = (n[2] || n[1]).replace(this.rules.other.multipleSpaceGlobal, " "), i = t[r.toLowerCase()];
442
+ if (!i) {
443
+ let s = n[0].charAt(0);
444
+ return { type: "text", raw: s, text: s };
445
+ }
446
+ return ge(n, i, n[0], this.lexer, this.rules);
447
+ }
448
+ }
449
+ emStrong(e, t, n = "") {
450
+ let r = this.rules.inline.emStrongLDelim.exec(e);
451
+ if (!r || r[3] && n.match(this.rules.other.unicodeAlphaNumeric))
452
+ return;
453
+ if (!(r[1] || r[2] || "") || !n || this.rules.inline.punctuation.exec(n)) {
454
+ let s = [...r[0]].length - 1, a, o, l = s, p = 0, c = r[0][0] === "*" ? this.rules.inline.emStrongRDelimAst : this.rules.inline.emStrongRDelimUnd;
455
+ for (c.lastIndex = 0, t = t.slice(-1 * e.length + s);(r = c.exec(t)) != null; ) {
456
+ if (a = r[1] || r[2] || r[3] || r[4] || r[5] || r[6], !a)
457
+ continue;
458
+ if (o = [...a].length, r[3] || r[4]) {
459
+ l += o;
460
+ continue;
461
+ } else if ((r[5] || r[6]) && s % 3 && !((s + o) % 3)) {
462
+ p += o;
463
+ continue;
464
+ }
465
+ if (l -= o, l > 0)
466
+ continue;
467
+ o = Math.min(o, o + l + p);
468
+ let g = [...r[0]][0].length, h = e.slice(0, s + r.index + g + o);
469
+ if (Math.min(s, o) % 2) {
470
+ let f = h.slice(1, -1);
471
+ return { type: "em", raw: h, text: f, tokens: this.lexer.inlineTokens(f) };
472
+ }
473
+ let R = h.slice(2, -2);
474
+ return { type: "strong", raw: h, text: R, tokens: this.lexer.inlineTokens(R) };
475
+ }
476
+ }
477
+ }
478
+ codespan(e) {
479
+ let t = this.rules.inline.code.exec(e);
480
+ if (t) {
481
+ let n = t[2].replace(this.rules.other.newLineCharGlobal, " "), r = this.rules.other.nonSpaceChar.test(n), i = this.rules.other.startingSpaceChar.test(n) && this.rules.other.endingSpaceChar.test(n);
482
+ return r && i && (n = n.substring(1, n.length - 1)), { type: "codespan", raw: t[0], text: n };
483
+ }
484
+ }
485
+ br(e) {
486
+ let t = this.rules.inline.br.exec(e);
487
+ if (t)
488
+ return { type: "br", raw: t[0] };
489
+ }
490
+ del(e) {
491
+ let t = this.rules.inline.del.exec(e);
492
+ if (t)
493
+ return { type: "del", raw: t[0], text: t[2], tokens: this.lexer.inlineTokens(t[2]) };
494
+ }
495
+ autolink(e) {
496
+ let t = this.rules.inline.autolink.exec(e);
497
+ if (t) {
498
+ let n, r;
499
+ return t[2] === "@" ? (n = t[1], r = "mailto:" + n) : (n = t[1], r = n), { type: "link", raw: t[0], text: n, href: r, tokens: [{ type: "text", raw: n, text: n }] };
500
+ }
501
+ }
502
+ url(e) {
503
+ let t;
504
+ if (t = this.rules.inline.url.exec(e)) {
505
+ let n, r;
506
+ if (t[2] === "@")
507
+ n = t[0], r = "mailto:" + n;
508
+ else {
509
+ let i;
510
+ do
511
+ i = t[0], t[0] = this.rules.inline._backpedal.exec(t[0])?.[0] ?? "";
512
+ while (i !== t[0]);
513
+ n = t[0], t[1] === "www." ? r = "http://" + t[0] : r = t[0];
514
+ }
515
+ return { type: "link", raw: t[0], text: n, href: r, tokens: [{ type: "text", raw: n, text: n }] };
516
+ }
517
+ }
518
+ inlineText(e) {
519
+ let t = this.rules.inline.text.exec(e);
520
+ if (t) {
521
+ let n = this.lexer.state.inRawBlock;
522
+ return { type: "text", raw: t[0], text: t[0], escaped: n };
523
+ }
524
+ }
525
+ };
526
+ var x = class u {
527
+ tokens;
528
+ options;
529
+ state;
530
+ inlineQueue;
531
+ tokenizer;
532
+ constructor(e) {
533
+ this.tokens = [], this.tokens.links = Object.create(null), this.options = e || T, this.options.tokenizer = this.options.tokenizer || new y, this.tokenizer = this.options.tokenizer, this.tokenizer.options = this.options, this.tokenizer.lexer = this, this.inlineQueue = [], this.state = { inLink: false, inRawBlock: false, top: true };
534
+ let t = { other: m, block: E.normal, inline: M.normal };
535
+ this.options.pedantic ? (t.block = E.pedantic, t.inline = M.pedantic) : this.options.gfm && (t.block = E.gfm, this.options.breaks ? t.inline = M.breaks : t.inline = M.gfm), this.tokenizer.rules = t;
536
+ }
537
+ static get rules() {
538
+ return { block: E, inline: M };
539
+ }
540
+ static lex(e, t) {
541
+ return new u(t).lex(e);
542
+ }
543
+ static lexInline(e, t) {
544
+ return new u(t).inlineTokens(e);
545
+ }
546
+ lex(e) {
547
+ e = e.replace(m.carriageReturn, `
548
+ `), this.blockTokens(e, this.tokens);
549
+ for (let t = 0;t < this.inlineQueue.length; t++) {
550
+ let n = this.inlineQueue[t];
551
+ this.inlineTokens(n.src, n.tokens);
552
+ }
553
+ return this.inlineQueue = [], this.tokens;
554
+ }
555
+ blockTokens(e, t = [], n = false) {
556
+ for (this.options.pedantic && (e = e.replace(m.tabCharGlobal, " ").replace(m.spaceLine, ""));e; ) {
557
+ let r;
558
+ if (this.options.extensions?.block?.some((s) => (r = s.call({ lexer: this }, e, t)) ? (e = e.substring(r.raw.length), t.push(r), true) : false))
559
+ continue;
560
+ if (r = this.tokenizer.space(e)) {
561
+ e = e.substring(r.raw.length);
562
+ let s = t.at(-1);
563
+ r.raw.length === 1 && s !== undefined ? s.raw += `
564
+ ` : t.push(r);
565
+ continue;
566
+ }
567
+ if (r = this.tokenizer.code(e)) {
568
+ e = e.substring(r.raw.length);
569
+ let s = t.at(-1);
570
+ s?.type === "paragraph" || s?.type === "text" ? (s.raw += (s.raw.endsWith(`
571
+ `) ? "" : `
572
+ `) + r.raw, s.text += `
573
+ ` + r.text, this.inlineQueue.at(-1).src = s.text) : t.push(r);
574
+ continue;
575
+ }
576
+ if (r = this.tokenizer.fences(e)) {
577
+ e = e.substring(r.raw.length), t.push(r);
578
+ continue;
579
+ }
580
+ if (r = this.tokenizer.heading(e)) {
581
+ e = e.substring(r.raw.length), t.push(r);
582
+ continue;
583
+ }
584
+ if (r = this.tokenizer.hr(e)) {
585
+ e = e.substring(r.raw.length), t.push(r);
586
+ continue;
587
+ }
588
+ if (r = this.tokenizer.blockquote(e)) {
589
+ e = e.substring(r.raw.length), t.push(r);
590
+ continue;
591
+ }
592
+ if (r = this.tokenizer.list(e)) {
593
+ e = e.substring(r.raw.length), t.push(r);
594
+ continue;
595
+ }
596
+ if (r = this.tokenizer.html(e)) {
597
+ e = e.substring(r.raw.length), t.push(r);
598
+ continue;
599
+ }
600
+ if (r = this.tokenizer.def(e)) {
601
+ e = e.substring(r.raw.length);
602
+ let s = t.at(-1);
603
+ s?.type === "paragraph" || s?.type === "text" ? (s.raw += (s.raw.endsWith(`
604
+ `) ? "" : `
605
+ `) + r.raw, s.text += `
606
+ ` + r.raw, this.inlineQueue.at(-1).src = s.text) : this.tokens.links[r.tag] || (this.tokens.links[r.tag] = { href: r.href, title: r.title }, t.push(r));
607
+ continue;
608
+ }
609
+ if (r = this.tokenizer.table(e)) {
610
+ e = e.substring(r.raw.length), t.push(r);
611
+ continue;
612
+ }
613
+ if (r = this.tokenizer.lheading(e)) {
614
+ e = e.substring(r.raw.length), t.push(r);
615
+ continue;
616
+ }
617
+ let i = e;
618
+ if (this.options.extensions?.startBlock) {
619
+ let s = 1 / 0, a = e.slice(1), o;
620
+ this.options.extensions.startBlock.forEach((l) => {
621
+ o = l.call({ lexer: this }, a), typeof o == "number" && o >= 0 && (s = Math.min(s, o));
622
+ }), s < 1 / 0 && s >= 0 && (i = e.substring(0, s + 1));
623
+ }
624
+ if (this.state.top && (r = this.tokenizer.paragraph(i))) {
625
+ let s = t.at(-1);
626
+ n && s?.type === "paragraph" ? (s.raw += (s.raw.endsWith(`
627
+ `) ? "" : `
628
+ `) + r.raw, s.text += `
629
+ ` + r.text, this.inlineQueue.pop(), this.inlineQueue.at(-1).src = s.text) : t.push(r), n = i.length !== e.length, e = e.substring(r.raw.length);
630
+ continue;
631
+ }
632
+ if (r = this.tokenizer.text(e)) {
633
+ e = e.substring(r.raw.length);
634
+ let s = t.at(-1);
635
+ s?.type === "text" ? (s.raw += (s.raw.endsWith(`
636
+ `) ? "" : `
637
+ `) + r.raw, s.text += `
638
+ ` + r.text, this.inlineQueue.pop(), this.inlineQueue.at(-1).src = s.text) : t.push(r);
639
+ continue;
640
+ }
641
+ if (e) {
642
+ let s = "Infinite loop on byte: " + e.charCodeAt(0);
643
+ if (this.options.silent) {
644
+ console.error(s);
645
+ break;
646
+ } else
647
+ throw new Error(s);
648
+ }
649
+ }
650
+ return this.state.top = true, t;
651
+ }
652
+ inline(e, t = []) {
653
+ return this.inlineQueue.push({ src: e, tokens: t }), t;
654
+ }
655
+ inlineTokens(e, t = []) {
656
+ let n = e, r = null;
657
+ if (this.tokens.links) {
658
+ let o = Object.keys(this.tokens.links);
659
+ if (o.length > 0)
660
+ for (;(r = this.tokenizer.rules.inline.reflinkSearch.exec(n)) != null; )
661
+ o.includes(r[0].slice(r[0].lastIndexOf("[") + 1, -1)) && (n = n.slice(0, r.index) + "[" + "a".repeat(r[0].length - 2) + "]" + n.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex));
662
+ }
663
+ for (;(r = this.tokenizer.rules.inline.anyPunctuation.exec(n)) != null; )
664
+ n = n.slice(0, r.index) + "++" + n.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);
665
+ let i;
666
+ for (;(r = this.tokenizer.rules.inline.blockSkip.exec(n)) != null; )
667
+ i = r[2] ? r[2].length : 0, n = n.slice(0, r.index + i) + "[" + "a".repeat(r[0].length - i - 2) + "]" + n.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);
668
+ n = this.options.hooks?.emStrongMask?.call({ lexer: this }, n) ?? n;
669
+ let s = false, a = "";
670
+ for (;e; ) {
671
+ s || (a = ""), s = false;
672
+ let o;
673
+ if (this.options.extensions?.inline?.some((p) => (o = p.call({ lexer: this }, e, t)) ? (e = e.substring(o.raw.length), t.push(o), true) : false))
674
+ continue;
675
+ if (o = this.tokenizer.escape(e)) {
676
+ e = e.substring(o.raw.length), t.push(o);
677
+ continue;
678
+ }
679
+ if (o = this.tokenizer.tag(e)) {
680
+ e = e.substring(o.raw.length), t.push(o);
681
+ continue;
682
+ }
683
+ if (o = this.tokenizer.link(e)) {
684
+ e = e.substring(o.raw.length), t.push(o);
685
+ continue;
686
+ }
687
+ if (o = this.tokenizer.reflink(e, this.tokens.links)) {
688
+ e = e.substring(o.raw.length);
689
+ let p = t.at(-1);
690
+ o.type === "text" && p?.type === "text" ? (p.raw += o.raw, p.text += o.text) : t.push(o);
691
+ continue;
692
+ }
693
+ if (o = this.tokenizer.emStrong(e, n, a)) {
694
+ e = e.substring(o.raw.length), t.push(o);
695
+ continue;
696
+ }
697
+ if (o = this.tokenizer.codespan(e)) {
698
+ e = e.substring(o.raw.length), t.push(o);
699
+ continue;
700
+ }
701
+ if (o = this.tokenizer.br(e)) {
702
+ e = e.substring(o.raw.length), t.push(o);
703
+ continue;
704
+ }
705
+ if (o = this.tokenizer.del(e)) {
706
+ e = e.substring(o.raw.length), t.push(o);
707
+ continue;
708
+ }
709
+ if (o = this.tokenizer.autolink(e)) {
710
+ e = e.substring(o.raw.length), t.push(o);
711
+ continue;
712
+ }
713
+ if (!this.state.inLink && (o = this.tokenizer.url(e))) {
714
+ e = e.substring(o.raw.length), t.push(o);
715
+ continue;
716
+ }
717
+ let l = e;
718
+ if (this.options.extensions?.startInline) {
719
+ let p = 1 / 0, c = e.slice(1), g;
720
+ this.options.extensions.startInline.forEach((h) => {
721
+ g = h.call({ lexer: this }, c), typeof g == "number" && g >= 0 && (p = Math.min(p, g));
722
+ }), p < 1 / 0 && p >= 0 && (l = e.substring(0, p + 1));
723
+ }
724
+ if (o = this.tokenizer.inlineText(l)) {
725
+ e = e.substring(o.raw.length), o.raw.slice(-1) !== "_" && (a = o.raw.slice(-1)), s = true;
726
+ let p = t.at(-1);
727
+ p?.type === "text" ? (p.raw += o.raw, p.text += o.text) : t.push(o);
728
+ continue;
729
+ }
730
+ if (e) {
731
+ let p = "Infinite loop on byte: " + e.charCodeAt(0);
732
+ if (this.options.silent) {
733
+ console.error(p);
734
+ break;
735
+ } else
736
+ throw new Error(p);
737
+ }
738
+ }
739
+ return t;
740
+ }
741
+ };
742
+ var P = class {
743
+ options;
744
+ parser;
745
+ constructor(e) {
746
+ this.options = e || T;
747
+ }
748
+ space(e) {
749
+ return "";
750
+ }
751
+ code({ text: e, lang: t, escaped: n }) {
752
+ let r = (t || "").match(m.notSpaceStart)?.[0], i = e.replace(m.endingNewline, "") + `
753
+ `;
754
+ return r ? '<pre><code class="language-' + w(r) + '">' + (n ? i : w(i, true)) + `</code></pre>
755
+ ` : "<pre><code>" + (n ? i : w(i, true)) + `</code></pre>
756
+ `;
757
+ }
758
+ blockquote({ tokens: e }) {
759
+ return `<blockquote>
760
+ ${this.parser.parse(e)}</blockquote>
761
+ `;
762
+ }
763
+ html({ text: e }) {
764
+ return e;
765
+ }
766
+ def(e) {
767
+ return "";
768
+ }
769
+ heading({ tokens: e, depth: t }) {
770
+ return `<h${t}>${this.parser.parseInline(e)}</h${t}>
771
+ `;
772
+ }
773
+ hr(e) {
774
+ return `<hr>
775
+ `;
776
+ }
777
+ list(e) {
778
+ let { ordered: t, start: n } = e, r = "";
779
+ for (let a = 0;a < e.items.length; a++) {
780
+ let o = e.items[a];
781
+ r += this.listitem(o);
782
+ }
783
+ let i = t ? "ol" : "ul", s = t && n !== 1 ? ' start="' + n + '"' : "";
784
+ return "<" + i + s + `>
785
+ ` + r + "</" + i + `>
786
+ `;
787
+ }
788
+ listitem(e) {
789
+ return `<li>${this.parser.parse(e.tokens)}</li>
790
+ `;
791
+ }
792
+ checkbox({ checked: e }) {
793
+ return "<input " + (e ? 'checked="" ' : "") + 'disabled="" type="checkbox"> ';
794
+ }
795
+ paragraph({ tokens: e }) {
796
+ return `<p>${this.parser.parseInline(e)}</p>
797
+ `;
798
+ }
799
+ table(e) {
800
+ let t = "", n = "";
801
+ for (let i = 0;i < e.header.length; i++)
802
+ n += this.tablecell(e.header[i]);
803
+ t += this.tablerow({ text: n });
804
+ let r = "";
805
+ for (let i = 0;i < e.rows.length; i++) {
806
+ let s = e.rows[i];
807
+ n = "";
808
+ for (let a = 0;a < s.length; a++)
809
+ n += this.tablecell(s[a]);
810
+ r += this.tablerow({ text: n });
811
+ }
812
+ return r && (r = `<tbody>${r}</tbody>`), `<table>
813
+ <thead>
814
+ ` + t + `</thead>
815
+ ` + r + `</table>
816
+ `;
817
+ }
818
+ tablerow({ text: e }) {
819
+ return `<tr>
820
+ ${e}</tr>
821
+ `;
822
+ }
823
+ tablecell(e) {
824
+ let t = this.parser.parseInline(e.tokens), n = e.header ? "th" : "td";
825
+ return (e.align ? `<${n} align="${e.align}">` : `<${n}>`) + t + `</${n}>
826
+ `;
827
+ }
828
+ strong({ tokens: e }) {
829
+ return `<strong>${this.parser.parseInline(e)}</strong>`;
830
+ }
831
+ em({ tokens: e }) {
832
+ return `<em>${this.parser.parseInline(e)}</em>`;
833
+ }
834
+ codespan({ text: e }) {
835
+ return `<code>${w(e, true)}</code>`;
836
+ }
837
+ br(e) {
838
+ return "<br>";
839
+ }
840
+ del({ tokens: e }) {
841
+ return `<del>${this.parser.parseInline(e)}</del>`;
842
+ }
843
+ link({ href: e, title: t, tokens: n }) {
844
+ let r = this.parser.parseInline(n), i = X(e);
845
+ if (i === null)
846
+ return r;
847
+ e = i;
848
+ let s = '<a href="' + e + '"';
849
+ return t && (s += ' title="' + w(t) + '"'), s += ">" + r + "</a>", s;
850
+ }
851
+ image({ href: e, title: t, text: n, tokens: r }) {
852
+ r && (n = this.parser.parseInline(r, this.parser.textRenderer));
853
+ let i = X(e);
854
+ if (i === null)
855
+ return w(n);
856
+ e = i;
857
+ let s = `<img src="${e}" alt="${n}"`;
858
+ return t && (s += ` title="${w(t)}"`), s += ">", s;
859
+ }
860
+ text(e) {
861
+ return "tokens" in e && e.tokens ? this.parser.parseInline(e.tokens) : ("escaped" in e) && e.escaped ? e.text : w(e.text);
862
+ }
863
+ };
864
+ var $ = class {
865
+ strong({ text: e }) {
866
+ return e;
867
+ }
868
+ em({ text: e }) {
869
+ return e;
870
+ }
871
+ codespan({ text: e }) {
872
+ return e;
873
+ }
874
+ del({ text: e }) {
875
+ return e;
876
+ }
877
+ html({ text: e }) {
878
+ return e;
879
+ }
880
+ text({ text: e }) {
881
+ return e;
882
+ }
883
+ link({ text: e }) {
884
+ return "" + e;
885
+ }
886
+ image({ text: e }) {
887
+ return "" + e;
888
+ }
889
+ br() {
890
+ return "";
891
+ }
892
+ checkbox({ raw: e }) {
893
+ return e;
894
+ }
895
+ };
896
+ var b = class u2 {
897
+ options;
898
+ renderer;
899
+ textRenderer;
900
+ constructor(e) {
901
+ this.options = e || T, this.options.renderer = this.options.renderer || new P, this.renderer = this.options.renderer, this.renderer.options = this.options, this.renderer.parser = this, this.textRenderer = new $;
902
+ }
903
+ static parse(e, t) {
904
+ return new u2(t).parse(e);
905
+ }
906
+ static parseInline(e, t) {
907
+ return new u2(t).parseInline(e);
908
+ }
909
+ parse(e) {
910
+ let t = "";
911
+ for (let n = 0;n < e.length; n++) {
912
+ let r = e[n];
913
+ if (this.options.extensions?.renderers?.[r.type]) {
914
+ let s = r, a = this.options.extensions.renderers[s.type].call({ parser: this }, s);
915
+ if (a !== false || !["space", "hr", "heading", "code", "table", "blockquote", "list", "html", "def", "paragraph", "text"].includes(s.type)) {
916
+ t += a || "";
917
+ continue;
918
+ }
919
+ }
920
+ let i = r;
921
+ switch (i.type) {
922
+ case "space": {
923
+ t += this.renderer.space(i);
924
+ break;
925
+ }
926
+ case "hr": {
927
+ t += this.renderer.hr(i);
928
+ break;
929
+ }
930
+ case "heading": {
931
+ t += this.renderer.heading(i);
932
+ break;
933
+ }
934
+ case "code": {
935
+ t += this.renderer.code(i);
936
+ break;
937
+ }
938
+ case "table": {
939
+ t += this.renderer.table(i);
940
+ break;
941
+ }
942
+ case "blockquote": {
943
+ t += this.renderer.blockquote(i);
944
+ break;
945
+ }
946
+ case "list": {
947
+ t += this.renderer.list(i);
948
+ break;
949
+ }
950
+ case "checkbox": {
951
+ t += this.renderer.checkbox(i);
952
+ break;
953
+ }
954
+ case "html": {
955
+ t += this.renderer.html(i);
956
+ break;
957
+ }
958
+ case "def": {
959
+ t += this.renderer.def(i);
960
+ break;
961
+ }
962
+ case "paragraph": {
963
+ t += this.renderer.paragraph(i);
964
+ break;
965
+ }
966
+ case "text": {
967
+ t += this.renderer.text(i);
968
+ break;
969
+ }
970
+ default: {
971
+ let s = 'Token with "' + i.type + '" type was not found.';
972
+ if (this.options.silent)
973
+ return console.error(s), "";
974
+ throw new Error(s);
975
+ }
976
+ }
977
+ }
978
+ return t;
979
+ }
980
+ parseInline(e, t = this.renderer) {
981
+ let n = "";
982
+ for (let r = 0;r < e.length; r++) {
983
+ let i = e[r];
984
+ if (this.options.extensions?.renderers?.[i.type]) {
985
+ let a = this.options.extensions.renderers[i.type].call({ parser: this }, i);
986
+ if (a !== false || !["escape", "html", "link", "image", "strong", "em", "codespan", "br", "del", "text"].includes(i.type)) {
987
+ n += a || "";
988
+ continue;
989
+ }
990
+ }
991
+ let s = i;
992
+ switch (s.type) {
993
+ case "escape": {
994
+ n += t.text(s);
995
+ break;
996
+ }
997
+ case "html": {
998
+ n += t.html(s);
999
+ break;
1000
+ }
1001
+ case "link": {
1002
+ n += t.link(s);
1003
+ break;
1004
+ }
1005
+ case "image": {
1006
+ n += t.image(s);
1007
+ break;
1008
+ }
1009
+ case "checkbox": {
1010
+ n += t.checkbox(s);
1011
+ break;
1012
+ }
1013
+ case "strong": {
1014
+ n += t.strong(s);
1015
+ break;
1016
+ }
1017
+ case "em": {
1018
+ n += t.em(s);
1019
+ break;
1020
+ }
1021
+ case "codespan": {
1022
+ n += t.codespan(s);
1023
+ break;
1024
+ }
1025
+ case "br": {
1026
+ n += t.br(s);
1027
+ break;
1028
+ }
1029
+ case "del": {
1030
+ n += t.del(s);
1031
+ break;
1032
+ }
1033
+ case "text": {
1034
+ n += t.text(s);
1035
+ break;
1036
+ }
1037
+ default: {
1038
+ let a = 'Token with "' + s.type + '" type was not found.';
1039
+ if (this.options.silent)
1040
+ return console.error(a), "";
1041
+ throw new Error(a);
1042
+ }
1043
+ }
1044
+ }
1045
+ return n;
1046
+ }
1047
+ };
1048
+ var S = class {
1049
+ options;
1050
+ block;
1051
+ constructor(e) {
1052
+ this.options = e || T;
1053
+ }
1054
+ static passThroughHooks = new Set(["preprocess", "postprocess", "processAllTokens", "emStrongMask"]);
1055
+ static passThroughHooksRespectAsync = new Set(["preprocess", "postprocess", "processAllTokens"]);
1056
+ preprocess(e) {
1057
+ return e;
1058
+ }
1059
+ postprocess(e) {
1060
+ return e;
1061
+ }
1062
+ processAllTokens(e) {
1063
+ return e;
1064
+ }
1065
+ emStrongMask(e) {
1066
+ return e;
1067
+ }
1068
+ provideLexer() {
1069
+ return this.block ? x.lex : x.lexInline;
1070
+ }
1071
+ provideParser() {
1072
+ return this.block ? b.parse : b.parseInline;
1073
+ }
1074
+ };
1075
+ var B = class {
1076
+ defaults = L();
1077
+ options = this.setOptions;
1078
+ parse = this.parseMarkdown(true);
1079
+ parseInline = this.parseMarkdown(false);
1080
+ Parser = b;
1081
+ Renderer = P;
1082
+ TextRenderer = $;
1083
+ Lexer = x;
1084
+ Tokenizer = y;
1085
+ Hooks = S;
1086
+ constructor(...e) {
1087
+ this.use(...e);
1088
+ }
1089
+ walkTokens(e, t) {
1090
+ let n = [];
1091
+ for (let r of e)
1092
+ switch (n = n.concat(t.call(this, r)), r.type) {
1093
+ case "table": {
1094
+ let i = r;
1095
+ for (let s of i.header)
1096
+ n = n.concat(this.walkTokens(s.tokens, t));
1097
+ for (let s of i.rows)
1098
+ for (let a of s)
1099
+ n = n.concat(this.walkTokens(a.tokens, t));
1100
+ break;
1101
+ }
1102
+ case "list": {
1103
+ let i = r;
1104
+ n = n.concat(this.walkTokens(i.items, t));
1105
+ break;
1106
+ }
1107
+ default: {
1108
+ let i = r;
1109
+ this.defaults.extensions?.childTokens?.[i.type] ? this.defaults.extensions.childTokens[i.type].forEach((s) => {
1110
+ let a = i[s].flat(1 / 0);
1111
+ n = n.concat(this.walkTokens(a, t));
1112
+ }) : i.tokens && (n = n.concat(this.walkTokens(i.tokens, t)));
1113
+ }
1114
+ }
1115
+ return n;
1116
+ }
1117
+ use(...e) {
1118
+ let t = this.defaults.extensions || { renderers: {}, childTokens: {} };
1119
+ return e.forEach((n) => {
1120
+ let r = { ...n };
1121
+ if (r.async = this.defaults.async || r.async || false, n.extensions && (n.extensions.forEach((i) => {
1122
+ if (!i.name)
1123
+ throw new Error("extension name required");
1124
+ if ("renderer" in i) {
1125
+ let s = t.renderers[i.name];
1126
+ s ? t.renderers[i.name] = function(...a) {
1127
+ let o = i.renderer.apply(this, a);
1128
+ return o === false && (o = s.apply(this, a)), o;
1129
+ } : t.renderers[i.name] = i.renderer;
1130
+ }
1131
+ if ("tokenizer" in i) {
1132
+ if (!i.level || i.level !== "block" && i.level !== "inline")
1133
+ throw new Error("extension level must be 'block' or 'inline'");
1134
+ let s = t[i.level];
1135
+ s ? s.unshift(i.tokenizer) : t[i.level] = [i.tokenizer], i.start && (i.level === "block" ? t.startBlock ? t.startBlock.push(i.start) : t.startBlock = [i.start] : i.level === "inline" && (t.startInline ? t.startInline.push(i.start) : t.startInline = [i.start]));
1136
+ }
1137
+ "childTokens" in i && i.childTokens && (t.childTokens[i.name] = i.childTokens);
1138
+ }), r.extensions = t), n.renderer) {
1139
+ let i = this.defaults.renderer || new P(this.defaults);
1140
+ for (let s in n.renderer) {
1141
+ if (!(s in i))
1142
+ throw new Error(`renderer '${s}' does not exist`);
1143
+ if (["options", "parser"].includes(s))
1144
+ continue;
1145
+ let a = s, o = n.renderer[a], l = i[a];
1146
+ i[a] = (...p) => {
1147
+ let c = o.apply(i, p);
1148
+ return c === false && (c = l.apply(i, p)), c || "";
1149
+ };
1150
+ }
1151
+ r.renderer = i;
1152
+ }
1153
+ if (n.tokenizer) {
1154
+ let i = this.defaults.tokenizer || new y(this.defaults);
1155
+ for (let s in n.tokenizer) {
1156
+ if (!(s in i))
1157
+ throw new Error(`tokenizer '${s}' does not exist`);
1158
+ if (["options", "rules", "lexer"].includes(s))
1159
+ continue;
1160
+ let a = s, o = n.tokenizer[a], l = i[a];
1161
+ i[a] = (...p) => {
1162
+ let c = o.apply(i, p);
1163
+ return c === false && (c = l.apply(i, p)), c;
1164
+ };
1165
+ }
1166
+ r.tokenizer = i;
1167
+ }
1168
+ if (n.hooks) {
1169
+ let i = this.defaults.hooks || new S;
1170
+ for (let s in n.hooks) {
1171
+ if (!(s in i))
1172
+ throw new Error(`hook '${s}' does not exist`);
1173
+ if (["options", "block"].includes(s))
1174
+ continue;
1175
+ let a = s, o = n.hooks[a], l = i[a];
1176
+ S.passThroughHooks.has(s) ? i[a] = (p) => {
1177
+ if (this.defaults.async && S.passThroughHooksRespectAsync.has(s))
1178
+ return (async () => {
1179
+ let g = await o.call(i, p);
1180
+ return l.call(i, g);
1181
+ })();
1182
+ let c = o.call(i, p);
1183
+ return l.call(i, c);
1184
+ } : i[a] = (...p) => {
1185
+ if (this.defaults.async)
1186
+ return (async () => {
1187
+ let g = await o.apply(i, p);
1188
+ return g === false && (g = await l.apply(i, p)), g;
1189
+ })();
1190
+ let c = o.apply(i, p);
1191
+ return c === false && (c = l.apply(i, p)), c;
1192
+ };
1193
+ }
1194
+ r.hooks = i;
1195
+ }
1196
+ if (n.walkTokens) {
1197
+ let i = this.defaults.walkTokens, s = n.walkTokens;
1198
+ r.walkTokens = function(a) {
1199
+ let o = [];
1200
+ return o.push(s.call(this, a)), i && (o = o.concat(i.call(this, a))), o;
1201
+ };
1202
+ }
1203
+ this.defaults = { ...this.defaults, ...r };
1204
+ }), this;
1205
+ }
1206
+ setOptions(e) {
1207
+ return this.defaults = { ...this.defaults, ...e }, this;
1208
+ }
1209
+ lexer(e, t) {
1210
+ return x.lex(e, t ?? this.defaults);
1211
+ }
1212
+ parser(e, t) {
1213
+ return b.parse(e, t ?? this.defaults);
1214
+ }
1215
+ parseMarkdown(e) {
1216
+ return (n, r) => {
1217
+ let i = { ...r }, s = { ...this.defaults, ...i }, a = this.onError(!!s.silent, !!s.async);
1218
+ if (this.defaults.async === true && i.async === false)
1219
+ return a(new Error("marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise."));
1220
+ if (typeof n > "u" || n === null)
1221
+ return a(new Error("marked(): input parameter is undefined or null"));
1222
+ if (typeof n != "string")
1223
+ return a(new Error("marked(): input parameter is of type " + Object.prototype.toString.call(n) + ", string expected"));
1224
+ if (s.hooks && (s.hooks.options = s, s.hooks.block = e), s.async)
1225
+ return (async () => {
1226
+ let o = s.hooks ? await s.hooks.preprocess(n) : n, p = await (s.hooks ? await s.hooks.provideLexer() : e ? x.lex : x.lexInline)(o, s), c = s.hooks ? await s.hooks.processAllTokens(p) : p;
1227
+ s.walkTokens && await Promise.all(this.walkTokens(c, s.walkTokens));
1228
+ let h = await (s.hooks ? await s.hooks.provideParser() : e ? b.parse : b.parseInline)(c, s);
1229
+ return s.hooks ? await s.hooks.postprocess(h) : h;
1230
+ })().catch(a);
1231
+ try {
1232
+ s.hooks && (n = s.hooks.preprocess(n));
1233
+ let l = (s.hooks ? s.hooks.provideLexer() : e ? x.lex : x.lexInline)(n, s);
1234
+ s.hooks && (l = s.hooks.processAllTokens(l)), s.walkTokens && this.walkTokens(l, s.walkTokens);
1235
+ let c = (s.hooks ? s.hooks.provideParser() : e ? b.parse : b.parseInline)(l, s);
1236
+ return s.hooks && (c = s.hooks.postprocess(c)), c;
1237
+ } catch (o) {
1238
+ return a(o);
1239
+ }
1240
+ };
1241
+ }
1242
+ onError(e, t) {
1243
+ return (n) => {
1244
+ if (n.message += `
1245
+ Please report this to https://github.com/markedjs/marked.`, e) {
1246
+ let r = "<p>An error occurred:</p><pre>" + w(n.message + "", true) + "</pre>";
1247
+ return t ? Promise.resolve(r) : r;
1248
+ }
1249
+ if (t)
1250
+ return Promise.reject(n);
1251
+ throw n;
1252
+ };
1253
+ }
1254
+ };
1255
+ var _ = new B;
1256
+ function d(u3, e) {
1257
+ return _.parse(u3, e);
1258
+ }
1259
+ d.options = d.setOptions = function(u3) {
1260
+ return _.setOptions(u3), d.defaults = _.defaults, Z(d.defaults), d;
1261
+ };
1262
+ d.getDefaults = L;
1263
+ d.defaults = T;
1264
+ d.use = function(...u3) {
1265
+ return _.use(...u3), d.defaults = _.defaults, Z(d.defaults), d;
1266
+ };
1267
+ d.walkTokens = function(u3, e) {
1268
+ return _.walkTokens(u3, e);
1269
+ };
1270
+ d.parseInline = _.parseInline;
1271
+ d.Parser = b;
1272
+ d.parser = b.parse;
1273
+ d.Renderer = P;
1274
+ d.TextRenderer = $;
1275
+ d.Lexer = x;
1276
+ d.lexer = x.lex;
1277
+ d.Tokenizer = y;
1278
+ d.Hooks = S;
1279
+ d.parse = d;
1280
+ var Dt = d.options;
1281
+ var Ht = d.setOptions;
1282
+ var Zt = d.use;
1283
+ var Gt = d.walkTokens;
1284
+ var Nt = d.parseInline;
1285
+ var Ft = b.parse;
1286
+ var jt = x.lex;
1287
+
1288
+ // src/lib/markdown.ts
1289
+ import { bundledLanguages } from "shiki";
1290
+
1291
+ // src/lib/errors.ts
1292
+ import { Data } from "effect";
1293
+
1294
+ class CanvasContextUnavailable extends Data.TaggedError("CanvasContextUnavailable") {
1295
+ }
1296
+
1297
+ class WebCodecsUnavailable extends Data.TaggedError("WebCodecsUnavailable") {
1298
+ }
1299
+
1300
+ class NoEncodableVideoCodec extends Data.TaggedError("NoEncodableVideoCodec") {
1301
+ }
1302
+
1303
+ class MissingCanvasFactory extends Data.TaggedError("MissingCanvasFactory") {
1304
+ }
1305
+
1306
+ class OutputBufferMissing extends Data.TaggedError("OutputBufferMissing") {
1307
+ }
1308
+
1309
+ class UnknownTheme extends Data.TaggedError("UnknownTheme") {
1310
+ }
1311
+
1312
+ class MissingCodeBlockLanguage extends Data.TaggedError("MissingCodeBlockLanguage") {
1313
+ }
1314
+
1315
+ class UnsupportedLanguage extends Data.TaggedError("UnsupportedLanguage") {
1316
+ }
1317
+
1318
+ // src/lib/markdown.ts
1319
+ var normalizeLanguage = (rawLanguage) => {
1320
+ const trimmed = rawLanguage.trim();
1321
+ if (!trimmed) {
1322
+ return "";
1323
+ }
1324
+ const primary = trimmed.split(/\s+/)[0] ?? "";
1325
+ return primary.toLowerCase();
1326
+ };
1327
+ var isSupportedLanguage = (language) => Object.hasOwn(bundledLanguages, language);
1328
+ var parseMarkdownCodeBlocks = (markdown) => Effect.gen(function* () {
1329
+ const tokens = yield* Effect.try({
1330
+ catch: () => new MissingCodeBlockLanguage({ reason: "Unable to parse markdown." }),
1331
+ try: () => d.lexer(markdown)
1332
+ });
1333
+ const blocks = [];
1334
+ for (const token of tokens) {
1335
+ if (token.type !== "code") {
1336
+ continue;
1337
+ }
1338
+ const rawLanguage = typeof token.lang === "string" ? token.lang.trim() : "";
1339
+ const language = normalizeLanguage(rawLanguage);
1340
+ if (!language) {
1341
+ return yield* Effect.fail(new MissingCodeBlockLanguage({
1342
+ reason: "Every fenced code block needs a language (for example: ```ts)."
1343
+ }));
1344
+ }
1345
+ if (!isSupportedLanguage(language)) {
1346
+ return yield* Effect.fail(new UnsupportedLanguage({
1347
+ language: rawLanguage
1348
+ }));
1349
+ }
1350
+ blocks.push({
1351
+ code: token.text,
1352
+ language
1353
+ });
1354
+ }
1355
+ return blocks;
1356
+ });
1357
+
1358
+ // src/lib/constants.ts
1359
+ var DEFAULT_THEME = "github-dark";
1360
+ var DEFAULT_WIDTH = 1280;
1361
+ var DEFAULT_HEIGHT = 720;
1362
+ var DEFAULT_FPS = 30;
1363
+ var DEFAULT_BLOCK_DURATION = 2;
1364
+ var DEFAULT_TRANSITION_DURATION_MS = 800;
1365
+ var DEFAULT_TRANSITION_DRIFT = 8;
1366
+ var DEFAULT_PADDING = 64;
1367
+ var DEFAULT_FONT_SIZE = 24;
1368
+ var DEFAULT_LINE_HEIGHT = 34;
1369
+ var DEFAULT_FOREGROUND = "#e6e6e6";
1370
+ var DEFAULT_BACKGROUND = "#0b0b0b";
1371
+ var DEFAULT_FONT_FAMILY = "SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace";
1372
+ var TAB_REPLACEMENT = " ";
1373
+ var FONT_STYLE_NONE = 0;
1374
+ var FONT_STYLE_ITALIC = 1;
1375
+ var FONT_STYLE_BOLD = 2;
1376
+ var FONT_STYLE_UNDERLINE = 4;
1377
+
1378
+ // src/lib/color.ts
1379
+ var expandShortHex = (hex) => {
1380
+ if (hex.length === 3) {
1381
+ const r = hex.charAt(0);
1382
+ const g = hex.charAt(1);
1383
+ const b2 = hex.charAt(2);
1384
+ return r + r + g + g + b2 + b2;
1385
+ }
1386
+ if (hex.length === 4) {
1387
+ const r = hex.charAt(0);
1388
+ const g = hex.charAt(1);
1389
+ const b2 = hex.charAt(2);
1390
+ const a = hex.charAt(3);
1391
+ return r + r + g + g + b2 + b2 + a + a;
1392
+ }
1393
+ return hex;
1394
+ };
1395
+ var parseHexColor = (color) => {
1396
+ const normalized = expandShortHex(color.replace("#", "").trim());
1397
+ if (normalized.length !== 6 && normalized.length !== 8) {
1398
+ return {
1399
+ alpha: 1,
1400
+ blue: 11,
1401
+ green: 11,
1402
+ red: 11
1403
+ };
1404
+ }
1405
+ const red = Number.parseInt(normalized.slice(0, 2), 16);
1406
+ const green = Number.parseInt(normalized.slice(2, 4), 16);
1407
+ const blue = Number.parseInt(normalized.slice(4, 6), 16);
1408
+ const alpha = normalized.length === 8 ? Number.parseInt(normalized.slice(6, 8), 16) / 255 : 1;
1409
+ return {
1410
+ alpha,
1411
+ blue,
1412
+ green,
1413
+ red
1414
+ };
1415
+ };
1416
+ var lerp = (start, end, progress) => start + (end - start) * progress;
1417
+ var blendColors = (from, to, progress) => {
1418
+ const fromColor = parseHexColor(from);
1419
+ const toColor = parseHexColor(to);
1420
+ const blended = {
1421
+ alpha: lerp(fromColor.alpha, toColor.alpha, progress),
1422
+ blue: lerp(fromColor.blue, toColor.blue, progress),
1423
+ green: lerp(fromColor.green, toColor.green, progress),
1424
+ red: lerp(fromColor.red, toColor.red, progress)
1425
+ };
1426
+ return `rgba(${Math.round(blended.red)}, ${Math.round(blended.green)}, ${Math.round(blended.blue)}, ${blended.alpha.toFixed(3)})`;
1427
+ };
1428
+
1429
+ // src/lib/transition.ts
1430
+ var buildTokenKey = (token) => `${token.content}::${token.fontStyle}`;
1431
+ var buildTokenSequence = (tokens) => tokens.map((token) => ({
1432
+ key: buildTokenKey(token),
1433
+ token
1434
+ }));
1435
+ var flattenSceneTokens = (scene) => scene.layout.lines.flatMap((line) => line.tokens);
1436
+ var diffLayoutTokens = (fromTokens, toTokens) => {
1437
+ const fromItems = buildTokenSequence(fromTokens);
1438
+ const toItems = buildTokenSequence(toTokens);
1439
+ const fromKeys = fromItems.map((item) => item.key);
1440
+ const toKeys = toItems.map((item) => item.key);
1441
+ const matrix = Array.from({ length: fromKeys.length + 1 }, () => Array.from({ length: toKeys.length + 1 }, () => 0));
1442
+ for (let i2 = fromKeys.length - 1;i2 >= 0; i2 -= 1) {
1443
+ const row = matrix[i2];
1444
+ if (!row) {
1445
+ continue;
1446
+ }
1447
+ for (let j3 = toKeys.length - 1;j3 >= 0; j3 -= 1) {
1448
+ const fromKey = fromKeys[i2] ?? "";
1449
+ const toKey = toKeys[j3] ?? "";
1450
+ if (fromKey === toKey) {
1451
+ row[j3] = (matrix[i2 + 1]?.[j3 + 1] ?? 0) + 1;
1452
+ } else {
1453
+ const nextRow = matrix[i2 + 1];
1454
+ const currentRow = matrix[i2];
1455
+ row[j3] = Math.max(nextRow?.[j3] ?? 0, currentRow?.[j3 + 1] ?? 0);
1456
+ }
1457
+ }
1458
+ }
1459
+ const matches = [];
1460
+ let i = 0;
1461
+ let j2 = 0;
1462
+ while (i < fromKeys.length && j2 < toKeys.length) {
1463
+ const fromKey = fromKeys[i] ?? "";
1464
+ const toKey = toKeys[j2] ?? "";
1465
+ if (fromKey === toKey) {
1466
+ matches.push([i, j2]);
1467
+ i += 1;
1468
+ j2 += 1;
1469
+ continue;
1470
+ }
1471
+ const skipFrom = matrix[i + 1]?.[j2] ?? 0;
1472
+ const skipTo = matrix[i]?.[j2 + 1] ?? 0;
1473
+ if (skipFrom >= skipTo) {
1474
+ i += 1;
1475
+ } else {
1476
+ j2 += 1;
1477
+ }
1478
+ }
1479
+ const matchedFrom = new Set(matches.map(([index]) => index));
1480
+ const matchedTo = new Set(matches.map(([, index]) => index));
1481
+ const matched = matches.flatMap(([fromIndex, toIndex]) => {
1482
+ const fromItem = fromItems[fromIndex];
1483
+ const toItem = toItems[toIndex];
1484
+ if (!fromItem || !toItem) {
1485
+ return [];
1486
+ }
1487
+ return [{ from: fromItem.token, to: toItem.token }];
1488
+ });
1489
+ return {
1490
+ added: toItems.filter((_2, index) => !matchedTo.has(index)).map((item) => item.token),
1491
+ matched,
1492
+ removed: fromItems.filter((_2, index) => !matchedFrom.has(index)).map((item) => item.token)
1493
+ };
1494
+ };
1495
+ var buildTransitionDiff = (fromScene, toScene) => diffLayoutTokens(flattenSceneTokens(fromScene), flattenSceneTokens(toScene));
1496
+ var easeInOutCubic = (progress) => {
1497
+ const clamped = Math.min(1, Math.max(0, progress));
1498
+ return clamped < 0.5 ? 4 * clamped * clamped * clamped : 1 - (-2 * clamped + 2) ** 3 / 2;
1499
+ };
1500
+ var buildTransitionTokens = (diff, progress) => {
1501
+ const clamped = Math.min(1, Math.max(0, progress));
1502
+ const tokens = [];
1503
+ for (const token of diff.removed) {
1504
+ const opacity = 1 - clamped;
1505
+ if (opacity <= 0) {
1506
+ continue;
1507
+ }
1508
+ tokens.push({
1509
+ color: token.color,
1510
+ content: token.content,
1511
+ fontStyle: token.fontStyle,
1512
+ opacity,
1513
+ width: token.width,
1514
+ x: token.x,
1515
+ y: token.y - DEFAULT_TRANSITION_DRIFT * clamped
1516
+ });
1517
+ }
1518
+ for (const match of diff.matched) {
1519
+ tokens.push({
1520
+ color: blendColors(match.from.color, match.to.color, clamped),
1521
+ content: match.to.content,
1522
+ fontStyle: match.to.fontStyle,
1523
+ opacity: 1,
1524
+ width: lerp(match.from.width, match.to.width, clamped),
1525
+ x: lerp(match.from.x, match.to.x, clamped),
1526
+ y: lerp(match.from.y, match.to.y, clamped)
1527
+ });
1528
+ }
1529
+ for (const token of diff.added) {
1530
+ const opacity = clamped;
1531
+ if (opacity <= 0) {
1532
+ continue;
1533
+ }
1534
+ tokens.push({
1535
+ color: token.color,
1536
+ content: token.content,
1537
+ fontStyle: token.fontStyle,
1538
+ opacity,
1539
+ width: token.width,
1540
+ x: token.x,
1541
+ y: token.y + DEFAULT_TRANSITION_DRIFT * (1 - clamped)
1542
+ });
1543
+ }
1544
+ return tokens;
1545
+ };
1546
+ var renderTransitionTokens = (context, tokens) => {
1547
+ const textContext = context;
1548
+ const previousAlpha = textContext.globalAlpha;
1549
+ const previousBaseline = textContext.textBaseline;
1550
+ const previousAlign = textContext.textAlign;
1551
+ const previousFont = textContext.font;
1552
+ const previousFillStyle = textContext.fillStyle;
1553
+ textContext.textBaseline = "top";
1554
+ textContext.textAlign = "left";
1555
+ for (const token of tokens) {
1556
+ if (token.opacity <= 0) {
1557
+ continue;
1558
+ }
1559
+ const fontStyle = token.fontStyle;
1560
+ const isItalic = (fontStyle & FONT_STYLE_ITALIC) === FONT_STYLE_ITALIC;
1561
+ const isBold = (fontStyle & FONT_STYLE_BOLD) === FONT_STYLE_BOLD;
1562
+ const isUnderline = (fontStyle & FONT_STYLE_UNDERLINE) === FONT_STYLE_UNDERLINE;
1563
+ textContext.globalAlpha = token.opacity;
1564
+ textContext.font = buildFont(isItalic, isBold);
1565
+ textContext.fillStyle = token.color;
1566
+ textContext.fillText(token.content, token.x, token.y);
1567
+ if (isUnderline && token.width > 0) {
1568
+ const previousStrokeStyle = textContext.strokeStyle;
1569
+ const previousLineWidth = textContext.lineWidth;
1570
+ const underlineY = token.y + DEFAULT_FONT_SIZE + 2;
1571
+ textContext.strokeStyle = textContext.fillStyle;
1572
+ textContext.lineWidth = Math.max(1, Math.floor(DEFAULT_FONT_SIZE / 12));
1573
+ textContext.beginPath();
1574
+ textContext.moveTo(token.x, underlineY);
1575
+ textContext.lineTo(token.x + token.width, underlineY);
1576
+ textContext.stroke();
1577
+ textContext.strokeStyle = previousStrokeStyle;
1578
+ textContext.lineWidth = previousLineWidth;
1579
+ }
1580
+ }
1581
+ textContext.globalAlpha = previousAlpha;
1582
+ textContext.textBaseline = previousBaseline;
1583
+ textContext.textAlign = previousAlign;
1584
+ textContext.font = previousFont;
1585
+ textContext.fillStyle = previousFillStyle;
1586
+ };
1587
+ var buildFont = (isItalic, isBold) => {
1588
+ const style = `${isItalic ? "italic " : ""}${isBold ? "bold " : ""}`;
1589
+ return `${style}${DEFAULT_FONT_SIZE}px ${DEFAULT_FONT_FAMILY}`;
1590
+ };
1591
+
1592
+ // src/lib/theme.ts
1593
+ import { Effect as Effect2 } from "effect";
1594
+ import { bundledThemes } from "shiki";
1595
+ var resolveTheme = (theme) => Effect2.gen(function* () {
1596
+ const trimmed = theme.trim();
1597
+ if (!Object.hasOwn(bundledThemes, trimmed)) {
1598
+ return yield* Effect2.fail(new UnknownTheme({ theme }));
1599
+ }
1600
+ return trimmed;
1601
+ });
1602
+
1603
+ // src/lib/scene.ts
1604
+ import { Effect as Effect3 } from "effect";
1605
+ import { codeToTokens } from "shiki";
1606
+ var normalizeTokenContent = (content) => content.replaceAll("\t", TAB_REPLACEMENT);
1607
+ var buildFont2 = (isItalic, isBold) => {
1608
+ const style = `${isItalic ? "italic " : ""}${isBold ? "bold " : ""}`;
1609
+ return `${style}${DEFAULT_FONT_SIZE}px ${DEFAULT_FONT_FAMILY}`;
1610
+ };
1611
+ var measureTokenWidth = (context, content, isItalic, isBold) => {
1612
+ const measureContext = context;
1613
+ const previousFont = measureContext.font;
1614
+ measureContext.font = buildFont2(isItalic, isBold);
1615
+ const width = measureContext.measureText(content).width;
1616
+ measureContext.font = previousFont;
1617
+ return width;
1618
+ };
1619
+ var buildScene = (context, codeBlock, theme, frameWidth, frameHeight) => Effect3.tryPromise({
1620
+ catch: (error) => error instanceof Error ? error : new Error(String(error)),
1621
+ try: async () => {
1622
+ const tokenResult = await codeToTokens(codeBlock.code, {
1623
+ lang: codeBlock.language,
1624
+ theme
1625
+ });
1626
+ const tokens = tokenResult.tokens;
1627
+ const foreground = tokenResult.fg ?? DEFAULT_FOREGROUND;
1628
+ const background = tokenResult.bg ?? DEFAULT_BACKGROUND;
1629
+ const lineMetrics = tokens.map((lineTokens) => {
1630
+ const metrics = [];
1631
+ let lineWidth = 0;
1632
+ for (const token of lineTokens) {
1633
+ const content = normalizeTokenContent(token.content);
1634
+ if (!content) {
1635
+ continue;
1636
+ }
1637
+ const styleFlags = token.fontStyle ?? FONT_STYLE_NONE;
1638
+ const isItalic = (styleFlags & FONT_STYLE_ITALIC) === FONT_STYLE_ITALIC;
1639
+ const isBold = (styleFlags & FONT_STYLE_BOLD) === FONT_STYLE_BOLD;
1640
+ const width = measureTokenWidth(context, content, isItalic, isBold);
1641
+ const color = token.color ?? foreground;
1642
+ metrics.push({
1643
+ color,
1644
+ content,
1645
+ fontStyle: styleFlags,
1646
+ width
1647
+ });
1648
+ lineWidth += width;
1649
+ }
1650
+ return {
1651
+ tokens: metrics,
1652
+ width: lineWidth
1653
+ };
1654
+ });
1655
+ const maxLineWidth = lineMetrics.length > 0 ? Math.max(...lineMetrics.map((line) => line.width)) : 0;
1656
+ const contentWidth = Math.max(0, maxLineWidth);
1657
+ const contentHeight = tokens.length * DEFAULT_LINE_HEIGHT;
1658
+ const blockWidth = contentWidth + DEFAULT_PADDING * 2;
1659
+ const blockHeight = contentHeight + DEFAULT_PADDING * 2;
1660
+ const blockX = Math.max(0, Math.round((frameWidth - blockWidth) / 2));
1661
+ const blockY = Math.max(0, Math.round((frameHeight - blockHeight) / 2));
1662
+ const layout = {
1663
+ lines: lineMetrics.map((line, lineIndex) => {
1664
+ let cursorX = blockX + DEFAULT_PADDING;
1665
+ const cursorY = blockY + DEFAULT_PADDING + lineIndex * DEFAULT_LINE_HEIGHT;
1666
+ const layoutTokens = line.tokens.map((token) => {
1667
+ const layoutToken = {
1668
+ ...token,
1669
+ x: cursorX,
1670
+ y: cursorY
1671
+ };
1672
+ cursorX += token.width;
1673
+ return layoutToken;
1674
+ });
1675
+ return {
1676
+ tokens: layoutTokens
1677
+ };
1678
+ })
1679
+ };
1680
+ return {
1681
+ background,
1682
+ blockX,
1683
+ blockY,
1684
+ contentHeight,
1685
+ contentWidth,
1686
+ foreground,
1687
+ layout,
1688
+ tokens
1689
+ };
1690
+ }
1691
+ });
1692
+ var renderSceneText = (context, scene, opacity, blockX, blockY) => {
1693
+ if (opacity <= 0) {
1694
+ return;
1695
+ }
1696
+ const textContext = context;
1697
+ const startX = blockX + DEFAULT_PADDING;
1698
+ const startY = blockY + DEFAULT_PADDING;
1699
+ const previousAlpha = textContext.globalAlpha;
1700
+ const previousBaseline = textContext.textBaseline;
1701
+ const previousAlign = textContext.textAlign;
1702
+ const previousFont = textContext.font;
1703
+ const previousFillStyle = textContext.fillStyle;
1704
+ textContext.globalAlpha = opacity;
1705
+ textContext.textBaseline = "top";
1706
+ textContext.textAlign = "left";
1707
+ for (let lineIndex = 0;lineIndex < scene.tokens.length; lineIndex += 1) {
1708
+ const lineTokens = scene.tokens[lineIndex] ?? [];
1709
+ let cursorX = startX;
1710
+ const cursorY = startY + lineIndex * DEFAULT_LINE_HEIGHT;
1711
+ for (const token of lineTokens) {
1712
+ const content = normalizeTokenContent(token.content);
1713
+ if (!content) {
1714
+ continue;
1715
+ }
1716
+ const fontStyle = token.fontStyle ?? FONT_STYLE_NONE;
1717
+ const isItalic = (fontStyle & FONT_STYLE_ITALIC) === FONT_STYLE_ITALIC;
1718
+ const isBold = (fontStyle & FONT_STYLE_BOLD) === FONT_STYLE_BOLD;
1719
+ const isUnderline = (fontStyle & FONT_STYLE_UNDERLINE) === FONT_STYLE_UNDERLINE;
1720
+ textContext.font = buildFont2(isItalic, isBold);
1721
+ textContext.fillStyle = token.color ?? scene.foreground;
1722
+ textContext.fillText(content, cursorX, cursorY);
1723
+ const tokenWidth = textContext.measureText(content).width;
1724
+ if (isUnderline) {
1725
+ const previousStrokeStyle = textContext.strokeStyle;
1726
+ const previousLineWidth = textContext.lineWidth;
1727
+ const underlineY = cursorY + DEFAULT_FONT_SIZE + 2;
1728
+ textContext.strokeStyle = textContext.fillStyle;
1729
+ textContext.lineWidth = Math.max(1, Math.floor(DEFAULT_FONT_SIZE / 12));
1730
+ textContext.beginPath();
1731
+ textContext.moveTo(cursorX, underlineY);
1732
+ textContext.lineTo(cursorX + tokenWidth, underlineY);
1733
+ textContext.stroke();
1734
+ textContext.strokeStyle = previousStrokeStyle;
1735
+ textContext.lineWidth = previousLineWidth;
1736
+ }
1737
+ cursorX += tokenWidth;
1738
+ }
1739
+ }
1740
+ textContext.globalAlpha = previousAlpha;
1741
+ textContext.textBaseline = previousBaseline;
1742
+ textContext.textAlign = previousAlign;
1743
+ textContext.font = previousFont;
1744
+ textContext.fillStyle = previousFillStyle;
1745
+ };
1746
+
1747
+ // src/lib/render.ts
1748
+ var renderFrame = (context, frameWidth, frameHeight, frame) => {
1749
+ const frameContext = context;
1750
+ const startTransform = frameContext.getTransform();
1751
+ if (typeof frameContext.setTransformMatrix !== "function") {
1752
+ frameContext.setTransformMatrix = (transform) => {
1753
+ if (typeof transform === "object" && transform !== null && "a" in transform && "b" in transform && "c" in transform && "d" in transform && "e" in transform && "f" in transform) {
1754
+ const matrix = transform;
1755
+ frameContext.setTransform(matrix.a, matrix.b, matrix.c, matrix.d, matrix.e, matrix.f);
1756
+ } else {
1757
+ frameContext.setTransform(1, 0, 0, 1, 0, 0);
1758
+ }
1759
+ };
1760
+ }
1761
+ const startAlpha = frameContext.globalAlpha;
1762
+ const startFillStyle = frameContext.fillStyle;
1763
+ frameContext.setTransform(1, 0, 0, 1, 0, 0);
1764
+ frameContext.globalAlpha = 1;
1765
+ frameContext.fillStyle = frame.background;
1766
+ frameContext.fillRect(0, 0, frameWidth, frameHeight);
1767
+ if (frame.kind === "scene") {
1768
+ renderSceneText(frameContext, frame.scene, frame.opacity, frame.positionX, frame.positionY);
1769
+ } else {
1770
+ renderTransitionTokens(frameContext, frame.tokens);
1771
+ }
1772
+ if (typeof frameContext.setTransformMatrix === "function") {
1773
+ frameContext.setTransformMatrix(startTransform);
1774
+ }
1775
+ frameContext.globalAlpha = startAlpha;
1776
+ frameContext.fillStyle = startFillStyle;
1777
+ };
1778
+
1779
+ export { __toESM, __require, CanvasContextUnavailable, WebCodecsUnavailable, NoEncodableVideoCodec, MissingCanvasFactory, OutputBufferMissing, parseMarkdownCodeBlocks, blendColors, DEFAULT_THEME, DEFAULT_WIDTH, DEFAULT_HEIGHT, DEFAULT_FPS, DEFAULT_BLOCK_DURATION, DEFAULT_TRANSITION_DURATION_MS, buildScene, diffLayoutTokens, buildTransitionDiff, easeInOutCubic, buildTransitionTokens, renderFrame, resolveTheme };
1780
+
1781
+ //# debugId=914E718E8429F54B64756E2164756E21
1782
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL2xpYi9tYXJrZG93bi50cyIsICJub2RlX21vZHVsZXMvbWFya2VkL2xpYi9tYXJrZWQuZXNtLmpzIiwgInNyYy9saWIvZXJyb3JzLnRzIiwgInNyYy9saWIvY29uc3RhbnRzLnRzIiwgInNyYy9saWIvY29sb3IudHMiLCAic3JjL2xpYi90cmFuc2l0aW9uLnRzIiwgInNyYy9saWIvdGhlbWUudHMiLCAic3JjL2xpYi9zY2VuZS50cyIsICJzcmMvbGliL3JlbmRlci50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsKICAgICJpbXBvcnQgeyBFZmZlY3QgfSBmcm9tIFwiZWZmZWN0XCJcbmltcG9ydCB7IG1hcmtlZCB9IGZyb20gXCJtYXJrZWRcIlxuaW1wb3J0IHsgYnVuZGxlZExhbmd1YWdlcywgdHlwZSBCdW5kbGVkTGFuZ3VhZ2UgfSBmcm9tIFwic2hpa2lcIlxuaW1wb3J0IHR5cGUgeyBDb2RlQmxvY2sgfSBmcm9tIFwiLi90eXBlc1wiXG5pbXBvcnQgeyBNaXNzaW5nQ29kZUJsb2NrTGFuZ3VhZ2UsIFVuc3VwcG9ydGVkTGFuZ3VhZ2UgfSBmcm9tIFwiLi9lcnJvcnMuanNcIlxuXG5leHBvcnQgY29uc3Qgbm9ybWFsaXplTGFuZ3VhZ2UgPSAocmF3TGFuZ3VhZ2U6IHN0cmluZykgPT4ge1xuICBjb25zdCB0cmltbWVkID0gcmF3TGFuZ3VhZ2UudHJpbSgpXG4gIGlmICghdHJpbW1lZCkge1xuICAgIHJldHVybiBcIlwiXG4gIH1cblxuICBjb25zdCBwcmltYXJ5ID0gdHJpbW1lZC5zcGxpdCgvXFxzKy8pWzBdID8/IFwiXCJcbiAgcmV0dXJuIHByaW1hcnkudG9Mb3dlckNhc2UoKVxufVxuXG5jb25zdCBpc1N1cHBvcnRlZExhbmd1YWdlID0gKGxhbmd1YWdlOiBzdHJpbmcpOiBsYW5ndWFnZSBpcyBCdW5kbGVkTGFuZ3VhZ2UgPT5cbiAgT2JqZWN0Lmhhc093bihidW5kbGVkTGFuZ3VhZ2VzLCBsYW5ndWFnZSlcblxuZXhwb3J0IGNvbnN0IHBhcnNlTWFya2Rvd25Db2RlQmxvY2tzID0gKG1hcmtkb3duOiBzdHJpbmcpID0+XG4gIEVmZmVjdC5nZW4oZnVuY3Rpb24qICgpIHtcbiAgICBjb25zdCB0b2tlbnMgPSB5aWVsZCogRWZmZWN0LnRyeSh7XG4gICAgICBjYXRjaDogKCkgPT4gbmV3IE1pc3NpbmdDb2RlQmxvY2tMYW5ndWFnZSh7IHJlYXNvbjogXCJVbmFibGUgdG8gcGFyc2UgbWFya2Rvd24uXCIgfSksXG4gICAgICB0cnk6ICgpID0+IG1hcmtlZC5sZXhlcihtYXJrZG93biksXG4gICAgfSlcbiAgICBjb25zdCBibG9ja3M6IENvZGVCbG9ja1tdID0gW11cblxuICAgIGZvciAoY29uc3QgdG9rZW4gb2YgdG9rZW5zKSB7XG4gICAgICBpZiAodG9rZW4udHlwZSAhPT0gXCJjb2RlXCIpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmF3TGFuZ3VhZ2UgPSB0eXBlb2YgdG9rZW4ubGFuZyA9PT0gXCJzdHJpbmdcIiA/IHRva2VuLmxhbmcudHJpbSgpIDogXCJcIlxuICAgICAgY29uc3QgbGFuZ3VhZ2UgPSBub3JtYWxpemVMYW5ndWFnZShyYXdMYW5ndWFnZSlcblxuICAgICAgaWYgKCFsYW5ndWFnZSkge1xuICAgICAgICByZXR1cm4geWllbGQqIEVmZmVjdC5mYWlsKFxuICAgICAgICAgIG5ldyBNaXNzaW5nQ29kZUJsb2NrTGFuZ3VhZ2Uoe1xuICAgICAgICAgICAgcmVhc29uOiBcIkV2ZXJ5IGZlbmNlZCBjb2RlIGJsb2NrIG5lZWRzIGEgbGFuZ3VhZ2UgKGZvciBleGFtcGxlOiBgYGB0cykuXCIsXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgfVxuXG4gICAgICBpZiAoIWlzU3VwcG9ydGVkTGFuZ3VhZ2UobGFuZ3VhZ2UpKSB7XG4gICAgICAgIHJldHVybiB5aWVsZCogRWZmZWN0LmZhaWwoXG4gICAgICAgICAgbmV3IFVuc3VwcG9ydGVkTGFuZ3VhZ2Uoe1xuICAgICAgICAgICAgbGFuZ3VhZ2U6IHJhd0xhbmd1YWdlLFxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgYmxvY2tzLnB1c2goe1xuICAgICAgICBjb2RlOiB0b2tlbi50ZXh0LFxuICAgICAgICBsYW5ndWFnZSxcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgcmV0dXJuIGJsb2Nrc1xuICB9KVxuIiwKICAgICIvKipcbiAqIG1hcmtlZCB2MTcuMC4xIC0gYSBtYXJrZG93biBwYXJzZXJcbiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDI1LCBNYXJrZWRKUy4gKE1JVCBMaWNlbnNlKVxuICogQ29weXJpZ2h0IChjKSAyMDExLTIwMTgsIENocmlzdG9waGVyIEplZmZyZXkuIChNSVQgTGljZW5zZSlcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXJrZWRqcy9tYXJrZWRcbiAqL1xuXG4vKipcbiAqIERPIE5PVCBFRElUIFRISVMgRklMRVxuICogVGhlIGNvZGUgaW4gdGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBmcm9tIGZpbGVzIGluIC4vc3JjL1xuICovXG5cbmZ1bmN0aW9uIEwoKXtyZXR1cm57YXN5bmM6ITEsYnJlYWtzOiExLGV4dGVuc2lvbnM6bnVsbCxnZm06ITAsaG9va3M6bnVsbCxwZWRhbnRpYzohMSxyZW5kZXJlcjpudWxsLHNpbGVudDohMSx0b2tlbml6ZXI6bnVsbCx3YWxrVG9rZW5zOm51bGx9fXZhciBUPUwoKTtmdW5jdGlvbiBaKHUpe1Q9dX12YXIgQz17ZXhlYzooKT0+bnVsbH07ZnVuY3Rpb24gayh1LGU9XCJcIil7bGV0IHQ9dHlwZW9mIHU9PVwic3RyaW5nXCI/dTp1LnNvdXJjZSxuPXtyZXBsYWNlOihyLGkpPT57bGV0IHM9dHlwZW9mIGk9PVwic3RyaW5nXCI/aTppLnNvdXJjZTtyZXR1cm4gcz1zLnJlcGxhY2UobS5jYXJldCxcIiQxXCIpLHQ9dC5yZXBsYWNlKHIscyksbn0sZ2V0UmVnZXg6KCk9Pm5ldyBSZWdFeHAodCxlKX07cmV0dXJuIG59dmFyIG1lPSgoKT0+e3RyeXtyZXR1cm4hIW5ldyBSZWdFeHAoXCIoPzw9MSkoPzwhMSlcIil9Y2F0Y2h7cmV0dXJuITF9fSkoKSxtPXtjb2RlUmVtb3ZlSW5kZW50Oi9eKD86IHsxLDR9fCB7MCwzfVxcdCkvZ20sb3V0cHV0TGlua1JlcGxhY2U6L1xcXFwoW1xcW1xcXV0pL2csaW5kZW50Q29kZUNvbXBlbnNhdGlvbjovXihcXHMrKSg/OmBgYCkvLGJlZ2lubmluZ1NwYWNlOi9eXFxzKy8sZW5kaW5nSGFzaDovIyQvLHN0YXJ0aW5nU3BhY2VDaGFyOi9eIC8sZW5kaW5nU3BhY2VDaGFyOi8gJC8sbm9uU3BhY2VDaGFyOi9bXiBdLyxuZXdMaW5lQ2hhckdsb2JhbDovXFxuL2csdGFiQ2hhckdsb2JhbDovXFx0L2csbXVsdGlwbGVTcGFjZUdsb2JhbDovXFxzKy9nLGJsYW5rTGluZTovXlsgXFx0XSokLyxkb3VibGVCbGFua0xpbmU6L1xcblsgXFx0XSpcXG5bIFxcdF0qJC8sYmxvY2txdW90ZVN0YXJ0Oi9eIHswLDN9Pi8sYmxvY2txdW90ZVNldGV4dFJlcGxhY2U6L1xcbiB7MCwzfSgoPzo9K3wtKykgKikoPz1cXG58JCkvZyxibG9ja3F1b3RlU2V0ZXh0UmVwbGFjZTI6L14gezAsM30+WyBcXHRdPy9nbSxsaXN0UmVwbGFjZVRhYnM6L15cXHQrLyxsaXN0UmVwbGFjZU5lc3Rpbmc6L14gezEsNH0oPz0oIHs0fSkqW14gXSkvZyxsaXN0SXNUYXNrOi9eXFxbWyB4WF1cXF0gK1xcUy8sbGlzdFJlcGxhY2VUYXNrOi9eXFxbWyB4WF1cXF0gKy8sbGlzdFRhc2tDaGVja2JveDovXFxbWyB4WF1cXF0vLGFueUxpbmU6L1xcbi4qXFxuLyxocmVmQnJhY2tldHM6L148KC4qKT4kLyx0YWJsZURlbGltaXRlcjovWzp8XS8sdGFibGVBbGlnbkNoYXJzOi9eXFx8fFxcfCAqJC9nLHRhYmxlUm93QmxhbmtMaW5lOi9cXG5bIFxcdF0qJC8sdGFibGVBbGlnblJpZ2h0Oi9eICotKzogKiQvLHRhYmxlQWxpZ25DZW50ZXI6L14gKjotKzogKiQvLHRhYmxlQWxpZ25MZWZ0Oi9eICo6LSsgKiQvLHN0YXJ0QVRhZzovXjxhIC9pLGVuZEFUYWc6L148XFwvYT4vaSxzdGFydFByZVNjcmlwdFRhZzovXjwocHJlfGNvZGV8a2JkfHNjcmlwdCkoXFxzfD4pL2ksZW5kUHJlU2NyaXB0VGFnOi9ePFxcLyhwcmV8Y29kZXxrYmR8c2NyaXB0KShcXHN8PikvaSxzdGFydEFuZ2xlQnJhY2tldDovXjwvLGVuZEFuZ2xlQnJhY2tldDovPiQvLHBlZGFudGljSHJlZlRpdGxlOi9eKFteJ1wiXSpbXlxcc10pXFxzKyhbJ1wiXSkoLiopXFwyLyx1bmljb2RlQWxwaGFOdW1lcmljOi9bXFxwe0x9XFxwe059XS91LGVzY2FwZVRlc3Q6L1smPD5cIiddLyxlc2NhcGVSZXBsYWNlOi9bJjw+XCInXS9nLGVzY2FwZVRlc3ROb0VuY29kZTovWzw+XCInXXwmKD8hKCNcXGR7MSw3fXwjW1h4XVthLWZBLUYwLTldezEsNn18XFx3Kyk7KS8sZXNjYXBlUmVwbGFjZU5vRW5jb2RlOi9bPD5cIiddfCYoPyEoI1xcZHsxLDd9fCNbWHhdW2EtZkEtRjAtOV17MSw2fXxcXHcrKTspL2csdW5lc2NhcGVUZXN0Oi8mKCMoPzpcXGQrKXwoPzojeFswLTlBLUZhLWZdKyl8KD86XFx3KykpOz8vaWcsY2FyZXQ6LyhefFteXFxbXSlcXF4vZyxwZXJjZW50RGVjb2RlOi8lMjUvZyxmaW5kUGlwZTovXFx8L2csc3BsaXRQaXBlOi8gXFx8LyxzbGFzaFBpcGU6L1xcXFxcXHwvZyxjYXJyaWFnZVJldHVybjovXFxyXFxufFxcci9nLHNwYWNlTGluZTovXiArJC9nbSxub3RTcGFjZVN0YXJ0Oi9eXFxTKi8sZW5kaW5nTmV3bGluZTovXFxuJC8sbGlzdEl0ZW1SZWdleDp1PT5uZXcgUmVnRXhwKGBeKCB7MCwzfSR7dX0pKCg/OltcdCBdW15cXFxcbl0qKT8oPzpcXFxcbnwkKSlgKSxuZXh0QnVsbGV0UmVnZXg6dT0+bmV3IFJlZ0V4cChgXiB7MCwke01hdGgubWluKDMsdS0xKX19KD86WyorLV18XFxcXGR7MSw5fVsuKV0pKCg/OlsgXHRdW15cXFxcbl0qKT8oPzpcXFxcbnwkKSlgKSxoclJlZ2V4OnU9Pm5ldyBSZWdFeHAoYF4gezAsJHtNYXRoLm1pbigzLHUtMSl9fSgoPzotICopezMsfXwoPzpfICopezMsfXwoPzpcXFxcKiAqKXszLH0pKD86XFxcXG4rfCQpYCksZmVuY2VzQmVnaW5SZWdleDp1PT5uZXcgUmVnRXhwKGBeIHswLCR7TWF0aC5taW4oMyx1LTEpfX0oPzpcXGBcXGBcXGB8fn5+KWApLGhlYWRpbmdCZWdpblJlZ2V4OnU9Pm5ldyBSZWdFeHAoYF4gezAsJHtNYXRoLm1pbigzLHUtMSl9fSNgKSxodG1sQmVnaW5SZWdleDp1PT5uZXcgUmVnRXhwKGBeIHswLCR7TWF0aC5taW4oMyx1LTEpfX08KD86W2Etel0uKj58IS0tKWAsXCJpXCIpfSx4ZT0vXig/OlsgXFx0XSooPzpcXG58JCkpKy8sYmU9L14oKD86IHs0fXwgezAsM31cXHQpW15cXG5dKyg/Olxcbig/OlsgXFx0XSooPzpcXG58JCkpKik/KSsvLFJlPS9eIHswLDN9KGB7Myx9KD89W15gXFxuXSooPzpcXG58JCkpfH57Myx9KShbXlxcbl0qKSg/OlxcbnwkKSg/OnwoW1xcc1xcU10qPykoPzpcXG58JCkpKD86IHswLDN9XFwxW35gXSogKig/PVxcbnwkKXwkKS8sST0vXiB7MCwzfSgoPzotW1xcdCBdKil7Myx9fCg/Ol9bIFxcdF0qKXszLH18KD86XFwqWyBcXHRdKil7Myx9KSg/Olxcbit8JCkvLFRlPS9eIHswLDN9KCN7MSw2fSkoPz1cXHN8JCkoLiopKD86XFxuK3wkKS8sTj0vKD86WyorLV18XFxkezEsOX1bLildKS8scmU9L14oPyFidWxsIHxibG9ja0NvZGV8ZmVuY2VzfGJsb2NrcXVvdGV8aGVhZGluZ3xodG1sfHRhYmxlKSgoPzoufFxcbig/IVxccyo/XFxufGJ1bGwgfGJsb2NrQ29kZXxmZW5jZXN8YmxvY2txdW90ZXxoZWFkaW5nfGh0bWx8dGFibGUpKSs/KVxcbiB7MCwzfSg9K3wtKykgKig/Olxcbit8JCkvLHNlPWsocmUpLnJlcGxhY2UoL2J1bGwvZyxOKS5yZXBsYWNlKC9ibG9ja0NvZGUvZywvKD86IHs0fXwgezAsM31cXHQpLykucmVwbGFjZSgvZmVuY2VzL2csLyB7MCwzfSg/OmB7Myx9fH57Myx9KS8pLnJlcGxhY2UoL2Jsb2NrcXVvdGUvZywvIHswLDN9Pi8pLnJlcGxhY2UoL2hlYWRpbmcvZywvIHswLDN9I3sxLDZ9LykucmVwbGFjZSgvaHRtbC9nLC8gezAsM308W15cXG4+XSs+XFxuLykucmVwbGFjZSgvXFx8dGFibGUvZyxcIlwiKS5nZXRSZWdleCgpLE9lPWsocmUpLnJlcGxhY2UoL2J1bGwvZyxOKS5yZXBsYWNlKC9ibG9ja0NvZGUvZywvKD86IHs0fXwgezAsM31cXHQpLykucmVwbGFjZSgvZmVuY2VzL2csLyB7MCwzfSg/OmB7Myx9fH57Myx9KS8pLnJlcGxhY2UoL2Jsb2NrcXVvdGUvZywvIHswLDN9Pi8pLnJlcGxhY2UoL2hlYWRpbmcvZywvIHswLDN9I3sxLDZ9LykucmVwbGFjZSgvaHRtbC9nLC8gezAsM308W15cXG4+XSs+XFxuLykucmVwbGFjZSgvdGFibGUvZywvIHswLDN9XFx8Pyg/Ols6XFwtIF0qXFx8KStbXFw6XFwtIF0qXFxuLykuZ2V0UmVnZXgoKSxRPS9eKFteXFxuXSsoPzpcXG4oPyFocnxoZWFkaW5nfGxoZWFkaW5nfGJsb2NrcXVvdGV8ZmVuY2VzfGxpc3R8aHRtbHx0YWJsZXwgK1xcbilbXlxcbl0rKSopLyx3ZT0vXlteXFxuXSsvLEY9Lyg/IVxccypcXF0pKD86XFxcXFtcXHNcXFNdfFteXFxbXFxdXFxcXF0pKy8seWU9aygvXiB7MCwzfVxcWyhsYWJlbClcXF06ICooPzpcXG5bIFxcdF0qKT8oW148XFxzXVteXFxzXSp8PC4qPz4pKD86KD86ICsoPzpcXG5bIFxcdF0qKT98ICpcXG5bIFxcdF0qKSh0aXRsZSkpPyAqKD86XFxuK3wkKS8pLnJlcGxhY2UoXCJsYWJlbFwiLEYpLnJlcGxhY2UoXCJ0aXRsZVwiLC8oPzpcIig/OlxcXFxcIj98W15cIlxcXFxdKSpcInwnW14nXFxuXSooPzpcXG5bXidcXG5dKykqXFxuPyd8XFwoW14oKV0qXFwpKS8pLmdldFJlZ2V4KCksUGU9aygvXiggezAsM31idWxsKShbIFxcdF1bXlxcbl0rPyk/KD86XFxufCQpLykucmVwbGFjZSgvYnVsbC9nLE4pLmdldFJlZ2V4KCksdj1cImFkZHJlc3N8YXJ0aWNsZXxhc2lkZXxiYXNlfGJhc2Vmb250fGJsb2NrcXVvdGV8Ym9keXxjYXB0aW9ufGNlbnRlcnxjb2x8Y29sZ3JvdXB8ZGR8ZGV0YWlsc3xkaWFsb2d8ZGlyfGRpdnxkbHxkdHxmaWVsZHNldHxmaWdjYXB0aW9ufGZpZ3VyZXxmb290ZXJ8Zm9ybXxmcmFtZXxmcmFtZXNldHxoWzEtNl18aGVhZHxoZWFkZXJ8aHJ8aHRtbHxpZnJhbWV8bGVnZW5kfGxpfGxpbmt8bWFpbnxtZW51fG1lbnVpdGVtfG1ldGF8bmF2fG5vZnJhbWVzfG9sfG9wdGdyb3VwfG9wdGlvbnxwfHBhcmFtfHNlYXJjaHxzZWN0aW9ufHN1bW1hcnl8dGFibGV8dGJvZHl8dGR8dGZvb3R8dGh8dGhlYWR8dGl0bGV8dHJ8dHJhY2t8dWxcIixqPS88IS0tKD86LT8+fFtcXHNcXFNdKj8oPzotLT58JCkpLyxTZT1rKFwiXiB7MCwzfSg/Ojwoc2NyaXB0fHByZXxzdHlsZXx0ZXh0YXJlYSlbXFxcXHM+XVtcXFxcc1xcXFxTXSo/KD86PC9cXFxcMT5bXlxcXFxuXSpcXFxcbit8JCl8Y29tbWVudFteXFxcXG5dKihcXFxcbit8JCl8PFxcXFw/W1xcXFxzXFxcXFNdKj8oPzpcXFxcPz5cXFxcbip8JCl8PCFbQS1aXVtcXFxcc1xcXFxTXSo/KD86PlxcXFxuKnwkKXw8IVxcXFxbQ0RBVEFcXFxcW1tcXFxcc1xcXFxTXSo/KD86XFxcXF1cXFxcXT5cXFxcbip8JCl8PC8/KHRhZykoPzogK3xcXFxcbnwvPz4pW1xcXFxzXFxcXFNdKj8oPzooPzpcXFxcblsgXHRdKikrXFxcXG58JCl8PCg/IXNjcmlwdHxwcmV8c3R5bGV8dGV4dGFyZWEpKFthLXpdW1xcXFx3LV0qKSg/OmF0dHJpYnV0ZSkqPyAqLz8+KD89WyBcXFxcdF0qKD86XFxcXG58JCkpW1xcXFxzXFxcXFNdKj8oPzooPzpcXFxcblsgXHRdKikrXFxcXG58JCl8PC8oPyFzY3JpcHR8cHJlfHN0eWxlfHRleHRhcmVhKVthLXpdW1xcXFx3LV0qXFxcXHMqPig/PVsgXFxcXHRdKig/OlxcXFxufCQpKVtcXFxcc1xcXFxTXSo/KD86KD86XFxcXG5bIFx0XSopK1xcXFxufCQpKVwiLFwiaVwiKS5yZXBsYWNlKFwiY29tbWVudFwiLGopLnJlcGxhY2UoXCJ0YWdcIix2KS5yZXBsYWNlKFwiYXR0cmlidXRlXCIsLyArW2EtekEtWjpfXVtcXHcuOi1dKig/OiAqPSAqXCJbXlwiXFxuXSpcInwgKj0gKidbXidcXG5dKid8ICo9ICpbXlxcc1wiJz08PmBdKyk/LykuZ2V0UmVnZXgoKSxpZT1rKFEpLnJlcGxhY2UoXCJoclwiLEkpLnJlcGxhY2UoXCJoZWFkaW5nXCIsXCIgezAsM30jezEsNn0oPzpcXFxcc3wkKVwiKS5yZXBsYWNlKFwifGxoZWFkaW5nXCIsXCJcIikucmVwbGFjZShcInx0YWJsZVwiLFwiXCIpLnJlcGxhY2UoXCJibG9ja3F1b3RlXCIsXCIgezAsM30+XCIpLnJlcGxhY2UoXCJmZW5jZXNcIixcIiB7MCwzfSg/OmB7Myx9KD89W15gXFxcXG5dKlxcXFxuKXx+ezMsfSlbXlxcXFxuXSpcXFxcblwiKS5yZXBsYWNlKFwibGlzdFwiLFwiIHswLDN9KD86WyorLV18MVsuKV0pIFwiKS5yZXBsYWNlKFwiaHRtbFwiLFwiPC8/KD86dGFnKSg/OiArfFxcXFxufC8/Pil8PCg/OnNjcmlwdHxwcmV8c3R5bGV8dGV4dGFyZWF8IS0tKVwiKS5yZXBsYWNlKFwidGFnXCIsdikuZ2V0UmVnZXgoKSwkZT1rKC9eKCB7MCwzfT4gPyhwYXJhZ3JhcGh8W15cXG5dKikoPzpcXG58JCkpKy8pLnJlcGxhY2UoXCJwYXJhZ3JhcGhcIixpZSkuZ2V0UmVnZXgoKSxVPXtibG9ja3F1b3RlOiRlLGNvZGU6YmUsZGVmOnllLGZlbmNlczpSZSxoZWFkaW5nOlRlLGhyOkksaHRtbDpTZSxsaGVhZGluZzpzZSxsaXN0OlBlLG5ld2xpbmU6eGUscGFyYWdyYXBoOmllLHRhYmxlOkMsdGV4dDp3ZX0sdGU9ayhcIl4gKihbXlxcXFxuIF0uKilcXFxcbiB7MCwzfSgoPzpcXFxcfCAqKT86Py0rOj8gKig/OlxcXFx8ICo6Py0rOj8gKikqKD86XFxcXHwgKik/KSg/OlxcXFxuKCg/Oig/ISAqXFxcXG58aHJ8aGVhZGluZ3xibG9ja3F1b3RlfGNvZGV8ZmVuY2VzfGxpc3R8aHRtbCkuKig/OlxcXFxufCQpKSopXFxcXG4qfCQpXCIpLnJlcGxhY2UoXCJoclwiLEkpLnJlcGxhY2UoXCJoZWFkaW5nXCIsXCIgezAsM30jezEsNn0oPzpcXFxcc3wkKVwiKS5yZXBsYWNlKFwiYmxvY2txdW90ZVwiLFwiIHswLDN9PlwiKS5yZXBsYWNlKFwiY29kZVwiLFwiKD86IHs0fXwgezAsM31cdClbXlxcXFxuXVwiKS5yZXBsYWNlKFwiZmVuY2VzXCIsXCIgezAsM30oPzpgezMsfSg/PVteYFxcXFxuXSpcXFxcbil8fnszLH0pW15cXFxcbl0qXFxcXG5cIikucmVwbGFjZShcImxpc3RcIixcIiB7MCwzfSg/OlsqKy1dfDFbLildKSBcIikucmVwbGFjZShcImh0bWxcIixcIjwvPyg/OnRhZykoPzogK3xcXFxcbnwvPz4pfDwoPzpzY3JpcHR8cHJlfHN0eWxlfHRleHRhcmVhfCEtLSlcIikucmVwbGFjZShcInRhZ1wiLHYpLmdldFJlZ2V4KCksX2U9ey4uLlUsbGhlYWRpbmc6T2UsdGFibGU6dGUscGFyYWdyYXBoOmsoUSkucmVwbGFjZShcImhyXCIsSSkucmVwbGFjZShcImhlYWRpbmdcIixcIiB7MCwzfSN7MSw2fSg/OlxcXFxzfCQpXCIpLnJlcGxhY2UoXCJ8bGhlYWRpbmdcIixcIlwiKS5yZXBsYWNlKFwidGFibGVcIix0ZSkucmVwbGFjZShcImJsb2NrcXVvdGVcIixcIiB7MCwzfT5cIikucmVwbGFjZShcImZlbmNlc1wiLFwiIHswLDN9KD86YHszLH0oPz1bXmBcXFxcbl0qXFxcXG4pfH57Myx9KVteXFxcXG5dKlxcXFxuXCIpLnJlcGxhY2UoXCJsaXN0XCIsXCIgezAsM30oPzpbKistXXwxWy4pXSkgXCIpLnJlcGxhY2UoXCJodG1sXCIsXCI8Lz8oPzp0YWcpKD86ICt8XFxcXG58Lz8+KXw8KD86c2NyaXB0fHByZXxzdHlsZXx0ZXh0YXJlYXwhLS0pXCIpLnJlcGxhY2UoXCJ0YWdcIix2KS5nZXRSZWdleCgpfSxMZT17Li4uVSxodG1sOmsoYF4gKig/OmNvbW1lbnQgKig/OlxcXFxufFxcXFxzKiQpfDwodGFnKVtcXFxcc1xcXFxTXSs/PC9cXFxcMT4gKig/OlxcXFxuezIsfXxcXFxccyokKXw8dGFnKD86XCJbXlwiXSpcInwnW14nXSonfFxcXFxzW14nXCIvPlxcXFxzXSopKj8vPz4gKig/OlxcXFxuezIsfXxcXFxccyokKSlgKS5yZXBsYWNlKFwiY29tbWVudFwiLGopLnJlcGxhY2UoL3RhZy9nLFwiKD8hKD86YXxlbXxzdHJvbmd8c21hbGx8c3xjaXRlfHF8ZGZufGFiYnJ8ZGF0YXx0aW1lfGNvZGV8dmFyfHNhbXB8a2JkfHN1YnxzdXB8aXxifHV8bWFya3xydWJ5fHJ0fHJwfGJkaXxiZG98c3Bhbnxicnx3YnJ8aW5zfGRlbHxpbWcpXFxcXGIpXFxcXHcrKD8hOnxbXlxcXFx3XFxcXHNAXSpAKVxcXFxiXCIpLmdldFJlZ2V4KCksZGVmOi9eICpcXFsoW15cXF1dKylcXF06ICo8PyhbXlxccz5dKyk+Pyg/OiArKFtcIihdW15cXG5dK1tcIildKSk/ICooPzpcXG4rfCQpLyxoZWFkaW5nOi9eKCN7MSw2fSkoLiopKD86XFxuK3wkKS8sZmVuY2VzOkMsbGhlYWRpbmc6L14oLis/KVxcbiB7MCwzfSg9K3wtKykgKig/Olxcbit8JCkvLHBhcmFncmFwaDprKFEpLnJlcGxhY2UoXCJoclwiLEkpLnJlcGxhY2UoXCJoZWFkaW5nXCIsYCAqI3sxLDZ9ICpbXlxuXWApLnJlcGxhY2UoXCJsaGVhZGluZ1wiLHNlKS5yZXBsYWNlKFwifHRhYmxlXCIsXCJcIikucmVwbGFjZShcImJsb2NrcXVvdGVcIixcIiB7MCwzfT5cIikucmVwbGFjZShcInxmZW5jZXNcIixcIlwiKS5yZXBsYWNlKFwifGxpc3RcIixcIlwiKS5yZXBsYWNlKFwifGh0bWxcIixcIlwiKS5yZXBsYWNlKFwifHRhZ1wiLFwiXCIpLmdldFJlZ2V4KCl9LE1lPS9eXFxcXChbIVwiIyQlJicoKSorLFxcLS4vOjs8PT4/QFxcW1xcXVxcXFxeX2B7fH1+XSkvLHplPS9eKGArKShbXmBdfFteYF1bXFxzXFxTXSo/W15gXSlcXDEoPyFgKS8sb2U9L14oIHsyLH18XFxcXClcXG4oPyFcXHMqJCkvLEFlPS9eKGArfFteYF0pKD86KD89IHsyLH1cXG4pfFtcXHNcXFNdKj8oPzooPz1bXFxcXDwhXFxbYCpfXXxcXGJffCQpfFteIF0oPz0gezIsfVxcbikpKS8sRD0vW1xccHtQfVxccHtTfV0vdSxLPS9bXFxzXFxwe1B9XFxwe1N9XS91LGFlPS9bXlxcc1xccHtQfVxccHtTfV0vdSxDZT1rKC9eKCg/IVsqX10pcHVuY3RTcGFjZSkvLFwidVwiKS5yZXBsYWNlKC9wdW5jdFNwYWNlL2csSykuZ2V0UmVnZXgoKSxsZT0vKD8hfilbXFxwe1B9XFxwe1N9XS91LEllPS8oPyF+KVtcXHNcXHB7UH1cXHB7U31dL3UsRWU9Lyg/OlteXFxzXFxwe1B9XFxwe1N9XXx+KS91LEJlPWsoL2xpbmt8cHJlY29kZS1jb2RlfGh0bWwvLFwiZ1wiKS5yZXBsYWNlKFwibGlua1wiLC9cXFsoPzpbXlxcW1xcXWBdfCg/PGE+YCspW15gXStcXGs8YT4oPyFgKSkqP1xcXVxcKCg/OlxcXFxbXFxzXFxTXXxbXlxcXFxcXChcXCldfFxcKCg/OlxcXFxbXFxzXFxTXXxbXlxcXFxcXChcXCldKSpcXCkpKlxcKS8pLnJlcGxhY2UoXCJwcmVjb2RlLVwiLG1lP1wiKD88IWApKClcIjpcIiheXnxbXmBdKVwiKS5yZXBsYWNlKFwiY29kZVwiLC8oPzxiPmArKVteYF0rXFxrPGI+KD8hYCkvKS5yZXBsYWNlKFwiaHRtbFwiLC88KD8hIClbXjw+XSo/Pi8pLmdldFJlZ2V4KCksdWU9L14oPzpcXCorKD86KCg/IVxcKilwdW5jdCl8W15cXHMqXSkpfF5fKyg/OigoPyFfKXB1bmN0KXwoW15cXHNfXSkpLyxxZT1rKHVlLFwidVwiKS5yZXBsYWNlKC9wdW5jdC9nLEQpLmdldFJlZ2V4KCksdmU9ayh1ZSxcInVcIikucmVwbGFjZSgvcHVuY3QvZyxsZSkuZ2V0UmVnZXgoKSxwZT1cIl5bXl8qXSo/X19bXl8qXSo/XFxcXCpbXl8qXSo/KD89X18pfFteKl0rKD89W14qXSl8KD8hXFxcXCopcHVuY3QoXFxcXCorKSg/PVtcXFxcc118JCl8bm90UHVuY3RTcGFjZShcXFxcKispKD8hXFxcXCopKD89cHVuY3RTcGFjZXwkKXwoPyFcXFxcKilwdW5jdFNwYWNlKFxcXFwqKykoPz1ub3RQdW5jdFNwYWNlKXxbXFxcXHNdKFxcXFwqKykoPyFcXFxcKikoPz1wdW5jdCl8KD8hXFxcXCopcHVuY3QoXFxcXCorKSg/IVxcXFwqKSg/PXB1bmN0KXxub3RQdW5jdFNwYWNlKFxcXFwqKykoPz1ub3RQdW5jdFNwYWNlKVwiLERlPWsocGUsXCJndVwiKS5yZXBsYWNlKC9ub3RQdW5jdFNwYWNlL2csYWUpLnJlcGxhY2UoL3B1bmN0U3BhY2UvZyxLKS5yZXBsYWNlKC9wdW5jdC9nLEQpLmdldFJlZ2V4KCksSGU9ayhwZSxcImd1XCIpLnJlcGxhY2UoL25vdFB1bmN0U3BhY2UvZyxFZSkucmVwbGFjZSgvcHVuY3RTcGFjZS9nLEllKS5yZXBsYWNlKC9wdW5jdC9nLGxlKS5nZXRSZWdleCgpLFplPWsoXCJeW15fKl0qP1xcXFwqXFxcXCpbXl8qXSo/X1teXypdKj8oPz1cXFxcKlxcXFwqKXxbXl9dKyg/PVteX10pfCg/IV8pcHVuY3QoXyspKD89W1xcXFxzXXwkKXxub3RQdW5jdFNwYWNlKF8rKSg/IV8pKD89cHVuY3RTcGFjZXwkKXwoPyFfKXB1bmN0U3BhY2UoXyspKD89bm90UHVuY3RTcGFjZSl8W1xcXFxzXShfKykoPyFfKSg/PXB1bmN0KXwoPyFfKXB1bmN0KF8rKSg/IV8pKD89cHVuY3QpXCIsXCJndVwiKS5yZXBsYWNlKC9ub3RQdW5jdFNwYWNlL2csYWUpLnJlcGxhY2UoL3B1bmN0U3BhY2UvZyxLKS5yZXBsYWNlKC9wdW5jdC9nLEQpLmdldFJlZ2V4KCksR2U9aygvXFxcXChwdW5jdCkvLFwiZ3VcIikucmVwbGFjZSgvcHVuY3QvZyxEKS5nZXRSZWdleCgpLE5lPWsoL148KHNjaGVtZTpbXlxcc1xceDAwLVxceDFmPD5dKnxlbWFpbCk+LykucmVwbGFjZShcInNjaGVtZVwiLC9bYS16QS1aXVthLXpBLVowLTkrLi1dezEsMzF9LykucmVwbGFjZShcImVtYWlsXCIsL1thLXpBLVowLTkuISMkJSYnKisvPT9eX2B7fH1+LV0rKEApW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KD86XFwuW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KSsoPyFbLV9dKS8pLmdldFJlZ2V4KCksUWU9ayhqKS5yZXBsYWNlKFwiKD86LS0+fCQpXCIsXCItLT5cIikuZ2V0UmVnZXgoKSxGZT1rKFwiXmNvbW1lbnR8XjwvW2EtekEtWl1bXFxcXHc6LV0qXFxcXHMqPnxePFthLXpBLVpdW1xcXFx3LV0qKD86YXR0cmlidXRlKSo/XFxcXHMqLz8+fF48XFxcXD9bXFxcXHNcXFxcU10qP1xcXFw/PnxePCFbYS16QS1aXStcXFxcc1tcXFxcc1xcXFxTXSo/PnxePCFcXFxcW0NEQVRBXFxcXFtbXFxcXHNcXFxcU10qP1xcXFxdXFxcXF0+XCIpLnJlcGxhY2UoXCJjb21tZW50XCIsUWUpLnJlcGxhY2UoXCJhdHRyaWJ1dGVcIiwvXFxzK1thLXpBLVo6X11bXFx3LjotXSooPzpcXHMqPVxccypcIlteXCJdKlwifFxccyo9XFxzKidbXiddKid8XFxzKj1cXHMqW15cXHNcIic9PD5gXSspPy8pLmdldFJlZ2V4KCkscT0vKD86XFxbKD86XFxcXFtcXHNcXFNdfFteXFxbXFxdXFxcXF0pKlxcXXxcXFxcW1xcc1xcU118YCtbXmBdKj9gKyg/IWApfFteXFxbXFxdXFxcXGBdKSo/LyxqZT1rKC9eIT9cXFsobGFiZWwpXFxdXFwoXFxzKihocmVmKSg/Oig/OlsgXFx0XSooPzpcXG5bIFxcdF0qKT8pKHRpdGxlKSk/XFxzKlxcKS8pLnJlcGxhY2UoXCJsYWJlbFwiLHEpLnJlcGxhY2UoXCJocmVmXCIsLzwoPzpcXFxcLnxbXlxcbjw+XFxcXF0pKz58W14gXFx0XFxuXFx4MDAtXFx4MWZdKi8pLnJlcGxhY2UoXCJ0aXRsZVwiLC9cIig/OlxcXFxcIj98W15cIlxcXFxdKSpcInwnKD86XFxcXCc/fFteJ1xcXFxdKSonfFxcKCg/OlxcXFxcXCk/fFteKVxcXFxdKSpcXCkvKS5nZXRSZWdleCgpLGNlPWsoL14hP1xcWyhsYWJlbClcXF1cXFsocmVmKVxcXS8pLnJlcGxhY2UoXCJsYWJlbFwiLHEpLnJlcGxhY2UoXCJyZWZcIixGKS5nZXRSZWdleCgpLGhlPWsoL14hP1xcWyhyZWYpXFxdKD86XFxbXFxdKT8vKS5yZXBsYWNlKFwicmVmXCIsRikuZ2V0UmVnZXgoKSxVZT1rKFwicmVmbGlua3xub2xpbmsoPyFcXFxcKClcIixcImdcIikucmVwbGFjZShcInJlZmxpbmtcIixjZSkucmVwbGFjZShcIm5vbGlua1wiLGhlKS5nZXRSZWdleCgpLG5lPS9baEhdW3RUXVt0VF1bcFBdW3NTXT98W2ZGXVt0VF1bcFBdLyxXPXtfYmFja3BlZGFsOkMsYW55UHVuY3R1YXRpb246R2UsYXV0b2xpbms6TmUsYmxvY2tTa2lwOkJlLGJyOm9lLGNvZGU6emUsZGVsOkMsZW1TdHJvbmdMRGVsaW06cWUsZW1TdHJvbmdSRGVsaW1Bc3Q6RGUsZW1TdHJvbmdSRGVsaW1VbmQ6WmUsZXNjYXBlOk1lLGxpbms6amUsbm9saW5rOmhlLHB1bmN0dWF0aW9uOkNlLHJlZmxpbms6Y2UscmVmbGlua1NlYXJjaDpVZSx0YWc6RmUsdGV4dDpBZSx1cmw6Q30sS2U9ey4uLlcsbGluazprKC9eIT9cXFsobGFiZWwpXFxdXFwoKC4qPylcXCkvKS5yZXBsYWNlKFwibGFiZWxcIixxKS5nZXRSZWdleCgpLHJlZmxpbms6aygvXiE/XFxbKGxhYmVsKVxcXVxccypcXFsoW15cXF1dKilcXF0vKS5yZXBsYWNlKFwibGFiZWxcIixxKS5nZXRSZWdleCgpfSxHPXsuLi5XLGVtU3Ryb25nUkRlbGltQXN0OkhlLGVtU3Ryb25nTERlbGltOnZlLHVybDprKC9eKCg/OnByb3RvY29sKTpcXC9cXC98d3d3XFwuKSg/OlthLXpBLVowLTlcXC1dK1xcLj8pK1teXFxzPF0qfF5lbWFpbC8pLnJlcGxhY2UoXCJwcm90b2NvbFwiLG5lKS5yZXBsYWNlKFwiZW1haWxcIiwvW0EtWmEtejAtOS5fKy1dKyhAKVthLXpBLVowLTktX10rKD86XFwuW2EtekEtWjAtOS1fXSpbYS16QS1aMC05XSkrKD8hWy1fXSkvKS5nZXRSZWdleCgpLF9iYWNrcGVkYWw6Lyg/OltePyEuLDo7Kl8nXCJ+KCkmXSt8XFwoW14pXSpcXCl8Jig/IVthLXpBLVowLTldKzskKXxbPyEuLDo7Kl8nXCJ+KV0rKD8hJCkpKy8sZGVsOi9eKH5+PykoPz1bXlxcc35dKSgoPzpcXFxcW1xcc1xcU118W15cXFxcXSkqPyg/OlxcXFxbXFxzXFxTXXxbXlxcc35cXFxcXSkpXFwxKD89W15+XXwkKS8sdGV4dDprKC9eKFtgfl0rfFteYH5dKSg/Oig/PSB7Mix9XFxuKXwoPz1bYS16QS1aMC05LiEjJCUmJyorXFwvPT9fYHtcXHx9fi1dK0ApfFtcXHNcXFNdKj8oPzooPz1bXFxcXDwhXFxbYCp+X118XFxiX3xwcm90b2NvbDpcXC9cXC98d3d3XFwufCQpfFteIF0oPz0gezIsfVxcbil8W15hLXpBLVowLTkuISMkJSYnKitcXC89P19ge1xcfH1+LV0oPz1bYS16QS1aMC05LiEjJCUmJyorXFwvPT9fYHtcXHx9fi1dK0ApKSkvKS5yZXBsYWNlKFwicHJvdG9jb2xcIixuZSkuZ2V0UmVnZXgoKX0sV2U9ey4uLkcsYnI6ayhvZSkucmVwbGFjZShcInsyLH1cIixcIipcIikuZ2V0UmVnZXgoKSx0ZXh0OmsoRy50ZXh0KS5yZXBsYWNlKFwiXFxcXGJfXCIsXCJcXFxcYl98IHsyLH1cXFxcblwiKS5yZXBsYWNlKC9cXHsyLFxcfS9nLFwiKlwiKS5nZXRSZWdleCgpfSxFPXtub3JtYWw6VSxnZm06X2UscGVkYW50aWM6TGV9LE09e25vcm1hbDpXLGdmbTpHLGJyZWFrczpXZSxwZWRhbnRpYzpLZX07dmFyIFhlPXtcIiZcIjpcIiZhbXA7XCIsXCI8XCI6XCImbHQ7XCIsXCI+XCI6XCImZ3Q7XCIsJ1wiJzpcIiZxdW90O1wiLFwiJ1wiOlwiJiMzOTtcIn0sa2U9dT0+WGVbdV07ZnVuY3Rpb24gdyh1LGUpe2lmKGUpe2lmKG0uZXNjYXBlVGVzdC50ZXN0KHUpKXJldHVybiB1LnJlcGxhY2UobS5lc2NhcGVSZXBsYWNlLGtlKX1lbHNlIGlmKG0uZXNjYXBlVGVzdE5vRW5jb2RlLnRlc3QodSkpcmV0dXJuIHUucmVwbGFjZShtLmVzY2FwZVJlcGxhY2VOb0VuY29kZSxrZSk7cmV0dXJuIHV9ZnVuY3Rpb24gWCh1KXt0cnl7dT1lbmNvZGVVUkkodSkucmVwbGFjZShtLnBlcmNlbnREZWNvZGUsXCIlXCIpfWNhdGNoe3JldHVybiBudWxsfXJldHVybiB1fWZ1bmN0aW9uIEoodSxlKXtsZXQgdD11LnJlcGxhY2UobS5maW5kUGlwZSwoaSxzLGEpPT57bGV0IG89ITEsbD1zO2Zvcig7LS1sPj0wJiZhW2xdPT09XCJcXFxcXCI7KW89IW87cmV0dXJuIG8/XCJ8XCI6XCIgfFwifSksbj10LnNwbGl0KG0uc3BsaXRQaXBlKSxyPTA7aWYoblswXS50cmltKCl8fG4uc2hpZnQoKSxuLmxlbmd0aD4wJiYhbi5hdCgtMSk/LnRyaW0oKSYmbi5wb3AoKSxlKWlmKG4ubGVuZ3RoPmUpbi5zcGxpY2UoZSk7ZWxzZSBmb3IoO24ubGVuZ3RoPGU7KW4ucHVzaChcIlwiKTtmb3IoO3I8bi5sZW5ndGg7cisrKW5bcl09bltyXS50cmltKCkucmVwbGFjZShtLnNsYXNoUGlwZSxcInxcIik7cmV0dXJuIG59ZnVuY3Rpb24geih1LGUsdCl7bGV0IG49dS5sZW5ndGg7aWYobj09PTApcmV0dXJuXCJcIjtsZXQgcj0wO2Zvcig7cjxuOyl7bGV0IGk9dS5jaGFyQXQobi1yLTEpO2lmKGk9PT1lJiYhdClyKys7ZWxzZSBpZihpIT09ZSYmdClyKys7ZWxzZSBicmVha31yZXR1cm4gdS5zbGljZSgwLG4tcil9ZnVuY3Rpb24gZGUodSxlKXtpZih1LmluZGV4T2YoZVsxXSk9PT0tMSlyZXR1cm4tMTtsZXQgdD0wO2ZvcihsZXQgbj0wO248dS5sZW5ndGg7bisrKWlmKHVbbl09PT1cIlxcXFxcIiluKys7ZWxzZSBpZih1W25dPT09ZVswXSl0Kys7ZWxzZSBpZih1W25dPT09ZVsxXSYmKHQtLSx0PDApKXJldHVybiBuO3JldHVybiB0PjA/LTI6LTF9ZnVuY3Rpb24gZ2UodSxlLHQsbixyKXtsZXQgaT1lLmhyZWYscz1lLnRpdGxlfHxudWxsLGE9dVsxXS5yZXBsYWNlKHIub3RoZXIub3V0cHV0TGlua1JlcGxhY2UsXCIkMVwiKTtuLnN0YXRlLmluTGluaz0hMDtsZXQgbz17dHlwZTp1WzBdLmNoYXJBdCgwKT09PVwiIVwiP1wiaW1hZ2VcIjpcImxpbmtcIixyYXc6dCxocmVmOmksdGl0bGU6cyx0ZXh0OmEsdG9rZW5zOm4uaW5saW5lVG9rZW5zKGEpfTtyZXR1cm4gbi5zdGF0ZS5pbkxpbms9ITEsb31mdW5jdGlvbiBKZSh1LGUsdCl7bGV0IG49dS5tYXRjaCh0Lm90aGVyLmluZGVudENvZGVDb21wZW5zYXRpb24pO2lmKG49PT1udWxsKXJldHVybiBlO2xldCByPW5bMV07cmV0dXJuIGUuc3BsaXQoYFxuYCkubWFwKGk9PntsZXQgcz1pLm1hdGNoKHQub3RoZXIuYmVnaW5uaW5nU3BhY2UpO2lmKHM9PT1udWxsKXJldHVybiBpO2xldFthXT1zO3JldHVybiBhLmxlbmd0aD49ci5sZW5ndGg/aS5zbGljZShyLmxlbmd0aCk6aX0pLmpvaW4oYFxuYCl9dmFyIHk9Y2xhc3N7b3B0aW9ucztydWxlcztsZXhlcjtjb25zdHJ1Y3RvcihlKXt0aGlzLm9wdGlvbnM9ZXx8VH1zcGFjZShlKXtsZXQgdD10aGlzLnJ1bGVzLmJsb2NrLm5ld2xpbmUuZXhlYyhlKTtpZih0JiZ0WzBdLmxlbmd0aD4wKXJldHVybnt0eXBlOlwic3BhY2VcIixyYXc6dFswXX19Y29kZShlKXtsZXQgdD10aGlzLnJ1bGVzLmJsb2NrLmNvZGUuZXhlYyhlKTtpZih0KXtsZXQgbj10WzBdLnJlcGxhY2UodGhpcy5ydWxlcy5vdGhlci5jb2RlUmVtb3ZlSW5kZW50LFwiXCIpO3JldHVybnt0eXBlOlwiY29kZVwiLHJhdzp0WzBdLGNvZGVCbG9ja1N0eWxlOlwiaW5kZW50ZWRcIix0ZXh0OnRoaXMub3B0aW9ucy5wZWRhbnRpYz9uOnoobixgXG5gKX19fWZlbmNlcyhlKXtsZXQgdD10aGlzLnJ1bGVzLmJsb2NrLmZlbmNlcy5leGVjKGUpO2lmKHQpe2xldCBuPXRbMF0scj1KZShuLHRbM118fFwiXCIsdGhpcy5ydWxlcyk7cmV0dXJue3R5cGU6XCJjb2RlXCIscmF3Om4sbGFuZzp0WzJdP3RbMl0udHJpbSgpLnJlcGxhY2UodGhpcy5ydWxlcy5pbmxpbmUuYW55UHVuY3R1YXRpb24sXCIkMVwiKTp0WzJdLHRleHQ6cn19fWhlYWRpbmcoZSl7bGV0IHQ9dGhpcy5ydWxlcy5ibG9jay5oZWFkaW5nLmV4ZWMoZSk7aWYodCl7bGV0IG49dFsyXS50cmltKCk7aWYodGhpcy5ydWxlcy5vdGhlci5lbmRpbmdIYXNoLnRlc3Qobikpe2xldCByPXoobixcIiNcIik7KHRoaXMub3B0aW9ucy5wZWRhbnRpY3x8IXJ8fHRoaXMucnVsZXMub3RoZXIuZW5kaW5nU3BhY2VDaGFyLnRlc3QocikpJiYobj1yLnRyaW0oKSl9cmV0dXJue3R5cGU6XCJoZWFkaW5nXCIscmF3OnRbMF0sZGVwdGg6dFsxXS5sZW5ndGgsdGV4dDpuLHRva2Vuczp0aGlzLmxleGVyLmlubGluZShuKX19fWhyKGUpe2xldCB0PXRoaXMucnVsZXMuYmxvY2suaHIuZXhlYyhlKTtpZih0KXJldHVybnt0eXBlOlwiaHJcIixyYXc6eih0WzBdLGBcbmApfX1ibG9ja3F1b3RlKGUpe2xldCB0PXRoaXMucnVsZXMuYmxvY2suYmxvY2txdW90ZS5leGVjKGUpO2lmKHQpe2xldCBuPXoodFswXSxgXG5gKS5zcGxpdChgXG5gKSxyPVwiXCIsaT1cIlwiLHM9W107Zm9yKDtuLmxlbmd0aD4wOyl7bGV0IGE9ITEsbz1bXSxsO2ZvcihsPTA7bDxuLmxlbmd0aDtsKyspaWYodGhpcy5ydWxlcy5vdGhlci5ibG9ja3F1b3RlU3RhcnQudGVzdChuW2xdKSlvLnB1c2gobltsXSksYT0hMDtlbHNlIGlmKCFhKW8ucHVzaChuW2xdKTtlbHNlIGJyZWFrO249bi5zbGljZShsKTtsZXQgcD1vLmpvaW4oYFxuYCksYz1wLnJlcGxhY2UodGhpcy5ydWxlcy5vdGhlci5ibG9ja3F1b3RlU2V0ZXh0UmVwbGFjZSxgXG4gICAgJDFgKS5yZXBsYWNlKHRoaXMucnVsZXMub3RoZXIuYmxvY2txdW90ZVNldGV4dFJlcGxhY2UyLFwiXCIpO3I9cj9gJHtyfVxuJHtwfWA6cCxpPWk/YCR7aX1cbiR7Y31gOmM7bGV0IGc9dGhpcy5sZXhlci5zdGF0ZS50b3A7aWYodGhpcy5sZXhlci5zdGF0ZS50b3A9ITAsdGhpcy5sZXhlci5ibG9ja1Rva2VucyhjLHMsITApLHRoaXMubGV4ZXIuc3RhdGUudG9wPWcsbi5sZW5ndGg9PT0wKWJyZWFrO2xldCBoPXMuYXQoLTEpO2lmKGg/LnR5cGU9PT1cImNvZGVcIilicmVhaztpZihoPy50eXBlPT09XCJibG9ja3F1b3RlXCIpe2xldCBSPWgsZj1SLnJhdytgXG5gK24uam9pbihgXG5gKSxPPXRoaXMuYmxvY2txdW90ZShmKTtzW3MubGVuZ3RoLTFdPU8scj1yLnN1YnN0cmluZygwLHIubGVuZ3RoLVIucmF3Lmxlbmd0aCkrTy5yYXcsaT1pLnN1YnN0cmluZygwLGkubGVuZ3RoLVIudGV4dC5sZW5ndGgpK08udGV4dDticmVha31lbHNlIGlmKGg/LnR5cGU9PT1cImxpc3RcIil7bGV0IFI9aCxmPVIucmF3K2BcbmArbi5qb2luKGBcbmApLE89dGhpcy5saXN0KGYpO3Nbcy5sZW5ndGgtMV09TyxyPXIuc3Vic3RyaW5nKDAsci5sZW5ndGgtaC5yYXcubGVuZ3RoKStPLnJhdyxpPWkuc3Vic3RyaW5nKDAsaS5sZW5ndGgtUi5yYXcubGVuZ3RoKStPLnJhdyxuPWYuc3Vic3RyaW5nKHMuYXQoLTEpLnJhdy5sZW5ndGgpLnNwbGl0KGBcbmApO2NvbnRpbnVlfX1yZXR1cm57dHlwZTpcImJsb2NrcXVvdGVcIixyYXc6cix0b2tlbnM6cyx0ZXh0Oml9fX1saXN0KGUpe2xldCB0PXRoaXMucnVsZXMuYmxvY2subGlzdC5leGVjKGUpO2lmKHQpe2xldCBuPXRbMV0udHJpbSgpLHI9bi5sZW5ndGg+MSxpPXt0eXBlOlwibGlzdFwiLHJhdzpcIlwiLG9yZGVyZWQ6cixzdGFydDpyPytuLnNsaWNlKDAsLTEpOlwiXCIsbG9vc2U6ITEsaXRlbXM6W119O249cj9gXFxcXGR7MSw5fVxcXFwke24uc2xpY2UoLTEpfWA6YFxcXFwke259YCx0aGlzLm9wdGlvbnMucGVkYW50aWMmJihuPXI/bjpcIlsqKy1dXCIpO2xldCBzPXRoaXMucnVsZXMub3RoZXIubGlzdEl0ZW1SZWdleChuKSxhPSExO2Zvcig7ZTspe2xldCBsPSExLHA9XCJcIixjPVwiXCI7aWYoISh0PXMuZXhlYyhlKSl8fHRoaXMucnVsZXMuYmxvY2suaHIudGVzdChlKSlicmVhaztwPXRbMF0sZT1lLnN1YnN0cmluZyhwLmxlbmd0aCk7bGV0IGc9dFsyXS5zcGxpdChgXG5gLDEpWzBdLnJlcGxhY2UodGhpcy5ydWxlcy5vdGhlci5saXN0UmVwbGFjZVRhYnMsTz0+XCIgXCIucmVwZWF0KDMqTy5sZW5ndGgpKSxoPWUuc3BsaXQoYFxuYCwxKVswXSxSPSFnLnRyaW0oKSxmPTA7aWYodGhpcy5vcHRpb25zLnBlZGFudGljPyhmPTIsYz1nLnRyaW1TdGFydCgpKTpSP2Y9dFsxXS5sZW5ndGgrMTooZj10WzJdLnNlYXJjaCh0aGlzLnJ1bGVzLm90aGVyLm5vblNwYWNlQ2hhciksZj1mPjQ/MTpmLGM9Zy5zbGljZShmKSxmKz10WzFdLmxlbmd0aCksUiYmdGhpcy5ydWxlcy5vdGhlci5ibGFua0xpbmUudGVzdChoKSYmKHArPWgrYFxuYCxlPWUuc3Vic3RyaW5nKGgubGVuZ3RoKzEpLGw9ITApLCFsKXtsZXQgTz10aGlzLnJ1bGVzLm90aGVyLm5leHRCdWxsZXRSZWdleChmKSxWPXRoaXMucnVsZXMub3RoZXIuaHJSZWdleChmKSxZPXRoaXMucnVsZXMub3RoZXIuZmVuY2VzQmVnaW5SZWdleChmKSxlZT10aGlzLnJ1bGVzLm90aGVyLmhlYWRpbmdCZWdpblJlZ2V4KGYpLGZlPXRoaXMucnVsZXMub3RoZXIuaHRtbEJlZ2luUmVnZXgoZik7Zm9yKDtlOyl7bGV0IEg9ZS5zcGxpdChgXG5gLDEpWzBdLEE7aWYoaD1ILHRoaXMub3B0aW9ucy5wZWRhbnRpYz8oaD1oLnJlcGxhY2UodGhpcy5ydWxlcy5vdGhlci5saXN0UmVwbGFjZU5lc3RpbmcsXCIgIFwiKSxBPWgpOkE9aC5yZXBsYWNlKHRoaXMucnVsZXMub3RoZXIudGFiQ2hhckdsb2JhbCxcIiAgICBcIiksWS50ZXN0KGgpfHxlZS50ZXN0KGgpfHxmZS50ZXN0KGgpfHxPLnRlc3QoaCl8fFYudGVzdChoKSlicmVhaztpZihBLnNlYXJjaCh0aGlzLnJ1bGVzLm90aGVyLm5vblNwYWNlQ2hhcik+PWZ8fCFoLnRyaW0oKSljKz1gXG5gK0Euc2xpY2UoZik7ZWxzZXtpZihSfHxnLnJlcGxhY2UodGhpcy5ydWxlcy5vdGhlci50YWJDaGFyR2xvYmFsLFwiICAgIFwiKS5zZWFyY2godGhpcy5ydWxlcy5vdGhlci5ub25TcGFjZUNoYXIpPj00fHxZLnRlc3QoZyl8fGVlLnRlc3QoZyl8fFYudGVzdChnKSlicmVhaztjKz1gXG5gK2h9IVImJiFoLnRyaW0oKSYmKFI9ITApLHArPUgrYFxuYCxlPWUuc3Vic3RyaW5nKEgubGVuZ3RoKzEpLGc9QS5zbGljZShmKX19aS5sb29zZXx8KGE/aS5sb29zZT0hMDp0aGlzLnJ1bGVzLm90aGVyLmRvdWJsZUJsYW5rTGluZS50ZXN0KHApJiYoYT0hMCkpLGkuaXRlbXMucHVzaCh7dHlwZTpcImxpc3RfaXRlbVwiLHJhdzpwLHRhc2s6ISF0aGlzLm9wdGlvbnMuZ2ZtJiZ0aGlzLnJ1bGVzLm90aGVyLmxpc3RJc1Rhc2sudGVzdChjKSxsb29zZTohMSx0ZXh0OmMsdG9rZW5zOltdfSksaS5yYXcrPXB9bGV0IG89aS5pdGVtcy5hdCgtMSk7aWYobylvLnJhdz1vLnJhdy50cmltRW5kKCksby50ZXh0PW8udGV4dC50cmltRW5kKCk7ZWxzZSByZXR1cm47aS5yYXc9aS5yYXcudHJpbUVuZCgpO2ZvcihsZXQgbCBvZiBpLml0ZW1zKXtpZih0aGlzLmxleGVyLnN0YXRlLnRvcD0hMSxsLnRva2Vucz10aGlzLmxleGVyLmJsb2NrVG9rZW5zKGwudGV4dCxbXSksbC50YXNrKXtpZihsLnRleHQ9bC50ZXh0LnJlcGxhY2UodGhpcy5ydWxlcy5vdGhlci5saXN0UmVwbGFjZVRhc2ssXCJcIiksbC50b2tlbnNbMF0/LnR5cGU9PT1cInRleHRcInx8bC50b2tlbnNbMF0/LnR5cGU9PT1cInBhcmFncmFwaFwiKXtsLnRva2Vuc1swXS5yYXc9bC50b2tlbnNbMF0ucmF3LnJlcGxhY2UodGhpcy5ydWxlcy5vdGhlci5saXN0UmVwbGFjZVRhc2ssXCJcIiksbC50b2tlbnNbMF0udGV4dD1sLnRva2Vuc1swXS50ZXh0LnJlcGxhY2UodGhpcy5ydWxlcy5vdGhlci5saXN0UmVwbGFjZVRhc2ssXCJcIik7Zm9yKGxldCBjPXRoaXMubGV4ZXIuaW5saW5lUXVldWUubGVuZ3RoLTE7Yz49MDtjLS0paWYodGhpcy5ydWxlcy5vdGhlci5saXN0SXNUYXNrLnRlc3QodGhpcy5sZXhlci5pbmxpbmVRdWV1ZVtjXS5zcmMpKXt0aGlzLmxleGVyLmlubGluZVF1ZXVlW2NdLnNyYz10aGlzLmxleGVyLmlubGluZVF1ZXVlW2NdLnNyYy5yZXBsYWNlKHRoaXMucnVsZXMub3RoZXIubGlzdFJlcGxhY2VUYXNrLFwiXCIpO2JyZWFrfX1sZXQgcD10aGlzLnJ1bGVzLm90aGVyLmxpc3RUYXNrQ2hlY2tib3guZXhlYyhsLnJhdyk7aWYocCl7bGV0IGM9e3R5cGU6XCJjaGVja2JveFwiLHJhdzpwWzBdK1wiIFwiLGNoZWNrZWQ6cFswXSE9PVwiWyBdXCJ9O2wuY2hlY2tlZD1jLmNoZWNrZWQsaS5sb29zZT9sLnRva2Vuc1swXSYmW1wicGFyYWdyYXBoXCIsXCJ0ZXh0XCJdLmluY2x1ZGVzKGwudG9rZW5zWzBdLnR5cGUpJiZcInRva2Vuc1wiaW4gbC50b2tlbnNbMF0mJmwudG9rZW5zWzBdLnRva2Vucz8obC50b2tlbnNbMF0ucmF3PWMucmF3K2wudG9rZW5zWzBdLnJhdyxsLnRva2Vuc1swXS50ZXh0PWMucmF3K2wudG9rZW5zWzBdLnRleHQsbC50b2tlbnNbMF0udG9rZW5zLnVuc2hpZnQoYykpOmwudG9rZW5zLnVuc2hpZnQoe3R5cGU6XCJwYXJhZ3JhcGhcIixyYXc6Yy5yYXcsdGV4dDpjLnJhdyx0b2tlbnM6W2NdfSk6bC50b2tlbnMudW5zaGlmdChjKX19aWYoIWkubG9vc2Upe2xldCBwPWwudG9rZW5zLmZpbHRlcihnPT5nLnR5cGU9PT1cInNwYWNlXCIpLGM9cC5sZW5ndGg+MCYmcC5zb21lKGc9PnRoaXMucnVsZXMub3RoZXIuYW55TGluZS50ZXN0KGcucmF3KSk7aS5sb29zZT1jfX1pZihpLmxvb3NlKWZvcihsZXQgbCBvZiBpLml0ZW1zKXtsLmxvb3NlPSEwO2ZvcihsZXQgcCBvZiBsLnRva2VucylwLnR5cGU9PT1cInRleHRcIiYmKHAudHlwZT1cInBhcmFncmFwaFwiKX1yZXR1cm4gaX19aHRtbChlKXtsZXQgdD10aGlzLnJ1bGVzLmJsb2NrLmh0bWwuZXhlYyhlKTtpZih0KXJldHVybnt0eXBlOlwiaHRtbFwiLGJsb2NrOiEwLHJhdzp0WzBdLHByZTp0WzFdPT09XCJwcmVcInx8dFsxXT09PVwic2NyaXB0XCJ8fHRbMV09PT1cInN0eWxlXCIsdGV4dDp0WzBdfX1kZWYoZSl7bGV0IHQ9dGhpcy5ydWxlcy5ibG9jay5kZWYuZXhlYyhlKTtpZih0KXtsZXQgbj10WzFdLnRvTG93ZXJDYXNlKCkucmVwbGFjZSh0aGlzLnJ1bGVzLm90aGVyLm11bHRpcGxlU3BhY2VHbG9iYWwsXCIgXCIpLHI9dFsyXT90WzJdLnJlcGxhY2UodGhpcy5ydWxlcy5vdGhlci5ocmVmQnJhY2tldHMsXCIkMVwiKS5yZXBsYWNlKHRoaXMucnVsZXMuaW5saW5lLmFueVB1bmN0dWF0aW9uLFwiJDFcIik6XCJcIixpPXRbM10/dFszXS5zdWJzdHJpbmcoMSx0WzNdLmxlbmd0aC0xKS5yZXBsYWNlKHRoaXMucnVsZXMuaW5saW5lLmFueVB1bmN0dWF0aW9uLFwiJDFcIik6dFszXTtyZXR1cm57dHlwZTpcImRlZlwiLHRhZzpuLHJhdzp0WzBdLGhyZWY6cix0aXRsZTppfX19dGFibGUoZSl7bGV0IHQ9dGhpcy5ydWxlcy5ibG9jay50YWJsZS5leGVjKGUpO2lmKCF0fHwhdGhpcy5ydWxlcy5vdGhlci50YWJsZURlbGltaXRlci50ZXN0KHRbMl0pKXJldHVybjtsZXQgbj1KKHRbMV0pLHI9dFsyXS5yZXBsYWNlKHRoaXMucnVsZXMub3RoZXIudGFibGVBbGlnbkNoYXJzLFwiXCIpLnNwbGl0KFwifFwiKSxpPXRbM10/LnRyaW0oKT90WzNdLnJlcGxhY2UodGhpcy5ydWxlcy5vdGhlci50YWJsZVJvd0JsYW5rTGluZSxcIlwiKS5zcGxpdChgXG5gKTpbXSxzPXt0eXBlOlwidGFibGVcIixyYXc6dFswXSxoZWFkZXI6W10sYWxpZ246W10scm93czpbXX07aWYobi5sZW5ndGg9PT1yLmxlbmd0aCl7Zm9yKGxldCBhIG9mIHIpdGhpcy5ydWxlcy5vdGhlci50YWJsZUFsaWduUmlnaHQudGVzdChhKT9zLmFsaWduLnB1c2goXCJyaWdodFwiKTp0aGlzLnJ1bGVzLm90aGVyLnRhYmxlQWxpZ25DZW50ZXIudGVzdChhKT9zLmFsaWduLnB1c2goXCJjZW50ZXJcIik6dGhpcy5ydWxlcy5vdGhlci50YWJsZUFsaWduTGVmdC50ZXN0KGEpP3MuYWxpZ24ucHVzaChcImxlZnRcIik6cy5hbGlnbi5wdXNoKG51bGwpO2ZvcihsZXQgYT0wO2E8bi5sZW5ndGg7YSsrKXMuaGVhZGVyLnB1c2goe3RleHQ6blthXSx0b2tlbnM6dGhpcy5sZXhlci5pbmxpbmUoblthXSksaGVhZGVyOiEwLGFsaWduOnMuYWxpZ25bYV19KTtmb3IobGV0IGEgb2YgaSlzLnJvd3MucHVzaChKKGEscy5oZWFkZXIubGVuZ3RoKS5tYXAoKG8sbCk9Pih7dGV4dDpvLHRva2Vuczp0aGlzLmxleGVyLmlubGluZShvKSxoZWFkZXI6ITEsYWxpZ246cy5hbGlnbltsXX0pKSk7cmV0dXJuIHN9fWxoZWFkaW5nKGUpe2xldCB0PXRoaXMucnVsZXMuYmxvY2subGhlYWRpbmcuZXhlYyhlKTtpZih0KXJldHVybnt0eXBlOlwiaGVhZGluZ1wiLHJhdzp0WzBdLGRlcHRoOnRbMl0uY2hhckF0KDApPT09XCI9XCI/MToyLHRleHQ6dFsxXSx0b2tlbnM6dGhpcy5sZXhlci5pbmxpbmUodFsxXSl9fXBhcmFncmFwaChlKXtsZXQgdD10aGlzLnJ1bGVzLmJsb2NrLnBhcmFncmFwaC5leGVjKGUpO2lmKHQpe2xldCBuPXRbMV0uY2hhckF0KHRbMV0ubGVuZ3RoLTEpPT09YFxuYD90WzFdLnNsaWNlKDAsLTEpOnRbMV07cmV0dXJue3R5cGU6XCJwYXJhZ3JhcGhcIixyYXc6dFswXSx0ZXh0Om4sdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lKG4pfX19dGV4dChlKXtsZXQgdD10aGlzLnJ1bGVzLmJsb2NrLnRleHQuZXhlYyhlKTtpZih0KXJldHVybnt0eXBlOlwidGV4dFwiLHJhdzp0WzBdLHRleHQ6dFswXSx0b2tlbnM6dGhpcy5sZXhlci5pbmxpbmUodFswXSl9fWVzY2FwZShlKXtsZXQgdD10aGlzLnJ1bGVzLmlubGluZS5lc2NhcGUuZXhlYyhlKTtpZih0KXJldHVybnt0eXBlOlwiZXNjYXBlXCIscmF3OnRbMF0sdGV4dDp0WzFdfX10YWcoZSl7bGV0IHQ9dGhpcy5ydWxlcy5pbmxpbmUudGFnLmV4ZWMoZSk7aWYodClyZXR1cm4hdGhpcy5sZXhlci5zdGF0ZS5pbkxpbmsmJnRoaXMucnVsZXMub3RoZXIuc3RhcnRBVGFnLnRlc3QodFswXSk/dGhpcy5sZXhlci5zdGF0ZS5pbkxpbms9ITA6dGhpcy5sZXhlci5zdGF0ZS5pbkxpbmsmJnRoaXMucnVsZXMub3RoZXIuZW5kQVRhZy50ZXN0KHRbMF0pJiYodGhpcy5sZXhlci5zdGF0ZS5pbkxpbms9ITEpLCF0aGlzLmxleGVyLnN0YXRlLmluUmF3QmxvY2smJnRoaXMucnVsZXMub3RoZXIuc3RhcnRQcmVTY3JpcHRUYWcudGVzdCh0WzBdKT90aGlzLmxleGVyLnN0YXRlLmluUmF3QmxvY2s9ITA6dGhpcy5sZXhlci5zdGF0ZS5pblJhd0Jsb2NrJiZ0aGlzLnJ1bGVzLm90aGVyLmVuZFByZVNjcmlwdFRhZy50ZXN0KHRbMF0pJiYodGhpcy5sZXhlci5zdGF0ZS5pblJhd0Jsb2NrPSExKSx7dHlwZTpcImh0bWxcIixyYXc6dFswXSxpbkxpbms6dGhpcy5sZXhlci5zdGF0ZS5pbkxpbmssaW5SYXdCbG9jazp0aGlzLmxleGVyLnN0YXRlLmluUmF3QmxvY2ssYmxvY2s6ITEsdGV4dDp0WzBdfX1saW5rKGUpe2xldCB0PXRoaXMucnVsZXMuaW5saW5lLmxpbmsuZXhlYyhlKTtpZih0KXtsZXQgbj10WzJdLnRyaW0oKTtpZighdGhpcy5vcHRpb25zLnBlZGFudGljJiZ0aGlzLnJ1bGVzLm90aGVyLnN0YXJ0QW5nbGVCcmFja2V0LnRlc3Qobikpe2lmKCF0aGlzLnJ1bGVzLm90aGVyLmVuZEFuZ2xlQnJhY2tldC50ZXN0KG4pKXJldHVybjtsZXQgcz16KG4uc2xpY2UoMCwtMSksXCJcXFxcXCIpO2lmKChuLmxlbmd0aC1zLmxlbmd0aCklMj09PTApcmV0dXJufWVsc2V7bGV0IHM9ZGUodFsyXSxcIigpXCIpO2lmKHM9PT0tMilyZXR1cm47aWYocz4tMSl7bGV0IG89KHRbMF0uaW5kZXhPZihcIiFcIik9PT0wPzU6NCkrdFsxXS5sZW5ndGgrczt0WzJdPXRbMl0uc3Vic3RyaW5nKDAscyksdFswXT10WzBdLnN1YnN0cmluZygwLG8pLnRyaW0oKSx0WzNdPVwiXCJ9fWxldCByPXRbMl0saT1cIlwiO2lmKHRoaXMub3B0aW9ucy5wZWRhbnRpYyl7bGV0IHM9dGhpcy5ydWxlcy5vdGhlci5wZWRhbnRpY0hyZWZUaXRsZS5leGVjKHIpO3MmJihyPXNbMV0saT1zWzNdKX1lbHNlIGk9dFszXT90WzNdLnNsaWNlKDEsLTEpOlwiXCI7cmV0dXJuIHI9ci50cmltKCksdGhpcy5ydWxlcy5vdGhlci5zdGFydEFuZ2xlQnJhY2tldC50ZXN0KHIpJiYodGhpcy5vcHRpb25zLnBlZGFudGljJiYhdGhpcy5ydWxlcy5vdGhlci5lbmRBbmdsZUJyYWNrZXQudGVzdChuKT9yPXIuc2xpY2UoMSk6cj1yLnNsaWNlKDEsLTEpKSxnZSh0LHtocmVmOnImJnIucmVwbGFjZSh0aGlzLnJ1bGVzLmlubGluZS5hbnlQdW5jdHVhdGlvbixcIiQxXCIpLHRpdGxlOmkmJmkucmVwbGFjZSh0aGlzLnJ1bGVzLmlubGluZS5hbnlQdW5jdHVhdGlvbixcIiQxXCIpfSx0WzBdLHRoaXMubGV4ZXIsdGhpcy5ydWxlcyl9fXJlZmxpbmsoZSx0KXtsZXQgbjtpZigobj10aGlzLnJ1bGVzLmlubGluZS5yZWZsaW5rLmV4ZWMoZSkpfHwobj10aGlzLnJ1bGVzLmlubGluZS5ub2xpbmsuZXhlYyhlKSkpe2xldCByPShuWzJdfHxuWzFdKS5yZXBsYWNlKHRoaXMucnVsZXMub3RoZXIubXVsdGlwbGVTcGFjZUdsb2JhbCxcIiBcIiksaT10W3IudG9Mb3dlckNhc2UoKV07aWYoIWkpe2xldCBzPW5bMF0uY2hhckF0KDApO3JldHVybnt0eXBlOlwidGV4dFwiLHJhdzpzLHRleHQ6c319cmV0dXJuIGdlKG4saSxuWzBdLHRoaXMubGV4ZXIsdGhpcy5ydWxlcyl9fWVtU3Ryb25nKGUsdCxuPVwiXCIpe2xldCByPXRoaXMucnVsZXMuaW5saW5lLmVtU3Ryb25nTERlbGltLmV4ZWMoZSk7aWYoIXJ8fHJbM10mJm4ubWF0Y2godGhpcy5ydWxlcy5vdGhlci51bmljb2RlQWxwaGFOdW1lcmljKSlyZXR1cm47aWYoIShyWzFdfHxyWzJdfHxcIlwiKXx8IW58fHRoaXMucnVsZXMuaW5saW5lLnB1bmN0dWF0aW9uLmV4ZWMobikpe2xldCBzPVsuLi5yWzBdXS5sZW5ndGgtMSxhLG8sbD1zLHA9MCxjPXJbMF1bMF09PT1cIipcIj90aGlzLnJ1bGVzLmlubGluZS5lbVN0cm9uZ1JEZWxpbUFzdDp0aGlzLnJ1bGVzLmlubGluZS5lbVN0cm9uZ1JEZWxpbVVuZDtmb3IoYy5sYXN0SW5kZXg9MCx0PXQuc2xpY2UoLTEqZS5sZW5ndGgrcyk7KHI9Yy5leGVjKHQpKSE9bnVsbDspe2lmKGE9clsxXXx8clsyXXx8clszXXx8cls0XXx8cls1XXx8cls2XSwhYSljb250aW51ZTtpZihvPVsuLi5hXS5sZW5ndGgsclszXXx8cls0XSl7bCs9bztjb250aW51ZX1lbHNlIGlmKChyWzVdfHxyWzZdKSYmcyUzJiYhKChzK28pJTMpKXtwKz1vO2NvbnRpbnVlfWlmKGwtPW8sbD4wKWNvbnRpbnVlO289TWF0aC5taW4obyxvK2wrcCk7bGV0IGc9Wy4uLnJbMF1dWzBdLmxlbmd0aCxoPWUuc2xpY2UoMCxzK3IuaW5kZXgrZytvKTtpZihNYXRoLm1pbihzLG8pJTIpe2xldCBmPWguc2xpY2UoMSwtMSk7cmV0dXJue3R5cGU6XCJlbVwiLHJhdzpoLHRleHQ6Zix0b2tlbnM6dGhpcy5sZXhlci5pbmxpbmVUb2tlbnMoZil9fWxldCBSPWguc2xpY2UoMiwtMik7cmV0dXJue3R5cGU6XCJzdHJvbmdcIixyYXc6aCx0ZXh0OlIsdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lVG9rZW5zKFIpfX19fWNvZGVzcGFuKGUpe2xldCB0PXRoaXMucnVsZXMuaW5saW5lLmNvZGUuZXhlYyhlKTtpZih0KXtsZXQgbj10WzJdLnJlcGxhY2UodGhpcy5ydWxlcy5vdGhlci5uZXdMaW5lQ2hhckdsb2JhbCxcIiBcIikscj10aGlzLnJ1bGVzLm90aGVyLm5vblNwYWNlQ2hhci50ZXN0KG4pLGk9dGhpcy5ydWxlcy5vdGhlci5zdGFydGluZ1NwYWNlQ2hhci50ZXN0KG4pJiZ0aGlzLnJ1bGVzLm90aGVyLmVuZGluZ1NwYWNlQ2hhci50ZXN0KG4pO3JldHVybiByJiZpJiYobj1uLnN1YnN0cmluZygxLG4ubGVuZ3RoLTEpKSx7dHlwZTpcImNvZGVzcGFuXCIscmF3OnRbMF0sdGV4dDpufX19YnIoZSl7bGV0IHQ9dGhpcy5ydWxlcy5pbmxpbmUuYnIuZXhlYyhlKTtpZih0KXJldHVybnt0eXBlOlwiYnJcIixyYXc6dFswXX19ZGVsKGUpe2xldCB0PXRoaXMucnVsZXMuaW5saW5lLmRlbC5leGVjKGUpO2lmKHQpcmV0dXJue3R5cGU6XCJkZWxcIixyYXc6dFswXSx0ZXh0OnRbMl0sdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lVG9rZW5zKHRbMl0pfX1hdXRvbGluayhlKXtsZXQgdD10aGlzLnJ1bGVzLmlubGluZS5hdXRvbGluay5leGVjKGUpO2lmKHQpe2xldCBuLHI7cmV0dXJuIHRbMl09PT1cIkBcIj8obj10WzFdLHI9XCJtYWlsdG86XCIrbik6KG49dFsxXSxyPW4pLHt0eXBlOlwibGlua1wiLHJhdzp0WzBdLHRleHQ6bixocmVmOnIsdG9rZW5zOlt7dHlwZTpcInRleHRcIixyYXc6bix0ZXh0Om59XX19fXVybChlKXtsZXQgdDtpZih0PXRoaXMucnVsZXMuaW5saW5lLnVybC5leGVjKGUpKXtsZXQgbixyO2lmKHRbMl09PT1cIkBcIiluPXRbMF0scj1cIm1haWx0bzpcIituO2Vsc2V7bGV0IGk7ZG8gaT10WzBdLHRbMF09dGhpcy5ydWxlcy5pbmxpbmUuX2JhY2twZWRhbC5leGVjKHRbMF0pPy5bMF0/P1wiXCI7d2hpbGUoaSE9PXRbMF0pO249dFswXSx0WzFdPT09XCJ3d3cuXCI/cj1cImh0dHA6Ly9cIit0WzBdOnI9dFswXX1yZXR1cm57dHlwZTpcImxpbmtcIixyYXc6dFswXSx0ZXh0Om4saHJlZjpyLHRva2Vuczpbe3R5cGU6XCJ0ZXh0XCIscmF3Om4sdGV4dDpufV19fX1pbmxpbmVUZXh0KGUpe2xldCB0PXRoaXMucnVsZXMuaW5saW5lLnRleHQuZXhlYyhlKTtpZih0KXtsZXQgbj10aGlzLmxleGVyLnN0YXRlLmluUmF3QmxvY2s7cmV0dXJue3R5cGU6XCJ0ZXh0XCIscmF3OnRbMF0sdGV4dDp0WzBdLGVzY2FwZWQ6bn19fX07dmFyIHg9Y2xhc3MgdXt0b2tlbnM7b3B0aW9ucztzdGF0ZTtpbmxpbmVRdWV1ZTt0b2tlbml6ZXI7Y29uc3RydWN0b3IoZSl7dGhpcy50b2tlbnM9W10sdGhpcy50b2tlbnMubGlua3M9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLm9wdGlvbnM9ZXx8VCx0aGlzLm9wdGlvbnMudG9rZW5pemVyPXRoaXMub3B0aW9ucy50b2tlbml6ZXJ8fG5ldyB5LHRoaXMudG9rZW5pemVyPXRoaXMub3B0aW9ucy50b2tlbml6ZXIsdGhpcy50b2tlbml6ZXIub3B0aW9ucz10aGlzLm9wdGlvbnMsdGhpcy50b2tlbml6ZXIubGV4ZXI9dGhpcyx0aGlzLmlubGluZVF1ZXVlPVtdLHRoaXMuc3RhdGU9e2luTGluazohMSxpblJhd0Jsb2NrOiExLHRvcDohMH07bGV0IHQ9e290aGVyOm0sYmxvY2s6RS5ub3JtYWwsaW5saW5lOk0ubm9ybWFsfTt0aGlzLm9wdGlvbnMucGVkYW50aWM/KHQuYmxvY2s9RS5wZWRhbnRpYyx0LmlubGluZT1NLnBlZGFudGljKTp0aGlzLm9wdGlvbnMuZ2ZtJiYodC5ibG9jaz1FLmdmbSx0aGlzLm9wdGlvbnMuYnJlYWtzP3QuaW5saW5lPU0uYnJlYWtzOnQuaW5saW5lPU0uZ2ZtKSx0aGlzLnRva2VuaXplci5ydWxlcz10fXN0YXRpYyBnZXQgcnVsZXMoKXtyZXR1cm57YmxvY2s6RSxpbmxpbmU6TX19c3RhdGljIGxleChlLHQpe3JldHVybiBuZXcgdSh0KS5sZXgoZSl9c3RhdGljIGxleElubGluZShlLHQpe3JldHVybiBuZXcgdSh0KS5pbmxpbmVUb2tlbnMoZSl9bGV4KGUpe2U9ZS5yZXBsYWNlKG0uY2FycmlhZ2VSZXR1cm4sYFxuYCksdGhpcy5ibG9ja1Rva2VucyhlLHRoaXMudG9rZW5zKTtmb3IobGV0IHQ9MDt0PHRoaXMuaW5saW5lUXVldWUubGVuZ3RoO3QrKyl7bGV0IG49dGhpcy5pbmxpbmVRdWV1ZVt0XTt0aGlzLmlubGluZVRva2VucyhuLnNyYyxuLnRva2Vucyl9cmV0dXJuIHRoaXMuaW5saW5lUXVldWU9W10sdGhpcy50b2tlbnN9YmxvY2tUb2tlbnMoZSx0PVtdLG49ITEpe2Zvcih0aGlzLm9wdGlvbnMucGVkYW50aWMmJihlPWUucmVwbGFjZShtLnRhYkNoYXJHbG9iYWwsXCIgICAgXCIpLnJlcGxhY2UobS5zcGFjZUxpbmUsXCJcIikpO2U7KXtsZXQgcjtpZih0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucz8uYmxvY2s/LnNvbWUocz0+KHI9cy5jYWxsKHtsZXhlcjp0aGlzfSxlLHQpKT8oZT1lLnN1YnN0cmluZyhyLnJhdy5sZW5ndGgpLHQucHVzaChyKSwhMCk6ITEpKWNvbnRpbnVlO2lmKHI9dGhpcy50b2tlbml6ZXIuc3BhY2UoZSkpe2U9ZS5zdWJzdHJpbmcoci5yYXcubGVuZ3RoKTtsZXQgcz10LmF0KC0xKTtyLnJhdy5sZW5ndGg9PT0xJiZzIT09dm9pZCAwP3MucmF3Kz1gXG5gOnQucHVzaChyKTtjb250aW51ZX1pZihyPXRoaXMudG9rZW5pemVyLmNvZGUoZSkpe2U9ZS5zdWJzdHJpbmcoci5yYXcubGVuZ3RoKTtsZXQgcz10LmF0KC0xKTtzPy50eXBlPT09XCJwYXJhZ3JhcGhcInx8cz8udHlwZT09PVwidGV4dFwiPyhzLnJhdys9KHMucmF3LmVuZHNXaXRoKGBcbmApP1wiXCI6YFxuYCkrci5yYXcscy50ZXh0Kz1gXG5gK3IudGV4dCx0aGlzLmlubGluZVF1ZXVlLmF0KC0xKS5zcmM9cy50ZXh0KTp0LnB1c2gocik7Y29udGludWV9aWYocj10aGlzLnRva2VuaXplci5mZW5jZXMoZSkpe2U9ZS5zdWJzdHJpbmcoci5yYXcubGVuZ3RoKSx0LnB1c2gocik7Y29udGludWV9aWYocj10aGlzLnRva2VuaXplci5oZWFkaW5nKGUpKXtlPWUuc3Vic3RyaW5nKHIucmF3Lmxlbmd0aCksdC5wdXNoKHIpO2NvbnRpbnVlfWlmKHI9dGhpcy50b2tlbml6ZXIuaHIoZSkpe2U9ZS5zdWJzdHJpbmcoci5yYXcubGVuZ3RoKSx0LnB1c2gocik7Y29udGludWV9aWYocj10aGlzLnRva2VuaXplci5ibG9ja3F1b3RlKGUpKXtlPWUuc3Vic3RyaW5nKHIucmF3Lmxlbmd0aCksdC5wdXNoKHIpO2NvbnRpbnVlfWlmKHI9dGhpcy50b2tlbml6ZXIubGlzdChlKSl7ZT1lLnN1YnN0cmluZyhyLnJhdy5sZW5ndGgpLHQucHVzaChyKTtjb250aW51ZX1pZihyPXRoaXMudG9rZW5pemVyLmh0bWwoZSkpe2U9ZS5zdWJzdHJpbmcoci5yYXcubGVuZ3RoKSx0LnB1c2gocik7Y29udGludWV9aWYocj10aGlzLnRva2VuaXplci5kZWYoZSkpe2U9ZS5zdWJzdHJpbmcoci5yYXcubGVuZ3RoKTtsZXQgcz10LmF0KC0xKTtzPy50eXBlPT09XCJwYXJhZ3JhcGhcInx8cz8udHlwZT09PVwidGV4dFwiPyhzLnJhdys9KHMucmF3LmVuZHNXaXRoKGBcbmApP1wiXCI6YFxuYCkrci5yYXcscy50ZXh0Kz1gXG5gK3IucmF3LHRoaXMuaW5saW5lUXVldWUuYXQoLTEpLnNyYz1zLnRleHQpOnRoaXMudG9rZW5zLmxpbmtzW3IudGFnXXx8KHRoaXMudG9rZW5zLmxpbmtzW3IudGFnXT17aHJlZjpyLmhyZWYsdGl0bGU6ci50aXRsZX0sdC5wdXNoKHIpKTtjb250aW51ZX1pZihyPXRoaXMudG9rZW5pemVyLnRhYmxlKGUpKXtlPWUuc3Vic3RyaW5nKHIucmF3Lmxlbmd0aCksdC5wdXNoKHIpO2NvbnRpbnVlfWlmKHI9dGhpcy50b2tlbml6ZXIubGhlYWRpbmcoZSkpe2U9ZS5zdWJzdHJpbmcoci5yYXcubGVuZ3RoKSx0LnB1c2gocik7Y29udGludWV9bGV0IGk9ZTtpZih0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucz8uc3RhcnRCbG9jayl7bGV0IHM9MS8wLGE9ZS5zbGljZSgxKSxvO3RoaXMub3B0aW9ucy5leHRlbnNpb25zLnN0YXJ0QmxvY2suZm9yRWFjaChsPT57bz1sLmNhbGwoe2xleGVyOnRoaXN9LGEpLHR5cGVvZiBvPT1cIm51bWJlclwiJiZvPj0wJiYocz1NYXRoLm1pbihzLG8pKX0pLHM8MS8wJiZzPj0wJiYoaT1lLnN1YnN0cmluZygwLHMrMSkpfWlmKHRoaXMuc3RhdGUudG9wJiYocj10aGlzLnRva2VuaXplci5wYXJhZ3JhcGgoaSkpKXtsZXQgcz10LmF0KC0xKTtuJiZzPy50eXBlPT09XCJwYXJhZ3JhcGhcIj8ocy5yYXcrPShzLnJhdy5lbmRzV2l0aChgXG5gKT9cIlwiOmBcbmApK3IucmF3LHMudGV4dCs9YFxuYCtyLnRleHQsdGhpcy5pbmxpbmVRdWV1ZS5wb3AoKSx0aGlzLmlubGluZVF1ZXVlLmF0KC0xKS5zcmM9cy50ZXh0KTp0LnB1c2gociksbj1pLmxlbmd0aCE9PWUubGVuZ3RoLGU9ZS5zdWJzdHJpbmcoci5yYXcubGVuZ3RoKTtjb250aW51ZX1pZihyPXRoaXMudG9rZW5pemVyLnRleHQoZSkpe2U9ZS5zdWJzdHJpbmcoci5yYXcubGVuZ3RoKTtsZXQgcz10LmF0KC0xKTtzPy50eXBlPT09XCJ0ZXh0XCI/KHMucmF3Kz0ocy5yYXcuZW5kc1dpdGgoYFxuYCk/XCJcIjpgXG5gKStyLnJhdyxzLnRleHQrPWBcbmArci50ZXh0LHRoaXMuaW5saW5lUXVldWUucG9wKCksdGhpcy5pbmxpbmVRdWV1ZS5hdCgtMSkuc3JjPXMudGV4dCk6dC5wdXNoKHIpO2NvbnRpbnVlfWlmKGUpe2xldCBzPVwiSW5maW5pdGUgbG9vcCBvbiBieXRlOiBcIitlLmNoYXJDb2RlQXQoMCk7aWYodGhpcy5vcHRpb25zLnNpbGVudCl7Y29uc29sZS5lcnJvcihzKTticmVha31lbHNlIHRocm93IG5ldyBFcnJvcihzKX19cmV0dXJuIHRoaXMuc3RhdGUudG9wPSEwLHR9aW5saW5lKGUsdD1bXSl7cmV0dXJuIHRoaXMuaW5saW5lUXVldWUucHVzaCh7c3JjOmUsdG9rZW5zOnR9KSx0fWlubGluZVRva2VucyhlLHQ9W10pe2xldCBuPWUscj1udWxsO2lmKHRoaXMudG9rZW5zLmxpbmtzKXtsZXQgbz1PYmplY3Qua2V5cyh0aGlzLnRva2Vucy5saW5rcyk7aWYoby5sZW5ndGg+MClmb3IoOyhyPXRoaXMudG9rZW5pemVyLnJ1bGVzLmlubGluZS5yZWZsaW5rU2VhcmNoLmV4ZWMobikpIT1udWxsOylvLmluY2x1ZGVzKHJbMF0uc2xpY2UoclswXS5sYXN0SW5kZXhPZihcIltcIikrMSwtMSkpJiYobj1uLnNsaWNlKDAsci5pbmRleCkrXCJbXCIrXCJhXCIucmVwZWF0KHJbMF0ubGVuZ3RoLTIpK1wiXVwiK24uc2xpY2UodGhpcy50b2tlbml6ZXIucnVsZXMuaW5saW5lLnJlZmxpbmtTZWFyY2gubGFzdEluZGV4KSl9Zm9yKDsocj10aGlzLnRva2VuaXplci5ydWxlcy5pbmxpbmUuYW55UHVuY3R1YXRpb24uZXhlYyhuKSkhPW51bGw7KW49bi5zbGljZSgwLHIuaW5kZXgpK1wiKytcIituLnNsaWNlKHRoaXMudG9rZW5pemVyLnJ1bGVzLmlubGluZS5hbnlQdW5jdHVhdGlvbi5sYXN0SW5kZXgpO2xldCBpO2Zvcig7KHI9dGhpcy50b2tlbml6ZXIucnVsZXMuaW5saW5lLmJsb2NrU2tpcC5leGVjKG4pKSE9bnVsbDspaT1yWzJdP3JbMl0ubGVuZ3RoOjAsbj1uLnNsaWNlKDAsci5pbmRleCtpKStcIltcIitcImFcIi5yZXBlYXQoclswXS5sZW5ndGgtaS0yKStcIl1cIituLnNsaWNlKHRoaXMudG9rZW5pemVyLnJ1bGVzLmlubGluZS5ibG9ja1NraXAubGFzdEluZGV4KTtuPXRoaXMub3B0aW9ucy5ob29rcz8uZW1TdHJvbmdNYXNrPy5jYWxsKHtsZXhlcjp0aGlzfSxuKT8/bjtsZXQgcz0hMSxhPVwiXCI7Zm9yKDtlOyl7c3x8KGE9XCJcIikscz0hMTtsZXQgbztpZih0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucz8uaW5saW5lPy5zb21lKHA9PihvPXAuY2FsbCh7bGV4ZXI6dGhpc30sZSx0KSk/KGU9ZS5zdWJzdHJpbmcoby5yYXcubGVuZ3RoKSx0LnB1c2gobyksITApOiExKSljb250aW51ZTtpZihvPXRoaXMudG9rZW5pemVyLmVzY2FwZShlKSl7ZT1lLnN1YnN0cmluZyhvLnJhdy5sZW5ndGgpLHQucHVzaChvKTtjb250aW51ZX1pZihvPXRoaXMudG9rZW5pemVyLnRhZyhlKSl7ZT1lLnN1YnN0cmluZyhvLnJhdy5sZW5ndGgpLHQucHVzaChvKTtjb250aW51ZX1pZihvPXRoaXMudG9rZW5pemVyLmxpbmsoZSkpe2U9ZS5zdWJzdHJpbmcoby5yYXcubGVuZ3RoKSx0LnB1c2gobyk7Y29udGludWV9aWYobz10aGlzLnRva2VuaXplci5yZWZsaW5rKGUsdGhpcy50b2tlbnMubGlua3MpKXtlPWUuc3Vic3RyaW5nKG8ucmF3Lmxlbmd0aCk7bGV0IHA9dC5hdCgtMSk7by50eXBlPT09XCJ0ZXh0XCImJnA/LnR5cGU9PT1cInRleHRcIj8ocC5yYXcrPW8ucmF3LHAudGV4dCs9by50ZXh0KTp0LnB1c2gobyk7Y29udGludWV9aWYobz10aGlzLnRva2VuaXplci5lbVN0cm9uZyhlLG4sYSkpe2U9ZS5zdWJzdHJpbmcoby5yYXcubGVuZ3RoKSx0LnB1c2gobyk7Y29udGludWV9aWYobz10aGlzLnRva2VuaXplci5jb2Rlc3BhbihlKSl7ZT1lLnN1YnN0cmluZyhvLnJhdy5sZW5ndGgpLHQucHVzaChvKTtjb250aW51ZX1pZihvPXRoaXMudG9rZW5pemVyLmJyKGUpKXtlPWUuc3Vic3RyaW5nKG8ucmF3Lmxlbmd0aCksdC5wdXNoKG8pO2NvbnRpbnVlfWlmKG89dGhpcy50b2tlbml6ZXIuZGVsKGUpKXtlPWUuc3Vic3RyaW5nKG8ucmF3Lmxlbmd0aCksdC5wdXNoKG8pO2NvbnRpbnVlfWlmKG89dGhpcy50b2tlbml6ZXIuYXV0b2xpbmsoZSkpe2U9ZS5zdWJzdHJpbmcoby5yYXcubGVuZ3RoKSx0LnB1c2gobyk7Y29udGludWV9aWYoIXRoaXMuc3RhdGUuaW5MaW5rJiYobz10aGlzLnRva2VuaXplci51cmwoZSkpKXtlPWUuc3Vic3RyaW5nKG8ucmF3Lmxlbmd0aCksdC5wdXNoKG8pO2NvbnRpbnVlfWxldCBsPWU7aWYodGhpcy5vcHRpb25zLmV4dGVuc2lvbnM/LnN0YXJ0SW5saW5lKXtsZXQgcD0xLzAsYz1lLnNsaWNlKDEpLGc7dGhpcy5vcHRpb25zLmV4dGVuc2lvbnMuc3RhcnRJbmxpbmUuZm9yRWFjaChoPT57Zz1oLmNhbGwoe2xleGVyOnRoaXN9LGMpLHR5cGVvZiBnPT1cIm51bWJlclwiJiZnPj0wJiYocD1NYXRoLm1pbihwLGcpKX0pLHA8MS8wJiZwPj0wJiYobD1lLnN1YnN0cmluZygwLHArMSkpfWlmKG89dGhpcy50b2tlbml6ZXIuaW5saW5lVGV4dChsKSl7ZT1lLnN1YnN0cmluZyhvLnJhdy5sZW5ndGgpLG8ucmF3LnNsaWNlKC0xKSE9PVwiX1wiJiYoYT1vLnJhdy5zbGljZSgtMSkpLHM9ITA7bGV0IHA9dC5hdCgtMSk7cD8udHlwZT09PVwidGV4dFwiPyhwLnJhdys9by5yYXcscC50ZXh0Kz1vLnRleHQpOnQucHVzaChvKTtjb250aW51ZX1pZihlKXtsZXQgcD1cIkluZmluaXRlIGxvb3Agb24gYnl0ZTogXCIrZS5jaGFyQ29kZUF0KDApO2lmKHRoaXMub3B0aW9ucy5zaWxlbnQpe2NvbnNvbGUuZXJyb3IocCk7YnJlYWt9ZWxzZSB0aHJvdyBuZXcgRXJyb3IocCl9fXJldHVybiB0fX07dmFyIFA9Y2xhc3N7b3B0aW9ucztwYXJzZXI7Y29uc3RydWN0b3IoZSl7dGhpcy5vcHRpb25zPWV8fFR9c3BhY2UoZSl7cmV0dXJuXCJcIn1jb2RlKHt0ZXh0OmUsbGFuZzp0LGVzY2FwZWQ6bn0pe2xldCByPSh0fHxcIlwiKS5tYXRjaChtLm5vdFNwYWNlU3RhcnQpPy5bMF0saT1lLnJlcGxhY2UobS5lbmRpbmdOZXdsaW5lLFwiXCIpK2BcbmA7cmV0dXJuIHI/JzxwcmU+PGNvZGUgY2xhc3M9XCJsYW5ndWFnZS0nK3cocikrJ1wiPicrKG4/aTp3KGksITApKStgPC9jb2RlPjwvcHJlPlxuYDpcIjxwcmU+PGNvZGU+XCIrKG4/aTp3KGksITApKStgPC9jb2RlPjwvcHJlPlxuYH1ibG9ja3F1b3RlKHt0b2tlbnM6ZX0pe3JldHVybmA8YmxvY2txdW90ZT5cbiR7dGhpcy5wYXJzZXIucGFyc2UoZSl9PC9ibG9ja3F1b3RlPlxuYH1odG1sKHt0ZXh0OmV9KXtyZXR1cm4gZX1kZWYoZSl7cmV0dXJuXCJcIn1oZWFkaW5nKHt0b2tlbnM6ZSxkZXB0aDp0fSl7cmV0dXJuYDxoJHt0fT4ke3RoaXMucGFyc2VyLnBhcnNlSW5saW5lKGUpfTwvaCR7dH0+XG5gfWhyKGUpe3JldHVybmA8aHI+XG5gfWxpc3QoZSl7bGV0IHQ9ZS5vcmRlcmVkLG49ZS5zdGFydCxyPVwiXCI7Zm9yKGxldCBhPTA7YTxlLml0ZW1zLmxlbmd0aDthKyspe2xldCBvPWUuaXRlbXNbYV07cis9dGhpcy5saXN0aXRlbShvKX1sZXQgaT10P1wib2xcIjpcInVsXCIscz10JiZuIT09MT8nIHN0YXJ0PVwiJytuKydcIic6XCJcIjtyZXR1cm5cIjxcIitpK3MrYD5cbmArcitcIjwvXCIraStgPlxuYH1saXN0aXRlbShlKXtyZXR1cm5gPGxpPiR7dGhpcy5wYXJzZXIucGFyc2UoZS50b2tlbnMpfTwvbGk+XG5gfWNoZWNrYm94KHtjaGVja2VkOmV9KXtyZXR1cm5cIjxpbnB1dCBcIisoZT8nY2hlY2tlZD1cIlwiICc6XCJcIikrJ2Rpc2FibGVkPVwiXCIgdHlwZT1cImNoZWNrYm94XCI+ICd9cGFyYWdyYXBoKHt0b2tlbnM6ZX0pe3JldHVybmA8cD4ke3RoaXMucGFyc2VyLnBhcnNlSW5saW5lKGUpfTwvcD5cbmB9dGFibGUoZSl7bGV0IHQ9XCJcIixuPVwiXCI7Zm9yKGxldCBpPTA7aTxlLmhlYWRlci5sZW5ndGg7aSsrKW4rPXRoaXMudGFibGVjZWxsKGUuaGVhZGVyW2ldKTt0Kz10aGlzLnRhYmxlcm93KHt0ZXh0Om59KTtsZXQgcj1cIlwiO2ZvcihsZXQgaT0wO2k8ZS5yb3dzLmxlbmd0aDtpKyspe2xldCBzPWUucm93c1tpXTtuPVwiXCI7Zm9yKGxldCBhPTA7YTxzLmxlbmd0aDthKyspbis9dGhpcy50YWJsZWNlbGwoc1thXSk7cis9dGhpcy50YWJsZXJvdyh7dGV4dDpufSl9cmV0dXJuIHImJihyPWA8dGJvZHk+JHtyfTwvdGJvZHk+YCksYDx0YWJsZT5cbjx0aGVhZD5cbmArdCtgPC90aGVhZD5cbmArcitgPC90YWJsZT5cbmB9dGFibGVyb3coe3RleHQ6ZX0pe3JldHVybmA8dHI+XG4ke2V9PC90cj5cbmB9dGFibGVjZWxsKGUpe2xldCB0PXRoaXMucGFyc2VyLnBhcnNlSW5saW5lKGUudG9rZW5zKSxuPWUuaGVhZGVyP1widGhcIjpcInRkXCI7cmV0dXJuKGUuYWxpZ24/YDwke259IGFsaWduPVwiJHtlLmFsaWdufVwiPmA6YDwke259PmApK3QrYDwvJHtufT5cbmB9c3Ryb25nKHt0b2tlbnM6ZX0pe3JldHVybmA8c3Ryb25nPiR7dGhpcy5wYXJzZXIucGFyc2VJbmxpbmUoZSl9PC9zdHJvbmc+YH1lbSh7dG9rZW5zOmV9KXtyZXR1cm5gPGVtPiR7dGhpcy5wYXJzZXIucGFyc2VJbmxpbmUoZSl9PC9lbT5gfWNvZGVzcGFuKHt0ZXh0OmV9KXtyZXR1cm5gPGNvZGU+JHt3KGUsITApfTwvY29kZT5gfWJyKGUpe3JldHVyblwiPGJyPlwifWRlbCh7dG9rZW5zOmV9KXtyZXR1cm5gPGRlbD4ke3RoaXMucGFyc2VyLnBhcnNlSW5saW5lKGUpfTwvZGVsPmB9bGluayh7aHJlZjplLHRpdGxlOnQsdG9rZW5zOm59KXtsZXQgcj10aGlzLnBhcnNlci5wYXJzZUlubGluZShuKSxpPVgoZSk7aWYoaT09PW51bGwpcmV0dXJuIHI7ZT1pO2xldCBzPSc8YSBocmVmPVwiJytlKydcIic7cmV0dXJuIHQmJihzKz0nIHRpdGxlPVwiJyt3KHQpKydcIicpLHMrPVwiPlwiK3IrXCI8L2E+XCIsc31pbWFnZSh7aHJlZjplLHRpdGxlOnQsdGV4dDpuLHRva2VuczpyfSl7ciYmKG49dGhpcy5wYXJzZXIucGFyc2VJbmxpbmUocix0aGlzLnBhcnNlci50ZXh0UmVuZGVyZXIpKTtsZXQgaT1YKGUpO2lmKGk9PT1udWxsKXJldHVybiB3KG4pO2U9aTtsZXQgcz1gPGltZyBzcmM9XCIke2V9XCIgYWx0PVwiJHtufVwiYDtyZXR1cm4gdCYmKHMrPWAgdGl0bGU9XCIke3codCl9XCJgKSxzKz1cIj5cIixzfXRleHQoZSl7cmV0dXJuXCJ0b2tlbnNcImluIGUmJmUudG9rZW5zP3RoaXMucGFyc2VyLnBhcnNlSW5saW5lKGUudG9rZW5zKTpcImVzY2FwZWRcImluIGUmJmUuZXNjYXBlZD9lLnRleHQ6dyhlLnRleHQpfX07dmFyICQ9Y2xhc3N7c3Ryb25nKHt0ZXh0OmV9KXtyZXR1cm4gZX1lbSh7dGV4dDplfSl7cmV0dXJuIGV9Y29kZXNwYW4oe3RleHQ6ZX0pe3JldHVybiBlfWRlbCh7dGV4dDplfSl7cmV0dXJuIGV9aHRtbCh7dGV4dDplfSl7cmV0dXJuIGV9dGV4dCh7dGV4dDplfSl7cmV0dXJuIGV9bGluayh7dGV4dDplfSl7cmV0dXJuXCJcIitlfWltYWdlKHt0ZXh0OmV9KXtyZXR1cm5cIlwiK2V9YnIoKXtyZXR1cm5cIlwifWNoZWNrYm94KHtyYXc6ZX0pe3JldHVybiBlfX07dmFyIGI9Y2xhc3MgdXtvcHRpb25zO3JlbmRlcmVyO3RleHRSZW5kZXJlcjtjb25zdHJ1Y3RvcihlKXt0aGlzLm9wdGlvbnM9ZXx8VCx0aGlzLm9wdGlvbnMucmVuZGVyZXI9dGhpcy5vcHRpb25zLnJlbmRlcmVyfHxuZXcgUCx0aGlzLnJlbmRlcmVyPXRoaXMub3B0aW9ucy5yZW5kZXJlcix0aGlzLnJlbmRlcmVyLm9wdGlvbnM9dGhpcy5vcHRpb25zLHRoaXMucmVuZGVyZXIucGFyc2VyPXRoaXMsdGhpcy50ZXh0UmVuZGVyZXI9bmV3ICR9c3RhdGljIHBhcnNlKGUsdCl7cmV0dXJuIG5ldyB1KHQpLnBhcnNlKGUpfXN0YXRpYyBwYXJzZUlubGluZShlLHQpe3JldHVybiBuZXcgdSh0KS5wYXJzZUlubGluZShlKX1wYXJzZShlKXtsZXQgdD1cIlwiO2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bisrKXtsZXQgcj1lW25dO2lmKHRoaXMub3B0aW9ucy5leHRlbnNpb25zPy5yZW5kZXJlcnM/LltyLnR5cGVdKXtsZXQgcz1yLGE9dGhpcy5vcHRpb25zLmV4dGVuc2lvbnMucmVuZGVyZXJzW3MudHlwZV0uY2FsbCh7cGFyc2VyOnRoaXN9LHMpO2lmKGEhPT0hMXx8IVtcInNwYWNlXCIsXCJoclwiLFwiaGVhZGluZ1wiLFwiY29kZVwiLFwidGFibGVcIixcImJsb2NrcXVvdGVcIixcImxpc3RcIixcImh0bWxcIixcImRlZlwiLFwicGFyYWdyYXBoXCIsXCJ0ZXh0XCJdLmluY2x1ZGVzKHMudHlwZSkpe3QrPWF8fFwiXCI7Y29udGludWV9fWxldCBpPXI7c3dpdGNoKGkudHlwZSl7Y2FzZVwic3BhY2VcIjp7dCs9dGhpcy5yZW5kZXJlci5zcGFjZShpKTticmVha31jYXNlXCJoclwiOnt0Kz10aGlzLnJlbmRlcmVyLmhyKGkpO2JyZWFrfWNhc2VcImhlYWRpbmdcIjp7dCs9dGhpcy5yZW5kZXJlci5oZWFkaW5nKGkpO2JyZWFrfWNhc2VcImNvZGVcIjp7dCs9dGhpcy5yZW5kZXJlci5jb2RlKGkpO2JyZWFrfWNhc2VcInRhYmxlXCI6e3QrPXRoaXMucmVuZGVyZXIudGFibGUoaSk7YnJlYWt9Y2FzZVwiYmxvY2txdW90ZVwiOnt0Kz10aGlzLnJlbmRlcmVyLmJsb2NrcXVvdGUoaSk7YnJlYWt9Y2FzZVwibGlzdFwiOnt0Kz10aGlzLnJlbmRlcmVyLmxpc3QoaSk7YnJlYWt9Y2FzZVwiY2hlY2tib3hcIjp7dCs9dGhpcy5yZW5kZXJlci5jaGVja2JveChpKTticmVha31jYXNlXCJodG1sXCI6e3QrPXRoaXMucmVuZGVyZXIuaHRtbChpKTticmVha31jYXNlXCJkZWZcIjp7dCs9dGhpcy5yZW5kZXJlci5kZWYoaSk7YnJlYWt9Y2FzZVwicGFyYWdyYXBoXCI6e3QrPXRoaXMucmVuZGVyZXIucGFyYWdyYXBoKGkpO2JyZWFrfWNhc2VcInRleHRcIjp7dCs9dGhpcy5yZW5kZXJlci50ZXh0KGkpO2JyZWFrfWRlZmF1bHQ6e2xldCBzPSdUb2tlbiB3aXRoIFwiJytpLnR5cGUrJ1wiIHR5cGUgd2FzIG5vdCBmb3VuZC4nO2lmKHRoaXMub3B0aW9ucy5zaWxlbnQpcmV0dXJuIGNvbnNvbGUuZXJyb3IocyksXCJcIjt0aHJvdyBuZXcgRXJyb3Iocyl9fX1yZXR1cm4gdH1wYXJzZUlubGluZShlLHQ9dGhpcy5yZW5kZXJlcil7bGV0IG49XCJcIjtmb3IobGV0IHI9MDtyPGUubGVuZ3RoO3IrKyl7bGV0IGk9ZVtyXTtpZih0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucz8ucmVuZGVyZXJzPy5baS50eXBlXSl7bGV0IGE9dGhpcy5vcHRpb25zLmV4dGVuc2lvbnMucmVuZGVyZXJzW2kudHlwZV0uY2FsbCh7cGFyc2VyOnRoaXN9LGkpO2lmKGEhPT0hMXx8IVtcImVzY2FwZVwiLFwiaHRtbFwiLFwibGlua1wiLFwiaW1hZ2VcIixcInN0cm9uZ1wiLFwiZW1cIixcImNvZGVzcGFuXCIsXCJiclwiLFwiZGVsXCIsXCJ0ZXh0XCJdLmluY2x1ZGVzKGkudHlwZSkpe24rPWF8fFwiXCI7Y29udGludWV9fWxldCBzPWk7c3dpdGNoKHMudHlwZSl7Y2FzZVwiZXNjYXBlXCI6e24rPXQudGV4dChzKTticmVha31jYXNlXCJodG1sXCI6e24rPXQuaHRtbChzKTticmVha31jYXNlXCJsaW5rXCI6e24rPXQubGluayhzKTticmVha31jYXNlXCJpbWFnZVwiOntuKz10LmltYWdlKHMpO2JyZWFrfWNhc2VcImNoZWNrYm94XCI6e24rPXQuY2hlY2tib3gocyk7YnJlYWt9Y2FzZVwic3Ryb25nXCI6e24rPXQuc3Ryb25nKHMpO2JyZWFrfWNhc2VcImVtXCI6e24rPXQuZW0ocyk7YnJlYWt9Y2FzZVwiY29kZXNwYW5cIjp7bis9dC5jb2Rlc3BhbihzKTticmVha31jYXNlXCJiclwiOntuKz10LmJyKHMpO2JyZWFrfWNhc2VcImRlbFwiOntuKz10LmRlbChzKTticmVha31jYXNlXCJ0ZXh0XCI6e24rPXQudGV4dChzKTticmVha31kZWZhdWx0OntsZXQgYT0nVG9rZW4gd2l0aCBcIicrcy50eXBlKydcIiB0eXBlIHdhcyBub3QgZm91bmQuJztpZih0aGlzLm9wdGlvbnMuc2lsZW50KXJldHVybiBjb25zb2xlLmVycm9yKGEpLFwiXCI7dGhyb3cgbmV3IEVycm9yKGEpfX19cmV0dXJuIG59fTt2YXIgUz1jbGFzc3tvcHRpb25zO2Jsb2NrO2NvbnN0cnVjdG9yKGUpe3RoaXMub3B0aW9ucz1lfHxUfXN0YXRpYyBwYXNzVGhyb3VnaEhvb2tzPW5ldyBTZXQoW1wicHJlcHJvY2Vzc1wiLFwicG9zdHByb2Nlc3NcIixcInByb2Nlc3NBbGxUb2tlbnNcIixcImVtU3Ryb25nTWFza1wiXSk7c3RhdGljIHBhc3NUaHJvdWdoSG9va3NSZXNwZWN0QXN5bmM9bmV3IFNldChbXCJwcmVwcm9jZXNzXCIsXCJwb3N0cHJvY2Vzc1wiLFwicHJvY2Vzc0FsbFRva2Vuc1wiXSk7cHJlcHJvY2VzcyhlKXtyZXR1cm4gZX1wb3N0cHJvY2VzcyhlKXtyZXR1cm4gZX1wcm9jZXNzQWxsVG9rZW5zKGUpe3JldHVybiBlfWVtU3Ryb25nTWFzayhlKXtyZXR1cm4gZX1wcm92aWRlTGV4ZXIoKXtyZXR1cm4gdGhpcy5ibG9jaz94LmxleDp4LmxleElubGluZX1wcm92aWRlUGFyc2VyKCl7cmV0dXJuIHRoaXMuYmxvY2s/Yi5wYXJzZTpiLnBhcnNlSW5saW5lfX07dmFyIEI9Y2xhc3N7ZGVmYXVsdHM9TCgpO29wdGlvbnM9dGhpcy5zZXRPcHRpb25zO3BhcnNlPXRoaXMucGFyc2VNYXJrZG93bighMCk7cGFyc2VJbmxpbmU9dGhpcy5wYXJzZU1hcmtkb3duKCExKTtQYXJzZXI9YjtSZW5kZXJlcj1QO1RleHRSZW5kZXJlcj0kO0xleGVyPXg7VG9rZW5pemVyPXk7SG9va3M9Uztjb25zdHJ1Y3RvciguLi5lKXt0aGlzLnVzZSguLi5lKX13YWxrVG9rZW5zKGUsdCl7bGV0IG49W107Zm9yKGxldCByIG9mIGUpc3dpdGNoKG49bi5jb25jYXQodC5jYWxsKHRoaXMscikpLHIudHlwZSl7Y2FzZVwidGFibGVcIjp7bGV0IGk9cjtmb3IobGV0IHMgb2YgaS5oZWFkZXIpbj1uLmNvbmNhdCh0aGlzLndhbGtUb2tlbnMocy50b2tlbnMsdCkpO2ZvcihsZXQgcyBvZiBpLnJvd3MpZm9yKGxldCBhIG9mIHMpbj1uLmNvbmNhdCh0aGlzLndhbGtUb2tlbnMoYS50b2tlbnMsdCkpO2JyZWFrfWNhc2VcImxpc3RcIjp7bGV0IGk9cjtuPW4uY29uY2F0KHRoaXMud2Fsa1Rva2VucyhpLml0ZW1zLHQpKTticmVha31kZWZhdWx0OntsZXQgaT1yO3RoaXMuZGVmYXVsdHMuZXh0ZW5zaW9ucz8uY2hpbGRUb2tlbnM/LltpLnR5cGVdP3RoaXMuZGVmYXVsdHMuZXh0ZW5zaW9ucy5jaGlsZFRva2Vuc1tpLnR5cGVdLmZvckVhY2gocz0+e2xldCBhPWlbc10uZmxhdCgxLzApO249bi5jb25jYXQodGhpcy53YWxrVG9rZW5zKGEsdCkpfSk6aS50b2tlbnMmJihuPW4uY29uY2F0KHRoaXMud2Fsa1Rva2VucyhpLnRva2Vucyx0KSkpfX1yZXR1cm4gbn11c2UoLi4uZSl7bGV0IHQ9dGhpcy5kZWZhdWx0cy5leHRlbnNpb25zfHx7cmVuZGVyZXJzOnt9LGNoaWxkVG9rZW5zOnt9fTtyZXR1cm4gZS5mb3JFYWNoKG49PntsZXQgcj17Li4ubn07aWYoci5hc3luYz10aGlzLmRlZmF1bHRzLmFzeW5jfHxyLmFzeW5jfHwhMSxuLmV4dGVuc2lvbnMmJihuLmV4dGVuc2lvbnMuZm9yRWFjaChpPT57aWYoIWkubmFtZSl0aHJvdyBuZXcgRXJyb3IoXCJleHRlbnNpb24gbmFtZSByZXF1aXJlZFwiKTtpZihcInJlbmRlcmVyXCJpbiBpKXtsZXQgcz10LnJlbmRlcmVyc1tpLm5hbWVdO3M/dC5yZW5kZXJlcnNbaS5uYW1lXT1mdW5jdGlvbiguLi5hKXtsZXQgbz1pLnJlbmRlcmVyLmFwcGx5KHRoaXMsYSk7cmV0dXJuIG89PT0hMSYmKG89cy5hcHBseSh0aGlzLGEpKSxvfTp0LnJlbmRlcmVyc1tpLm5hbWVdPWkucmVuZGVyZXJ9aWYoXCJ0b2tlbml6ZXJcImluIGkpe2lmKCFpLmxldmVsfHxpLmxldmVsIT09XCJibG9ja1wiJiZpLmxldmVsIT09XCJpbmxpbmVcIil0aHJvdyBuZXcgRXJyb3IoXCJleHRlbnNpb24gbGV2ZWwgbXVzdCBiZSAnYmxvY2snIG9yICdpbmxpbmUnXCIpO2xldCBzPXRbaS5sZXZlbF07cz9zLnVuc2hpZnQoaS50b2tlbml6ZXIpOnRbaS5sZXZlbF09W2kudG9rZW5pemVyXSxpLnN0YXJ0JiYoaS5sZXZlbD09PVwiYmxvY2tcIj90LnN0YXJ0QmxvY2s/dC5zdGFydEJsb2NrLnB1c2goaS5zdGFydCk6dC5zdGFydEJsb2NrPVtpLnN0YXJ0XTppLmxldmVsPT09XCJpbmxpbmVcIiYmKHQuc3RhcnRJbmxpbmU/dC5zdGFydElubGluZS5wdXNoKGkuc3RhcnQpOnQuc3RhcnRJbmxpbmU9W2kuc3RhcnRdKSl9XCJjaGlsZFRva2Vuc1wiaW4gaSYmaS5jaGlsZFRva2VucyYmKHQuY2hpbGRUb2tlbnNbaS5uYW1lXT1pLmNoaWxkVG9rZW5zKX0pLHIuZXh0ZW5zaW9ucz10KSxuLnJlbmRlcmVyKXtsZXQgaT10aGlzLmRlZmF1bHRzLnJlbmRlcmVyfHxuZXcgUCh0aGlzLmRlZmF1bHRzKTtmb3IobGV0IHMgaW4gbi5yZW5kZXJlcil7aWYoIShzIGluIGkpKXRocm93IG5ldyBFcnJvcihgcmVuZGVyZXIgJyR7c30nIGRvZXMgbm90IGV4aXN0YCk7aWYoW1wib3B0aW9uc1wiLFwicGFyc2VyXCJdLmluY2x1ZGVzKHMpKWNvbnRpbnVlO2xldCBhPXMsbz1uLnJlbmRlcmVyW2FdLGw9aVthXTtpW2FdPSguLi5wKT0+e2xldCBjPW8uYXBwbHkoaSxwKTtyZXR1cm4gYz09PSExJiYoYz1sLmFwcGx5KGkscCkpLGN8fFwiXCJ9fXIucmVuZGVyZXI9aX1pZihuLnRva2VuaXplcil7bGV0IGk9dGhpcy5kZWZhdWx0cy50b2tlbml6ZXJ8fG5ldyB5KHRoaXMuZGVmYXVsdHMpO2ZvcihsZXQgcyBpbiBuLnRva2VuaXplcil7aWYoIShzIGluIGkpKXRocm93IG5ldyBFcnJvcihgdG9rZW5pemVyICcke3N9JyBkb2VzIG5vdCBleGlzdGApO2lmKFtcIm9wdGlvbnNcIixcInJ1bGVzXCIsXCJsZXhlclwiXS5pbmNsdWRlcyhzKSljb250aW51ZTtsZXQgYT1zLG89bi50b2tlbml6ZXJbYV0sbD1pW2FdO2lbYV09KC4uLnApPT57bGV0IGM9by5hcHBseShpLHApO3JldHVybiBjPT09ITEmJihjPWwuYXBwbHkoaSxwKSksY319ci50b2tlbml6ZXI9aX1pZihuLmhvb2tzKXtsZXQgaT10aGlzLmRlZmF1bHRzLmhvb2tzfHxuZXcgUztmb3IobGV0IHMgaW4gbi5ob29rcyl7aWYoIShzIGluIGkpKXRocm93IG5ldyBFcnJvcihgaG9vayAnJHtzfScgZG9lcyBub3QgZXhpc3RgKTtpZihbXCJvcHRpb25zXCIsXCJibG9ja1wiXS5pbmNsdWRlcyhzKSljb250aW51ZTtsZXQgYT1zLG89bi5ob29rc1thXSxsPWlbYV07Uy5wYXNzVGhyb3VnaEhvb2tzLmhhcyhzKT9pW2FdPXA9PntpZih0aGlzLmRlZmF1bHRzLmFzeW5jJiZTLnBhc3NUaHJvdWdoSG9va3NSZXNwZWN0QXN5bmMuaGFzKHMpKXJldHVybihhc3luYygpPT57bGV0IGc9YXdhaXQgby5jYWxsKGkscCk7cmV0dXJuIGwuY2FsbChpLGcpfSkoKTtsZXQgYz1vLmNhbGwoaSxwKTtyZXR1cm4gbC5jYWxsKGksYyl9OmlbYV09KC4uLnApPT57aWYodGhpcy5kZWZhdWx0cy5hc3luYylyZXR1cm4oYXN5bmMoKT0+e2xldCBnPWF3YWl0IG8uYXBwbHkoaSxwKTtyZXR1cm4gZz09PSExJiYoZz1hd2FpdCBsLmFwcGx5KGkscCkpLGd9KSgpO2xldCBjPW8uYXBwbHkoaSxwKTtyZXR1cm4gYz09PSExJiYoYz1sLmFwcGx5KGkscCkpLGN9fXIuaG9va3M9aX1pZihuLndhbGtUb2tlbnMpe2xldCBpPXRoaXMuZGVmYXVsdHMud2Fsa1Rva2VucyxzPW4ud2Fsa1Rva2VucztyLndhbGtUb2tlbnM9ZnVuY3Rpb24oYSl7bGV0IG89W107cmV0dXJuIG8ucHVzaChzLmNhbGwodGhpcyxhKSksaSYmKG89by5jb25jYXQoaS5jYWxsKHRoaXMsYSkpKSxvfX10aGlzLmRlZmF1bHRzPXsuLi50aGlzLmRlZmF1bHRzLC4uLnJ9fSksdGhpc31zZXRPcHRpb25zKGUpe3JldHVybiB0aGlzLmRlZmF1bHRzPXsuLi50aGlzLmRlZmF1bHRzLC4uLmV9LHRoaXN9bGV4ZXIoZSx0KXtyZXR1cm4geC5sZXgoZSx0Pz90aGlzLmRlZmF1bHRzKX1wYXJzZXIoZSx0KXtyZXR1cm4gYi5wYXJzZShlLHQ/P3RoaXMuZGVmYXVsdHMpfXBhcnNlTWFya2Rvd24oZSl7cmV0dXJuKG4scik9PntsZXQgaT17Li4ucn0scz17Li4udGhpcy5kZWZhdWx0cywuLi5pfSxhPXRoaXMub25FcnJvcighIXMuc2lsZW50LCEhcy5hc3luYyk7aWYodGhpcy5kZWZhdWx0cy5hc3luYz09PSEwJiZpLmFzeW5jPT09ITEpcmV0dXJuIGEobmV3IEVycm9yKFwibWFya2VkKCk6IFRoZSBhc3luYyBvcHRpb24gd2FzIHNldCB0byB0cnVlIGJ5IGFuIGV4dGVuc2lvbi4gUmVtb3ZlIGFzeW5jOiBmYWxzZSBmcm9tIHRoZSBwYXJzZSBvcHRpb25zIG9iamVjdCB0byByZXR1cm4gYSBQcm9taXNlLlwiKSk7aWYodHlwZW9mIG4+XCJ1XCJ8fG49PT1udWxsKXJldHVybiBhKG5ldyBFcnJvcihcIm1hcmtlZCgpOiBpbnB1dCBwYXJhbWV0ZXIgaXMgdW5kZWZpbmVkIG9yIG51bGxcIikpO2lmKHR5cGVvZiBuIT1cInN0cmluZ1wiKXJldHVybiBhKG5ldyBFcnJvcihcIm1hcmtlZCgpOiBpbnB1dCBwYXJhbWV0ZXIgaXMgb2YgdHlwZSBcIitPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobikrXCIsIHN0cmluZyBleHBlY3RlZFwiKSk7aWYocy5ob29rcyYmKHMuaG9va3Mub3B0aW9ucz1zLHMuaG9va3MuYmxvY2s9ZSkscy5hc3luYylyZXR1cm4oYXN5bmMoKT0+e2xldCBvPXMuaG9va3M/YXdhaXQgcy5ob29rcy5wcmVwcm9jZXNzKG4pOm4scD1hd2FpdChzLmhvb2tzP2F3YWl0IHMuaG9va3MucHJvdmlkZUxleGVyKCk6ZT94LmxleDp4LmxleElubGluZSkobyxzKSxjPXMuaG9va3M/YXdhaXQgcy5ob29rcy5wcm9jZXNzQWxsVG9rZW5zKHApOnA7cy53YWxrVG9rZW5zJiZhd2FpdCBQcm9taXNlLmFsbCh0aGlzLndhbGtUb2tlbnMoYyxzLndhbGtUb2tlbnMpKTtsZXQgaD1hd2FpdChzLmhvb2tzP2F3YWl0IHMuaG9va3MucHJvdmlkZVBhcnNlcigpOmU/Yi5wYXJzZTpiLnBhcnNlSW5saW5lKShjLHMpO3JldHVybiBzLmhvb2tzP2F3YWl0IHMuaG9va3MucG9zdHByb2Nlc3MoaCk6aH0pKCkuY2F0Y2goYSk7dHJ5e3MuaG9va3MmJihuPXMuaG9va3MucHJlcHJvY2VzcyhuKSk7bGV0IGw9KHMuaG9va3M/cy5ob29rcy5wcm92aWRlTGV4ZXIoKTplP3gubGV4OngubGV4SW5saW5lKShuLHMpO3MuaG9va3MmJihsPXMuaG9va3MucHJvY2Vzc0FsbFRva2VucyhsKSkscy53YWxrVG9rZW5zJiZ0aGlzLndhbGtUb2tlbnMobCxzLndhbGtUb2tlbnMpO2xldCBjPShzLmhvb2tzP3MuaG9va3MucHJvdmlkZVBhcnNlcigpOmU/Yi5wYXJzZTpiLnBhcnNlSW5saW5lKShsLHMpO3JldHVybiBzLmhvb2tzJiYoYz1zLmhvb2tzLnBvc3Rwcm9jZXNzKGMpKSxjfWNhdGNoKG8pe3JldHVybiBhKG8pfX19b25FcnJvcihlLHQpe3JldHVybiBuPT57aWYobi5tZXNzYWdlKz1gXG5QbGVhc2UgcmVwb3J0IHRoaXMgdG8gaHR0cHM6Ly9naXRodWIuY29tL21hcmtlZGpzL21hcmtlZC5gLGUpe2xldCByPVwiPHA+QW4gZXJyb3Igb2NjdXJyZWQ6PC9wPjxwcmU+XCIrdyhuLm1lc3NhZ2UrXCJcIiwhMCkrXCI8L3ByZT5cIjtyZXR1cm4gdD9Qcm9taXNlLnJlc29sdmUocik6cn1pZih0KXJldHVybiBQcm9taXNlLnJlamVjdChuKTt0aHJvdyBufX19O3ZhciBfPW5ldyBCO2Z1bmN0aW9uIGQodSxlKXtyZXR1cm4gXy5wYXJzZSh1LGUpfWQub3B0aW9ucz1kLnNldE9wdGlvbnM9ZnVuY3Rpb24odSl7cmV0dXJuIF8uc2V0T3B0aW9ucyh1KSxkLmRlZmF1bHRzPV8uZGVmYXVsdHMsWihkLmRlZmF1bHRzKSxkfTtkLmdldERlZmF1bHRzPUw7ZC5kZWZhdWx0cz1UO2QudXNlPWZ1bmN0aW9uKC4uLnUpe3JldHVybiBfLnVzZSguLi51KSxkLmRlZmF1bHRzPV8uZGVmYXVsdHMsWihkLmRlZmF1bHRzKSxkfTtkLndhbGtUb2tlbnM9ZnVuY3Rpb24odSxlKXtyZXR1cm4gXy53YWxrVG9rZW5zKHUsZSl9O2QucGFyc2VJbmxpbmU9Xy5wYXJzZUlubGluZTtkLlBhcnNlcj1iO2QucGFyc2VyPWIucGFyc2U7ZC5SZW5kZXJlcj1QO2QuVGV4dFJlbmRlcmVyPSQ7ZC5MZXhlcj14O2QubGV4ZXI9eC5sZXg7ZC5Ub2tlbml6ZXI9eTtkLkhvb2tzPVM7ZC5wYXJzZT1kO3ZhciBEdD1kLm9wdGlvbnMsSHQ9ZC5zZXRPcHRpb25zLFp0PWQudXNlLEd0PWQud2Fsa1Rva2VucyxOdD1kLnBhcnNlSW5saW5lLFF0PWQsRnQ9Yi5wYXJzZSxqdD14LmxleDtleHBvcnR7UyBhcyBIb29rcyx4IGFzIExleGVyLEIgYXMgTWFya2VkLGIgYXMgUGFyc2VyLFAgYXMgUmVuZGVyZXIsJCBhcyBUZXh0UmVuZGVyZXIseSBhcyBUb2tlbml6ZXIsVCBhcyBkZWZhdWx0cyxMIGFzIGdldERlZmF1bHRzLGp0IGFzIGxleGVyLGQgYXMgbWFya2VkLER0IGFzIG9wdGlvbnMsUXQgYXMgcGFyc2UsTnQgYXMgcGFyc2VJbmxpbmUsRnQgYXMgcGFyc2VyLEh0IGFzIHNldE9wdGlvbnMsWnQgYXMgdXNlLEd0IGFzIHdhbGtUb2tlbnN9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bWFya2VkLmVzbS5qcy5tYXBcbiIsCiAgICAiaW1wb3J0IHsgRGF0YSB9IGZyb20gXCJlZmZlY3RcIlxuXG5leHBvcnQgY2xhc3MgQ2FudmFzQ29udGV4dFVuYXZhaWxhYmxlIGV4dGVuZHMgRGF0YS5UYWdnZWRFcnJvcihcIkNhbnZhc0NvbnRleHRVbmF2YWlsYWJsZVwiKTx7XG4gIHJlYXNvbjogc3RyaW5nXG59PiB7fVxuXG5leHBvcnQgY2xhc3MgV2ViQ29kZWNzVW5hdmFpbGFibGUgZXh0ZW5kcyBEYXRhLlRhZ2dlZEVycm9yKFwiV2ViQ29kZWNzVW5hdmFpbGFibGVcIik8e1xuICByZWFzb246IHN0cmluZ1xufT4ge31cblxuZXhwb3J0IGNsYXNzIE5vRW5jb2RhYmxlVmlkZW9Db2RlYyBleHRlbmRzIERhdGEuVGFnZ2VkRXJyb3IoXCJOb0VuY29kYWJsZVZpZGVvQ29kZWNcIik8e1xuICByZWFzb246IHN0cmluZ1xufT4ge31cblxuZXhwb3J0IGNsYXNzIE1pc3NpbmdDYW52YXNGYWN0b3J5IGV4dGVuZHMgRGF0YS5UYWdnZWRFcnJvcihcIk1pc3NpbmdDYW52YXNGYWN0b3J5XCIpPHtcbiAgcmVhc29uOiBzdHJpbmdcbn0+IHt9XG5cbmV4cG9ydCBjbGFzcyBPdXRwdXRCdWZmZXJNaXNzaW5nIGV4dGVuZHMgRGF0YS5UYWdnZWRFcnJvcihcIk91dHB1dEJ1ZmZlck1pc3NpbmdcIik8e1xuICByZWFzb246IHN0cmluZ1xufT4ge31cblxuZXhwb3J0IGNsYXNzIFVua25vd25UaGVtZSBleHRlbmRzIERhdGEuVGFnZ2VkRXJyb3IoXCJVbmtub3duVGhlbWVcIik8e1xuICB0aGVtZTogc3RyaW5nXG59PiB7fVxuXG5leHBvcnQgY2xhc3MgTWlzc2luZ0NvZGVCbG9ja0xhbmd1YWdlIGV4dGVuZHMgRGF0YS5UYWdnZWRFcnJvcihcIk1pc3NpbmdDb2RlQmxvY2tMYW5ndWFnZVwiKTx7XG4gIHJlYXNvbjogc3RyaW5nXG59PiB7fVxuXG5leHBvcnQgY2xhc3MgVW5zdXBwb3J0ZWRMYW5ndWFnZSBleHRlbmRzIERhdGEuVGFnZ2VkRXJyb3IoXCJVbnN1cHBvcnRlZExhbmd1YWdlXCIpPHtcbiAgbGFuZ3VhZ2U6IHN0cmluZ1xufT4ge31cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBCdW5kbGVkVGhlbWUgfSBmcm9tIFwic2hpa2lcIlxuXG5leHBvcnQgY29uc3QgREVGQVVMVF9USEVNRTogQnVuZGxlZFRoZW1lID0gXCJnaXRodWItZGFya1wiXG5leHBvcnQgY29uc3QgREVGQVVMVF9XSURUSCA9IDEyODBcbmV4cG9ydCBjb25zdCBERUZBVUxUX0hFSUdIVCA9IDcyMFxuZXhwb3J0IGNvbnN0IERFRkFVTFRfRlBTID0gMzBcbmV4cG9ydCBjb25zdCBERUZBVUxUX0JMT0NLX0RVUkFUSU9OID0gMlxuZXhwb3J0IGNvbnN0IERFRkFVTFRfVFJBTlNJVElPTl9EVVJBVElPTl9NUyA9IDgwMFxuZXhwb3J0IGNvbnN0IERFRkFVTFRfVFJBTlNJVElPTl9EUklGVCA9IDhcbmV4cG9ydCBjb25zdCBERUZBVUxUX1BBRERJTkcgPSA2NFxuZXhwb3J0IGNvbnN0IERFRkFVTFRfRk9OVF9TSVpFID0gMjRcbmV4cG9ydCBjb25zdCBERUZBVUxUX0xJTkVfSEVJR0hUID0gMzRcbmV4cG9ydCBjb25zdCBERUZBVUxUX0ZPUkVHUk9VTkQgPSBcIiNlNmU2ZTZcIlxuZXhwb3J0IGNvbnN0IERFRkFVTFRfQkFDS0dST1VORCA9IFwiIzBiMGIwYlwiXG5leHBvcnQgY29uc3QgREVGQVVMVF9GT05UX0ZBTUlMWSA9XG4gIFwiU0ZNb25vLVJlZ3VsYXIsIE1lbmxvLCBNb25hY28sIENvbnNvbGFzLCAnTGliZXJhdGlvbiBNb25vJywgJ0NvdXJpZXIgTmV3JywgbW9ub3NwYWNlXCJcblxuZXhwb3J0IGNvbnN0IFRBQl9SRVBMQUNFTUVOVCA9IFwiICBcIlxuXG5leHBvcnQgY29uc3QgRk9OVF9TVFlMRV9OT05FID0gMFxuZXhwb3J0IGNvbnN0IEZPTlRfU1RZTEVfSVRBTElDID0gMVxuZXhwb3J0IGNvbnN0IEZPTlRfU1RZTEVfQk9MRCA9IDJcbmV4cG9ydCBjb25zdCBGT05UX1NUWUxFX1VOREVSTElORSA9IDRcbiIsCiAgICAiZXhwb3J0IHR5cGUgUmdiYUNvbG9yID0ge1xuICBhbHBoYTogbnVtYmVyXG4gIGJsdWU6IG51bWJlclxuICBncmVlbjogbnVtYmVyXG4gIHJlZDogbnVtYmVyXG59XG5cbmV4cG9ydCBjb25zdCBleHBhbmRTaG9ydEhleCA9IChoZXg6IHN0cmluZykgPT4ge1xuICBpZiAoaGV4Lmxlbmd0aCA9PT0gMykge1xuICAgIGNvbnN0IHIgPSBoZXguY2hhckF0KDApXG4gICAgY29uc3QgZyA9IGhleC5jaGFyQXQoMSlcbiAgICBjb25zdCBiID0gaGV4LmNoYXJBdCgyKVxuICAgIHJldHVybiByICsgciArIGcgKyBnICsgYiArIGJcbiAgfVxuICBpZiAoaGV4Lmxlbmd0aCA9PT0gNCkge1xuICAgIGNvbnN0IHIgPSBoZXguY2hhckF0KDApXG4gICAgY29uc3QgZyA9IGhleC5jaGFyQXQoMSlcbiAgICBjb25zdCBiID0gaGV4LmNoYXJBdCgyKVxuICAgIGNvbnN0IGEgPSBoZXguY2hhckF0KDMpXG4gICAgcmV0dXJuIHIgKyByICsgZyArIGcgKyBiICsgYiArIGEgKyBhXG4gIH1cbiAgcmV0dXJuIGhleFxufVxuXG5leHBvcnQgY29uc3QgcGFyc2VIZXhDb2xvciA9IChjb2xvcjogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSBleHBhbmRTaG9ydEhleChjb2xvci5yZXBsYWNlKFwiI1wiLCBcIlwiKS50cmltKCkpXG4gIGlmIChub3JtYWxpemVkLmxlbmd0aCAhPT0gNiAmJiBub3JtYWxpemVkLmxlbmd0aCAhPT0gOCkge1xuICAgIHJldHVybiB7XG4gICAgICBhbHBoYTogMSxcbiAgICAgIGJsdWU6IDExLFxuICAgICAgZ3JlZW46IDExLFxuICAgICAgcmVkOiAxMSxcbiAgICB9XG4gIH1cblxuICBjb25zdCByZWQgPSBOdW1iZXIucGFyc2VJbnQobm9ybWFsaXplZC5zbGljZSgwLCAyKSwgMTYpXG4gIGNvbnN0IGdyZWVuID0gTnVtYmVyLnBhcnNlSW50KG5vcm1hbGl6ZWQuc2xpY2UoMiwgNCksIDE2KVxuICBjb25zdCBibHVlID0gTnVtYmVyLnBhcnNlSW50KG5vcm1hbGl6ZWQuc2xpY2UoNCwgNiksIDE2KVxuICBjb25zdCBhbHBoYSA9IG5vcm1hbGl6ZWQubGVuZ3RoID09PSA4ID8gTnVtYmVyLnBhcnNlSW50KG5vcm1hbGl6ZWQuc2xpY2UoNiwgOCksIDE2KSAvIDI1NSA6IDFcblxuICByZXR1cm4ge1xuICAgIGFscGhhLFxuICAgIGJsdWUsXG4gICAgZ3JlZW4sXG4gICAgcmVkLFxuICB9XG59XG5cbmV4cG9ydCBjb25zdCBsZXJwID0gKHN0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyLCBwcm9ncmVzczogbnVtYmVyKSA9PlxuICBzdGFydCArIChlbmQgLSBzdGFydCkgKiBwcm9ncmVzc1xuXG5leHBvcnQgY29uc3QgYmxlbmRDb2xvcnMgPSAoZnJvbTogc3RyaW5nLCB0bzogc3RyaW5nLCBwcm9ncmVzczogbnVtYmVyKSA9PiB7XG4gIGNvbnN0IGZyb21Db2xvciA9IHBhcnNlSGV4Q29sb3IoZnJvbSlcbiAgY29uc3QgdG9Db2xvciA9IHBhcnNlSGV4Q29sb3IodG8pXG5cbiAgY29uc3QgYmxlbmRlZCA9IHtcbiAgICBhbHBoYTogbGVycChmcm9tQ29sb3IuYWxwaGEsIHRvQ29sb3IuYWxwaGEsIHByb2dyZXNzKSxcbiAgICBibHVlOiBsZXJwKGZyb21Db2xvci5ibHVlLCB0b0NvbG9yLmJsdWUsIHByb2dyZXNzKSxcbiAgICBncmVlbjogbGVycChmcm9tQ29sb3IuZ3JlZW4sIHRvQ29sb3IuZ3JlZW4sIHByb2dyZXNzKSxcbiAgICByZWQ6IGxlcnAoZnJvbUNvbG9yLnJlZCwgdG9Db2xvci5yZWQsIHByb2dyZXNzKSxcbiAgfVxuXG4gIHJldHVybiBgcmdiYSgke01hdGgucm91bmQoYmxlbmRlZC5yZWQpfSwgJHtNYXRoLnJvdW5kKGJsZW5kZWQuZ3JlZW4pfSwgJHtNYXRoLnJvdW5kKFxuICAgIGJsZW5kZWQuYmx1ZVxuICApfSwgJHtibGVuZGVkLmFscGhhLnRvRml4ZWQoMyl9KWBcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBDYW52YXNDb250ZXh0IH0gZnJvbSBcIi4vY29udGV4dFwiXG5pbXBvcnQgdHlwZSB7IERyYXdUb2tlbiwgTGF5b3V0VG9rZW4sIFNjZW5lLCBUcmFuc2l0aW9uRGlmZiB9IGZyb20gXCIuL3R5cGVzXCJcbmltcG9ydCB7IGJsZW5kQ29sb3JzLCBsZXJwIH0gZnJvbSBcIi4vY29sb3JcIlxuaW1wb3J0IHtcbiAgREVGQVVMVF9GT05UX0ZBTUlMWSxcbiAgREVGQVVMVF9GT05UX1NJWkUsXG4gIERFRkFVTFRfVFJBTlNJVElPTl9EUklGVCxcbiAgRk9OVF9TVFlMRV9CT0xELFxuICBGT05UX1NUWUxFX0lUQUxJQyxcbiAgRk9OVF9TVFlMRV9VTkRFUkxJTkUsXG59IGZyb20gXCIuL2NvbnN0YW50c1wiXG5cbmNvbnN0IGJ1aWxkVG9rZW5LZXkgPSAodG9rZW46IExheW91dFRva2VuKSA9PiBgJHt0b2tlbi5jb250ZW50fTo6JHt0b2tlbi5mb250U3R5bGV9YFxuXG5jb25zdCBidWlsZFRva2VuU2VxdWVuY2UgPSAodG9rZW5zOiBMYXlvdXRUb2tlbltdKSA9PlxuICB0b2tlbnMubWFwKCh0b2tlbikgPT4gKHtcbiAgICBrZXk6IGJ1aWxkVG9rZW5LZXkodG9rZW4pLFxuICAgIHRva2VuLFxuICB9KSlcblxuZXhwb3J0IGNvbnN0IGZsYXR0ZW5TY2VuZVRva2VucyA9IChzY2VuZTogU2NlbmUpID0+XG4gIHNjZW5lLmxheW91dC5saW5lcy5mbGF0TWFwKChsaW5lKSA9PiBsaW5lLnRva2VucylcblxuZXhwb3J0IGNvbnN0IGRpZmZMYXlvdXRUb2tlbnMgPSAoZnJvbVRva2VuczogTGF5b3V0VG9rZW5bXSwgdG9Ub2tlbnM6IExheW91dFRva2VuW10pID0+IHtcbiAgY29uc3QgZnJvbUl0ZW1zID0gYnVpbGRUb2tlblNlcXVlbmNlKGZyb21Ub2tlbnMpXG4gIGNvbnN0IHRvSXRlbXMgPSBidWlsZFRva2VuU2VxdWVuY2UodG9Ub2tlbnMpXG4gIGNvbnN0IGZyb21LZXlzID0gZnJvbUl0ZW1zLm1hcCgoaXRlbSkgPT4gaXRlbS5rZXkpXG4gIGNvbnN0IHRvS2V5cyA9IHRvSXRlbXMubWFwKChpdGVtKSA9PiBpdGVtLmtleSlcbiAgY29uc3QgbWF0cml4ID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogZnJvbUtleXMubGVuZ3RoICsgMSB9LCAoKSA9PlxuICAgIEFycmF5LmZyb20oeyBsZW5ndGg6IHRvS2V5cy5sZW5ndGggKyAxIH0sICgpID0+IDApXG4gIClcblxuICBmb3IgKGxldCBpID0gZnJvbUtleXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpIC09IDEpIHtcbiAgICBjb25zdCByb3cgPSBtYXRyaXhbaV1cbiAgICBpZiAoIXJvdykge1xuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICBmb3IgKGxldCBqID0gdG9LZXlzLmxlbmd0aCAtIDE7IGogPj0gMDsgaiAtPSAxKSB7XG4gICAgICBjb25zdCBmcm9tS2V5ID0gZnJvbUtleXNbaV0gPz8gXCJcIlxuICAgICAgY29uc3QgdG9LZXkgPSB0b0tleXNbal0gPz8gXCJcIlxuXG4gICAgICBpZiAoZnJvbUtleSA9PT0gdG9LZXkpIHtcbiAgICAgICAgcm93W2pdID0gKG1hdHJpeFtpICsgMV0/LltqICsgMV0gPz8gMCkgKyAxXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBuZXh0Um93ID0gbWF0cml4W2kgKyAxXVxuICAgICAgICBjb25zdCBjdXJyZW50Um93ID0gbWF0cml4W2ldXG4gICAgICAgIHJvd1tqXSA9IE1hdGgubWF4KG5leHRSb3c/LltqXSA/PyAwLCBjdXJyZW50Um93Py5baiArIDFdID8/IDApXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgbWF0Y2hlczogQXJyYXk8W251bWJlciwgbnVtYmVyXT4gPSBbXVxuICBsZXQgaSA9IDBcbiAgbGV0IGogPSAwXG5cbiAgd2hpbGUgKGkgPCBmcm9tS2V5cy5sZW5ndGggJiYgaiA8IHRvS2V5cy5sZW5ndGgpIHtcbiAgICBjb25zdCBmcm9tS2V5ID0gZnJvbUtleXNbaV0gPz8gXCJcIlxuICAgIGNvbnN0IHRvS2V5ID0gdG9LZXlzW2pdID8/IFwiXCJcblxuICAgIGlmIChmcm9tS2V5ID09PSB0b0tleSkge1xuICAgICAgbWF0Y2hlcy5wdXNoKFtpLCBqXSlcbiAgICAgIGkgKz0gMVxuICAgICAgaiArPSAxXG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIGNvbnN0IHNraXBGcm9tID0gbWF0cml4W2kgKyAxXT8uW2pdID8/IDBcbiAgICBjb25zdCBza2lwVG8gPSBtYXRyaXhbaV0/LltqICsgMV0gPz8gMFxuXG4gICAgaWYgKHNraXBGcm9tID49IHNraXBUbykge1xuICAgICAgaSArPSAxXG4gICAgfSBlbHNlIHtcbiAgICAgIGogKz0gMVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IG1hdGNoZWRGcm9tID0gbmV3IFNldChtYXRjaGVzLm1hcCgoW2luZGV4XSkgPT4gaW5kZXgpKVxuICBjb25zdCBtYXRjaGVkVG8gPSBuZXcgU2V0KG1hdGNoZXMubWFwKChbLCBpbmRleF0pID0+IGluZGV4KSlcblxuICBjb25zdCBtYXRjaGVkID0gbWF0Y2hlcy5mbGF0TWFwKChbZnJvbUluZGV4LCB0b0luZGV4XSkgPT4ge1xuICAgIGNvbnN0IGZyb21JdGVtID0gZnJvbUl0ZW1zW2Zyb21JbmRleF1cbiAgICBjb25zdCB0b0l0ZW0gPSB0b0l0ZW1zW3RvSW5kZXhdXG5cbiAgICBpZiAoIWZyb21JdGVtIHx8ICF0b0l0ZW0pIHtcbiAgICAgIHJldHVybiBbXVxuICAgIH1cblxuICAgIHJldHVybiBbeyBmcm9tOiBmcm9tSXRlbS50b2tlbiwgdG86IHRvSXRlbS50b2tlbiB9XVxuICB9KVxuXG4gIHJldHVybiB7XG4gICAgYWRkZWQ6IHRvSXRlbXMuZmlsdGVyKChfLCBpbmRleCkgPT4gIW1hdGNoZWRUby5oYXMoaW5kZXgpKS5tYXAoKGl0ZW0pID0+IGl0ZW0udG9rZW4pLFxuICAgIG1hdGNoZWQsXG4gICAgcmVtb3ZlZDogZnJvbUl0ZW1zLmZpbHRlcigoXywgaW5kZXgpID0+ICFtYXRjaGVkRnJvbS5oYXMoaW5kZXgpKS5tYXAoKGl0ZW0pID0+IGl0ZW0udG9rZW4pLFxuICB9XG59XG5cbmV4cG9ydCBjb25zdCBidWlsZFRyYW5zaXRpb25EaWZmID0gKGZyb21TY2VuZTogU2NlbmUsIHRvU2NlbmU6IFNjZW5lKSA9PlxuICBkaWZmTGF5b3V0VG9rZW5zKGZsYXR0ZW5TY2VuZVRva2Vucyhmcm9tU2NlbmUpLCBmbGF0dGVuU2NlbmVUb2tlbnModG9TY2VuZSkpXG5cbmV4cG9ydCBjb25zdCBlYXNlSW5PdXRDdWJpYyA9IChwcm9ncmVzczogbnVtYmVyKSA9PiB7XG4gIGNvbnN0IGNsYW1wZWQgPSBNYXRoLm1pbigxLCBNYXRoLm1heCgwLCBwcm9ncmVzcykpXG4gIHJldHVybiBjbGFtcGVkIDwgMC41ID8gNCAqIGNsYW1wZWQgKiBjbGFtcGVkICogY2xhbXBlZCA6IDEgLSAoLTIgKiBjbGFtcGVkICsgMikgKiogMyAvIDJcbn1cblxuZXhwb3J0IGNvbnN0IGJ1aWxkVHJhbnNpdGlvblRva2VucyA9IChkaWZmOiBUcmFuc2l0aW9uRGlmZiwgcHJvZ3Jlc3M6IG51bWJlcikgPT4ge1xuICBjb25zdCBjbGFtcGVkID0gTWF0aC5taW4oMSwgTWF0aC5tYXgoMCwgcHJvZ3Jlc3MpKVxuICBjb25zdCB0b2tlbnM6IERyYXdUb2tlbltdID0gW11cblxuICBmb3IgKGNvbnN0IHRva2VuIG9mIGRpZmYucmVtb3ZlZCkge1xuICAgIGNvbnN0IG9wYWNpdHkgPSAxIC0gY2xhbXBlZFxuICAgIGlmIChvcGFjaXR5IDw9IDApIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgdG9rZW5zLnB1c2goe1xuICAgICAgY29sb3I6IHRva2VuLmNvbG9yLFxuICAgICAgY29udGVudDogdG9rZW4uY29udGVudCxcbiAgICAgIGZvbnRTdHlsZTogdG9rZW4uZm9udFN0eWxlLFxuICAgICAgb3BhY2l0eSxcbiAgICAgIHdpZHRoOiB0b2tlbi53aWR0aCxcbiAgICAgIHg6IHRva2VuLngsXG4gICAgICB5OiB0b2tlbi55IC0gREVGQVVMVF9UUkFOU0lUSU9OX0RSSUZUICogY2xhbXBlZCxcbiAgICB9KVxuICB9XG5cbiAgZm9yIChjb25zdCBtYXRjaCBvZiBkaWZmLm1hdGNoZWQpIHtcbiAgICB0b2tlbnMucHVzaCh7XG4gICAgICBjb2xvcjogYmxlbmRDb2xvcnMobWF0Y2guZnJvbS5jb2xvciwgbWF0Y2gudG8uY29sb3IsIGNsYW1wZWQpLFxuICAgICAgY29udGVudDogbWF0Y2gudG8uY29udGVudCxcbiAgICAgIGZvbnRTdHlsZTogbWF0Y2gudG8uZm9udFN0eWxlLFxuICAgICAgb3BhY2l0eTogMSxcbiAgICAgIHdpZHRoOiBsZXJwKG1hdGNoLmZyb20ud2lkdGgsIG1hdGNoLnRvLndpZHRoLCBjbGFtcGVkKSxcbiAgICAgIHg6IGxlcnAobWF0Y2guZnJvbS54LCBtYXRjaC50by54LCBjbGFtcGVkKSxcbiAgICAgIHk6IGxlcnAobWF0Y2guZnJvbS55LCBtYXRjaC50by55LCBjbGFtcGVkKSxcbiAgICB9KVxuICB9XG5cbiAgZm9yIChjb25zdCB0b2tlbiBvZiBkaWZmLmFkZGVkKSB7XG4gICAgY29uc3Qgb3BhY2l0eSA9IGNsYW1wZWRcbiAgICBpZiAob3BhY2l0eSA8PSAwKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIHRva2Vucy5wdXNoKHtcbiAgICAgIGNvbG9yOiB0b2tlbi5jb2xvcixcbiAgICAgIGNvbnRlbnQ6IHRva2VuLmNvbnRlbnQsXG4gICAgICBmb250U3R5bGU6IHRva2VuLmZvbnRTdHlsZSxcbiAgICAgIG9wYWNpdHksXG4gICAgICB3aWR0aDogdG9rZW4ud2lkdGgsXG4gICAgICB4OiB0b2tlbi54LFxuICAgICAgeTogdG9rZW4ueSArIERFRkFVTFRfVFJBTlNJVElPTl9EUklGVCAqICgxIC0gY2xhbXBlZCksXG4gICAgfSlcbiAgfVxuXG4gIHJldHVybiB0b2tlbnNcbn1cblxuZXhwb3J0IGNvbnN0IHJlbmRlclRyYW5zaXRpb25Ub2tlbnMgPSAoY29udGV4dDogQ2FudmFzQ29udGV4dCwgdG9rZW5zOiBEcmF3VG9rZW5bXSkgPT4ge1xuICBjb25zdCB0ZXh0Q29udGV4dCA9IGNvbnRleHRcbiAgY29uc3QgcHJldmlvdXNBbHBoYSA9IHRleHRDb250ZXh0Lmdsb2JhbEFscGhhXG4gIGNvbnN0IHByZXZpb3VzQmFzZWxpbmUgPSB0ZXh0Q29udGV4dC50ZXh0QmFzZWxpbmVcbiAgY29uc3QgcHJldmlvdXNBbGlnbiA9IHRleHRDb250ZXh0LnRleHRBbGlnblxuICBjb25zdCBwcmV2aW91c0ZvbnQgPSB0ZXh0Q29udGV4dC5mb250XG4gIGNvbnN0IHByZXZpb3VzRmlsbFN0eWxlID0gdGV4dENvbnRleHQuZmlsbFN0eWxlXG5cbiAgdGV4dENvbnRleHQudGV4dEJhc2VsaW5lID0gXCJ0b3BcIlxuICB0ZXh0Q29udGV4dC50ZXh0QWxpZ24gPSBcImxlZnRcIlxuXG4gIGZvciAoY29uc3QgdG9rZW4gb2YgdG9rZW5zKSB7XG4gICAgaWYgKHRva2VuLm9wYWNpdHkgPD0gMCkge1xuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICBjb25zdCBmb250U3R5bGUgPSB0b2tlbi5mb250U3R5bGVcbiAgICBjb25zdCBpc0l0YWxpYyA9IChmb250U3R5bGUgJiBGT05UX1NUWUxFX0lUQUxJQykgPT09IEZPTlRfU1RZTEVfSVRBTElDXG4gICAgY29uc3QgaXNCb2xkID0gKGZvbnRTdHlsZSAmIEZPTlRfU1RZTEVfQk9MRCkgPT09IEZPTlRfU1RZTEVfQk9MRFxuICAgIGNvbnN0IGlzVW5kZXJsaW5lID0gKGZvbnRTdHlsZSAmIEZPTlRfU1RZTEVfVU5ERVJMSU5FKSA9PT0gRk9OVF9TVFlMRV9VTkRFUkxJTkVcblxuICAgIHRleHRDb250ZXh0Lmdsb2JhbEFscGhhID0gdG9rZW4ub3BhY2l0eVxuICAgIHRleHRDb250ZXh0LmZvbnQgPSBidWlsZEZvbnQoaXNJdGFsaWMsIGlzQm9sZClcbiAgICB0ZXh0Q29udGV4dC5maWxsU3R5bGUgPSB0b2tlbi5jb2xvclxuICAgIHRleHRDb250ZXh0LmZpbGxUZXh0KHRva2VuLmNvbnRlbnQsIHRva2VuLngsIHRva2VuLnkpXG5cbiAgICBpZiAoaXNVbmRlcmxpbmUgJiYgdG9rZW4ud2lkdGggPiAwKSB7XG4gICAgICBjb25zdCBwcmV2aW91c1N0cm9rZVN0eWxlID0gdGV4dENvbnRleHQuc3Ryb2tlU3R5bGVcbiAgICAgIGNvbnN0IHByZXZpb3VzTGluZVdpZHRoID0gdGV4dENvbnRleHQubGluZVdpZHRoXG4gICAgICBjb25zdCB1bmRlcmxpbmVZID0gdG9rZW4ueSArIERFRkFVTFRfRk9OVF9TSVpFICsgMlxuXG4gICAgICB0ZXh0Q29udGV4dC5zdHJva2VTdHlsZSA9IHRleHRDb250ZXh0LmZpbGxTdHlsZVxuICAgICAgdGV4dENvbnRleHQubGluZVdpZHRoID0gTWF0aC5tYXgoMSwgTWF0aC5mbG9vcihERUZBVUxUX0ZPTlRfU0laRSAvIDEyKSlcbiAgICAgIHRleHRDb250ZXh0LmJlZ2luUGF0aCgpXG4gICAgICB0ZXh0Q29udGV4dC5tb3ZlVG8odG9rZW4ueCwgdW5kZXJsaW5lWSlcbiAgICAgIHRleHRDb250ZXh0LmxpbmVUbyh0b2tlbi54ICsgdG9rZW4ud2lkdGgsIHVuZGVybGluZVkpXG4gICAgICB0ZXh0Q29udGV4dC5zdHJva2UoKVxuXG4gICAgICB0ZXh0Q29udGV4dC5zdHJva2VTdHlsZSA9IHByZXZpb3VzU3Ryb2tlU3R5bGVcbiAgICAgIHRleHRDb250ZXh0LmxpbmVXaWR0aCA9IHByZXZpb3VzTGluZVdpZHRoXG4gICAgfVxuICB9XG5cbiAgdGV4dENvbnRleHQuZ2xvYmFsQWxwaGEgPSBwcmV2aW91c0FscGhhXG4gIHRleHRDb250ZXh0LnRleHRCYXNlbGluZSA9IHByZXZpb3VzQmFzZWxpbmVcbiAgdGV4dENvbnRleHQudGV4dEFsaWduID0gcHJldmlvdXNBbGlnblxuICB0ZXh0Q29udGV4dC5mb250ID0gcHJldmlvdXNGb250XG4gIHRleHRDb250ZXh0LmZpbGxTdHlsZSA9IHByZXZpb3VzRmlsbFN0eWxlXG59XG5cbmNvbnN0IGJ1aWxkRm9udCA9IChpc0l0YWxpYzogYm9vbGVhbiwgaXNCb2xkOiBib29sZWFuKSA9PiB7XG4gIGNvbnN0IHN0eWxlID0gYCR7aXNJdGFsaWMgPyBcIml0YWxpYyBcIiA6IFwiXCJ9JHtpc0JvbGQgPyBcImJvbGQgXCIgOiBcIlwifWBcbiAgcmV0dXJuIGAke3N0eWxlfSR7REVGQVVMVF9GT05UX1NJWkV9cHggJHtERUZBVUxUX0ZPTlRfRkFNSUxZfWBcbn1cbiIsCiAgICAiaW1wb3J0IHsgRWZmZWN0IH0gZnJvbSBcImVmZmVjdFwiXG5pbXBvcnQgeyBidW5kbGVkVGhlbWVzLCB0eXBlIEJ1bmRsZWRUaGVtZSB9IGZyb20gXCJzaGlraVwiXG5pbXBvcnQgeyBVbmtub3duVGhlbWUgfSBmcm9tIFwiLi9lcnJvcnNcIlxuXG5leHBvcnQgY29uc3QgcmVzb2x2ZVRoZW1lID0gKHRoZW1lOiBzdHJpbmcpID0+XG4gIEVmZmVjdC5nZW4oZnVuY3Rpb24qICgpIHtcbiAgICBjb25zdCB0cmltbWVkID0gdGhlbWUudHJpbSgpXG4gICAgaWYgKCFPYmplY3QuaGFzT3duKGJ1bmRsZWRUaGVtZXMsIHRyaW1tZWQpKSB7XG4gICAgICByZXR1cm4geWllbGQqIEVmZmVjdC5mYWlsKG5ldyBVbmtub3duVGhlbWUoeyB0aGVtZSB9KSlcbiAgICB9XG5cbiAgICByZXR1cm4gdHJpbW1lZCBhcyBCdW5kbGVkVGhlbWVcbiAgfSlcbiIsCiAgICAiaW1wb3J0IHsgRWZmZWN0IH0gZnJvbSBcImVmZmVjdFwiXG5pbXBvcnQgeyBjb2RlVG9Ub2tlbnMsIHR5cGUgQnVuZGxlZExhbmd1YWdlLCB0eXBlIEJ1bmRsZWRUaGVtZSB9IGZyb20gXCJzaGlraVwiXG5pbXBvcnQgdHlwZSB7IENhbnZhc0NvbnRleHQgfSBmcm9tIFwiLi9jb250ZXh0XCJcbmltcG9ydCB0eXBlIHsgQ29kZUJsb2NrLCBMYXlvdXRUb2tlbiwgU2NlbmUsIFNjZW5lTGF5b3V0IH0gZnJvbSBcIi4vdHlwZXNcIlxuaW1wb3J0IHtcbiAgREVGQVVMVF9CQUNLR1JPVU5ELFxuICBERUZBVUxUX0ZPUkVHUk9VTkQsXG4gIERFRkFVTFRfTElORV9IRUlHSFQsXG4gIERFRkFVTFRfUEFERElORyxcbiAgRk9OVF9TVFlMRV9CT0xELFxuICBGT05UX1NUWUxFX0lUQUxJQyxcbiAgRk9OVF9TVFlMRV9OT05FLFxuICBGT05UX1NUWUxFX1VOREVSTElORSxcbiAgVEFCX1JFUExBQ0VNRU5ULFxuICBERUZBVUxUX0ZPTlRfU0laRSxcbiAgREVGQVVMVF9GT05UX0ZBTUlMWSxcbn0gZnJvbSBcIi4vY29uc3RhbnRzXCJcblxuY29uc3Qgbm9ybWFsaXplVG9rZW5Db250ZW50ID0gKGNvbnRlbnQ6IHN0cmluZykgPT4gY29udGVudC5yZXBsYWNlQWxsKFwiXFx0XCIsIFRBQl9SRVBMQUNFTUVOVClcblxuY29uc3QgYnVpbGRGb250ID0gKGlzSXRhbGljOiBib29sZWFuLCBpc0JvbGQ6IGJvb2xlYW4pID0+IHtcbiAgY29uc3Qgc3R5bGUgPSBgJHtpc0l0YWxpYyA/IFwiaXRhbGljIFwiIDogXCJcIn0ke2lzQm9sZCA/IFwiYm9sZCBcIiA6IFwiXCJ9YFxuICByZXR1cm4gYCR7c3R5bGV9JHtERUZBVUxUX0ZPTlRfU0laRX1weCAke0RFRkFVTFRfRk9OVF9GQU1JTFl9YFxufVxuXG5jb25zdCBtZWFzdXJlVG9rZW5XaWR0aCA9IChcbiAgY29udGV4dDogQ2FudmFzQ29udGV4dCxcbiAgY29udGVudDogc3RyaW5nLFxuICBpc0l0YWxpYzogYm9vbGVhbixcbiAgaXNCb2xkOiBib29sZWFuXG4pID0+IHtcbiAgY29uc3QgbWVhc3VyZUNvbnRleHQgPSBjb250ZXh0XG4gIGNvbnN0IHByZXZpb3VzRm9udCA9IG1lYXN1cmVDb250ZXh0LmZvbnRcbiAgbWVhc3VyZUNvbnRleHQuZm9udCA9IGJ1aWxkRm9udChpc0l0YWxpYywgaXNCb2xkKVxuICBjb25zdCB3aWR0aCA9IG1lYXN1cmVDb250ZXh0Lm1lYXN1cmVUZXh0KGNvbnRlbnQpLndpZHRoXG4gIG1lYXN1cmVDb250ZXh0LmZvbnQgPSBwcmV2aW91c0ZvbnRcbiAgcmV0dXJuIHdpZHRoXG59XG5cbmV4cG9ydCBjb25zdCBidWlsZFNjZW5lID0gKFxuICBjb250ZXh0OiBDYW52YXNDb250ZXh0LFxuICBjb2RlQmxvY2s6IENvZGVCbG9jayxcbiAgdGhlbWU6IEJ1bmRsZWRUaGVtZSxcbiAgZnJhbWVXaWR0aDogbnVtYmVyLFxuICBmcmFtZUhlaWdodDogbnVtYmVyXG4pID0+XG4gIEVmZmVjdC50cnlQcm9taXNlKHtcbiAgICBjYXRjaDogKGVycm9yKSA9PiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yIDogbmV3IEVycm9yKFN0cmluZyhlcnJvcikpKSxcbiAgICB0cnk6IGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHRva2VuUmVzdWx0ID0gYXdhaXQgY29kZVRvVG9rZW5zKGNvZGVCbG9jay5jb2RlLCB7XG4gICAgICAgIGxhbmc6IGNvZGVCbG9jay5sYW5ndWFnZSBhcyBCdW5kbGVkTGFuZ3VhZ2UsXG4gICAgICAgIHRoZW1lLFxuICAgICAgfSlcblxuICAgICAgY29uc3QgdG9rZW5zID0gdG9rZW5SZXN1bHQudG9rZW5zXG4gICAgICBjb25zdCBmb3JlZ3JvdW5kID0gdG9rZW5SZXN1bHQuZmcgPz8gREVGQVVMVF9GT1JFR1JPVU5EXG4gICAgICBjb25zdCBiYWNrZ3JvdW5kID0gdG9rZW5SZXN1bHQuYmcgPz8gREVGQVVMVF9CQUNLR1JPVU5EXG5cbiAgICAgIGNvbnN0IGxpbmVNZXRyaWNzID0gdG9rZW5zLm1hcCgobGluZVRva2VucykgPT4ge1xuICAgICAgICBjb25zdCBtZXRyaWNzOiBBcnJheTx7XG4gICAgICAgICAgY29sb3I6IHN0cmluZ1xuICAgICAgICAgIGNvbnRlbnQ6IHN0cmluZ1xuICAgICAgICAgIGZvbnRTdHlsZTogbnVtYmVyXG4gICAgICAgICAgd2lkdGg6IG51bWJlclxuICAgICAgICB9PiA9IFtdXG4gICAgICAgIGxldCBsaW5lV2lkdGggPSAwXG5cbiAgICAgICAgZm9yIChjb25zdCB0b2tlbiBvZiBsaW5lVG9rZW5zKSB7XG4gICAgICAgICAgY29uc3QgY29udGVudCA9IG5vcm1hbGl6ZVRva2VuQ29udGVudCh0b2tlbi5jb250ZW50KVxuICAgICAgICAgIGlmICghY29udGVudCkge1xuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBzdHlsZUZsYWdzID0gdG9rZW4uZm9udFN0eWxlID8/IEZPTlRfU1RZTEVfTk9ORVxuICAgICAgICAgIGNvbnN0IGlzSXRhbGljID0gKHN0eWxlRmxhZ3MgJiBGT05UX1NUWUxFX0lUQUxJQykgPT09IEZPTlRfU1RZTEVfSVRBTElDXG4gICAgICAgICAgY29uc3QgaXNCb2xkID0gKHN0eWxlRmxhZ3MgJiBGT05UX1NUWUxFX0JPTEQpID09PSBGT05UX1NUWUxFX0JPTERcbiAgICAgICAgICBjb25zdCB3aWR0aCA9IG1lYXN1cmVUb2tlbldpZHRoKGNvbnRleHQsIGNvbnRlbnQsIGlzSXRhbGljLCBpc0JvbGQpXG4gICAgICAgICAgY29uc3QgY29sb3IgPSB0b2tlbi5jb2xvciA/PyBmb3JlZ3JvdW5kXG5cbiAgICAgICAgICBtZXRyaWNzLnB1c2goe1xuICAgICAgICAgICAgY29sb3IsXG4gICAgICAgICAgICBjb250ZW50LFxuICAgICAgICAgICAgZm9udFN0eWxlOiBzdHlsZUZsYWdzLFxuICAgICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgfSlcbiAgICAgICAgICBsaW5lV2lkdGggKz0gd2lkdGhcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdG9rZW5zOiBtZXRyaWNzLFxuICAgICAgICAgIHdpZHRoOiBsaW5lV2lkdGgsXG4gICAgICAgIH1cbiAgICAgIH0pXG5cbiAgICAgIGNvbnN0IG1heExpbmVXaWR0aCA9XG4gICAgICAgIGxpbmVNZXRyaWNzLmxlbmd0aCA+IDAgPyBNYXRoLm1heCguLi5saW5lTWV0cmljcy5tYXAoKGxpbmUpID0+IGxpbmUud2lkdGgpKSA6IDBcbiAgICAgIGNvbnN0IGNvbnRlbnRXaWR0aCA9IE1hdGgubWF4KDAsIG1heExpbmVXaWR0aClcbiAgICAgIGNvbnN0IGNvbnRlbnRIZWlnaHQgPSB0b2tlbnMubGVuZ3RoICogREVGQVVMVF9MSU5FX0hFSUdIVFxuICAgICAgY29uc3QgYmxvY2tXaWR0aCA9IGNvbnRlbnRXaWR0aCArIERFRkFVTFRfUEFERElORyAqIDJcbiAgICAgIGNvbnN0IGJsb2NrSGVpZ2h0ID0gY29udGVudEhlaWdodCArIERFRkFVTFRfUEFERElORyAqIDJcbiAgICAgIGNvbnN0IGJsb2NrWCA9IE1hdGgubWF4KDAsIE1hdGgucm91bmQoKGZyYW1lV2lkdGggLSBibG9ja1dpZHRoKSAvIDIpKVxuICAgICAgY29uc3QgYmxvY2tZID0gTWF0aC5tYXgoMCwgTWF0aC5yb3VuZCgoZnJhbWVIZWlnaHQgLSBibG9ja0hlaWdodCkgLyAyKSlcblxuICAgICAgY29uc3QgbGF5b3V0OiBTY2VuZUxheW91dCA9IHtcbiAgICAgICAgbGluZXM6IGxpbmVNZXRyaWNzLm1hcCgobGluZSwgbGluZUluZGV4KSA9PiB7XG4gICAgICAgICAgbGV0IGN1cnNvclggPSBibG9ja1ggKyBERUZBVUxUX1BBRERJTkdcbiAgICAgICAgICBjb25zdCBjdXJzb3JZID0gYmxvY2tZICsgREVGQVVMVF9QQURESU5HICsgbGluZUluZGV4ICogREVGQVVMVF9MSU5FX0hFSUdIVFxuICAgICAgICAgIGNvbnN0IGxheW91dFRva2VuczogTGF5b3V0VG9rZW5bXSA9IGxpbmUudG9rZW5zLm1hcCgodG9rZW4pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGxheW91dFRva2VuID0ge1xuICAgICAgICAgICAgICAuLi50b2tlbixcbiAgICAgICAgICAgICAgeDogY3Vyc29yWCxcbiAgICAgICAgICAgICAgeTogY3Vyc29yWSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGN1cnNvclggKz0gdG9rZW4ud2lkdGhcbiAgICAgICAgICAgIHJldHVybiBsYXlvdXRUb2tlblxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdG9rZW5zOiBsYXlvdXRUb2tlbnMsXG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYmFja2dyb3VuZCxcbiAgICAgICAgYmxvY2tYLFxuICAgICAgICBibG9ja1ksXG4gICAgICAgIGNvbnRlbnRIZWlnaHQsXG4gICAgICAgIGNvbnRlbnRXaWR0aCxcbiAgICAgICAgZm9yZWdyb3VuZCxcbiAgICAgICAgbGF5b3V0LFxuICAgICAgICB0b2tlbnMsXG4gICAgICB9XG4gICAgfSxcbiAgfSlcblxuZXhwb3J0IGNvbnN0IHJlbmRlclNjZW5lVGV4dCA9IChcbiAgY29udGV4dDogQ2FudmFzQ29udGV4dCxcbiAgc2NlbmU6IFNjZW5lLFxuICBvcGFjaXR5OiBudW1iZXIsXG4gIGJsb2NrWDogbnVtYmVyLFxuICBibG9ja1k6IG51bWJlclxuKSA9PiB7XG4gIGlmIChvcGFjaXR5IDw9IDApIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIGNvbnN0IHRleHRDb250ZXh0ID0gY29udGV4dFxuICBjb25zdCBzdGFydFggPSBibG9ja1ggKyBERUZBVUxUX1BBRERJTkdcbiAgY29uc3Qgc3RhcnRZID0gYmxvY2tZICsgREVGQVVMVF9QQURESU5HXG4gIGNvbnN0IHByZXZpb3VzQWxwaGEgPSB0ZXh0Q29udGV4dC5nbG9iYWxBbHBoYVxuICBjb25zdCBwcmV2aW91c0Jhc2VsaW5lID0gdGV4dENvbnRleHQudGV4dEJhc2VsaW5lXG4gIGNvbnN0IHByZXZpb3VzQWxpZ24gPSB0ZXh0Q29udGV4dC50ZXh0QWxpZ25cbiAgY29uc3QgcHJldmlvdXNGb250ID0gdGV4dENvbnRleHQuZm9udFxuICBjb25zdCBwcmV2aW91c0ZpbGxTdHlsZSA9IHRleHRDb250ZXh0LmZpbGxTdHlsZVxuXG4gIHRleHRDb250ZXh0Lmdsb2JhbEFscGhhID0gb3BhY2l0eVxuICB0ZXh0Q29udGV4dC50ZXh0QmFzZWxpbmUgPSBcInRvcFwiXG4gIHRleHRDb250ZXh0LnRleHRBbGlnbiA9IFwibGVmdFwiXG5cbiAgZm9yIChsZXQgbGluZUluZGV4ID0gMDsgbGluZUluZGV4IDwgc2NlbmUudG9rZW5zLmxlbmd0aDsgbGluZUluZGV4ICs9IDEpIHtcbiAgICBjb25zdCBsaW5lVG9rZW5zID0gc2NlbmUudG9rZW5zW2xpbmVJbmRleF0gPz8gW11cbiAgICBsZXQgY3Vyc29yWCA9IHN0YXJ0WFxuICAgIGNvbnN0IGN1cnNvclkgPSBzdGFydFkgKyBsaW5lSW5kZXggKiBERUZBVUxUX0xJTkVfSEVJR0hUXG5cbiAgICBmb3IgKGNvbnN0IHRva2VuIG9mIGxpbmVUb2tlbnMpIHtcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBub3JtYWxpemVUb2tlbkNvbnRlbnQodG9rZW4uY29udGVudClcbiAgICAgIGlmICghY29udGVudCkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICBjb25zdCBmb250U3R5bGUgPSB0b2tlbi5mb250U3R5bGUgPz8gRk9OVF9TVFlMRV9OT05FXG4gICAgICBjb25zdCBpc0l0YWxpYyA9IChmb250U3R5bGUgJiBGT05UX1NUWUxFX0lUQUxJQykgPT09IEZPTlRfU1RZTEVfSVRBTElDXG4gICAgICBjb25zdCBpc0JvbGQgPSAoZm9udFN0eWxlICYgRk9OVF9TVFlMRV9CT0xEKSA9PT0gRk9OVF9TVFlMRV9CT0xEXG4gICAgICBjb25zdCBpc1VuZGVybGluZSA9IChmb250U3R5bGUgJiBGT05UX1NUWUxFX1VOREVSTElORSkgPT09IEZPTlRfU1RZTEVfVU5ERVJMSU5FXG5cbiAgICAgIHRleHRDb250ZXh0LmZvbnQgPSBidWlsZEZvbnQoaXNJdGFsaWMsIGlzQm9sZClcbiAgICAgIHRleHRDb250ZXh0LmZpbGxTdHlsZSA9IHRva2VuLmNvbG9yID8/IHNjZW5lLmZvcmVncm91bmRcbiAgICAgIHRleHRDb250ZXh0LmZpbGxUZXh0KGNvbnRlbnQsIGN1cnNvclgsIGN1cnNvclkpXG5cbiAgICAgIGNvbnN0IHRva2VuV2lkdGggPSB0ZXh0Q29udGV4dC5tZWFzdXJlVGV4dChjb250ZW50KS53aWR0aFxuXG4gICAgICBpZiAoaXNVbmRlcmxpbmUpIHtcbiAgICAgICAgY29uc3QgcHJldmlvdXNTdHJva2VTdHlsZSA9IHRleHRDb250ZXh0LnN0cm9rZVN0eWxlXG4gICAgICAgIGNvbnN0IHByZXZpb3VzTGluZVdpZHRoID0gdGV4dENvbnRleHQubGluZVdpZHRoXG4gICAgICAgIGNvbnN0IHVuZGVybGluZVkgPSBjdXJzb3JZICsgREVGQVVMVF9GT05UX1NJWkUgKyAyXG5cbiAgICAgICAgdGV4dENvbnRleHQuc3Ryb2tlU3R5bGUgPSB0ZXh0Q29udGV4dC5maWxsU3R5bGVcbiAgICAgICAgdGV4dENvbnRleHQubGluZVdpZHRoID0gTWF0aC5tYXgoMSwgTWF0aC5mbG9vcihERUZBVUxUX0ZPTlRfU0laRSAvIDEyKSlcbiAgICAgICAgdGV4dENvbnRleHQuYmVnaW5QYXRoKClcbiAgICAgICAgdGV4dENvbnRleHQubW92ZVRvKGN1cnNvclgsIHVuZGVybGluZVkpXG4gICAgICAgIHRleHRDb250ZXh0LmxpbmVUbyhjdXJzb3JYICsgdG9rZW5XaWR0aCwgdW5kZXJsaW5lWSlcbiAgICAgICAgdGV4dENvbnRleHQuc3Ryb2tlKClcblxuICAgICAgICB0ZXh0Q29udGV4dC5zdHJva2VTdHlsZSA9IHByZXZpb3VzU3Ryb2tlU3R5bGVcbiAgICAgICAgdGV4dENvbnRleHQubGluZVdpZHRoID0gcHJldmlvdXNMaW5lV2lkdGhcbiAgICAgIH1cblxuICAgICAgY3Vyc29yWCArPSB0b2tlbldpZHRoXG4gICAgfVxuICB9XG5cbiAgdGV4dENvbnRleHQuZ2xvYmFsQWxwaGEgPSBwcmV2aW91c0FscGhhXG4gIHRleHRDb250ZXh0LnRleHRCYXNlbGluZSA9IHByZXZpb3VzQmFzZWxpbmVcbiAgdGV4dENvbnRleHQudGV4dEFsaWduID0gcHJldmlvdXNBbGlnblxuICB0ZXh0Q29udGV4dC5mb250ID0gcHJldmlvdXNGb250XG4gIHRleHRDb250ZXh0LmZpbGxTdHlsZSA9IHByZXZpb3VzRmlsbFN0eWxlXG59XG4iLAogICAgImltcG9ydCB7IFN0cmVhbSB9IGZyb20gXCJlZmZlY3RcIlxuaW1wb3J0IHsgYmxlbmRDb2xvcnMgfSBmcm9tIFwiLi9jb2xvclwiXG5pbXBvcnQgeyBERUZBVUxUX0JMT0NLX0RVUkFUSU9OLCBERUZBVUxUX0ZQUyB9IGZyb20gXCIuL2NvbnN0YW50c1wiXG5pbXBvcnQgdHlwZSB7IENhbnZhc0NvbnRleHQgfSBmcm9tIFwiLi9jb250ZXh0XCJcbmltcG9ydCB7IHJlbmRlclNjZW5lVGV4dCB9IGZyb20gXCIuL3NjZW5lXCJcbmltcG9ydCB7XG4gIGJ1aWxkVHJhbnNpdGlvbkRpZmYsXG4gIGJ1aWxkVHJhbnNpdGlvblRva2VucyxcbiAgZWFzZUluT3V0Q3ViaWMsXG4gIHJlbmRlclRyYW5zaXRpb25Ub2tlbnMsXG59IGZyb20gXCIuL3RyYW5zaXRpb25cIlxuaW1wb3J0IHR5cGUgeyBSZW5kZXJGcmFtZSwgU2NlbmUgfSBmcm9tIFwiLi90eXBlc1wiXG5cbmV4cG9ydCBjb25zdCByZW5kZXJGcmFtZSA9IChcbiAgY29udGV4dDogQ2FudmFzQ29udGV4dCxcbiAgZnJhbWVXaWR0aDogbnVtYmVyLFxuICBmcmFtZUhlaWdodDogbnVtYmVyLFxuICBmcmFtZTogUmVuZGVyRnJhbWVcbikgPT4ge1xuICBjb25zdCBmcmFtZUNvbnRleHQgPSBjb250ZXh0XG4gIGNvbnN0IHN0YXJ0VHJhbnNmb3JtID0gZnJhbWVDb250ZXh0LmdldFRyYW5zZm9ybSgpXG4gIGlmICh0eXBlb2YgZnJhbWVDb250ZXh0LnNldFRyYW5zZm9ybU1hdHJpeCAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgZnJhbWVDb250ZXh0LnNldFRyYW5zZm9ybU1hdHJpeCA9ICh0cmFuc2Zvcm0pID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgdHlwZW9mIHRyYW5zZm9ybSA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICB0cmFuc2Zvcm0gIT09IG51bGwgJiZcbiAgICAgICAgXCJhXCIgaW4gdHJhbnNmb3JtICYmXG4gICAgICAgIFwiYlwiIGluIHRyYW5zZm9ybSAmJlxuICAgICAgICBcImNcIiBpbiB0cmFuc2Zvcm0gJiZcbiAgICAgICAgXCJkXCIgaW4gdHJhbnNmb3JtICYmXG4gICAgICAgIFwiZVwiIGluIHRyYW5zZm9ybSAmJlxuICAgICAgICBcImZcIiBpbiB0cmFuc2Zvcm1cbiAgICAgICkge1xuICAgICAgICBjb25zdCBtYXRyaXggPSB0cmFuc2Zvcm0gYXMge1xuICAgICAgICAgIGE6IG51bWJlclxuICAgICAgICAgIGI6IG51bWJlclxuICAgICAgICAgIGM6IG51bWJlclxuICAgICAgICAgIGQ6IG51bWJlclxuICAgICAgICAgIGU6IG51bWJlclxuICAgICAgICAgIGY6IG51bWJlclxuICAgICAgICB9XG4gICAgICAgIGZyYW1lQ29udGV4dC5zZXRUcmFuc2Zvcm0obWF0cml4LmEsIG1hdHJpeC5iLCBtYXRyaXguYywgbWF0cml4LmQsIG1hdHJpeC5lLCBtYXRyaXguZilcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZyYW1lQ29udGV4dC5zZXRUcmFuc2Zvcm0oMSwgMCwgMCwgMSwgMCwgMClcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgY29uc3Qgc3RhcnRBbHBoYSA9IGZyYW1lQ29udGV4dC5nbG9iYWxBbHBoYVxuICBjb25zdCBzdGFydEZpbGxTdHlsZSA9IGZyYW1lQ29udGV4dC5maWxsU3R5bGVcblxuICBmcmFtZUNvbnRleHQuc2V0VHJhbnNmb3JtKDEsIDAsIDAsIDEsIDAsIDApXG4gIGZyYW1lQ29udGV4dC5nbG9iYWxBbHBoYSA9IDFcbiAgZnJhbWVDb250ZXh0LmZpbGxTdHlsZSA9IGZyYW1lLmJhY2tncm91bmRcbiAgZnJhbWVDb250ZXh0LmZpbGxSZWN0KDAsIDAsIGZyYW1lV2lkdGgsIGZyYW1lSGVpZ2h0KVxuXG4gIGlmIChmcmFtZS5raW5kID09PSBcInNjZW5lXCIpIHtcbiAgICByZW5kZXJTY2VuZVRleHQoZnJhbWVDb250ZXh0LCBmcmFtZS5zY2VuZSwgZnJhbWUub3BhY2l0eSwgZnJhbWUucG9zaXRpb25YLCBmcmFtZS5wb3NpdGlvblkpXG4gIH0gZWxzZSB7XG4gICAgcmVuZGVyVHJhbnNpdGlvblRva2VucyhmcmFtZUNvbnRleHQsIGZyYW1lLnRva2VucylcbiAgfVxuXG4gIGlmICh0eXBlb2YgZnJhbWVDb250ZXh0LnNldFRyYW5zZm9ybU1hdHJpeCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgZnJhbWVDb250ZXh0LnNldFRyYW5zZm9ybU1hdHJpeChzdGFydFRyYW5zZm9ybSlcbiAgfVxuICBmcmFtZUNvbnRleHQuZ2xvYmFsQWxwaGEgPSBzdGFydEFscGhhXG4gIGZyYW1lQ29udGV4dC5maWxsU3R5bGUgPSBzdGFydEZpbGxTdHlsZVxufVxuIgogIF0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7O0FDWUEsU0FBUyxDQUFDLEdBQUU7QUFBQSxFQUFDLE9BQU0sRUFBQyxPQUFNLE9BQUcsUUFBTyxPQUFHLFlBQVcsTUFBSyxLQUFJLE1BQUcsT0FBTSxNQUFLLFVBQVMsT0FBRyxVQUFTLE1BQUssUUFBTyxPQUFHLFdBQVUsTUFBSyxZQUFXLEtBQUk7QUFBQTtBQUFFLElBQUksSUFBRSxFQUFFO0FBQUUsU0FBUyxDQUFDLENBQUMsR0FBRTtBQUFBLEVBQUMsSUFBRTtBQUFBO0FBQUUsSUFBSSxJQUFFLEVBQUMsTUFBSyxNQUFJLEtBQUk7QUFBRSxTQUFTLENBQUMsQ0FBQyxHQUFFLElBQUUsSUFBRztBQUFBLEVBQUMsSUFBSSxJQUFFLE9BQU8sS0FBRyxXQUFTLElBQUUsRUFBRSxRQUFPLElBQUUsRUFBQyxTQUFRLENBQUMsR0FBRSxNQUFJO0FBQUEsSUFBQyxJQUFJLElBQUUsT0FBTyxLQUFHLFdBQVMsSUFBRSxFQUFFO0FBQUEsSUFBTyxPQUFPLElBQUUs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SUFBRSxNQUFLLEVBQUUsS0FBRyxLQUFHLEVBQUUsT0FBSztBQUFBLE1BQU0sSUFBRSxDQUFDO0FBQUEsSUFBRSxPQUFPLElBQUUsTUFBSTtBQUFBLEdBQUssR0FBRSxJQUFFLEVBQUUsTUFBTSxFQUFFLFNBQVMsR0FBRSxJQUFFO0FBQUEsRUFBRSxJQUFHLEVBQUUsR0FBRyxLQUFLLEtBQUcsRUFBRSxNQUFNLEdBQUUsRUFBRSxTQUFPLEtBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEtBQUssS0FBRyxFQUFFLElBQUksR0FBRTtBQUFBLElBQUUsSUFBRyxFQUFFLFNBQU87QUFBQSxNQUFFLEVBQUUsT0FBTyxDQUFDO0FBQUEsSUFBTztBQUFBLFlBQUssRUFBRSxTQUFPO0FBQUEsUUFBRyxFQUFFLEtBQUssRUFBRTtBQUFBLEVBQUUsTUFBSyxJQUFFLEVBQUUsUUFBTztBQUFBLElBQUksRUFBRSxLQUFHLEVBQUUsR0FBRyxLQUFLLEVBQUUsUUFBUSxFQUFFLFdBQVUsR0FBRztBQUFBLEVBQUUsT0FBTztBQUFBO0FBQUUsU0FBUyxDQUFDLENBQUMsR0FBRSxHQUFFLEdBQUU7QUFBQSxFQUFDLElBQUksSUFBRSxFQUFFO0FBQUEsRUFBTyxJQUFHLE1BQUk7QUFBQSxJQUFFLE9BQU07QUFBQSxFQUFHLElBQUksSUFBRTtBQUFBLEVBQUUsTUFBSyxJQUFFLEtBQUc7QUFBQSxJQUFDLElBQUksSUFBRSxFQUFFLE9BQU8sSUFBRSxJQUFFLENBQUM7QUFBQSxJQUFFLElBQUcsTUFBSSxLQUFHLENBQUM7QUFBQSxNQUFFO0FBQUEsSUFBUyxTQUFHLE1BQUksS0FBRztBQUFBLE1BQUU7QUFBQSxJQUFTO0FBQUE7QUFBQSxFQUFLO0FBQUEsRUFBQyxPQUFPLEVBQUUsTUFBTSxHQUFFLElBQUUsQ0FBQztBQUFBO0FBQUUsU0FBUyxFQUFFLENBQUMsR0FBRSxHQUFFO0FBQUEsRUFBQyxJQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsTUFBSTtBQUFBLElBQUcsT0FBTTtBQUFBLEVBQUcsSUFBSSxJQUFFO0FBQUEsRUFBRSxTQUFRLElBQUUsRUFBRSxJQUFFLEVBQUUsUUFBTztBQUFBLElBQUksSUFBRyxFQUFFLE9BQUs7QUFBQSxNQUFLO0FBQUEsSUFBUyxTQUFHLEVBQUUsT0FBSyxFQUFFO0FBQUEsTUFBRztBQUFBLElBQVMsU0FBRyxFQUFFLE9BQUssRUFBRSxPQUFLLEtBQUksSUFBRTtBQUFBLE1BQUcsT0FBTztBQUFBLEVBQUUsT0FBTyxJQUFFLElBQUUsS0FBRztBQUFBO0FBQUcsU0FBUyxFQUFFLENBQUMsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUEsRUFBQyxJQUFJLElBQUUsRUFBRSxNQUFLLElBQUUsRUFBRSxTQUFPLE1BQUssSUFBRSxFQUFFLEdBQUcsUUFBUSxFQUFFLE1BQU0sbUJBQWtCLElBQUk7QUFBQSxFQUFFLEVBQUUsTUFBTSxTQUFPO0FBQUEsRUFBRyxJQUFJLElBQUUsRUFBQyxNQUFLLEVBQUUsR0FBRyxPQUFPLENBQUMsTUFBSSxNQUFJLFVBQVEsUUFBTyxLQUFJLEdBQUUsTUFBSyxHQUFFLE9BQU0sR0FBRSxNQUFLLEdBQUUsUUFBTyxFQUFFLGFBQWEsQ0FBQyxFQUFDO0FBQUEsRUFBRSxPQUFPLEVBQUUsTUFBTSxTQUFPLE9BQUc7QUFBQTtBQUFFLFNBQVMsRUFBRSxDQUFDLEdBQUUsR0FBRSxHQUFFO0FBQUEsRUFBQyxJQUFJLElBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxzQkFBc0I7QUFBQSxFQUFFLElBQUcsTUFBSTtBQUFBLElBQUssT0FBTztBQUFBLEVBQUUsSUFBSSxJQUFFLEVBQUU7QUFBQSxFQUFHLE9BQU8sRUFBRSxNQUFNO0FBQUEsQ0FDdGlMLEVBQUUsSUFBSSxPQUFHO0FBQUEsSUFBQyxJQUFJLElBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxjQUFjO0FBQUEsSUFBRSxJQUFHLE1BQUk7QUFBQSxNQUFLLE9BQU87QUFBQSxJQUFFLEtBQUksS0FBRztBQUFBLElBQUUsT0FBTyxFQUFFLFVBQVEsRUFBRSxTQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sSUFBRTtBQUFBLEdBQUUsRUFBRSxLQUFLO0FBQUEsQ0FDbkk7QUFBQTtBQUFFLElBQUksSUFBRSxNQUFLO0FBQUEsRUFBQztBQUFBLEVBQVE7QUFBQSxFQUFNO0FBQUEsRUFBTSxXQUFXLENBQUMsR0FBRTtBQUFBLElBQUMsS0FBSyxVQUFRLEtBQUc7QUFBQTtBQUFBLEVBQUUsS0FBSyxDQUFDLEdBQUU7QUFBQSxJQUFDLElBQUksSUFBRSxLQUFLLE1BQU0sTUFBTSxRQUFRLEtBQUssQ0FBQztBQUFBLElBQUUsSUFBRyxLQUFHLEVBQUUsR0FBRyxTQUFPO0FBQUEsTUFBRSxPQUFNLEVBQUMsTUFBSyxTQUFRLEtBQUksRUFBRSxHQUFFO0FBQUE7QUFBQSxFQUFFLElBQUksQ0FBQyxHQUFFO0FBQUEsSUFBQyxJQUFJLElBQUUsS0FBSyxNQUFNLE1BQU0sS0FBSyxLQUFLLENBQUM7QUFBQSxJQUFFLElBQUcsR0FBRTtBQUFBLE1BQUMsSUFBSSxJQUFFLEVBQUUsR0FBRyxRQUFRLEtBQUssTUFBTSxNQUFNLGtCQUFpQixFQUFFO0FBQUEsTUFBRSxPQUFNLEVBQUMsTUFBSyxRQUFPLEtBQUksRUFBRSxJQUFHLGdCQUFlLFlBQVcsTUFBSyxLQUFLLFFBQVEsV0FBUyxJQUFFLEVBQUUsR0FBRTtBQUFBLENBQ3ZXLEVBQUM7QUFBQSxJQUFDO0FBQUE7QUFBQSxFQUFFLE1BQU0sQ0FBQyxHQUFFO0FBQUEsSUFBQyxJQUFJLElBQUUsS0FBSyxNQUFNLE1BQU0sT0FBTyxLQUFLLENBQUM7QUFBQSxJQUFFLElBQUcsR0FBRTtBQUFBLE1BQUMsSUFBSSxJQUFFLEVBQUUsSUFBRyxJQUFFLEdBQUcsR0FBRSxFQUFFLE1BQUksSUFBRyxLQUFLLEtBQUs7QUFBQSxNQUFFLE9BQU0sRUFBQyxNQUFLLFFBQU8sS0FBSSxHQUFFLE1BQUssRUFBRSxLQUFHLEVBQUUsR0FBRyxLQUFLLEVBQUUsUUFBUSxLQUFLLE1BQU0sT0FBTyxnQkFBZSxJQUFJLElBQUUsRUFBRSxJQUFHLE1BQUssRUFBQztBQUFBLElBQUM7QUFBQTtBQUFBLEVBQUUsT0FBTyxDQUFDLEdBQUU7QUFBQSxJQUFDLElBQUksSUFBRSxLQUFLLE1BQU0sTUFBTSxRQUFRLEtBQUssQ0FBQztBQUFBLElBQUUsSUFBRyxHQUFFO0FBQUEsTUFBQyxJQUFJLElBQUUsRUFBRSxHQUFHLEtBQUs7QUFBQSxNQUFFLElBQUcsS0FBSyxNQUFNLE1BQU0sV0FBVyxLQUFLLENBQUMsR0FBRTtBQUFBLFFBQUMsSUFBSSxJQUFFLEVBQUUsR0FBRSxHQUFHO0FBQUEsU0FBRyxLQUFLLFFBQVEsWUFBVSxDQUFDLEtBQUcsS0FBSyxNQUFNLE1BQU0sZ0JBQWdCLEtBQUssQ0FBQyxPQUFLLElBQUUsRUFBRSxLQUFLO0FBQUEsTUFBRTtBQUFBLE1BQUMsT0FBTSxFQUFDLE1BQUssV0FBVSxLQUFJLEVBQUUsSUFBRyxPQUFNLEVBQUUsR0FBRyxRQUFPLE1BQUssR0FBRSxRQUFPLEtBQUssTUFBTSxPQUFPLENBQUMsRUFBQztBQUFBLElBQUM7QUFBQTtBQUFBLEVBQUUsRUFBRSxDQUFDLEdBQUU7QUFBQSxJQUFDLElBQUksSUFBRSxLQUFLLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQztBQUFBLElBQUUsSUFBRztBQUFBLE1BQUUsT0FBTSxFQUFDLE1BQUssTUFBSyxLQUFJLEVBQUUsRUFBRSxJQUFHO0FBQUEsQ0FDamtCLEVBQUM7QUFBQTtBQUFBLEVBQUUsVUFBVSxDQUFDLEdBQUU7QUFBQSxJQUFDLElBQUksSUFBRSxLQUFLLE1BQU0sTUFBTSxXQUFXLEtBQUssQ0FBQztBQUFBLElBQUUsSUFBRyxHQUFFO0FBQUEsTUFBQyxJQUFJLElBQUUsRUFBRSxFQUFFLElBQUc7QUFBQSxDQUM5RSxFQUFFLE1BQU07QUFBQSxDQUNSLEdBQUUsSUFBRSxJQUFHLElBQUUsSUFBRyxJQUFFLENBQUM7QUFBQSxNQUFFLE1BQUssRUFBRSxTQUFPLEtBQUc7QUFBQSxRQUFDLElBQUksSUFBRSxPQUFHLElBQUUsQ0FBQyxHQUFFO0FBQUEsUUFBRSxLQUFJLElBQUUsRUFBRSxJQUFFLEVBQUUsUUFBTztBQUFBLFVBQUksSUFBRyxLQUFLLE1BQU0sTUFBTSxnQkFBZ0IsS0FBSyxFQUFFLEVBQUU7QUFBQSxZQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsR0FBRSxJQUFFO0FBQUEsVUFBUSxTQUFHLENBQUM7QUFBQSxZQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUU7QUFBQSxVQUFPO0FBQUE7QUFBQSxRQUFNLElBQUUsRUFBRSxNQUFNLENBQUM7QUFBQSxRQUFFLElBQUksSUFBRSxFQUFFLEtBQUs7QUFBQSxDQUN4TSxHQUFFLElBQUUsRUFBRSxRQUFRLEtBQUssTUFBTSxNQUFNLHlCQUF3QjtBQUFBLE9BQ2pELEVBQUUsUUFBUSxLQUFLLE1BQU0sTUFBTSwwQkFBeUIsRUFBRTtBQUFBLFFBQUUsSUFBRSxJQUFFLEdBQUc7QUFBQSxFQUNwRSxNQUFJLEdBQUUsSUFBRSxJQUFFLEdBQUc7QUFBQSxFQUNiLE1BQUk7QUFBQSxRQUFFLElBQUksSUFBRSxLQUFLLE1BQU0sTUFBTTtBQUFBLFFBQUksSUFBRyxLQUFLLE1BQU0sTUFBTSxNQUFJLE1BQUcsS0FBSyxNQUFNLFlBQVksR0FBRSxHQUFFLElBQUUsR0FBRSxLQUFLLE1BQU0sTUFBTSxNQUFJLEdBQUUsRUFBRSxXQUFTO0FBQUEsVUFBRTtBQUFBLFFBQU0sSUFBSSxJQUFFLEVBQUUsR0FBRyxFQUFFO0FBQUEsUUFBRSxJQUFHLEdBQUcsU0FBTztBQUFBLFVBQU87QUFBQSxRQUFNLElBQUcsR0FBRyxTQUFPLGNBQWE7QUFBQSxVQUFDLElBQUksSUFBRSxHQUFFLElBQUUsRUFBRSxNQUFJO0FBQUEsSUFDek4sRUFBRSxLQUFLO0FBQUEsQ0FDUixHQUFFLElBQUUsS0FBSyxXQUFXLENBQUM7QUFBQSxVQUFFLEVBQUUsRUFBRSxTQUFPLEtBQUcsR0FBRSxJQUFFLEVBQUUsVUFBVSxHQUFFLEVBQUUsU0FBTyxFQUFFLElBQUksTUFBTSxJQUFFLEVBQUUsS0FBSSxJQUFFLEVBQUUsVUFBVSxHQUFFLEVBQUUsU0FBTyxFQUFFLEtBQUssTUFBTSxJQUFFLEVBQUU7QUFBQSxVQUFLO0FBQUEsUUFBSyxFQUFNLFNBQUcsR0FBRyxTQUFPLFFBQU87QUFBQSxVQUFDLElBQUksSUFBRSxHQUFFLElBQUUsRUFBRSxNQUFJO0FBQUEsSUFDbEwsRUFBRSxLQUFLO0FBQUEsQ0FDUixHQUFFLElBQUUsS0FBSyxLQUFLLENBQUM7QUFBQSxVQUFFLEVBQUUsRUFBRSxTQUFPLEtBQUcsR0FBRSxJQUFFLEVBQUUsVUFBVSxHQUFFLEVBQUUsU0FBTyxFQUFFLElBQUksTUFBTSxJQUFFLEVBQUUsS0FBSSxJQUFFLEVBQUUsVUFBVSxHQUFFLEVBQUUsU0FBTyxFQUFFLElBQUksTUFBTSxJQUFFLEVBQUUsS0FBSSxJQUFFLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxFQUFFLElBQUksTUFBTSxFQUFFLE1BQU07QUFBQSxDQUNwSztBQUFBLFVBQUU7QUFBQSxRQUFRO0FBQUEsTUFBQztBQUFBLE1BQUMsT0FBTSxFQUFDLE1BQUssY0FBYSxLQUFJLEdBQUUsUUFBTyxHQUFFLE1BQUssRUFBQztBQUFBLElBQUM7QUFBQTtBQUFBLEVBQUUsSUFBSSxDQUFDLEdBQUU7QUFBQSxJQUFDLElBQUksSUFBRSxLQUFLLE1BQU0sTUFBTSxLQUFLLEtBQUssQ0FBQztBQUFBLElBQUUsSUFBRyxHQUFFO0FBQUEsTUFBQyxJQUFJLElBQUUsRUFBRSxHQUFHLEtBQUssR0FBRSxJQUFFLEVBQUUsU0FBTyxHQUFFLElBQUUsRUFBQyxNQUFLLFFBQU8sS0FBSSxJQUFHLFNBQVEsR0FBRSxPQUFNLElBQUUsQ0FBQyxFQUFFLE1BQU0sR0FBRSxFQUFFLElBQUUsSUFBRyxPQUFNLE9BQUcsT0FBTSxDQUFDLEVBQUM7QUFBQSxNQUFFLElBQUUsSUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLE1BQUksS0FBSyxLQUFJLEtBQUssUUFBUSxhQUFXLElBQUUsSUFBRSxJQUFFO0FBQUEsTUFBUyxJQUFJLElBQUUsS0FBSyxNQUFNLE1BQU0sY0FBYyxDQUFDLEdBQUUsSUFBRTtBQUFBLE1BQUcsTUFBSyxLQUFHO0FBQUEsUUFBQyxJQUFJLElBQUUsT0FBRyxJ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QUEsZ0JBQUU7QUFBQSxjQUFLO0FBQUEsVUFBQztBQUFBLFVBQUMsSUFBSSxJQUFFLEtBQUssTUFBTSxNQUFNLGlCQUFpQixLQUFLLEVBQUUsR0FBRztBQUFBLFVBQUUsSUFBRyxHQUFFO0FBQUEsWUFBQyxJQUFJLElBQUUsRUFBQyxNQUFLLFlBQVcsS0FBSSxFQUFFLEtBQUcsS0FBSSxTQUFRLEVBQUUsT0FBSyxNQUFLO0FBQUEsWUFBRSxFQUFFLFVBQVEsRUFBRSxTQUFRLEVBQUUsUUFBTSxFQUFFLE9BQU8sTUFBSSxDQUFDLGFBQVksTUFBTSxFQUFFLFNBQVMsRUFBRSxPQUFPLEdBQUcsSUFBSSxLQUFHLFlBQVcsRUFBRSxPQUFPLE1BQUksRUFBRSxPQUFPLEdBQUcsVUFBUSxFQUFFLE9BQU8sR0FBRyxNQUFJLEVBQUUsTUFBSSxFQUFFLE9BQU8sR0FBRyxLQUFJLEVBQUUsT0FBTyxHQUFHLE9BQUssRUFBRSxNQUFJLEVBQUUsT0FBTyxHQUFHLE1BQUssRUFBRSxPQUFPLEdBQUcsT0FBTyxRQUFRLENBQUMsS0FBRyxFQUFFLE9BQU8sUUFBUSxFQUFDLE1BQUssYUFBWSxLQUFJLEVBQUUsS0FBSSxNQUFLLEVBQUUsS0FBSSxRQUFPLENBQUMsQ0FBQyxFQUFDLENBQUMsSUFBRSxFQUFFLE9BQU8sUUFBUSxDQUFDO0FBQUEsVUFBQztBQUFBLFFBQUM7QUFBQSxRQUFDLElBQUcsQ0FBQyxFQUFFLE9BQU07QUFBQSxVQUFDLElBQUksSUFBRSxFQUFFLE9BQU8sT0FBTyxPQUFHLEVBQUUsU0FBTyxPQUFPLEdBQUUsSUFBRSxFQUFFLFNBQU8sS0FBRyxFQUFFLEtBQUssT0FBRyxLQUFLLE1BQU0sTUFBTSxRQUFRLEtBQUssRUFBRSxHQUFHLENBQUM7QUFBQSxVQUFFLEVBQUUsUUFBTTtBQUFBLFFBQUM7QUFBQSxNQUFDO0FBQUEsTUFBQyxJQUFHLEVBQUU7QUFBQSxRQUFNLFNBQVEsS0FBSyxFQUFFLE9BQU07QUFBQSxVQUFDLEVBQUUsUUFBTTtBQUFBLFVBQUcsU0FBUSxLQUFLLEVBQUU7QUFBQSxZQUFP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T0FBTztBQUFBLElBQUM7QUFBQTtBQUFBLEVBQUUsUUFBUSxDQUFDLEdBQUU7QUFBQSxJQUFDLElBQUksSUFBRSxLQUFLLE1BQU0sTUFBTSxTQUFTLEtBQUssQ0FBQztBQUFBLElBQUUsSUFBRztBQUFBLE1BQUUsT0FBTSxFQUFDLE1BQUssV0FBVSxLQUFJLEVBQUUsSUFBRyxPQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsTUFBSSxNQUFJLElBQUUsR0FBRSxNQUFLLEVBQUUsSUFBRyxRQUFPLEtBQUssTUFBTSxPQUFPLEVBQUUsRUFBRSxFQUFDO0FBQUE7QUFBQSxFQUFFLFNBQVMsQ0FBQyxHQUFFO0FBQUEsSUFBQyxJQUFJLElBQUUsS0FBSyxNQUFNLE1BQU0sVUFBVSxLQUFLLENBQUM7QUFBQSxJQUFFLElBQUcsR0FBRTtBQUFBLE1BQUMsSUFBSSxJQUFFLEVBQUUsR0FBRyxPQUFPLEVBQUUsR0FBRyxTQUFPLENBQUMsTUFBSTtBQUFBLElBQ3p5QixFQUFFLEdBQUcsTUFBTSxHQUFFLEVBQUUsSUFBRSxFQUFFO0FBQUEsTUFBRyxPQUFNLEVBQUMsTUFBSyxhQUFZLEtBQUksRUFBRSxJQUFHLE1BQUssR0FBRSxRQUFPLEtBQUssTUFBTSxPQUFPLENBQUMsRUFBQztBQUFBLElBQUM7QUFBQTtBQUFBLEVBQUUsSUFBSSxDQUFDLEdBQUU7QUFBQSxJQUFDLElBQUksSUFBRSxLQUFLLE1BQU0sTUFBTSxLQUFLLEtBQUssQ0FBQztBQUFBLElBQUUsSUFBRztBQUFBLE1BQUUsT0FBTSxFQUFDLE1BQUssUUFBTyxLQUFJLEVBQUUsSUFBRyxNQUFLLEVBQUUsSUFBRyxRQUFPLEtBQUssTUFBTSxPQUFPLEVBQUUsRUFBRSxFQUFDO0FBQUE7QUFBQSxFQUFFLE1BQU0sQ0FBQyxHQUFFO0FBQUEsSUFBQyxJQUFJLElBQUUsS0FBSyxNQUFNLE9BQU8sT0FBTyxLQUFLLENBQUM7QUFBQSxJQUFFLElBQUc7QUFBQSxNQUFFLE9BQU0sRUFBQyxNQUFLLFVBQVMsS0FBSSxFQUFFLElBQUcsTUFBSyxFQUFFLEdBQUU7QUFBQTtBQUFBLEVBQUUsR0FBRyxDQUFDLEdBQUU7QUFBQSxJQUFDLElBQUksSUFBRSxLQUFLLE1BQU0sT0FBTyxJQUFJLEtBQUssQ0FBQztBQUFBLElBQUUsSUFBRztBQUFBLE1BQUUsT0FBTSxDQUFDLEtBQUssTUFBTSxNQUFNLFVBQVEsS0FBSyxNQUFNLE1BQU0sVUFBVSxLQUFLLEVBQUUsRUFBRSxJQUFFLEtBQUssTUFBTSxNQUFNLFNBQU8sT0FBRyxLQUFLLE1BQU0sTUFBTSxVQUFRLEtBQUssTUFBTSxNQUFNLFFBQVEsS0FBSyxFQUFFLEVBQUUsTUFBSSxLQUFLLE1BQU0sTUFBTSxTQUFPLFFBQUksQ0FBQyxLQUFLLE1BQU0sTUFBTSxjQUFZLEtBQUssTUFBTSxNQUFNLGtCQUFrQixLQUFLLEVBQUUsRUFBRSxJQUFFLEtBQUssTUFBTSxNQUFNLGFBQVcsT0FBRyxLQUFLLE1BQU0sTUFBTSxjQUFZLEtBQUssTUFBTSxNQUFNLGdCQUFnQixLQUFLLEVBQUUsRUFBRSxNQUFJLEtBQUssTUFBTSxNQUFNLGFBQVcsUUFBSSxFQUFDLE1BQUssUUFBTyxLQUFJLEVBQUUsSUFBRyxRQUFPLEtBQUssTUFBTSxNQUFNLFFBQU8sWUFBVyxLQUFLLE1BQU0sTUFBTSxZQUFXLE9BQU0sT0FBRyxNQUFLLEVBQUUsR0FBRTtBQUFBO0FBQUEsRUFBRSxJQUFJLENBQUMsR0FBRTtBQUFBLElBQUMsSUFBSSxJQUFFLEtBQUssTUFBTSxPQUFPLEtBQUssS0FBSyxDQUFDO0FBQUEsSUFBRSxJQUFHLEdBQUU7QUFBQSxNQUFDLElBQUksSUFBRSxFQUFFLEdBQUcsS0FBSztBQUFBLE1BQUUsSUFBRyxDQUFDLEtBQUssUUFBUSxZQUFVLEtBQUssTUFBTSxNQUFNLGtCQUFrQixLQUFLLENBQUMsR0FBRTtBQUFBLFFBQUMsSUFBRyxDQUFDLEtBQUssTUFBTSxNQUFNLGdCQUFnQixLQUFLLENBQUM7QUFBQSxVQUFFO0FBQUEsUUFBTyxJQUFJLElBQUUsRUFBRSxFQUFFLE1BQU0sR0FBRSxFQUFFLEdBQUUsSUFBSTtBQUFBLFFBQUUsS0FBSSxFQUFFLFNBQU8sRUFBRSxVQUFRLE1BQUk7QUFBQSxVQUFFO0FBQUEsTUFBTSxFQUFLO0FBQUEsUUFBQyxJQUFJLElBQUUsR0FBRyxFQUFFLElBQUcsSUFBSTtBQUFBLFFBQUUsSUFBRyxNQUFJO0FBQUEsVUFBRztBQUFBLFFBQU8sSUFBRyxJQUFFLElBQUc7QUFBQSxVQUFDLElBQUksS0FBRyxFQUFFLEdBQUcsUUFBUSxHQUFHLE1BQUksSUFBRSxJQUFFLEtBQUcsRUFBRSxHQUFHLFNBQU87QUFBQSxVQUFFLEVBQUUsS0FBRyxFQUFFLEdBQUcsVUFBVSxHQUFFLENBQUMsR0FBRSxFQUFFLEtBQUcsRUFBRSxHQUFHLFVBQVUsR0FBRSxDQUFDLEVBQUUsS0FBSyxHQUFFLEVBQUUsS0FBRztBQUFBLFFBQUU7QUFBQTtBQUFBLE1BQUUsSUFBSSxJQUFFLEVBQUUsSUFBRyxJQUFFO0FBQUEsTUFBRyxJQUFHLEtBQUssUUFBUSxVQUFTO0FBQUEsUUFBQyxJQUFJLElBQUUsS0FBSyxNQUFNLE1BQU0sa0JBQWtCLEtBQUssQ0FBQztBQUFBLFFBQUUsTUFBSSxJQUFFLEVBQUUsSUFBRyxJQUFFLEVBQUU7QUFBQSxNQUFHLEVBQU07QUFBQSxZQUFFLEVBQUUsS0FBRyxFQUFFLEdBQUcsTUFBTSxHQUFFLEVBQUUsSUFBRTtBQUFBLE1BQUcsT0FBTyxJQUFFLEVBQUUsS0FBSyxHQUFFLEtBQUssTUFBTSxNQUFNLGtCQUFrQixLQUFLLENBQUMsTUFBSSxLQUFLLFFBQVEsWUFBVSxDQUFDLEtBQUssTUFBTSxNQUFNLGdCQUFnQixLQUFLLENBQUMsSUFBRSxJQUFFLEVBQUUsTUFBTSxDQUFDLElBQUUsSUFBRSxFQUFFLE1BQU0sR0FBRSxFQUFFLElBQUcsR0FBRyxHQUFFLEVBQUMsTUFBSyxLQUFHLEVBQUUsUUFBUSxLQUFLLE1BQU0sT0FBTyxnQkFBZSxJQUFJLEdBQUUsT0FBTSxLQUFHLEVBQUUsUUFBUSxLQUFLLE1BQU0sT0FBTyxnQkFBZSxJQUFJLEVBQUMsR0FBRSxFQUFFLElBQUcsS0FBSyxPQUFNLEtBQUssS0FBSztBQUFBLElBQUM7QUFBQTtBQUFBLEVBQUUsT0FBTyxDQUFDLEdBQUUsR0FBRTtBQUFBLElBQUMsSUFBSTtBQUFBLElBQUUsS0FBSSxJQUFFLEtBQUssTUFBTSxPQUFPLFFBQVEsS0FBSyxDQUFDLE9BQUssSUFBRSxLQUFLLE1BQU0sT0FBTyxPQUFPLEtBQUssQ0FBQyxJQUFHO0FBQUEsTUFBQyxJQUFJLEtBQUcsRUFBRSxNQUFJLEVBQUUsSUFBSSxRQUFRLEtBQUssTUFBTSxNQUFNLHFCQUFvQixHQUFHLEdBQUUsSUFBRSxFQUFFLEVBQUUsWUFBWTtBQUFBLE1BQUcsSUFBRyxDQUFDLEdBQUU7QUFBQSxRQUFDLElBQUksSUFBRSxFQUFFLEdBQUcsT0FBTyxDQUFDO0FBQUEsUUFBRSxPQUFNLEVBQUMsTUFBSyxRQUFPLEtBQUksR0FBRSxNQUFLLEVBQUM7QUFBQSxNQUFDO0FBQUEsTUFBQyxPQUFPLEdBQUcsR0FBRSxHQUFFLEVBQUUsSUFBRyxLQUFLLE9BQU0sS0FBSyxLQUFLO0FBQUEsSUFBQztBQUFBO0FBQUEsRUFBRSxRQUFRLENBQUMsR0FBRSxHQUFFLElBQUUsSUFBRztBQUFBLElBQUMsSUFBSSxJQUFFLEtBQUssTUFBTSxPQUFPLGVBQWUsS0FBSyxDQUFDO0FBQUEsSUFBRSxJQUFHLENBQUMsS0FBRyxFQUFFLE1BQUksRUFBRSxNQUFNLEtBQUssTUFBTSxNQUFNLG1CQUFtQjtBQUFBLE1BQUU7QUFBQSxJQUFPLElBQUcsRUFBRSxFQUFFLE1BQUksRUFBRSxNQUFJLE9BQUssQ0FBQyxLQUFHLEtBQUssTUFBTSxPQUFPLFlBQVksS0FBSyxDQUFDLEdBQUU7QUFBQSxNQUFDLElBQUksSUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsU0FBTyxHQUFFLEdBQUUsR0FBRSxJQUFFLEdBQUUsSUFBRSxHQUFFLElBQUUsRUFBRSxHQUFHLE9BQUssTUFBSSxLQUFLLE1BQU0sT0FBTyxvQkFBa0IsS0FBSyxNQUFNLE9BQU87QUFBQSxNQUFrQixLQUFJLEVBQUUsWUFBVSxHQUFFLElBQUUsRUFBRSxNQUFNLEtBQUcsRUFBRSxTQUFPLENBQUMsR0FBRyxJQUFFLEVBQUUsS0FBSyxDQUFDLE1BQUksUUFBTTtBQUFBLFFBQUMsSUFBRyxJQUFFLEVBQUUsTUFBSSxFQUFFLE1BQUksRUFBRSxNQUFJLEVBQUUsTUFBSSxFQUFFLE1BQUksRUFBRSxJQUFHLENBQUM7QUFBQSxVQUFFO0FBQUEsUUFBUyxJQUFHLElBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxRQUFPLEVBQUUsTUFBSSxFQUFFLElBQUc7QUFBQSxVQUFDLEtBQUc7QUFBQSxVQUFFO0FBQUEsUUFBUSxFQUFNLFVBQUksRUFBRSxNQUFJLEVBQUUsT0FBSyxJQUFFLEtBQUcsR0FBRyxJQUFFLEtBQUcsSUFBRztBQUFBLFVBQUMsS0FBRztBQUFBLFVBQUU7QUFBQSxRQUFRO0FBQUEsUUFBQyxJQUFHLEtBQUcsR0FBRSxJQUFFO0FBQUEsVUFBRTtBQUFBLFFBQVMsSUFBRSxLQUFLLElBQUksR0FBRSxJQUFFLElBQUUsQ0FBQztBQUFBLFFBQUUsSUFBSSxJQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLFFBQU8sSUFBRSxFQUFFLE1BQU0sR0FBRSxJQUFFLEVBQUUsUUFBTSxJQUFFLENBQUM7QUFBQSxRQUFFLElBQUcsS0FBSyxJQUFJLEdBQUUsQ0FBQyxJQUFFLEdBQUU7QUFBQSxVQUFDLElBQUksSUFBRSxFQUFFLE1BQU0sR0FBRSxFQUFFO0FBQUEsVUFBRSxPQUFNLEVBQUMsTUFBSyxNQUFLLEtBQUksR0FBRSxNQUFLLEdBQUUsUUFBTyxLQUFLLE1BQU0sYUFBYSxDQUFDLEVBQUM7QUFBQSxRQUFDO0FBQUEsUUFBQyxJQUFJLElBQUUsRUFBRSxNQUFNLEdBQUUsRUFBRTtBQUFBLFFBQUUsT0FBTSxFQUFDLE1BQUssVUFBUyxLQUFJLEdBQUUsTUFBSyxHQUFFLFFBQU8sS0FBSyxNQUFNLGFBQWEsQ0FBQyxFQUFDO0FBQUEsTUFBQztBQUFBLElBQUM7QUFBQTtBQUFBLEVBQUUsUUFBUSxDQUFDLEdBQUU7QUFBQSxJQUFDLElBQUksSUFBRSxLQUFLLE1BQU0sT0FBTyxLQUFLLEtBQUssQ0FBQztBQUFBLElBQUUsSUFBRyxHQUFFO0FBQUEsTUFBQyxJQUFJLElBQUUsRUFBRSxHQUFHLFFBQVEsS0FBSyxNQUFNLE1BQU0sbUJBQWtCLEdBQUcsR0FBRSxJQUFFLEtBQUssTUFBTSxNQUFNLGFBQWEsS0FBSyxDQUFDLEdBQUUsSUFBRSxLQUFLLE1BQU0sTUFBTSxrQkFBa0IsS0FBSyxDQUFDLEtBQUcsS0FBSyxNQUFNLE1BQU0sZ0JBQWdCLEtBQUssQ0FBQztBQUFBLE1BQUUsT0FBTyxLQUFHLE1BQUksSUFBRSxFQUFFLFVBQVUsR0FBRSxFQUFFLFNBQU8sQ0FBQyxJQUFHLEVBQUMsTUFBSyxZQUFXLEtBQUksRUFBRSxJQUFHLE1BQUssRUFBQztBQUFBLElBQUM7QUFBQTtBQUFBLEVBQUUsRUFBRSxDQUFDLEdBQUU7QUFBQSxJQUFDLElBQUksSUFBRSxLQUFLLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQztBQUFBLElBQUUsSUFBRztBQUFBLE1BQUUsT0FBTSxFQUFDLE1BQUssTUFBSyxLQUFJLEVBQUUsR0FBRTtBQUFBO0FBQUEsRUFBRSxHQUFHLENBQUMsR0FBRTtBQUFBLElBQUMsSUFBSSxJQUFFLEtBQUssTUFBTSxPQUFPLElBQUksS0FBSyxDQUFDO0FBQUEsSUFBRSxJQUFHO0FBQUEsTUFBRSxPQUFNLEVBQUMsTUFBSyxPQUFNLEtBQUksRUFBRSxJQUFHLE1BQUssRUFBRSxJQUFHLFFBQU8sS0FBSyxNQUFNLGFBQWEsRUFBRSxFQUFFLEVBQUM7QUFBQTtBQUFBLEVBQUUsUUFBUSxDQUFDLEdBQUU7QUFBQSxJQUFDLElBQUksSUFBRSxLQUFLLE1BQU0sT0FBTyxTQUFTLEtBQUssQ0FBQztBQUFBLElBQUUsSUFBRyxHQUFFO0FBQUEsTUFBQyxJQUFJLEdBQUU7QUFBQSxNQUFFLE9BQU8sRUFBRSxPQUFLLE9BQUssSUFBRSxFQUFFLElBQUcsSUFBRSxZQUFVLE1BQUksSUFBRSxFQUFFLElBQUcsSUFBRSxJQUFHLEVBQUMsTUFBSyxRQUFPLEtBQUksRUFBRSxJQUFHLE1BQUssR0FBRSxNQUFLLEdBQUUsUUFBTyxDQUFDLEVBQUMsTUFBSyxRQUFPLEtBQUksR0FBRSxNQUFLLEVBQUMsQ0FBQyxFQUFDO0FBQUEsSUFBQztBQUFBO0FBQUEsRUFBRSxHQUFHLENBQUMsR0FBRTtBQUFBLElBQUMsSUFBSTtBQUFBLElBQUUsSUFBRyxJQUFFLEtBQUssTUFBTSxPQUFPLElBQUksS0FBSyxDQUFDLEdBQUU7QUFBQSxNQUFDLElBQUksR0FBRTtBQUFBLE1BQUUsSUFBRyxFQUFFLE9BQUs7QUFBQSxRQUFJLElBQUUsRUFBRSxJQUFHLElBQUUsWUFBVTtBQUFBLE1BQU07QUFBQSxRQUFDLElBQUk7QUFBQSxRQUFFO0FBQUEsVUFBRyxJQUFFLEVBQUUsSUFBRyxFQUFFLEtBQUcsS0FBSyxNQUFNLE9BQU8sV0FBVyxLQUFLLEVBQUUsRUFBRSxJQUFJLE1BQUk7QUFBQSxlQUFTLE1BQUksRUFBRTtBQUFBLFFBQUksSUFBRSxFQUFFLElBQUcsRUFBRSxPQUFLLFNBQU8sSUFBRSxZQUFVLEVBQUUsS0FBRyxJQUFFLEVBQUU7QUFBQTtBQUFBLE1BQUcsT0FBTSxFQUFDLE1BQUssUUFBTyxLQUFJLEVBQUUsSUFBRyxNQUFLLEdBQUUsTUFBSyxHQUFFLFFBQU8sQ0FBQyxFQUFDLE1BQUssUUFBTyxLQUFJLEdBQUUsTUFBSyxFQUFDLENBQUMsRUFBQztBQUFBLElBQUM7QUFBQTtBQUFBLEVBQUUsVUFBVSxDQUFDLEdBQUU7QUFBQSxJQUFDLElBQUksSUFBRSxLQUFLLE1BQU0sT0FBTyxLQUFLLEtBQUssQ0FBQztBQUFBLElBQUUsSUFBRyxHQUFFO0FBQUEsTUFBQyxJQUFJLElBQUUsS0FBSyxNQUFNLE1BQU07QUFBQSxNQUFXLE9BQU0sRUFBQyxNQUFLLFFBQU8sS0FBSSxFQUFFLElBQUcsTUFBSyxFQUFFLElBQUcsU0FBUSxFQUFDO0FBQUEsSUFBQztBQUFBO0FBQUU7QUFBRSxJQUFJLElBQUUsTUFBTSxFQUFDO0FBQUEsRUFBQztBQUFBLEVBQU87QUFBQSxFQUFRO0FBQUEsRUFBTTtBQUFBLEVBQVk7QUFBQSxFQUFVLFdBQVcsQ0FBQyxHQUFFO0FBQUEsSUFBQyxLQUFLLFNBQU8sQ0FBQyxHQUFFLEtBQUssT0FBTyxRQUFNLE9BQU8sT0FBTyxJQUFJLEdBQUUsS0FBSyxVQUFRLEtBQUcsR0FBRSxLQUFLLFFBQVEsWUFBVSxLQUFLLFFBQVEsYUFBVyxJQUFJLEdBQUUsS0FBSyxZQUFVLEtBQUssUUFBUSxXQUFVLEtBQUssVUFBVSxVQUFRLEtBQUssU0FBUSxLQUFLLFVBQVUsUUFBTSxNQUFLLEtBQUssY0FBWSxDQUFDLEdBQUUsS0FBSyxRQUFNLEVBQUMsUUFBTyxPQUFHLFlBQVcsT0FBRyxLQUFJLEtBQUU7QUFBQSxJQUFFLElBQUksSUFBRSxFQUFDLE9BQU0sR0FBRSxPQUFNLEVBQUUsUUFBTyxRQUFPLEVBQUUsT0FBTTtBQUFBLElBQUUsS0FBSyxRQUFRLFlBQVUsRUFBRSxRQUFNLEVBQUUsVUFBUyxFQUFFLFNBQU8sRUFBRSxZQUFVLEtBQUssUUFBUSxRQUFNLEVBQUUsUUFBTSxFQUFFLEtBQUksS0FBSyxRQUFRLFNBQU8sRUFBRSxTQUFPLEVBQUUsU0FBTyxFQUFFLFNBQU8sRUFBRSxNQUFLLEtBQUssVUFBVSxRQUFNO0FBQUE7QUFBQSxhQUFhLEtBQUssR0FBRTtBQUFBLElBQUMsT0FBTSxFQUFDLE9BQU0sR0FBRSxRQUFPLEVBQUM7QUFBQTtBQUFBLFNBQVMsR0FBRyxDQUFDLEdBQUUsR0FBRTtBQUFBLElBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQztBQUFBO0FBQUEsU0FBUyxTQUFTLENBQUMsR0FBRSxHQUFFO0FBQUEsSUFBQyxPQUFPLElBQUksRUFBRSxDQUFDLEVBQUUsYUFBYSxDQUFDO0FBQUE7QUFBQSxFQUFFLEdBQUcsQ0FBQyxHQUFFO0FBQUEsSUFBQyxJQUFFLEVBQUUsUUFBUSxFQUFFLGdCQUFlO0FBQUEsQ0FDdnFKLEdBQUUsS0FBSyxZQUFZLEdBQUUsS0FBSyxNQUFNO0FBQUEsSUFBRSxTQUFRLElBQUUsRUFBRSxJQUFFLEtBQUssWUFBWSxRQUFPLEtBQUk7QUFBQSxNQUFDLElBQUksSUFBRSxLQUFLLFlBQVk7QUFBQSxNQUFHLEtBQUssYUFBYSxFQUFFLEtBQUksRUFBRSxNQUFNO0FBQUEsSUFBQztBQUFBLElBQUMsT0FBTyxLQUFLLGNBQVksQ0FBQyxHQUFFLEtBQUs7QUFBQTtBQUFBLEVBQU8sV0FBVyxDQUFDLEdBQUUsSUFBRSxDQUFDLEdBQUUsSUFBRSxPQUFHO0FBQUEsSUFBQyxLQUFJLEtBQUssUUFBUSxhQUFXLElBQUUsRUFBRSxRQUFRLEVBQUUsZUFBYyxNQUFNLEVBQUUsUUFBUSxFQUFFLFdBQVUsRUFBRSxHQUFHLEtBQUc7QUFBQSxNQUFDLElBQUk7QUFBQSxNQUFFLElBQUcsS0FBSyxRQUFRLFlBQVksT0FBTyxLQUFLLFFBQUksSUFBRSxFQUFFLEtBQUssRUFBQyxPQUFNLEtBQUksR0FBRSxHQUFFLENBQUMsTUFBSSxJQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksTUFBTSxHQUFFLEVBQUUsS0FBSyxDQUFDLEdBQUUsUUFBSSxLQUFFO0FBQUEsUUFBRTtBQUFBLE1BQVMsSUFBRyxJQUFFLEtBQUssVUFBVSxNQUFNLENBQUMsR0FBRTtBQUFBLFFBQUMsSUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLE1BQU07QUFBQSxRQUFFLElBQUksSUFBRSxFQUFFLEdBQUcsRUFBRTtBQUFBLFFBQUUsRUFBRSxJQUFJLFdBQVMsS0FBRyxNQUFTLFlBQUUsRUFBRSxPQUFLO0FBQUEsSUFDeGhCLEVBQUUsS0FBSyxDQUFDO0FBQUEsUUFBRTtBQUFBLE1BQVE7QUFBQSxNQUFDLElBQUcsSUFBRSxLQUFLLFVBQVUsS0FBSyxDQUFDLEdBQUU7QUFBQSxRQUFDLElBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxNQUFNO0FBQUEsUUFBRSxJQUFJLElBQUUsRUFBRSxHQUFHLEVBQUU7QUFBQSxRQUFFLEdBQUcsU0FBTyxlQUFhLEdBQUcsU0FBTyxVQUFRLEVBQUUsUUFBTSxFQUFFLElBQUksU0FBUztBQUFBLENBQzVKLElBQUUsS0FBRztBQUFBLEtBQ0gsRUFBRSxLQUFJLEVBQUUsUUFBTTtBQUFBLElBQ2YsRUFBRSxNQUFLLEtBQUssWUFBWSxHQUFHLEVBQUUsRUFBRSxNQUFJLEVBQUUsUUFBTSxFQUFFLEtBQUssQ0FBQztBQUFBLFFBQUU7QUFBQSxNQUFRO0FBQUEsTUFBQyxJQUFHLElBQUUsS0FBSyxVQUFVLE9BQU8sQ0FBQyxHQUFFO0FBQUEsUUFBQyxJQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksTUFBTSxHQUFFLEVBQUUsS0FBSyxDQUFDO0FBQUEsUUFBRTtBQUFBLE1BQVE7QUFBQSxNQUFDLElBQUcsSUFBRSxLQUFLLFVBQVUsUUFBUSxDQUFDLEdBQUU7QUFBQSxRQUFDLElBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxNQUFNLEdBQUUsRUFBRSxLQUFLLENBQUM7QUFBQSxRQUFFO0FBQUEsTUFBUTtBQUFBLE1BQUMsSUFBRyxJQUFFLEtBQUssVUFBVSxHQUFHLENBQUMsR0FBRTtBQUFBLFFBQUMsSUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLE1BQU0sR0FBRSxFQUFFLEtBQUssQ0FBQztBQUFBLFFBQUU7QUFBQSxNQUFRO0FBQUEsTUFBQyxJQUFHLElBQUUsS0FBSyxVQUFVLFdBQVcsQ0FBQyxHQUFFO0FBQUEsUUFBQyxJQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksTUFBTSxHQUFFLEVBQUUsS0FBSyxDQUFDO0FBQUEsUUFBRTtBQUFBLE1BQVE7QUFBQSxNQUFDLElBQUcsSUFBRSxLQUFLLFVBQVUsS0FBSyxDQUFDLEdBQUU7QUFBQSxRQUFDLElBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxNQUFNLEdBQUUsRUFBRSxLQUFLLENBQUM7QUFBQSxRQUFFO0FBQUEsTUFBUTtBQUFBLE1BQUMsSUFBRyxJQUFFLEtBQUssVUFBVSxLQUFLLENBQUMsR0FBRTtBQUFBLFFBQUMsSUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLE1BQU0sR0FBRSxFQUFFLEtBQUssQ0FBQztBQUFBLFFBQUU7QUFBQSxNQUFRO0FBQUEsTUFBQyxJQUFHLElBQUUsS0FBSyxVQUFVLElBQUksQ0FBQyxHQUFFO0FBQUEsUUFBQyxJQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksTUFBTTtBQUFBLFFBQUUsSUFBSSxJQUFFLEVBQUUsR0FBRyxFQUFFO0FBQUEsUUFBRSxHQUFHLFNBQU8sZUFBYSxHQUFHLFNBQU8sVUFBUSxFQUFFLFFBQU0sRUFBRSxJQUFJLFNBQVM7QUFBQSxDQUN2cEIsSUFBRSxLQUFHO0FBQUEsS0FDSCxFQUFFLEtBQUksRUFBRSxRQUFNO0FBQUEsSUFDZixFQUFFLEtBQUksS0FBSyxZQUFZLEdBQUcsRUFBRSxFQUFFLE1BQUksRUFBRSxRQUFNLEtBQUssT0FBTyxNQUFNLEVBQUUsU0FBTyxLQUFLLE9BQU8sTUFBTSxFQUFFLE9BQUssRUFBQyxNQUFLLEVBQUUsTUFBSyxPQUFNLEVBQUUsTUFBSyxHQUFFLEVBQUUsS0FBSyxDQUFDO0FBQUEsUUFBRztBQUFBLE1BQVE7QUFBQSxNQUFDLElBQUcsSUFBRSxLQUFLLFVBQVUsTUFBTSxDQUFDLEdBQUU7QUFBQSxRQUFDLElBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxNQUFNLEdBQUUsRUFBRSxLQUFLLENBQUM7QUFBQSxRQUFFO0FBQUEsTUFBUTtBQUFBLE1BQUMsSUFBRyxJQUFFLEtBQUssVUFBVSxTQUFTLENBQUMsR0FBRTtBQUFBLFFBQUMsSUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLE1BQU0sR0FBRSxFQUFFLEtBQUssQ0FBQztBQUFBLFFBQUU7QUFBQSxNQUFRO0FBQUEsTUFBQyxJQUFJLElBQUU7QUFBQSxNQUFFLElBQUcsS0FBSyxRQUFRLFlBQVksWUFBVztBQUFBLFFBQUMsSUFBSSxJQUFFLElBQUUsR0FBRSxJQUFFLEVBQUUsTUFBTSxDQUFDLEdBQUU7QUFBQSxRQUFFLEtBQUssUUFBUSxXQUFXLFdBQVcsUUFBUSxPQUFHO0FBQUEsVUFBQyxJQUFFLEVBQUUsS0FBSyxFQUFDLE9BQU0sS0FBSSxHQUFFLENBQUMsR0FBRSxPQUFPLEtBQUcsWUFBVSxLQUFHLE1BQUksSUFBRSxLQUFLLElBQUksR0FBRSxDQUFDO0FBQUEsU0FBRyxHQUFFLElBQUUsSUFBRSxLQUFHLEtBQUcsTUFBSSxJQUFFLEVBQUUsVUFBVSxHQUFFLElBQUUsQ0FBQztBQUFBLE1BQUU7QUFBQSxNQUFDLElBQUcsS0FBSyxNQUFNLFFBQU0sSUFBRSxLQUFLLFVBQVUsVUFBVSxDQUFDLElBQUc7QUFBQSxRQUFDLElBQUksSUFBRSxFQUFFLEdBQUcsRUFBRTtBQUFBLFFBQUUsS0FBRyxHQUFHLFNBQU8sZUFBYSxFQUFFLFFBQU0sRUFBRSxJQUFJLFNBQVM7QUFBQSxDQUNub0IsSUFBRSxLQUFHO0FBQUEsS0FDSCxFQUFFLEtBQUksRUFBRSxRQUFNO0FBQUEsSUFDZixFQUFFLE1BQUssS0FBSyxZQUFZLElBQUksR0FBRSxLQUFLLFlBQVksR0FBRyxFQUFFLEVBQUUsTUFBSSxFQUFFLFFBQU0sRUFBRSxLQUFLLENBQUMsR0FBRSxJQUFFLEVBQUUsV0FBUyxFQUFFLFFBQU8sSUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLE1BQU07QUFBQSxRQUFFO0FBQUEsTUFBUTtBQUFBLE1BQUMsSUFBRyxJQUFFLEtBQUssVUFBVSxLQUFLLENBQUMsR0FBRTtBQUFBLFFBQUMsSUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLE1BQU07QUFBQSxRQUFFLElBQUksSUFBRSxFQUFFLEdBQUcsRUFBRTtBQUFBLFFBQUUsR0FBRyxTQUFPLFVBQVEsRUFBRSxRQUFNLEVBQUUsSUFBSSxTQUFTO0FBQUEsQ0FDelAsSUFBRSxLQUFHO0FBQUEsS0FDSCxFQUFFLEtBQUksRUFBRSxRQUFNO0FBQUEsSUFDZixFQUFFLE1BQUssS0FBSyxZQUFZLElBQUksR0FBRSxLQUFLLFlBQVksR0FBRyxFQUFFLEVBQUUsTUFBSSxFQUFFLFFBQU0sRUFBRSxLQUFLLENBQUM7QUFBQSxRQUFFO0FBQUEsTUFBUTtBQUFBLE1BQUMsSUFBRyxHQUFFO0FBQUEsUUFBQyxJQUFJLElBQUUsNEJBQTBCLEVBQUUsV0FBVyxDQUFDO0FBQUEsUUFBRSxJQUFHLEtBQUssUUFBUSxRQUFPO0FBQUEsVUFBQyxRQUFRLE1BQU0sQ0FBQztBQUFBLFVBQUU7QUFBQSxRQUFLLEVBQU07QUFBQSxnQkFBTSxJQUFJLE1BQU0sQ0FBQztBQUFBLE1BQUM7QUFBQSxJQUFDO0FBQUEsSUFBQyxPQUFPLEtBQUssTUFBTSxNQUFJLE1BQUc7QUFBQTtBQUFBLEVBQUUsTUFBTSxDQUFDLEdBQUUsSUFBRSxDQUFDLEdBQUU7QUFBQSxJQUFDLE9BQU8sS0FBSyxZQUFZLEtBQUssRUFBQyxLQUFJLEdBQUUsUUFBTyxFQUFDLENBQUMsR0FBRTtBQUFBO0FBQUEsRUFBRSxZQUFZLENBQUMsR0FBRSxJQUFFLENBQUMsR0FBRTtBQUFBLElBQUMsSUFBSSxJQUFFLEdBQUUsSUFBRTtBQUFBLElBQUssSUFBRyxLQUFLLE9BQU8sT0FBTTtBQUFBLE1BQUMsSUFBSSxJQUFFLE9BQU8sS0FBSyxLQUFLLE9BQU8sS0FBSztBQUFBLE1BQUUsSUFBRyxFQUFFLFNBQU87QUFBQSxRQUFFLE9BQU0sSUFBRSxLQUFLLFVBQVUsTUFBTSxPQUFPLGNBQWMsS0FBSyxDQUFDLE1BQUk7QUFBQSxVQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsTUFBTSxFQUFFLEdBQUcsWUFBWSxHQUFHLElBQUUsR0FBRSxFQUFFLENBQUMsTUFBSSxJQUFFLEVBQUUsTUFBTSxHQUFFLEVBQUUsS0FBSyxJQUFFLE1BQUksSUFBSSxPQUFPLEVBQUUsR0FBRyxTQUFPLENBQUMsSUFBRSxNQUFJLEVBQUUsTUFBTSxLQUFLLFVBQVUsTUFBTSxPQUFPLGNBQWMsU0FBUztBQUFBLElBQUU7QUFBQSxJQUFDLE9BQU0sSUFBRSxLQUFLLFVBQVUsTUFBTSxPQUFPLGVBQWUsS0FBSyxDQUFDLE1BQUk7QUFBQSxNQUFNLElBQUUsRUFBRSxNQUFNLEdBQUUsRUFBRSxLQUFLLElBQUUsT0FBSyxFQUFFLE1BQU0sS0FBSyxVQUFVLE1BQU0sT0FBTyxlQUFlLFNBQVM7QUFBQSxJQUFFLElBQUk7QUFBQSxJQUFFLE9BQU0sSUFBRSxLQUFLLFVBQVUsTUFBTSxPQUFPLFVBQVUsS0FBSyxDQUFDLE1BQUk7QUFBQSxNQUFNLElBQUUsRUFBRSxLQUFHLEVBQUUsR0FBRyxTQUFPLEdBQUUsSUFBRSxFQUFFLE1BQU0sR0FBRSxFQUFFLFFBQU0sQ0FBQyxJQUFFLE1BQUksSUFBSSxPQUFPLEVBQUUsR0FBRyxTQUFPLElBQUUsQ0FBQyxJQUFFLE1BQUksRUFBRSxNQUFNLEtBQUssVUFBVSxNQUFNLE9BQU8sVUFBVSxTQUFTO0FBQUEsSUFBRSxJQUFFLEtBQUssUUFBUSxPQUFPLGNBQWMsS0FBSyxFQUFDLE9BQU0sS0FBSSxHQUFFLENBQUMsS0FBRztBQUFBLElBQUUsSUFBSSxJQUFFLE9BQUcsSUFBRTtBQUFBLElBQUcsTUFBSyxLQUFHO0FBQUEsTUFBQyxNQUFJLElBQUUsS0FBSSxJQUFFO0FBQUEsTUFBRyxJQUFJO0FBQUEsTUFBRSxJQUFHLEtBQUssUUFBUSxZQUFZLFFBQVEsS0FBSyxRQUFJLElBQUUsRUFBRSxLQUFLLEVBQUMsT0FBTSxLQUFJLEdBQUUsR0FBRSxDQUFDLE1BQUksSUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLE1BQU0sR0FBRSxFQUFFLEtBQUssQ0FBQyxHQUFFLFFBQUksS0FBRTtBQUFBLFFBQUU7QUFBQSxNQUFTLElBQUcsSUFBRSxLQUFLLFVBQVUsT0FBTyxDQUFDLEdBQUU7QUFBQSxRQUFDLElBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxNQUFNLEdBQUUsRUFBRSxLQUFLLENBQUM7QUFBQSxRQUFFO0FBQUEsTUFBUTtBQUFBLE1BQUMsSUFBRyxJQUFFLEtBQUssVUFBVSxJQUFJLENBQUMsR0FBRTtBQUFBLFFBQUMsSUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLE1BQU0sR0FBRSxFQUFFLEtBQUssQ0FBQztBQUFBLFFBQUU7QUFBQSxNQUFRO0FBQUEsTUFBQyxJQUFHLElBQUUsS0FBSyxVQUFVLEtBQUssQ0FBQyxHQUFFO0FBQUEsUUFBQyxJQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksTUFBTSxHQUFFLEVBQUUsS0FBSyxDQUFDO0FBQUEsUUFBRTtBQUFBLE1BQVE7QUFBQSxNQUFDLElBQUcsSUFBRSxLQUFLLFVBQVUsUUFBUSxHQUFFLEtBQUssT0FBTyxLQUFLLEdBQUU7QUFBQSxRQUFDLElBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxNQUFNO0FBQUEsUUFBRSxJQUFJLElBQUUsRUFBRSxHQUFHLEVBQUU7QUFBQSxRQUFFLEVBQUUsU0FBTyxVQUFRLEdBQUcsU0FBTyxVQUFRLEVBQUUsT0FBSyxFQUFFLEtBQUksRUFBRSxRQUFNLEVBQUUsUUFBTSxFQUFFLEtBQUssQ0FBQztBQUFBLFFBQUU7QUFBQSxNQUFRO0FBQUEsTUFBQyxJQUFHLElBQUUsS0FBSyxVQUFVLFNBQVMsR0FBRSxHQUFFLENBQUMsR0FBRTtBQUFBLFFBQUMsSUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLE1BQU0sR0FBRSxFQUFFLEtBQUssQ0FBQztBQUFBLFFBQUU7QUFBQSxNQUFRO0FBQUEsTUFBQyxJQUFHLElBQUUsS0FBSyxVQUFVLFNBQVMsQ0FBQyxHQUFFO0FBQUEsUUFBQyxJQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksTUFBTSxHQUFFLEVBQUUsS0FBSyxDQUFDO0FBQUEsUUFBRTtBQUFBLE1BQVE7QUFBQSxNQUFDLElBQUcsSUFBRSxLQUFLLFVBQVUsR0FBRyxDQUFDLEdBQUU7QUFBQSxRQUFDLElBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxNQUFNLEdBQUUsRUFBRSxLQUFLLENBQUM7QUFBQSxRQUFFO0FBQUEsTUFBUTtBQUFBLE1BQUMsSUFBRyxJQUFFLEtBQUssVUFBVSxJQUFJLENBQUMsR0FBRTtBQUFBLFFBQUMsSUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLE1BQU0sR0FBRSxFQUFFLEtBQUssQ0FBQztBQUFBLFFBQUU7QUFBQSxNQUFRO0FBQUEsTUFBQyxJQUFHLElBQUUsS0FBSyxVQUFVLFNBQVMsQ0FBQyxHQUFFO0FBQUEsUUFBQyxJQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksTUFBTSxHQUFFLEVBQUUsS0FBSyxDQUFDO0FBQUEsUUFBRTtBQUFBLE1BQVE7QUFBQSxNQUFDLElBQUcsQ0FBQyxLQUFLLE1BQU0sV0FBUyxJQUFFLEtBQUssVUFBVSxJQUFJLENBQUMsSUFBRztBQUFBLFFBQUMsSUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLE1BQU0sR0FBRSxFQUFFLEtBQUssQ0FBQztBQUFBLFFBQUU7QUFBQSxNQUFRO0FBQUEsTUFBQyxJQUFJLElBQUU7QUFBQSxNQUFFLElBQUcsS0FBSyxRQUFRLFlBQVksYUFBWTtBQUFBLFFBQUMsSUFBSSxJQUFFLElBQUUsR0FBRSxJQUFFLEVBQUUsTUFBTSxDQUFDLEdBQUU7QUFBQSxRQUFFLEtBQUssUUFBUSxXQUFXLFlBQVksUUFBUSxPQUFHO0FBQUEsVUFBQyxJQUFFLEVBQUUsS0FBSyxFQUFDLE9BQU0sS0FBSSxHQUFFLENBQUMsR0FBRSxPQUFPLEtBQUcsWUFBVSxLQUFHLE1BQUksSUFBRSxLQUFLLElBQUksR0FBRSxDQUFDO0FBQUEsU0FBRyxHQUFFLElBQUUsSUFBRSxLQUFHLEtBQUcsTUFBSSxJQUFFLEVBQUUsVUFBVSxHQUFFLElBQUUsQ0FBQztBQUFBLE1BQUU7QUFBQSxNQUFDLElBQUcsSUFBRSxLQUFLLFVBQVUsV0FBVyxDQUFDLEdBQUU7QUFBQSxRQUFDLElBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxNQUFNLEdBQUUsRUFBRSxJQUFJLE1BQU0sRUFBRSxNQUFJLFFBQU0sSUFBRSxFQUFFLElBQUksTUFBTSxFQUFFLElBQUcsSUFBRTtBQUFBLFFBQUcsSUFBSSxJQUFFLEVBQUUsR0FBRyxFQUFFO0FBQUEsUUFBRSxHQUFHLFNBQU8sVUFBUSxFQUFFLE9BQUssRUFBRSxLQUFJLEVBQUUsUUFBTSxFQUFFLFFBQU0sRUFBRSxLQUFLLENBQUM7QUFBQSxRQUFFO0FBQUEsTUFBUTtBQUFBLE1BQUMsSUFBRyxHQUFFO0FBQUEsUUFBQyxJQUFJLElBQUUsNEJBQTBCLEVBQUUsV0FBVyxDQUFDO0FBQUEsUUFBRSxJQUFHLEtBQUssUUFBUSxRQUFPO0FBQUEsVUFBQyxRQUFRLE1BQU0sQ0FBQztBQUFBLFVBQUU7QUFBQSxRQUFLLEVBQU07QUFBQSxnQkFBTSxJQUFJLE1BQU0sQ0FBQztBQUFBLE1BQUM7QUFBQSxJQUFDO0FBQUEsSUFBQyxPQUFPO0FBQUE7QUFBRTtBQUFFLElBQUksSUFBRSxNQUFLO0FBQUEsRUFBQztBQUFBLEVBQVE7QUFBQSxFQUFPLFdBQVcsQ0FBQyxHQUFFO0FBQUEsSUFBQyxLQUFLLFVBQVEsS0FBRztBQUFBO0FBQUEsRUFBRSxLQUFLLENBQUMsR0FBRTtBQUFBLElBQUMsT0FBTTtBQUFBO0FBQUEsRUFBRyxJQUFJLEdBQUUsTUFBSyxHQUFFLE1BQUssR0FBRSxTQUFRLEtBQUc7QUFBQSxJQUFDLElBQUksS0FBRyxLQUFHLElBQUksTUFBTSxFQUFFLGFBQWEsSUFBSSxJQUFHLElBQUUsRUFBRSxRQUFRLEVBQUUsZUFBYyxFQUFFLElBQUU7QUFBQTtBQUFBLElBQzd6RixPQUFPLElBQUUsZ0NBQThCLEVBQUUsQ0FBQyxJQUFFLFFBQU0sSUFBRSxJQUFFLEVBQUUsR0FBRSxJQUFFLEtBQUc7QUFBQSxJQUMvRCxpQkFBZSxJQUFFLElBQUUsRUFBRSxHQUFFLElBQUUsS0FBRztBQUFBO0FBQUE7QUFBQSxFQUM1QixVQUFVLEdBQUUsUUFBTyxLQUFHO0FBQUEsSUFBQyxPQUFNO0FBQUEsRUFDN0IsS0FBSyxPQUFPLE1BQU0sQ0FBQztBQUFBO0FBQUE7QUFBQSxFQUNuQixJQUFJLEdBQUUsTUFBSyxLQUFHO0FBQUEsSUFBQyxPQUFPO0FBQUE7QUFBQSxFQUFFLEdBQUcsQ0FBQyxHQUFFO0FBQUEsSUFBQyxPQUFNO0FBQUE7QUFBQSxFQUFHLE9BQU8sR0FBRSxRQUFPLEdBQUUsT0FBTSxLQUFHO0FBQUEsSUFBQyxPQUFNLEtBQUssS0FBSyxLQUFLLE9BQU8sWUFBWSxDQUFDLE9BQU87QUFBQTtBQUFBO0FBQUEsRUFDcEgsRUFBRSxDQUFDLEdBQUU7QUFBQSxJQUFDLE9BQU07QUFBQTtBQUFBO0FBQUEsRUFDWixJQUFJLENBQUMsR0FBRTtBQUFBLElBQUMsTUFBUSxTQUFKLEdBQWdCLE9BQUosTUFBRSxHQUFRLElBQUU7QUFBQSxJQUFHLFNBQVEsSUFBRSxFQUFFLElBQUUsRUFBRSxNQUFNLFFBQU8sS0FBSTtBQUFBLE1BQUMsSUFBSSxJQUFFLEVBQUUsTUFBTTtBQUFBLE1BQUcsS0FBRyxLQUFLLFNBQVMsQ0FBQztBQUFBLElBQUM7QUFBQSxJQUFDLElBQUksSUFBRSxJQUFFLE9BQUssTUFBSyxJQUFFLEtBQUcsTUFBSSxJQUFFLGFBQVcsSUFBRSxNQUFJO0FBQUEsSUFBRyxPQUFNLE1BQUksSUFBRSxJQUFFO0FBQUEsSUFDN0ssSUFBRSxPQUFLLElBQUU7QUFBQTtBQUFBO0FBQUEsRUFDVCxRQUFRLENBQUMsR0FBRTtBQUFBLElBQUMsT0FBTSxPQUFPLEtBQUssT0FBTyxNQUFNLEVBQUUsTUFBTTtBQUFBO0FBQUE7QUFBQSxFQUNuRCxRQUFRLEdBQUUsU0FBUSxLQUFHO0FBQUEsSUFBQyxPQUFNLGFBQVcsSUFBRSxnQkFBYyxNQUFJO0FBQUE7QUFBQSxFQUFnQyxTQUFTLEdBQUUsUUFBTyxLQUFHO0FBQUEsSUFBQyxPQUFNLE1BQU0sS0FBSyxPQUFPLFlBQVksQ0FBQztBQUFBO0FBQUE7QUFBQSxFQUN0SixLQUFLLENBQUMsR0FBRTtBQUFBLElBQUMsSUFBSSxJQUFFLElBQUcsSUFBRTtBQUFBLElBQUcsU0FBUSxJQUFFLEVBQUUsSUFBRSxFQUFFLE9BQU8sUUFBTztBQUFBLE1BQUksS0FBRyxLQUFLLFVBQVUsRUFBRSxPQUFPLEVBQUU7QUFBQSxJQUFFLEtBQUcsS0FBSyxTQUFTLEVBQUMsTUFBSyxFQUFDLENBQUM7QUFBQSxJQUFFLElBQUksSUFBRTtBQUFBLElBQUcsU0FBUSxJQUFFLEVBQUUsSUFBRSxFQUFFLEtBQUssUUFBTyxLQUFJO0FBQUEsTUFBQyxJQUFJLElBQUUsRUFBRSxLQUFLO0FBQUEsTUFBRyxJQUFFO0FBQUEsTUFBRyxTQUFRLElBQUUsRUFBRSxJQUFFLEVBQUUsUUFBTztBQUFBLFFBQUksS0FBRyxLQUFLLFVBQVUsRUFBRSxFQUFFO0FBQUEsTUFBRSxLQUFHLEtBQUssU0FBUyxFQUFDLE1BQUssRUFBQyxDQUFDO0FBQUEsSUFBQztBQUFBLElBQUMsT0FBTyxNQUFJLElBQUUsVUFBVSxjQUFhO0FBQUE7QUFBQSxJQUVwUyxJQUFFO0FBQUEsSUFDRixJQUFFO0FBQUE7QUFBQTtBQUFBLEVBQ0YsUUFBUSxHQUFFLE1BQUssS0FBRztBQUFBLElBQUMsT0FBTTtBQUFBLEVBQ3pCO0FBQUE7QUFBQTtBQUFBLEVBQ0EsU0FBUyxDQUFDLEdBQUU7QUFBQSxJQUFDLElBQUksSUFBRSxLQUFLLE9BQU8sWUFBWSxFQUFFLE1BQU0sR0FBRSxJQUFFLEVBQUUsU0FBTyxPQUFLO0FBQUEsSUFBSyxRQUFPLEVBQUUsUUFBTSxJQUFJLFlBQVksRUFBRSxZQUFVLElBQUksUUFBTSxJQUFFLEtBQUs7QUFBQTtBQUFBO0FBQUEsRUFDdEksTUFBTSxHQUFFLFFBQU8sS0FBRztBQUFBLElBQUMsT0FBTSxXQUFXLEtBQUssT0FBTyxZQUFZLENBQUM7QUFBQTtBQUFBLEVBQWEsRUFBRSxHQUFFLFFBQU8sS0FBRztBQUFBLElBQUMsT0FBTSxPQUFPLEtBQUssT0FBTyxZQUFZLENBQUM7QUFBQTtBQUFBLEVBQVMsUUFBUSxHQUFFLE1BQUssS0FBRztBQUFBLElBQUMsT0FBTSxTQUFTLEVBQUUsR0FBRSxJQUFFO0FBQUE7QUFBQSxFQUFXLEVBQUUsQ0FBQyxHQUFFO0FBQUEsSUFBQyxPQUFNO0FBQUE7QUFBQSxFQUFPLEdBQUcsR0FBRSxRQUFPLEtBQUc7QUFBQSxJQUFDLE9BQU0sUUFBUSxLQUFLLE9BQU8sWUFBWSxDQUFDO0FBQUE7QUFBQSxFQUFVLElBQUksR0FBRSxNQUFLLEdBQUUsT0FBTSxHQUFFLFFBQU8sS0FBRztBQUFBLElBQUMsSUFBSSxJQUFFLEtBQUssT0FBTyxZQUFZLENBQUMsR0FBRSxJQUFFLEVBQUUsQ0FBQztBQUFBLElBQUUsSUFBRyxNQUFJO0FBQUEsTUFBSyxPQUFPO0FBQUEsSUFBRSxJQUFFO0FBQUEsSUFBRSxJQUFJLElBQUUsY0FBWSxJQUFFO0FBQUEsSUFBSSxPQUFPLE1BQUksS0FBRyxhQUFXLEVBQUUsQ0FBQyxJQUFFLE1BQUssS0FBRyxNQUFJLElBQUUsUUFBTztBQUFBO0FBQUEsRUFBRSxLQUFLLEdBQUUsTUFBSyxHQUFFLE9BQU0sR0FBRSxNQUFLLEdBQUUsUUFBTyxLQUFHO0FBQUEsSUFBQyxNQUFJLElBQUUsS0FBSyxPQUFPLFlBQVksR0FBRSxLQUFLLE9BQU8sWUFBWTtBQUFBLElBQUcsSUFBSSxJQUFFLEVBQUUsQ0FBQztBQUFBLElBQUUsSUFBRyxNQUFJO0FBQUEsTUFBSyxPQUFPLEVBQUUsQ0FBQztBQUFBLElBQUUsSUFBRTtBQUFBLElBQUUsSUFBSSxJQUFFLGFBQWEsV0FBVztBQUFBLElBQUssT0FBTyxNQUFJLEtBQUcsV0FBVyxFQUFFLENBQUMsT0FBTSxLQUFHLEtBQUk7QUFBQTtBQUFBLEVBQUUsSUFBSSxDQUFDLEdBQUU7QUFBQSxJQUFDLE9BQU0sWUFBVyxLQUFHLEVBQUUsU0FBTyxLQUFLLE9BQU8sWUFBWSxFQUFFLE1BQU0sS0FBRSxhQUFZLE1BQUcsRUFBRSxVQUFRLEVBQUUsT0FBSyxFQUFFLEVBQUUsSUFBSTtBQUFBO0FBQUU7QUFBRSxJQUFJLElBQUUsTUFBSztBQUFBLEVBQUMsTUFBTSxHQUFFLE1BQUssS0FBRztBQUFBLElBQUMsT0FBTztBQUFBO0FBQUEsRUFBRSxFQUFFLEdBQUUsTUFBSyxLQUFHO0FBQUEsSUFBQyxPQUFPO0FBQUE7QUFBQSxFQUFFLFFBQVEsR0FBRSxNQUFLLEtBQUc7QUFBQSxJQUFDLE9BQU87QUFBQTtBQUFBLEVBQUUsR0FBRyxHQUFFLE1BQUssS0FBRztBQUFBLElBQUMsT0FBTztBQUFBO0FBQUEsRUFBRSxJQUFJLEdBQUUsTUFBSyxLQUFHO0FBQUEsSUFBQyxPQUFPO0FBQUE7QUFBQSxFQUFFLElBQUksR0FBRSxNQUFLLEtBQUc7QUFBQSxJQUFDLE9BQU87QUFBQTtBQUFBLEVBQUUsSUFBSSxHQUFFLE1BQUssS0FBRztBQUFBLElBQUMsT0FBTSxLQUFHO0FBQUE7QUFBQSxFQUFFLEtBQUssR0FBRSxNQUFLLEtBQUc7QUFBQSxJQUFDLE9BQU0sS0FBRztBQUFBO0FBQUEsRUFBRSxFQUFFLEdBQUU7QUFBQSxJQUFDLE9BQU07QUFBQTtBQUFBLEVBQUcsUUFBUSxHQUFFLEtBQUksS0FBRztBQUFBLElBQUMsT0FBTztBQUFBO0FBQUU7QUFBRSxJQUFJLElBQUUsTUFBTSxHQUFDO0FBQUEsRUFBQztBQUFBLEVBQVE7QUFBQSxFQUFTO0FBQUEsRUFBYSxXQUFXLENBQUMsR0FBRTtBQUFBLElBQUMsS0FBSyxVQUFRLEtBQUcsR0FBRSxLQUFLLFFBQVEsV0FBUyxLQUFLLFFBQVEsWUFBVSxJQUFJLEdBQUUsS0FBSyxXQUFTLEtBQUssUUFBUSxVQUFTLEtBQUssU0FBUyxVQUFRLEtBQUssU0FBUSxLQUFLLFNBQVMsU0FBTyxNQUFLLEtBQUssZUFBYSxJQUFJO0FBQUE7QUFBQSxTQUFTLEtBQUssQ0FBQyxHQUFFLEdBQUU7QUFBQSxJQUFDLE9BQU8sSUFBSSxHQUFFLENBQUMsRUFBRSxNQUFNLENBQUM7QUFBQTtBQUFBLFNBQVMsV0FBVyxDQUFDLEdBQUUsR0FBRTtBQUFBLElBQUMsT0FBTyxJQUFJLEdBQUUsQ0FBQyxFQUFFLFlBQVksQ0FBQztBQUFBO0FBQUEsRUFBRSxLQUFLLENBQUMsR0FBRTtBQUFBLElBQUMsSUFBSSxJQUFFO0FBQUEsSUFBRyxTQUFRLElBQUUsRUFBRSxJQUFFLEVBQUUsUUFBTyxLQUFJO0FBQUEsTUFBQyxJQUFJLElBQUUsRUFBRTtBQUFBLE1BQUcsSUFBRyxLQUFLLFFBQVEsWUFBWSxZQUFZLEVBQUUsT0FBTTtBQUFBLFFBQUMsSUFBSSxJQUFFLEdBQUUsSUFBRSxLQUFLLFFBQVEsV0FBVyxVQUFVLEVBQUUsTUFBTSxLQUFLLEVBQUMsUUFBTyxLQUFJLEdBQUUsQ0FBQztBQUFBLFFBQUUsSUFBRyxNQUFJLFNBQUksQ0FBQyxDQUFDLFNBQVEsTUFBSyxXQUFVLFFBQU8sU0FBUSxjQUFhLFFBQU8sUUFBTyxPQUFNLGFBQVksTUFBTSxFQUFFLFNBQVMsRUFBRSxJQUFJLEdBQUU7QUFBQSxVQUFDLEtBQUcsS0FBRztBQUFBLFVBQUc7QUFBQSxRQUFRO0FBQUEsTUFBQztBQUFBLE1BQUMsSUFBSSxJQUFFO0FBQUEsTUFBRSxRQUFPLEVBQUU7QUFBQSxhQUFVLFNBQVE7QUFBQSxVQUFDLEtBQUcsS0FBSyxTQUFTLE1BQU0sQ0FBQztBQUFBLFVBQUU7QUFBQSxRQUFLO0FBQUEsYUFBSyxNQUFLO0FBQUEsVUFBQyxLQUFHLEtBQUssU0FBUyxHQUFHLENBQUM7QUFBQSxVQUFFO0FBQUEsUUFBSztBQUFBLGFBQUssV0FBVTtBQUFBLFVBQUMsS0FBRyxLQUFLLFNBQVMsUUFBUSxDQUFDO0FBQUEsVUFBRTtBQUFBLFFBQUs7QUFBQSxhQUFLLFFBQU87QUFBQSxVQUFDLEtBQUcsS0FBSyxTQUFTLEtBQUssQ0FBQztBQUFBLFVBQUU7QUFBQSxRQUFLO0FBQUEsYUFBSyxTQUFRO0FBQUEsVUFBQyxLQUFHLEtBQUssU0FBUyxNQUFNLENBQUM7QUFBQSxVQUFFO0FBQUEsUUFBSztBQUFBLGFBQUssY0FBYTtBQUFBLFVBQUMsS0FBRyxLQUFLLFNBQVMsV0FBVyxDQUFDO0FBQUEsVUFBRTtBQUFBLFFBQUs7QUFBQSxhQUFLLFFBQU87QUFBQSxVQUFDLEtBQUcsS0FBSyxTQUFTLEtBQUssQ0FBQztBQUFBLFVBQUU7QUFBQSxRQUFLO0FBQUEsYUFBSyxZQUFXO0FBQUEsVUFBQyxLQUFHLEtBQUssU0FBUyxTQUFTLENBQUM7QUFBQSxVQUFFO0FBQUEsUUFBSztBQUFBLGFBQUssUUFBTztBQUFBLFVBQUMsS0FBRyxLQUFLLFNBQVMsS0FBSyxDQUFDO0FBQUEsVUFBRTtBQUFBLFFBQUs7QUFBQSxhQUFLLE9BQU07QUFBQSxVQUFDLEtBQUcsS0FBSyxTQUFTLElBQUksQ0FBQztBQUFBLFVBQUU7QUFBQSxRQUFLO0FBQUEsYUFBSyxhQUFZO0FBQUEsVUFBQyxLQUFHLEtBQUssU0FBUyxVQUFVLENBQUM7QUFBQSxVQUFFO0FBQUEsUUFBSztBQUFBLGFBQUssUUFBTztBQUFBLFVBQUMsS0FBRyxLQUFLLFNBQVMsS0FBSyxDQUFDO0FBQUEsVUFBRTtBQUFBLFFBQUs7QUFBQSxpQkFBUztBQUFBLFVBQUMsSUFBSSxJQUFFLGlCQUFlLEVBQUUsT0FBSztBQUFBLFVBQXdCLElBQUcsS0FBSyxRQUFRO0FBQUEsWUFBTyxPQUFPLFFBQVEsTUFBTSxDQUFDLEdBQUU7QUFBQSxVQUFHLE1BQU0sSUFBSSxNQUFNLENBQUM7QUFBQSxRQUFDO0FBQUE7QUFBQSxJQUFFO0FBQUEsSUFBQyxPQUFPO0FBQUE7QUFBQSxFQUFFLFdBQVcsQ0FBQyxHQUFFLElBQUUsS0FBSyxVQUFTO0FBQUEsSUFBQyxJQUFJLElBQUU7QUFBQSxJQUFHLFNBQVEsSUFBRSxFQUFFLElBQUUsRUFBRSxRQUFPLEtBQUk7QUFBQSxNQUFDLElBQUksSUFBRSxFQUFFO0FBQUEsTUFBRyxJQUFHLEtBQUssUUFBUSxZQUFZLFlBQVksRUFBRSxPQUFNO0FBQUEsUUFBQyxJQUFJLElBQUUsS0FBSyxRQUFRLFdBQVcsVUFBVSxFQUFFLE1BQU0sS0FBSyxFQUFDLFFBQU8sS0FBSSxHQUFFLENBQUM7QUFBQSxRQUFFLElBQUcsTUFBSSxTQUFJLENBQUMsQ0FBQyxVQUFTLFFBQU8sUUFBTyxTQUFRLFVBQVMsTUFBSyxZQUFXLE1BQUssT0FBTSxNQUFNLEVBQUUsU0FBUyxFQUFFLElBQUksR0FBRTtBQUFBLFVBQUMsS0FBRyxLQUFHO0FBQUEsVUFBRztBQUFBLFFBQVE7QUFBQSxNQUFDO0FBQUEsTUFBQyxJQUFJLElBQUU7QUFBQSxNQUFFLFFBQU8sRUFBRTtBQUFBLGFBQVUsVUFBUztBQUFBLFVBQUMsS0FBRyxFQUFFLEtBQUssQ0FBQztBQUFBLFVBQUU7QUFBQSxRQUFLO0FBQUEsYUFBSyxRQUFPO0FBQUEsVUFBQyxLQUFHLEVBQUUsS0FBSyxDQUFDO0FBQUEsVUFBRTtBQUFBLFFBQUs7QUFBQSxhQUFLLFFBQU87QUFBQSxVQUFDLEtBQUcsRUFBRSxLQUFLLENBQUM7QUFBQSxVQUFFO0FBQUEsUUFBSztBQUFBLGFBQUssU0FBUTtBQUFBLFVBQUMsS0FBRyxFQUFFLE1BQU0sQ0FBQztBQUFBLFVBQUU7QUFBQSxRQUFLO0FBQUEsYUFBSyxZQUFXO0FBQUEs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LE1BQU0sTUFBSyxDQUFDLElBQUc7QUFBQSxjQUFHLEVBQUUsVUFBVSxFQUFFLFFBQU0sRUFBRTtBQUFBLFFBQVE7QUFBQSxRQUFDLElBQUcsZUFBYyxHQUFFO0FBQUEsVUFBQyxJQUFHLENBQUMsRUFBRSxTQUFPLEVBQUUsVUFBUSxXQUFTLEVBQUUsVUFBUTtBQUFBLFlBQVMsTUFBTSxJQUFJLE1BQU0sNkNBQTZDO0FBQUEsVUFBRSxJQUFJLElBQUUsRUFBRSxFQUFFO0FBQUEsVUFBTyxJQUFFLEVBQUUsUUFBUSxFQUFFLFNBQVMsSUFBRSxFQUFFLEVBQUUsU0FBTyxDQUFDLEVBQUUsU0FBUyxHQUFFLEVBQUUsVUFBUSxFQUFFLFVBQVEsVUFBUSxFQUFFLGFBQVcsRUFBRSxXQUFXLEtBQUssRUFBRSxLQUFLLElBQUUsRUFBRSxhQUFXLENBQUMsRUFBRSxLQUFLLElBQUUsRUFBRSxVQUFRLGFBQVcsRUFBRSxjQUFZLEVBQUUsWUFBWSxLQUFLLEVBQUUsS0FBSyxJQUFFLEVBQUUsY0FBWSxDQUFDLEVBQUUsS0FBSztBQUFBLFFBQUc7QUFBQSxRQUFDLGlCQUFnQixLQUFHLEVBQUUsZ0JBQWMsRUFBRSxZQUFZLEVBQUUsUUFBTSxFQUFFO0FBQUEsT0FBYSxHQUFFLEVBQUUsYUFBVyxJQUFHLEVBQUUsVUFBUztBQUFBLFFBQUMsSUFBSSxJQUFFLEtBQUssU0FBUyxZQUFVLElBQUksRUFBRSxLQUFLLFFBQVE7QUFBQSxRQUFFLFNBQVEsS0FBSyxFQUFFLFVBQVM7QUFBQSxVQUFDLElBQUcsRUFBRSxLQUFLO0FBQUEsWUFBRyxNQUFNLElBQUksTUFBTSxhQUFhLG1CQUFtQjtBQUFBLFVBQUUsSUFBRyxDQUFDLFdBQVUsUUFBUSxFQUFFLFNBQVMsQ0FBQztBQUFBLFlBQUU7QUFBQSxVQUFTLElBQUksSUFBRSxHQUFFLElBQUUsRUFBRSxTQUFTLElBQUcsSUFBRSxFQUFFO0FBQUEsVUFBRyxFQUFFLEtBQUcsSUFBSSxNQUFJO0FBQUEsWUFBQyxJQUFJLElBQUUsRUFBRSxNQUFNLEdBQUUsQ0FBQztBQUFBLFlBQUUsT0FBTyxNQUFJLFVBQUssSUFBRSxFQUFFLE1BQU0sR0FBRSxDQUFDLElBQUcsS0FBRztBQUFBO0FBQUEsUUFBRztBQUFBLFFBQUMsRUFBRSxXQUFTO0FBQUEsTUFBQztBQUFBLE1BQUMsSUFBRyxFQUFFLFdBQVU7QUFBQSxRQUFDLElBQUksSUFBRSxLQUFLLFNBQVMsYUFBVyxJQUFJLEVBQUUsS0FBSyxRQUFRO0FBQUEsUUFBRSxTQUFRLEtBQUssRUFBRSxXQUFVO0FBQUEsVUFBQyxJQUFHLEVBQUUsS0FBSztBQUFBLFlBQUcsTUFBTSxJQUFJLE1BQU0sY0FBYyxtQkFBbUI7QUFBQSxVQUFFLElBQUcsQ0FBQyxXQUFVLFNBQVEsT0FBTyxFQUFFLFNBQVMsQ0FBQztBQUFBLFlBQUU7QUFBQSxVQUFTLElBQUksSUFBRSxHQUFFLElBQUUsRUFBRSxVQUFVLElBQUcsSUFBRSxFQUFFO0FBQUEsVUFBRyxFQUFFLEtBQUcsSUFBSSxNQUFJO0FBQUEsWUFBQyxJQUFJLElBQUUsRUFBRSxNQUFNLEdBQUUsQ0FBQztBQUFBLFlBQUUsT0FBTyxNQUFJLFVBQUssSUFBRSxFQUFFLE1BQU0sR0FBRSxDQUFDLElBQUc7QUFBQTtBQUFBLFFBQUU7QUFBQSxRQUFDLEVBQUUsWUFBVTtBQUFBLE1BQUM7QUFBQSxNQUFDLElBQUcsRUFBRSxPQUFNO0FBQUEsUUFBQyxJQUFJLElBQUUsS0FBSyxTQUFTLFNBQU8sSUFBSTtBQUFBLFFBQUUsU0FBUSxLQUFLLEVBQUUsT0FBTTtBQUFBLFVBQUMsSUFBRyxFQUFFLEtBQUs7QUFBQSxZQUFHLE1BQU0sSUFBSSxNQUFNLFNBQVMsbUJBQW1CO0FBQUEsVUFBRSxJQUFHLENBQUMsV0FBVSxPQUFPLEVBQUUsU0FBUyxDQUFDO0FBQUEsWUFBRTtBQUFBLFVBQVMsSUFBSSxJQUFFLEdBQUUsSUFBRSxFQUFFLE1BQU0sSUFBRyxJQUFFLEVBQUU7QUFBQSxVQUFHLEVBQUUsaUJBQWlCLElBQUksQ0FBQyxJQUFFLEVBQUUsS0FBRyxPQUFHO0FBQUEsWUFBQyxJQUFHLEtBQUssU0FBUyxTQUFPLEVBQUUsNkJBQTZCLElBQUksQ0FBQztBQUFBLGNBQUUsUUFBTyxZQUFTO0FBQUEsZ0JBQUMsSUFBSSxJQUFFLE1BQU0sRUFBRSxLQUFLLEdBQUUsQ0FBQztBQUFBLGdCQUFFLE9BQU8sRUFBRSxLQUFLLEdBQUUsQ0FBQztBQUFBLGlCQUFJO0FBQUEsWUFBRSxJQUFJLElBQUUsRUFBRSxLQUFLLEdBQUUsQ0FBQztBQUFBLFlBQUUsT0FBTyxFQUFFLEtBQUssR0FBRSxDQUFDO0FBQUEsY0FBRyxFQUFFLEtBQUcsSUFBSSxNQUFJO0FBQUEsWUFBQyxJQUFHLEtBQUssU0FBUztBQUFBLGNBQU0sUUFBTyxZQUFTO0FBQUEsZ0JBQUMsSUFBSSxJQUFFLE1BQU0sRUFBRSxNQUFNLEdBQUUsQ0FBQztBQUFBLGdCQUFFLE9BQU8sTUFBSSxVQUFLLElBQUUsTUFBTSxFQUFFLE1BQU0sR0FBRSxDQUFDLElBQUc7QUFBQSxpQkFBSTtBQUFBLFlBQUUsSUFBSSxJQUFFLEVBQUUsTUFBTSxHQUFFLENBQUM7QUFBQSxZQUFFLE9BQU8sTUFBSSxVQUFLLElBQUUsRUFBRSxNQUFNLEdBQUUsQ0FBQyxJQUFHO0FBQUE7QUFBQSxRQUFFO0FBQUEsUUFBQyxFQUFFLFFBQU07QUFBQSxNQUFDO0FBQUEsTUFBQyxJQUFHLEVBQUUsWUFBVztBQUFBLFFBQUMsSUFBSSxJQUFFLEtBQUssU0FBUyxZQUFXLElBQUUsRUFBRTtBQUFBLFFBQVcsRUFBRSxhQUFXLFFBQVEsQ0FBQyxHQUFFO0FBQUEsVUFBQyxJQUFJLElBQUUsQ0FBQztBQUFBLFVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLE1BQUssQ0FBQyxDQUFDLEdBQUUsTUFBSSxJQUFFLEVBQUUsT0FBTyxFQUFFLEtBQUssTUFBSyxDQUFDLENBQUMsSUFBRztBQUFBO0FBQUEsTUFBRTtBQUFBLE1BQUMsS0FBSyxXQUFTLEtBQUksS0FBSyxhQUFZLEVBQUM7QUFBQSxLQUFFLEdBQUU7QUFBQTtBQUFBLEVBQUssVUFBVSxDQUFDLEdBQUU7QUFBQSxJQUFDLE9BQU8sS0FBSyxXQUFTLEtBQUksS0FBSyxhQUFZLEVBQUMsR0FBRTtBQUFBO0FBQUEsRUFBSyxLQUFLLENBQUMsR0FBRSxHQUFFO0FBQUEsSUFBQyxPQUFPLEVBQUUsSUFBSSxHQUFFLEtBQUcsS0FBSyxRQUFRO0FBQUE7QUFBQSxFQUFFLE1BQU0sQ0FBQyxHQUFFLEdBQUU7QUFBQSxJQUFDLE9BQU8sRUFBRSxNQUFNLEdBQUUsS0FBRyxLQUFLLFFBQVE7QUFBQTtBQUFBLEVBQUUsYUFBYSxDQUFDLEdBQUU7QUFBQSxJQUFDLE9BQU0sQ0FBQyxHQUFFLE1BQUk7QUFBQSxNQUFDLElBQUksSUFBRSxLQUFJLEVBQUMsR0FBRSxJQUFFLEtBQUksS0FBSyxhQUFZLEVBQUMsR0FBRSxJQUFFLEtBQUssUUFBUSxDQUFDLENBQUMsRUFBRSxRQUFPLENBQUMsQ0FBQyxFQUFFLEtBQUs7QUFBQSxNQUFFLElBQUcsS0FBSyxTQUFTLFVBQVEsUUFBSSxFQUFFLFVBQVE7QUFBQSxRQUFHLE9BQU8sRUFBRSxJQUFJLE1BQU0sb0lBQW9JLENBQUM7QUFBQSxNQUFFLElBQUcsT0FBTyxJQUFFLE9BQUssTUFBSTtBQUFBLFFBQUssT0FBTyxFQUFFLElBQUksTUFBTSxnREFBZ0QsQ0FBQztBQUFBLE1BQUUsSUFBRyxPQUFPLEtBQUc7QUFBQSxRQUFTLE9BQU8sRUFBRSxJQUFJLE1BQU0sMENBQXdDLE9BQU8sVUFBVSxTQUFTLEtBQUssQ0FBQyxJQUFFLG1CQUFtQixDQUFDO0FBQUEsTUFBRSxJQUFHLEVBQUUsVUFBUSxFQUFFLE1BQU0sVUFBUSxHQUFFLEVBQUUsTUFBTSxRQUFNLElBQUcsRUFBRTtBQUFBLFFBQU0sUUFBTyxZQUFTO0FBQUEsVUFBQyxJQUFJLElBQUUsRUFBRSxRQUFNLE1BQU0sRUFBRSxNQUFNLFdBQVcsQ0FBQyxJQUFFLEdBQUUsSUFBRSxPQUFNLEVBQUUsUUFBTSxNQUFNLEVBQUUsTUFBTSxhQUFhLElBQUUsSUFBRSxFQUFFLE1BQUksRUFBRSxXQUFXLEdBQUUsQ0FBQyxHQUFFLElBQUUsRUFBRSxRQUFNLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDLElBQUU7QUFBQSxVQUFFLEVBQUUsY0FBWSxNQUFNLFFBQVEsSUFBSSxLQUFLLFdBQVcsR0FBRSxFQUFFLFVBQVUsQ0FBQztBQUFBLFVBQUUsSUFBSSxJQUFFLE9BQU0sRUFBRSxRQUFNLE1BQU0sRUFBRSxNQUFNLGNBQWMsSUFBRSxJQUFFLEVBQUUsUUFBTSxFQUFFLGFBQWEsR0FBRSxDQUFDO0FBQUEsVUFBRSxPQUFPLEVBQUUsUUFBTSxNQUFNLEVBQUUsTUFBTSxZQUFZLENBQUMsSUFBRTtBQUFBLFdBQUksRUFBRSxNQUFNLENBQUM7QUFBQSxNQUFFLElBQUc7QUFBQSxRQUFDLEVBQUUsVUFBUSxJQUFFLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFBQSxRQUFHLElBQUksS0FBRyxFQUFFLFFBQU0sRUFBRSxNQUFNLGFBQWEsSUFBRSxJQUFFLEVBQUUsTUFBSSxFQUFFLFdBQVcsR0FBRSxDQUFDO0FBQUEsUUFBRSxFQUFFLFVBQVEsSUFBRSxFQUFFLE1BQU0saUJBQWlCLENBQUMsSUFBRyxFQUFFLGNBQVksS0FBSyxXQUFXLEdBQUUsRUFBRSxVQUFVO0FBQUEsUUFBRSxJQUFJLEtBQUcsRUFBRSxRQUFNLEVBQUUsTUFBTSxjQUFjLElBQUUsSUFBRSxFQUFFLFFBQU0sRUFBRSxhQUFhLEdBQUUsQ0FBQztBQUFBLFFBQUUsT0FBTyxFQUFFLFVBQVEsSUFBRSxFQUFFLE1BQU0sWUFBWSxDQUFDLElBQUc7QUFBQSxRQUFFLE9BQU0sR0FBRTtBQUFBLFFBQUMsT0FBTyxFQUFFLENBQUM7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUFJLE9BQU8sQ0FBQyxHQUFFLEdBQUU7QUFBQSxJQUFDLE9BQU8sT0FBRztBQUFBLE1BQUMsSUFBRyxFQUFFLFdBQVM7QUFBQSw0REFDNWlRLEdBQUU7QUFBQSxRQUFDLElBQUksSUFBRSxtQ0FBaUMsRUFBRSxFQUFFLFVBQVEsSUFBRyxJQUFFLElBQUU7QUFBQSxRQUFTLE9BQU8sSUFBRSxRQUFRLFFBQVEsQ0FBQyxJQUFFO0FBQUEsTUFBQztBQUFBLE1BQUMsSUFBRztBQUFBLFFBQUUsT0FBTyxRQUFRLE9BQU8sQ0FBQztBQUFBLE1BQUUsTUFBTTtBQUFBO0FBQUE7QUFBRztBQUFFLElBQUksSUFBRSxJQUFJO0FBQUUsU0FBUyxDQUFDLENBQUMsSUFBRSxHQUFFO0FBQUEsRUFBQyxPQUFPLEVBQUUsTUFBTSxJQUFFLENBQUM7QUFBQTtBQUFFLEVBQUUsVUFBUSxFQUFFLGFBQVcsUUFBUSxDQUFDLElBQUU7QUFBQSxFQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUMsR0FBRSxFQUFFLFdBQVMsRUFBRSxVQUFTLEVBQUUsRUFBRSxRQUFRLEdBQUU7QUFBQTtBQUFHLEVBQUUsY0FBWTtBQUFFLEVBQUUsV0FBUztBQUFFLEVBQUUsTUFBSSxRQUFRLElBQUksSUFBRTtBQUFBLEVBQUMsT0FBTyxFQUFFLElBQUksR0FBRyxFQUFDLEdBQUUsRUFBRSxXQUFTLEVBQUUsVUFBUyxFQUFFLEVBQUUsUUFBUSxHQUFFO0FBQUE7QUFBRyxFQUFFLGFBQVcsUUFBUSxDQUFDLElBQUUsR0FBRTtBQUFBLEVBQUMsT0FBTyxFQUFFLFdBQVcsSUFBRSxDQUFDO0FBQUE7QUFBRyxFQUFFLGNBQVksRUFBRTtBQUFZLEVBQUUsU0FBTztBQUFFLEVBQUUsU0FBTyxFQUFFO0FBQU0sRUFBRSxXQUFTO0FBQUUsRUFBRSxlQUFhO0FBQUUsRUFBRSxRQUFNO0FBQUUsRUFBRSxRQUFNLEVBQUU7QUFBSSxFQUFFLFlBQVU7QUFBRSxFQUFFLFFBQU07QUFBRSxFQUFFLFFBQU07QUFBRSxJQUFJLEtBQUcsRUFBRTtBQUFULElBQWlCLEtBQUcsRUFBRTtBQUF0QixJQUFpQyxLQUFHLEVBQUU7QUFBdEMsSUFBMEMsS0FBRyxFQUFFO0FBQS9DLElBQTBELEtBQUcsRUFBRTtBQUEvRCxJQUFnRixLQUFHLEVBQUU7QUFBckYsSUFBMkYsS0FBRyxFQUFFOzs7QURwRTF1Qjs7O0FFRkE7QUFBQTtBQUVPLE1BQU0saUNBQWlDLEtBQUssWUFBWSwwQkFBMEIsRUFFdEY7QUFBQztBQUFBO0FBRUcsTUFBTSw2QkFBNkIsS0FBSyxZQUFZLHNCQUFzQixFQUU5RTtBQUFDO0FBQUE7QUFFRyxNQUFNLDhCQUE4QixLQUFLLFlBQVksdUJBQXVCLEVBRWhGO0FBQUM7QUFBQTtBQUVHLE1BQU0sNkJBQTZCLEtBQUssWUFBWSxzQkFBc0IsRUFFOUU7QUFBQztBQUFBO0FBRUcsTUFBTSw0QkFBNEIsS0FBSyxZQUFZLHFCQUFxQixFQUU1RTtBQUFDO0FBQUE7QUFFRyxNQUFNLHFCQUFxQixLQUFLLFlBQVksY0FBYyxFQUU5RDtBQUFDO0FBQUE7QUFFRyxNQUFNLGlDQUFpQyxLQUFLLFlBQVksMEJBQTBCLEVBRXRGO0FBQUM7QUFBQTtBQUVHLE1BQU0sNEJBQTRCLEtBQUssWUFBWSxxQkFBcUIsRUFFNUU7QUFBQzs7O0FGMUJHLElBQU0sb0JBQW9CLENBQUMsZ0JBQXdCO0FBQUEsRUFDeEQsTUFBTSxVQUFVLFlBQVksS0FBSztBQUFBLEVBQ2pDLElBQUksQ0FBQyxTQUFTO0FBQUEsSUFDWixPQUFPO0FBQUEsRUFDVDtBQUFBLEVBRUEsTUFBTSxVQUFVLFFBQVEsTUFBTSxLQUFLLEVBQUUsTUFBTTtBQUFBLEVBQzNDLE9BQU8sUUFBUSxZQUFZO0FBQUE7QUFHN0IsSUFBTSxzQkFBc0IsQ0FBQyxhQUMzQixPQUFPLE9BQU8sa0JBQWtCLFFBQVE7QUFFbkMsSUFBTSwwQkFBMEIsQ0FBQyxhQUN0QyxPQUFPLElBQUksVUFBVSxHQUFHO0FBQUEsRUFDdEIsTUFBTSxTQUFTLE9BQU8sT0FBTyxJQUFJO0FBQUEsSUFDL0IsT0FBTyxNQUFNLElBQUkseUJBQXlCLEVBQUUsUUFBUSw0QkFBNEIsQ0FBQztBQUFBLElBQ2pGLEtBQUssTUFBTSxFQUFPLE1BQU0sUUFBUTtBQUFBLEVBQ2xDLENBQUM7QUFBQSxFQUNELE1BQU0sU0FBc0IsQ0FBQztBQUFBLEVBRTdCLFdBQVcsU0FBUyxRQUFRO0FBQUEsSUFDMUIsSUFBSSxNQUFNLFNBQVMsUUFBUTtBQUFBLE1BQ3pCO0FBQUEsSUFDRjtBQUFBLElBRUEsTUFBTSxjQUFjLE9BQU8sTUFBTSxTQUFTLFdBQVcsTUFBTSxLQUFLLEtBQUssSUFBSTtBQUFBLElBQ3pFLE1BQU0sV0FBVyxrQkFBa0IsV0FBVztBQUFBLElBRTlDLElBQUksQ0FBQyxVQUFVO0FBQUEsTUFDYixPQUFPLE9BQU8sT0FBTyxLQUNuQixJQUFJLHlCQUF5QjtBQUFBLFFBQzNCLFFBQVE7QUFBQSxNQUNWLENBQUMsQ0FDSDtBQUFBLElBQ0Y7QUFBQSxJQUVBLElBQUksQ0FBQyxvQkFBb0IsUUFBUSxHQUFHO0FBQUEsTUFDbEMsT0FBTyxPQUFPLE9BQU8sS0FDbkIsSUFBSSxvQkFBb0I7QUFBQSxRQUN0QixVQUFVO0FBQUEsTUFDWixDQUFDLENBQ0g7QUFBQSxJQUNGO0FBQUEsSUFFQSxPQUFPLEtBQUs7QUFBQSxNQUNWLE1BQU0sTUFBTTtBQUFBLE1BQ1o7QUFBQSxJQUNGLENBQUM7QUFBQSxFQUNIO0FBQUEsRUFFQSxPQUFPO0FBQUEsQ0FDUjs7O0FHeERJLElBQU0sZ0JBQThCO0FBQ3BDLElBQU0sZ0JBQWdCO0FBQ3RCLElBQU0saUJBQWlCO0FBQ3ZCLElBQU0sY0FBYztBQUNwQixJQUFNLHlCQUF5QjtBQUMvQixJQUFNLGlDQUFpQztBQUN2QyxJQUFNLDJCQUEyQjtBQUNqQyxJQUFNLGtCQUFrQjtBQUN4QixJQUFNLG9CQUFvQjtBQUMxQixJQUFNLHNCQUFzQjtBQUM1QixJQUFNLHFCQUFxQjtBQUMzQixJQUFNLHFCQUFxQjtBQUMzQixJQUFNLHNCQUNYO0FBRUssSUFBTSxrQkFBa0I7QUFFeEIsSUFBTSxrQkFBa0I7QUFDeEIsSUFBTSxvQkFBb0I7QUFDMUIsSUFBTSxrQkFBa0I7QUFDeEIsSUFBTSx1QkFBdUI7OztBQ2Y3QixJQUFNLGlCQUFpQixDQUFDLFFBQWdCO0FBQUEsRUFDN0MsSUFBSSxJQUFJLFdBQVcsR0FBRztBQUFBLElBQ3BCLE1BQU0sSUFBSSxJQUFJLE9BQU8sQ0FBQztBQUFBLElBQ3RCLE1BQU0sSUFBSSxJQUFJLE9BQU8sQ0FBQztBQUFBLElBQ3RCLE1BQU0sS0FBSSxJQUFJLE9BQU8sQ0FBQztBQUFBLElBQ3RCLE9BQU8sSUFBSSxJQUFJLElBQUksSUFBSSxLQUFJO0FBQUEsRUFDN0I7QUFBQSxFQUNBLElBQUksSUFBSSxXQUFXLEdBQUc7QUFBQSxJQUNwQixNQUFNLElBQUksSUFBSSxPQUFPLENBQUM7QUFBQSxJQUN0QixNQUFNLElBQUksSUFBSSxPQUFPLENBQUM7QUFBQSxJQUN0QixNQUFNLEtBQUksSUFBSSxPQUFPLENBQUM7QUFBQSxJQUN0QixNQUFNLElBQUksSUFBSSxPQUFPLENBQUM7QUFBQSxJQUN0QixPQUFPLElBQUksSUFBSSxJQUFJLElBQUksS0FBSSxLQUFJLElBQUk7QUFBQSxFQUNyQztBQUFBLEVBQ0EsT0FBTztBQUFBO0FBR0YsSUFBTSxnQkFBZ0IsQ0FBQyxVQUFrQjtBQUFBLEVBQzlDLE1BQU0sYUFBYSxlQUFlLE1BQU0sUUFBUSxLQUFLLEVBQUUsRUFBRSxLQUFLLENBQUM7QUFBQSxFQUMvRCxJQUFJLFdBQVcsV0FBVyxLQUFLLFdBQVcsV0FBVyxHQUFHO0FBQUEsSUFDdEQsT0FBTztBQUFBLE1BQ0wsT0FBTztBQUFBLE1BQ1AsTUFBTTtBQUFBLE1BQ04sT0FBTztBQUFBLE1BQ1AsS0FBSztBQUFBLElBQ1A7QUFBQSxFQUNGO0FBQUEsRUFFQSxNQUFNLE1BQU0sT0FBTyxTQUFTLFdBQVcsTUFBTSxHQUFHLENBQUMsR0FBRyxFQUFFO0FBQUEsRUFDdEQsTUFBTSxRQUFRLE9BQU8sU0FBUyxXQUFXLE1BQU0sR0FBRyxDQUFDLEdBQUcsRUFBRTtBQUFBLEVBQ3hELE1BQU0sT0FBTyxPQUFPLFNBQVMsV0FBVyxNQUFNLEdBQUcsQ0FBQyxHQUFHLEVBQUU7QUFBQSxFQUN2RCxNQUFNLFFBQVEsV0FBVyxXQUFXLElBQUksT0FBTyxTQUFTLFdBQVcsTUFBTSxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksTUFBTTtBQUFBLEVBRTVGLE9BQU87QUFBQSxJQUNMO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsRUFDRjtBQUFBO0FBR0ssSUFBTSxPQUFPLENBQUMsT0FBZSxLQUFhLGFBQy9DLFNBQVMsTUFBTSxTQUFTO0FBRW5CLElBQU0sY0FBYyxDQUFDLE1BQWMsSUFBWSxhQUFxQjtBQUFBLEVBQ3pFLE1BQU0sWUFBWSxjQUFjLElBQUk7QUFBQSxFQUNwQyxNQUFNLFVBQVUsY0FBYyxFQUFFO0FBQUEsRUFFaEMsTUFBTSxVQUFVO0FBQUEsSUFDZCxPQUFPLEtBQUssVUFBVSxPQUFPLFFBQVEsT0FBTyxRQUFRO0FBQUEsSUFDcEQsTUFBTSxLQUFLLFVBQVUsTUFBTSxRQUFRLE1BQU0sUUFBUTtBQUFBLElBQ2pELE9BQU8sS0FBSyxVQUFVLE9BQU8sUUFBUSxPQUFPLFFBQVE7QUFBQSxJQUNwRCxLQUFLLEtBQUssVUFBVSxLQUFLLFFBQVEsS0FBSyxRQUFRO0FBQUEsRUFDaEQ7QUFBQSxFQUVBLE9BQU8sUUFBUSxLQUFLLE1BQU0sUUFBUSxHQUFHLE1BQU0sS0FBSyxNQUFNLFFBQVEsS0FBSyxNQUFNLEtBQUssTUFDNUUsUUFBUSxJQUNWLE1BQU0sUUFBUSxNQUFNLFFBQVEsQ0FBQztBQUFBOzs7QUNwRC9CLElBQU0sZ0JBQWdCLENBQUMsVUFBdUIsR0FBRyxNQUFNLFlBQVksTUFBTTtBQUV6RSxJQUFNLHFCQUFxQixDQUFDLFdBQzFCLE9BQU8sSUFBSSxDQUFDLFdBQVc7QUFBQSxFQUNyQixLQUFLLGNBQWMsS0FBSztBQUFBLEVBQ3hCO0FBQ0YsRUFBRTtBQUVHLElBQU0scUJBQXFCLENBQUMsVUFDakMsTUFBTSxPQUFPLE1BQU0sUUFBUSxDQUFDLFNBQVMsS0FBSyxNQUFNO0FBRTNDLElBQU0sbUJBQW1CLENBQUMsWUFBMkIsYUFBNEI7QUFBQSxFQUN0RixNQUFNLFlBQVksbUJBQW1CLFVBQVU7QUFBQSxFQUMvQyxNQUFNLFVBQVUsbUJBQW1CLFFBQVE7QUFBQSxFQUMzQyxNQUFNLFdBQVcsVUFBVSxJQUFJLENBQUMsU0FBUyxLQUFLLEdBQUc7QUFBQSxFQUNqRCxNQUFNLFNBQVMsUUFBUSxJQUFJLENBQUMsU0FBUyxLQUFLLEdBQUc7QUFBQSxFQUM3QyxNQUFNLFNBQVMsTUFBTSxLQUFLLEVBQUUsUUFBUSxTQUFTLFNBQVMsRUFBRSxHQUFHLE1BQ3pELE1BQU0sS0FBSyxFQUFFLFFBQVEsT0FBTyxTQUFTLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FDbkQ7QUFBQSxFQUVBLFNBQVMsS0FBSSxTQUFTLFNBQVMsRUFBRyxNQUFLLEdBQUcsTUFBSyxHQUFHO0FBQUEsSUFDaEQsTUFBTSxNQUFNLE9BQU87QUFBQSxJQUNuQixJQUFJLENBQUMsS0FBSztBQUFBLE1BQ1I7QUFBQSxJQUNGO0FBQUEsSUFFQSxTQUFTLEtBQUksT0FBTyxTQUFTLEVBQUcsTUFBSyxHQUFHLE1BQUssR0FBRztBQUFBLE1BQzlDLE1BQU0sVUFBVSxTQUFTLE9BQU07QUFBQSxNQUMvQixNQUFNLFFBQVEsT0FBTyxPQUFNO0FBQUEsTUFFM0IsSUFBSSxZQUFZLE9BQU87QUFBQSxRQUNyQixJQUFJLE9BQU0sT0FBTyxLQUFJLEtBQUssS0FBSSxNQUFNLEtBQUs7QUFBQSxNQUMzQyxFQUFPO0FBQUEsUUFDTCxNQUFNLFVBQVUsT0FBTyxLQUFJO0FBQUEsUUFDM0IsTUFBTSxhQUFhLE9BQU87QUFBQSxRQUMxQixJQUFJLE1BQUssS0FBSyxJQUFJLFVBQVUsT0FBTSxHQUFHLGFBQWEsS0FBSSxNQUFNLENBQUM7QUFBQTtBQUFBLElBRWpFO0FBQUEsRUFDRjtBQUFBLEVBRUEsTUFBTSxVQUFtQyxDQUFDO0FBQUEsRUFDMUMsSUFBSSxJQUFJO0FBQUEsRUFDUixJQUFJLEtBQUk7QUFBQSxFQUVSLE9BQU8sSUFBSSxTQUFTLFVBQVUsS0FBSSxPQUFPLFFBQVE7QUFBQSxJQUMvQyxNQUFNLFVBQVUsU0FBUyxNQUFNO0FBQUEsSUFDL0IsTUFBTSxRQUFRLE9BQU8sT0FBTTtBQUFBLElBRTNCLElBQUksWUFBWSxPQUFPO0FBQUEsTUFDckIsUUFBUSxLQUFLLENBQUMsR0FBRyxFQUFDLENBQUM7QUFBQSxNQUNuQixLQUFLO0FBQUEsTUFDTCxNQUFLO0FBQUEsTUFDTDtBQUFBLElBQ0Y7QUFBQSxJQUVBLE1BQU0sV0FBVyxPQUFPLElBQUksS0FBSyxPQUFNO0FBQUEsSUFDdkMsTUFBTSxTQUFTLE9BQU8sS0FBSyxLQUFJLE1BQU07QUFBQSxJQUVyQyxJQUFJLFlBQVksUUFBUTtBQUFBLE1BQ3RCLEtBQUs7QUFBQSxJQUNQLEVBQU87QUFBQSxNQUNMLE1BQUs7QUFBQTtBQUFBLEVBRVQ7QUFBQSxFQUVBLE1BQU0sY0FBYyxJQUFJLElBQUksUUFBUSxJQUFJLEVBQUUsV0FBVyxLQUFLLENBQUM7QUFBQSxFQUMzRCxNQUFNLFlBQVksSUFBSSxJQUFJLFFBQVEsSUFBSSxJQUFJLFdBQVcsS0FBSyxDQUFDO0FBQUEsRUFFM0QsTUFBTSxVQUFVLFFBQVEsUUFBUSxFQUFFLFdBQVcsYUFBYTtBQUFBLElBQ3hELE1BQU0sV0FBVyxVQUFVO0FBQUEsSUFDM0IsTUFBTSxTQUFTLFFBQVE7QUFBQSxJQUV2QixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVE7QUFBQSxNQUN4QixPQUFPLENBQUM7QUFBQSxJQUNWO0FBQUEsSUFFQSxPQUFPLENBQUMsRUFBRSxNQUFNLFNBQVMsT0FBTyxJQUFJLE9BQU8sTUFBTSxDQUFDO0FBQUEsR0FDbkQ7QUFBQSxFQUVELE9BQU87QUFBQSxJQUNMLE9BQU8sUUFBUSxPQUFPLENBQUMsSUFBRyxVQUFVLENBQUMsVUFBVSxJQUFJLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLEtBQUssS0FBSztBQUFBLElBQ25GO0FBQUEsSUFDQSxTQUFTLFVBQVUsT0FBTyxDQUFDLElBQUcsVUFBVSxDQUFDLFlBQVksSUFBSSxLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsU0FBUyxLQUFLLEtBQUs7QUFBQSxFQUMzRjtBQUFBO0FBR0ssSUFBTSxzQkFBc0IsQ0FBQyxXQUFrQixZQUNwRCxpQkFBaUIsbUJBQW1CLFNBQVMsR0FBRyxtQkFBbUIsT0FBTyxDQUFDO0FBRXRFLElBQU0saUJBQWlCLENBQUMsYUFBcUI7QUFBQSxFQUNsRCxNQUFNLFVBQVUsS0FBSyxJQUFJLEdBQUcsS0FBSyxJQUFJLEdBQUcsUUFBUSxDQUFDO0FBQUEsRUFDakQsT0FBTyxVQUFVLE1BQU0sSUFBSSxVQUFVLFVBQVUsVUFBVSxLQUFLLEtBQUssVUFBVSxNQUFNLElBQUk7QUFBQTtBQUdsRixJQUFNLHdCQUF3QixDQUFDLE1BQXNCLGFBQXFCO0FBQUEsRUFDL0UsTUFBTSxVQUFVLEtBQUssSUFBSSxHQUFHLEtBQUssSUFBSSxHQUFHLFFBQVEsQ0FBQztBQUFBLEVBQ2pELE1BQU0sU0FBc0IsQ0FBQztBQUFBLEVBRTdCLFdBQVcsU0FBUyxLQUFLLFNBQVM7QUFBQSxJQUNoQyxNQUFNLFVBQVUsSUFBSTtBQUFBLElBQ3BCLElBQUksV0FBVyxHQUFHO0FBQUEsTUFDaEI7QUFBQSxJQUNGO0FBQUEsSUFFQSxPQUFPLEtBQUs7QUFBQSxNQUNWLE9BQU8sTUFBTTtBQUFBLE1BQ2IsU0FBUyxNQUFNO0FBQUEsTUFDZixXQUFXLE1BQU07QUFBQSxNQUNqQjtBQUFBLE1BQ0EsT0FBTyxNQUFNO0FBQUEsTUFDYixHQUFHLE1BQU07QUFBQSxNQUNULEdBQUcsTUFBTSxJQUFJLDJCQUEyQjtBQUFBLElBQzFDLENBQUM7QUFBQSxFQUNIO0FBQUEsRUFFQSxXQUFXLFNBQVMsS0FBSyxTQUFTO0FBQUEsSUFDaEMsT0FBTyxLQUFLO0FBQUEsTUFDVixPQUFPLFlBQVksTUFBTSxLQUFLLE9BQU8sTUFBTSxHQUFHLE9BQU8sT0FBTztBQUFBLE1BQzVELFNBQVMsTUFBTSxHQUFHO0FBQUEsTUFDbEIsV0FBVyxNQUFNLEdBQUc7QUFBQSxNQUNwQixTQUFTO0FBQUEsTUFDVCxPQUFPLEtBQUssTUFBTSxLQUFLLE9BQU8sTUFBTSxHQUFHLE9BQU8sT0FBTztBQUFBLE1BQ3JELEdBQUcsS0FBSyxNQUFNLEtBQUssR0FBRyxNQUFNLEdBQUcsR0FBRyxPQUFPO0FBQUEsTUFDekMsR0FBRyxLQUFLLE1BQU0sS0FBSyxHQUFHLE1BQU0sR0FBRyxHQUFHLE9BQU87QUFBQSxJQUMzQyxDQUFDO0FBQUEsRUFDSDtBQUFBLEVBRUEsV0FBVyxTQUFTLEtBQUssT0FBTztBQUFBLElBQzlCLE1BQU0sVUFBVTtBQUFBLElBQ2hCLElBQUksV0FBVyxHQUFHO0FBQUEsTUFDaEI7QUFBQSxJQUNGO0FBQUEsSUFFQSxPQUFPLEtBQUs7QUFBQSxNQUNWLE9BQU8sTUFBTTtBQUFBLE1BQ2IsU0FBUyxNQUFNO0FBQUEsTUFDZixXQUFXLE1BQU07QUFBQSxNQUNqQjtBQUFBLE1BQ0EsT0FBTyxNQUFNO0FBQUEsTUFDYixHQUFHLE1BQU07QUFBQSxNQUNULEdBQUcsTUFBTSxJQUFJLDRCQUE0QixJQUFJO0FBQUEsSUFDL0MsQ0FBQztBQUFBLEVBQ0g7QUFBQSxFQUVBLE9BQU87QUFBQTtBQUdGLElBQU0seUJBQXlCLENBQUMsU0FBd0IsV0FBd0I7QUFBQSxFQUNyRixNQUFNLGNBQWM7QUFBQSxFQUNwQixNQUFNLGdCQUFnQixZQUFZO0FBQUEsRUFDbEMsTUFBTSxtQkFBbUIsWUFBWTtBQUFBLEVBQ3JDLE1BQU0sZ0JBQWdCLFlBQVk7QUFBQSxFQUNsQyxNQUFNLGVBQWUsWUFBWTtBQUFBLEVBQ2pDLE1BQU0sb0JBQW9CLFlBQVk7QUFBQSxFQUV0QyxZQUFZLGVBQWU7QUFBQSxFQUMzQixZQUFZLFlBQVk7QUFBQSxFQUV4QixXQUFXLFNBQVMsUUFBUTtBQUFBLElBQzFCLElBQUksTUFBTSxXQUFXLEdBQUc7QUFBQSxNQUN0QjtBQUFBLElBQ0Y7QUFBQSxJQUVBLE1BQU0sWUFBWSxNQUFNO0FBQUEsSUFDeEIsTUFBTSxZQUFZLFlBQVksdUJBQXVCO0FBQUEsSUFDckQsTUFBTSxVQUFVLFlBQVkscUJBQXFCO0FBQUEsSUFDakQsTUFBTSxlQUFlLFlBQVksMEJBQTBCO0FBQUEsSUFFM0QsWUFBWSxjQUFjLE1BQU07QUFBQSxJQUNoQyxZQUFZLE9BQU8sVUFBVSxVQUFVLE1BQU07QUFBQSxJQUM3QyxZQUFZLFlBQVksTUFBTTtBQUFBLElBQzlCLFlBQVksU0FBUyxNQUFNLFNBQVMsTUFBTSxHQUFHLE1BQU0sQ0FBQztBQUFBLElBRXBELElBQUksZUFBZSxNQUFNLFFBQVEsR0FBRztBQUFBLE1BQ2xDLE1BQU0sc0JBQXNCLFlBQVk7QUFBQSxNQUN4QyxNQUFNLG9CQUFvQixZQUFZO0FBQUEsTUFDdEMsTUFBTSxhQUFhLE1BQU0sSUFBSSxvQkFBb0I7QUFBQSxNQUVqRCxZQUFZLGNBQWMsWUFBWTtBQUFBLE1BQ3RDLFlBQVksWUFBWSxLQUFLLElBQUksR0FBRyxLQUFLLE1BQU0sb0JBQW9CLEVBQUUsQ0FBQztBQUFBLE1BQ3RFLFlBQVksVUFBVTtBQUFBLE1BQ3RCLFlBQVksT0FBTyxNQUFNLEdBQUcsVUFBVTtBQUFBLE1BQ3RDLFlBQVksT0FBTyxNQUFNLElBQUksTUFBTSxPQUFPLFVBQVU7QUFBQSxNQUNwRCxZQUFZLE9BQU87QUFBQSxNQUVuQixZQUFZLGNBQWM7QUFBQSxNQUMxQixZQUFZLFlBQVk7QUFBQSxJQUMxQjtBQUFBLEVBQ0Y7QUFBQSxFQUVBLFlBQVksY0FBYztBQUFBLEVBQzFCLFlBQVksZUFBZTtBQUFBLEVBQzNCLFlBQVksWUFBWTtBQUFBLEVBQ3hCLFlBQVksT0FBTztBQUFBLEVBQ25CLFlBQVksWUFBWTtBQUFBO0FBRzFCLElBQU0sWUFBWSxDQUFDLFVBQW1CLFdBQW9CO0FBQUEsRUFDeEQsTUFBTSxRQUFRLEdBQUcsV0FBVyxZQUFZLEtBQUssU0FBUyxVQUFVO0FBQUEsRUFDaEUsT0FBTyxHQUFHLFFBQVEsdUJBQXVCO0FBQUE7OztBQ25OM0MsbUJBQVM7QUFDVDtBQUdPLElBQU0sZUFBZSxDQUFDLFVBQzNCLFFBQU8sSUFBSSxVQUFVLEdBQUc7QUFBQSxFQUN0QixNQUFNLFVBQVUsTUFBTSxLQUFLO0FBQUEsRUFDM0IsSUFBSSxDQUFDLE9BQU8sT0FBTyxlQUFlLE9BQU8sR0FBRztBQUFBLElBQzFDLE9BQU8sT0FBTyxRQUFPLEtBQUssSUFBSSxhQUFhLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFBQSxFQUN2RDtBQUFBLEVBRUEsT0FBTztBQUFBLENBQ1I7OztBQ1pILG1CQUFTO0FBQ1Q7QUFpQkEsSUFBTSx3QkFBd0IsQ0FBQyxZQUFvQixRQUFRLFdBQVcsTUFBTSxlQUFlO0FBRTNGLElBQU0sYUFBWSxDQUFDLFVBQW1CLFdBQW9CO0FBQUEsRUFDeEQsTUFBTSxRQUFRLEdBQUcsV0FBVyxZQUFZLEtBQUssU0FBUyxVQUFVO0FBQUEsRUFDaEUsT0FBTyxHQUFHLFFBQVEsdUJBQXVCO0FBQUE7QUFHM0MsSUFBTSxvQkFBb0IsQ0FDeEIsU0FDQSxTQUNBLFVBQ0EsV0FDRztBQUFBLEVBQ0gsTUFBTSxpQkFBaUI7QUFBQSxFQUN2QixNQUFNLGVBQWUsZUFBZTtBQUFBLEVBQ3BDLGVBQWUsT0FBTyxXQUFVLFVBQVUsTUFBTTtBQUFBLEVBQ2hELE1BQU0sUUFBUSxlQUFlLFlBQVksT0FBTyxFQUFFO0FBQUEsRUFDbEQsZUFBZSxPQUFPO0FBQUEsRUFDdEIsT0FBTztBQUFBO0FBR0YsSUFBTSxhQUFhLENBQ3hCLFNBQ0EsV0FDQSxPQUNBLFlBQ0EsZ0JBRUEsUUFBTyxXQUFXO0FBQUEsRUFDaEIsT0FBTyxDQUFDLFVBQVcsaUJBQWlCLFFBQVEsUUFBUSxJQUFJLE1BQU0sT0FBTyxLQUFLLENBQUM7QUFBQSxFQUMzRSxLQUFLLFlBQVk7QUFBQSxJQUNmLE1BQU0sY0FBYyxNQUFNLGFBQWEsVUFBVSxNQUFNO0FBQUEsTUFDckQsTUFBTSxVQUFVO0FBQUEsTUFDaEI7QUFBQSxJQUNGLENBQUM7QUFBQSxJQUVELE1BQU0sU0FBUyxZQUFZO0FBQUEsSUFDM0IsTUFBTSxhQUFhLFlBQVksTUFBTTtBQUFBLElBQ3JDLE1BQU0sYUFBYSxZQUFZLE1BQU07QUFBQSxJQUVyQyxNQUFNLGNBQWMsT0FBTyxJQUFJLENBQUMsZUFBZTtBQUFBLE1BQzdDLE1BQU0sVUFLRCxDQUFDO0FBQUEsTUFDTixJQUFJLFlBQVk7QUFBQSxNQUVoQixXQUFXLFNBQVMsWUFBWTtBQUFBLFFBQzlCLE1BQU0sVUFBVSxzQkFBc0IsTUFBTSxPQUFPO0FBQUEsUUFDbkQsSUFBSSxDQUFDLFNBQVM7QUFBQSxVQUNaO0FBQUEsUUFDRjtBQUFBLFFBRUEsTUFBTSxhQUFhLE1BQU0sYUFBYTtBQUFBLFFBQ3RDLE1BQU0sWUFBWSxhQUFhLHVCQUF1QjtBQUFBLFFBQ3RELE1BQU0sVUFBVSxhQUFhLHFCQUFxQjtBQUFBLFFBQ2xELE1BQU0sUUFBUSxrQkFBa0IsU0FBUyxTQUFTLFVBQVUsTUFBTTtBQUFBLFFBQ2xFLE1BQU0sUUFBUSxNQUFNLFNBQVM7QUFBQSxRQUU3QixRQUFRLEtBQUs7QUFBQSxVQUNYO0FBQUEsVUFDQTtBQUFBLFVBQ0EsV0FBVztBQUFBLFVBQ1g7QUFBQSxRQUNGLENBQUM7QUFBQSxRQUNELGFBQWE7QUFBQSxNQUNmO0FBQUEsTUFFQSxPQUFPO0FBQUEsUUFDTCxRQUFRO0FBQUEsUUFDUixPQUFPO0FBQUEsTUFDVDtBQUFBLEtBQ0Q7QUFBQSxJQUVELE1BQU0sZUFDSixZQUFZLFNBQVMsSUFBSSxLQUFLLElBQUksR0FBRyxZQUFZLElBQUksQ0FBQyxTQUFTLEtBQUssS0FBSyxDQUFDLElBQUk7QUFBQSxJQUNoRixNQUFNLGVBQWUsS0FBSyxJQUFJLEdBQUcsWUFBWTtBQUFBLElBQzdDLE1BQU0sZ0JBQWdCLE9BQU8sU0FBUztBQUFBLElBQ3RDLE1BQU0sYUFBYSxlQUFlLGtCQUFrQjtBQUFBLElBQ3BELE1BQU0sY0FBYyxnQkFBZ0Isa0JBQWtCO0FBQUEsSUFDdEQsTUFBTSxTQUFTLEtBQUssSUFBSSxHQUFHLEtBQUssT0FBTyxhQUFhLGNBQWMsQ0FBQyxDQUFDO0FBQUEsSUFDcEUsTUFBTSxTQUFTLEtBQUssSUFBSSxHQUFHLEtBQUssT0FBTyxjQUFjLGVBQWUsQ0FBQyxDQUFDO0FBQUEsSUFFdEUsTUFBTSxTQUFzQjtBQUFBLE1BQzFCLE9BQU8sWUFBWSxJQUFJLENBQUMsTUFBTSxjQUFjO0FBQUEsUUFDMUMsSUFBSSxVQUFVLFNBQVM7QUFBQSxRQUN2QixNQUFNLFVBQVUsU0FBUyxrQkFBa0IsWUFBWTtBQUFBLFFBQ3ZELE1BQU0sZUFBOEIsS0FBSyxPQUFPLElBQUksQ0FBQyxVQUFVO0FBQUEsVUFDN0QsTUFBTSxjQUFjO0FBQUEsZUFDZjtBQUFBLFlBQ0gsR0FBRztBQUFBLFlBQ0gsR0FBRztBQUFBLFVBQ0w7QUFBQSxVQUNBLFdBQVcsTUFBTTtBQUFBLFVBQ2pCLE9BQU87QUFBQSxTQUNSO0FBQUEsUUFFRCxPQUFPO0FBQUEsVUFDTCxRQUFRO0FBQUEsUUFDVjtBQUFBLE9BQ0Q7QUFBQSxJQUNIO0FBQUEsSUFFQSxPQUFPO0FBQUEsTUFDTDtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxJQUNGO0FBQUE7QUFFSixDQUFDO0FBRUksSUFBTSxrQkFBa0IsQ0FDN0IsU0FDQSxPQUNBLFNBQ0EsUUFDQSxXQUNHO0FBQUEsRUFDSCxJQUFJLFdBQVcsR0FBRztBQUFBLElBQ2hCO0FBQUEsRUFDRjtBQUFBLEVBRUEsTUFBTSxjQUFjO0FBQUEsRUFDcEIsTUFBTSxTQUFTLFNBQVM7QUFBQSxFQUN4QixNQUFNLFNBQVMsU0FBUztBQUFBLEVBQ3hCLE1BQU0sZ0JBQWdCLFlBQVk7QUFBQSxFQUNsQyxNQUFNLG1CQUFtQixZQUFZO0FBQUEsRUFDckMsTUFBTSxnQkFBZ0IsWUFBWTtBQUFBLEVBQ2xDLE1BQU0sZUFBZSxZQUFZO0FBQUEsRUFDakMsTUFBTSxvQkFBb0IsWUFBWTtBQUFBLEVBRXRDLFlBQVksY0FBYztBQUFBLEVBQzFCLFlBQVksZUFBZTtBQUFBLEVBQzNCLFlBQVksWUFBWTtBQUFBLEVBRXhCLFNBQVMsWUFBWSxFQUFHLFlBQVksTUFBTSxPQUFPLFFBQVEsYUFBYSxHQUFHO0FBQUEsSUFDdkUsTUFBTSxhQUFhLE1BQU0sT0FBTyxjQUFjLENBQUM7QUFBQSxJQUMvQyxJQUFJLFVBQVU7QUFBQSxJQUNkLE1BQU0sVUFBVSxTQUFTLFlBQVk7QUFBQSxJQUVyQyxXQUFXLFNBQVMsWUFBWTtBQUFBLE1BQzlCLE1BQU0sVUFBVSxzQkFBc0IsTUFBTSxPQUFPO0FBQUEsTUFDbkQsSUFBSSxDQUFDLFNBQVM7QUFBQSxRQUNaO0FBQUEsTUFDRjtBQUFBLE1BRUEsTUFBTSxZQUFZLE1BQU0sYUFBYTtBQUFBLE1BQ3JDLE1BQU0sWUFBWSxZQUFZLHVCQUF1QjtBQUFBLE1BQ3JELE1BQU0sVUFBVSxZQUFZLHFCQUFxQjtBQUFBLE1BQ2pELE1BQU0sZUFBZSxZQUFZLDBCQUEwQjtBQUFBLE1BRTNELFlBQVksT0FBTyxXQUFVLFVBQVUsTUFBTTtBQUFBLE1BQzdDLFlBQVksWUFBWSxNQUFNLFNBQVMsTUFBTTtBQUFBLE1BQzdDLFlBQVksU0FBUyxTQUFTLFNBQVMsT0FBTztBQUFBLE1BRTlDLE1BQU0sYUFBYSxZQUFZLFlBQVksT0FBTyxFQUFFO0FBQUEsTUFFcEQsSUFBSSxhQUFhO0FBQUEsUUFDZixNQUFNLHNCQUFzQixZQUFZO0FBQUEsUUFDeEMsTUFBTSxvQkFBb0IsWUFBWTtBQUFBLFFBQ3RDLE1BQU0sYUFBYSxVQUFVLG9CQUFvQjtBQUFBLFFBRWpELFlBQVksY0FBYyxZQUFZO0FBQUEsUUFDdEMsWUFBWSxZQUFZLEtBQUssSUFBSSxHQUFHLEtBQUssTUFBTSxvQkFBb0IsRUFBRSxDQUFDO0FBQUEsUUFDdEUsWUFBWSxVQUFVO0FBQUEsUUFDdEIsWUFBWSxPQUFPLFNBQVMsVUFBVTtBQUFBLFFBQ3RDLFlBQVksT0FBTyxVQUFVLFlBQVksVUFBVTtBQUFBLFFBQ25ELFlBQVksT0FBTztBQUFBLFFBRW5CLFlBQVksY0FBYztBQUFBLFFBQzFCLFlBQVksWUFBWTtBQUFBLE1BQzFCO0FBQUEsTUFFQSxXQUFXO0FBQUEsSUFDYjtBQUFBLEVBQ0Y7QUFBQSxFQUVBLFlBQVksY0FBYztBQUFBLEVBQzFCLFlBQVksZUFBZTtBQUFBLEVBQzNCLFlBQVksWUFBWTtBQUFBLEVBQ3hCLFlBQVksT0FBTztBQUFBLEVBQ25CLFlBQVksWUFBWTtBQUFBOzs7QUNqTW5CLElBQU0sY0FBYyxDQUN6QixTQUNBLFlBQ0EsYUFDQSxVQUNHO0FBQUEsRUFDSCxNQUFNLGVBQWU7QUFBQSxFQUNyQixNQUFNLGlCQUFpQixhQUFhLGFBQWE7QUFBQSxFQUNqRCxJQUFJLE9BQU8sYUFBYSx1QkFBdUIsWUFBWTtBQUFBLElBQ3pELGFBQWEscUJBQXFCLENBQUMsY0FBYztBQUFBLE1BQy9DLElBQ0UsT0FBTyxjQUFjLFlBQ3JCLGNBQWMsUUFDZCxPQUFPLGFBQ1AsT0FBTyxhQUNQLE9BQU8sYUFDUCxPQUFPLGFBQ1AsT0FBTyxhQUNQLE9BQU8sV0FDUDtBQUFBLFFBQ0EsTUFBTSxTQUFTO0FBQUEsUUFRZixhQUFhLGFBQWEsT0FBTyxHQUFHLE9BQU8sR0FBRyxPQUFPLEdBQUcsT0FBTyxHQUFHLE9BQU8sR0FBRyxPQUFPLENBQUM7QUFBQSxNQUN0RixFQUFPO0FBQUEsUUFDTCxhQUFhLGFBQWEsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFBQTtBQUFBO0FBQUEsRUFHaEQ7QUFBQSxFQUNBLE1BQU0sYUFBYSxhQUFhO0FBQUEsRUFDaEMsTUFBTSxpQkFBaUIsYUFBYTtBQUFBLEVBRXBDLGFBQWEsYUFBYSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUFBLEVBQzFDLGFBQWEsY0FBYztBQUFBLEVBQzNCLGFBQWEsWUFBWSxNQUFNO0FBQUEsRUFDL0IsYUFBYSxTQUFTLEdBQUcsR0FBRyxZQUFZLFdBQVc7QUFBQSxFQUVuRCxJQUFJLE1BQU0sU0FBUyxTQUFTO0FBQUEsSUFDMUIsZ0JBQWdCLGNBQWMsTUFBTSxPQUFPLE1BQU0sU0FBUyxNQUFNLFdBQVcsTUFBTSxTQUFTO0FBQUEsRUFDNUYsRUFBTztBQUFBLElBQ0wsdUJBQXVCLGNBQWMsTUFBTSxNQUFNO0FBQUE7QUFBQSxFQUduRCxJQUFJLE9BQU8sYUFBYSx1QkFBdUIsWUFBWTtBQUFBLElBQ3pELGFBQWEsbUJBQW1CLGNBQWM7QUFBQSxFQUNoRDtBQUFBLEVBQ0EsYUFBYSxjQUFjO0FBQUEsRUFDM0IsYUFBYSxZQUFZO0FBQUE7IiwKICAiZGVidWdJZCI6ICI5MTRFNzE4RTg0MjlGNTRCNjQ3NTZFMjE2NDc1NkUyMSIsCiAgIm5hbWVzIjogW10KfQ==