1!function(s) {
2    var n, l = s.config.menuSettings, o = {}, r = "data-semantic-complexity", t = MathJax.Ajax.config.path;
3    t.a11y || (t.a11y = s.config.root + "/extensions/a11y");
4    var h = MathJax.Extension.collapsible = {
5        version: "1.6.0",
6        config: s.CombineConfig("collapsible", {
7            disabled: !1
8        }),
9        dependents: [],
10        COMPLEXATTR: r,
11        COMPLEXITY: {
12            TEXT: .5,
13            TOKEN: .5,
14            CHILD: 1,
15            SCRIPT: .8,
16            SQRT: 2,
17            SUBSUP: 2,
18            UNDEROVER: 2,
19            FRACTION: 2,
20            ACTION: 2,
21            PHANTOM: 0,
22            XML: 2,
23            GLYPH: 2
24        },
25        COLLAPSE: {
26            identifier: 3,
27            number: 3,
28            text: 10,
29            infixop: 15,
30            relseq: 15,
31            multirel: 15,
32            fenced: 18,
33            bigop: 20,
34            integral: 20,
35            fraction: 12,
36            sqrt: 9,
37            root: 12,
38            vector: 15,
39            matrix: 15,
40            cases: 15,
41            superscript: 9,
42            subscript: 9,
43            subsup: 9,
44            punctuated: {
45                endpunct: 1e7,
46                startpunct: 1e7,
47                value: 12
48            }
49        },
50        MARKER: {
51            identifier: "x",
52            number: "#",
53            text: "...",
54            appl: {
55                "limit function": "lim",
56                value: "f()"
57            },
58            fraction: "/",
59            sqrt: "\u221a",
60            root: "\u221a",
61            superscript: "\u25fd\u02d9",
62            subscript: "\u25fd.",
63            subsup: "\u25fd:",
64            vector: {
65                binomial: "(:)",
66                determinant: "|:|",
67                value: "\u27e8:\u27e9"
68            },
69            matrix: {
70                squarematrix: "[::]",
71                rowvector: "\u27e8\u22ef\u27e9",
72                columnvector: "\u27e8\u22ee\u27e9",
73                determinant: "|::|",
74                value: "(::)"
75            },
76            cases: "{:",
77            infixop: {
78                addition: "+",
79                subtraction: "\u2212",
80                multiplication: "\u22c5",
81                implicit: "\u22c5",
82                value: "+"
83            },
84            punctuated: {
85                text: "...",
86                value: ","
87            }
88        },
89        Enable: function(t, i) {
90            l.collapsible = !0, i && (o.collapsible = !0), this.config.disabled = !1, MathJax.Extension["semantic-enrich"].Enable(!1, i),
91            t && s.Queue([ "Reprocess", s ]);
92        },
93        Disable: function(t, i) {
94            l.collapsible = !1, i && (o.collapsible = !1), this.config.disabled = !0;
95            for (var e = this.dependents.length - 1; 0 <= e; e--) {
96                var a = this.dependents[e];
97                a.Disable && a.Disable(!1, i);
98            }
99            t && s.Queue([ "Reprocess", s ]);
100        },
101        Dependent: function(t) {
102            this.dependents.push(t);
103        },
104        Startup: function() {
105            n = MathJax.ElementJax.mml;
106            var t = MathJax.Extension["semantic-enrich"];
107            t && t.Dependent(this), s.postInputHooks.Add([ "Filter", h ], 100);
108        },
109        Filter: function(t, i, e) {
110            t.enriched && !this.config.disabled && (t.root = t.root.Collapse(), t.root.inputID = e.id);
111        },
112        Marker: function(t) {
113            return n.mtext("\u25c2" + t + "\u25b8").With({
114                mathcolor: "blue",
115                attr: {},
116                attrNames: []
117            });
118        },
119        MakeAction: function(t, i) {
120            var e = n.maction(t).With({
121                id: this.getActionID(),
122                actiontype: "toggle",
123                complexity: t.getComplexity(),
124                collapsible: !0,
125                attrNames: [ "id", "actiontype", "selection", r ],
126                attr: {},
127                selection: 2
128            });
129            if (e.attr[r] = e.complexity, "math" === i.type) {
130                var a = n.mrow().With({
131                    complexity: i.complexity,
132                    attrNames: [],
133                    attr: {}
134                });
135                a.Append.apply(a, i.data[0].data), i.data[0].data = [];
136                for (var s, l = i.attrNames.length - 1; s = i.attrNames[l]; l--) "data-semantic-" === s.substr(0, 14) && (a.attr[s] = i.attr[s],
137                a.attrNames.push(s), delete i.attr[s], i.attrNames.splice(l, 1));
138                a.complexity = i.complexity, e.Append(a), i.Append(e), i.complexity = e.complexity,
139                e = i;
140            } else e.Append(i);
141            return e;
142        },
143        actionID: 1,
144        getActionID: function() {
145            return "MJX-Collapse-" + this.actionID++;
146        },
147        Collapse: function(t) {
148            t.getComplexity();
149            var i, e, a, s = (t.attr || {})["data-semantic-type"];
150            return s && (this["Collapse_" + s] ? t = this["Collapse_" + s](t) : this.COLLAPSE[s] && this.MARKER[s] && (i = t.attr["data-semantic-role"],
151            "number" != typeof (e = this.COLLAPSE[s]) && (e = e[i] || e.value), t.complexity > e && ("string" != typeof (a = this.MARKER[s]) && (a = a[i] || a.value),
152            t = this.MakeAction(this.Marker(a), t)))), t;
153        },
154        UncollapseChild: function(t, i, e) {
155            if (null == e && (e = 1), this.SplitAttribute(t, "children").length === e) {
156                var a = 1 === t.data.length && t.data[0].inferred ? t.data[0] : t;
157                if (a && a.data[i] && a.data[i].collapsible) return a.SetData(i, a.data[i].data[1]),
158                t.complexity = a.complexity = null, t.getComplexity(), 1;
159            }
160            return 0;
161        },
162        FindChildText: function(t, i) {
163            var e = this.FindChild(t, i);
164            return e ? (e.CoreMO() || e).data.join("") : "?";
165        },
166        FindChild: function(t, i) {
167            if (t) {
168                if (t.attr && t.attr["data-semantic-id"] === i) return t;
169                if (!t.isToken) for (var e = 0, a = t.data.length; e < a; e++) {
170                    var s = this.FindChild(t.data[e], i);
171                    if (s) return s;
172                }
173            }
174            return null;
175        },
176        SplitAttribute: function(t, i) {
177            return (t.attr["data-semantic-" + i] || "").split(/,/);
178        },
179        Collapse_fenced: function(t) {
180            var i;
181            return this.UncollapseChild(t, 1), t.complexity > this.COLLAPSE.fenced && "leftright" === t.attr["data-semantic-role"] && (i = t.data[0].data.join("") + t.data[t.data.length - 1].data.join(""),
182            t = this.MakeAction(this.Marker(i), t)), t;
183        },
184        Collapse_appl: function(t) {
185            var i;
186            return this.UncollapseChild(t, 2, 2) && (i = (i = this.MARKER.appl)[t.attr["data-semantic-role"]] || i.value,
187            t = this.MakeAction(this.Marker(i), t)), t;
188        },
189        Collapse_sqrt: function(t) {
190            return this.UncollapseChild(t, 0), t.complexity > this.COLLAPSE.sqrt && (t = this.MakeAction(this.Marker(this.MARKER.sqrt), t)),
191            t;
192        },
193        Collapse_root: function(t) {
194            return this.UncollapseChild(t, 0), t.complexity > this.COLLAPSE.sqrt && (t = this.MakeAction(this.Marker(this.MARKER.sqrt), t)),
195            t;
196        },
197        Collapse_enclose: function(t) {
198            var i, e;
199            return 1 !== this.SplitAttribute(t, "children").length || (i = 1 === t.data.length && t.data[0].inferred ? t.data[0] : t).data[0] && i.data[0].collapsible && (e = i.data[0],
200            i.SetData(0, e.data[1]), e.SetData(1, t), t = e), t;
201        },
202        Collapse_bigop: function(t) {
203            var i, e;
204            return (t.complexity > this.COLLAPSE.bigop || "mo" !== t.data[0].type) && (i = this.SplitAttribute(t, "content").pop(),
205            e = h.FindChildText(t, i), t = this.MakeAction(this.Marker(e), t)), t;
206        },
207        Collapse_integral: function(t) {
208            var i, e;
209            return (t.complexity > this.COLLAPSE.integral || "mo" !== t.data[0].type) && (i = this.SplitAttribute(t, "content")[0],
210            e = h.FindChildText(t, i), t = this.MakeAction(this.Marker(e), t)), t;
211        },
212        Collapse_relseq: function(t) {
213            var i, e;
214            return t.complexity > this.COLLAPSE.relseq && (i = this.SplitAttribute(t, "content"),
215            e = h.FindChildText(t, i[0]), 1 < i.length && (e += "\u22ef"), t = this.MakeAction(this.Marker(e), t)),
216            t;
217        },
218        Collapse_multirel: function(t) {
219            var i, e;
220            return t.complexity > this.COLLAPSE.multirel && (i = this.SplitAttribute(t, "content"),
221            e = h.FindChildText(t, i[0]) + "\u22ef", t = this.MakeAction(this.Marker(e), t)),
222            t;
223        },
224        Collapse_superscript: function(t) {
225            return this.UncollapseChild(t, 0, 2), t.complexity > this.COLLAPSE.superscript && (t = this.MakeAction(this.Marker(this.MARKER.superscript), t)),
226            t;
227        },
228        Collapse_subscript: function(t) {
229            return this.UncollapseChild(t, 0, 2), t.complexity > this.COLLAPSE.subscript && (t = this.MakeAction(this.Marker(this.MARKER.subscript), t)),
230            t;
231        },
232        Collapse_subsup: function(t) {
233            return this.UncollapseChild(t, 0, 3), t.complexity > this.COLLAPSE.subsup && (t = this.MakeAction(this.Marker(this.MARKER.subsup), t)),
234            t;
235        }
236    };
237    s.Register.StartupHook("End Extensions", function() {
238        null == l.collapsible ? l.collapsible = !h.config.disabled : h.config.disabled = !l.collapsible,
239        s.Register.StartupHook("MathMenu Ready", function() {
240            o = MathJax.Menu.cookie;
241            var t, i = MathJax.Menu.ITEM, e = MathJax.Menu.menu, a = i.CHECKBOX([ "CollapsibleMath", "Collapsible Math" ], "collapsible", {
242                action: function(t) {
243                    h[l.collapsible ? "Enable" : "Disable"](!0, !0), MathJax.Menu.saveCookie();
244                }
245            }), s = (e.FindId("Accessibility") || {}).submenu;
246            s ? null !== (t = s.IndexOfId("CollapsibleMath")) ? s.items[t] = a : s.items.push(i.RULE(), a) : (t = e.IndexOfId("About"),
247            e.items.splice(t, 0, a, i.RULE()));
248        }, 15);
249    }, 15);
250}(MathJax.Hub), MathJax.Ajax.Require("[a11y]/semantic-enrich.js"), MathJax.Hub.Register.StartupHook("Semantic Enrich Ready", function() {
251    var t = MathJax.ElementJax.mml, i = MathJax.Extension.collapsible, a = i.COMPLEXITY, s = i.COMPLEXATTR;
252    i.Startup(), t.mbase.Augment({
253        Collapse: function() {
254            return i.Collapse(this);
255        },
256        getComplexity: function() {
257            if (null == this.complexity) {
258                var t = 0;
259                if (this.isToken) t = a.TEXT * this.data.join("").length + a.TOKEN; else {
260                    for (var i = 0, e = this.data.length; i < e; i++) this.data[i] && (this.SetData(i, this.data[i].Collapse()),
261                    t += this.data[i].complexity);
262                    1 < e && (t += e * a.CHILD);
263                }
264                !this.attrNames || "complexity" in this || this.attrNames.push(s), this.attr && (this.attr[s] = t),
265                this.complexity = t;
266            }
267            return this.complexity;
268        },
269        reportComplexity: function() {
270            !this.attr || !this.attrNames || s in this.attr || (this.attrNames.push(s), this.attr[s] = this.complexity);
271        }
272    }), t.mfrac.Augment({
273        getComplexity: function() {
274            return null == this.complexity && (this.SUPER(arguments).getComplexity.call(this),
275            this.complexity *= a.SCRIPT, this.complexity += a.FRACTION, this.attr[s] = this.complexity),
276            this.complexity;
277        }
278    }), t.msqrt.Augment({
279        getComplexity: function() {
280            return null == this.complexity && (this.SUPER(arguments).getComplexity.call(this),
281            this.complexity += a.SQRT, this.attr[s] = this.complexity), this.complexity;
282        }
283    }), t.mroot.Augment({
284        getComplexity: function() {
285            return null == this.complexity && (this.SUPER(arguments).getComplexity.call(this),
286            this.complexity -= (1 - a.SCRIPT) * this.data[1].getComplexity(), this.complexity += a.SQRT,
287            this.attr[s] = this.complexity), this.complexity;
288        }
289    }), t.msubsup.Augment({
290        getComplexity: function() {
291            var t;
292            return null == this.complexity && (t = 0, this.data[this.sub] && (t = this.data[this.sub].getComplexity() + a.CHILD),
293            this.data[this.sup] && (t = Math.max(this.data[this.sup].getComplexity(), t)), t *= a.SCRIPT,
294            this.data[this.sub] && (t += a.CHILD), this.data[this.sup] && (t += a.CHILD), this.data[this.base] && (t += this.data[this.base].getComplexity() + a.CHILD),
295            this.complexity = t + a.SUBSUP, this.reportComplexity()), this.complexity;
296        }
297    }), t.munderover.Augment({
298        getComplexity: function() {
299            var t;
300            return null == this.complexity && (t = 0, this.data[this.sub] && (t = this.data[this.sub].getComplexity() + a.CHILD),
301            this.data[this.sup] && (t = Math.max(this.data[this.sup].getComplexity(), t)), t *= a.SCRIPT,
302            this.data[this.base] && (t = Math.max(this.data[this.base].getComplexity(), t)),
303            this.data[this.sub] && (t += a.CHILD), this.data[this.sup] && (t += a.CHILD), this.data[this.base] && (t += a.CHILD),
304            this.complexity = t + a.UNDEROVER, this.reportComplexity()), this.complexity;
305        }
306    }), t.mphantom.Augment({
307        getComplexity: function() {
308            return this.complexity = a.PHANTOM, this.reportComplexity(), this.complexity;
309        }
310    }), t.ms.Augment({
311        getComplexity: function() {
312            return this.SUPER(arguments).getComplexity.call(this), this.complexity += this.Get("lquote").length * a.TEXT,
313            this.complexity += this.Get("rquote").length * a.TEXT, this.attr[s] = this.complexity,
314            this.complexity;
315        }
316    }), t.menclose.Augment({
317        getComplexity: function() {
318            return null == this.complexity && (this.SUPER(arguments).getComplexity.call(this),
319            this.complexity += a.ACTION, this.attr[s] = this.complexity), this.complexity;
320        }
321    }), t.maction.Augment({
322        getComplexity: function() {
323            return this.complexity = (this.collapsible ? this.data[0] : this.selected()).getComplexity(),
324            this.reportComplexity(), this.complexity;
325        }
326    }), t.semantics.Augment({
327        getComplexity: function() {
328            return null == this.complexity && (this.complexity = this.data[0] ? this.data[0].getComplexity() : 0,
329            this.reportComplexity()), this.complexity;
330        }
331    }), t["annotation-xml"].Augment({
332        getComplexity: function() {
333            return this.complexity = a.XML, this.reportComplexity(), this.complexity;
334        }
335    }), t.annotation.Augment({
336        getComplexity: function() {
337            return this.complexity = a.XML, this.reportComplexity(), this.complexity;
338        }
339    }), t.mglyph.Augment({
340        getComplexity: function() {
341            return this.complexity = a.GLYPH, this.reportComplexity(), this.complexity;
342        }
343    }), MathJax.Hub.Startup.signal.Post("Collapsible Ready"), MathJax.Ajax.loadComplete("[a11y]/collapsible.js");
344});