@pie-lib/math-rendering 4.1.0-next.0 → 4.1.0-next.3

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.
@@ -1,362 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
- Object.defineProperty(exports, "__esModule", {
5
- value: true
6
- });
7
- exports.fixMathElements = exports.fixMathElement = exports["default"] = void 0;
8
- var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
9
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
10
- var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
11
- var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
12
- var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
13
- var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
14
- var _get2 = _interopRequireDefault(require("@babel/runtime/helpers/get"));
15
- var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
16
- var _mathjax = require("mathjax-full/js/mathjax");
17
- var _global = require("mathjax-full/js/components/global");
18
- var _assistiveMml = require("mathjax-full/js/a11y/assistive-mml");
19
- var _semanticEnrich = require("mathjax-full/js/a11y/semantic-enrich");
20
- var _MenuHandler = require("mathjax-full/js/ui/menu/MenuHandler");
21
- var _FindMathML2 = require("mathjax-full/js/input/mathml/FindMathML");
22
- var _mathml = require("mathjax-full/js/input/mathml");
23
- var _tex = require("mathjax-full/js/input/tex");
24
- var _chtml = require("mathjax-full/js/output/chtml");
25
- var _html = require("mathjax-full/js/handlers/html");
26
- var _browserAdaptor = require("mathjax-full/js/adaptors/browserAdaptor");
27
- var _AllPackages = require("mathjax-full/js/input/tex/AllPackages");
28
- var _system = require("speech-rule-engine/js/common/system");
29
- var _mstack = require("./mstack");
30
- var _debug = _interopRequireDefault(require("debug"));
31
- var _normalization = require("./normalization");
32
- var _MmlFactory = require("mathjax-full/js/core/MmlTree/MmlFactory");
33
- var _SerializedMmlVisitor = require("mathjax-full/js/core/MmlTree/SerializedMmlVisitor");
34
- var _WrapperFactory = require("mathjax-full/js/output/chtml/WrapperFactory");
35
- var _mspace = require("mathjax-full/js/output/chtml/Wrappers/mspace");
36
- var _HTMLDomStrings = require("mathjax-full/js/handlers/html/HTMLDomStrings");
37
- function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
38
- function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
39
- function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2["default"])(o), (0, _possibleConstructorReturn2["default"])(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2["default"])(t).constructor) : o.apply(t, e)); }
40
- function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
41
- function _superPropGet(t, o, e, r) { var p = (0, _get2["default"])((0, _getPrototypeOf2["default"])(1 & r ? t.prototype : t), o, e); return 2 & r && "function" == typeof p ? function (t) { return p.apply(e, t); } : p; }
42
- if (typeof window !== 'undefined') {
43
- (0, _html.RegisterHTMLHandler)((0, _browserAdaptor.browserAdaptor)());
44
- }
45
- var sreReady = false;
46
- (0, _system.engineReady)().then(function () {
47
- sreReady = true;
48
- });
49
-
50
- // import pkg from '../../package.json';
51
-
52
- var visitor = new _SerializedMmlVisitor.SerializedMmlVisitor();
53
- var toMMl = function toMMl(node) {
54
- return visitor.visitTree(node);
55
- };
56
- var log = (0, _debug["default"])('pie-lib:math-rendering');
57
- var NEWLINE_BLOCK_REGEX = /\\embed\{newLine\}\[\]/g;
58
- var NEWLINE_LATEX = '\\newline ';
59
- var getGlobal = function getGlobal() {
60
- // TODO does it make sense to use version?
61
- // const key = `${pkg.name}@${pkg.version.split('.')[0]}`;
62
- // It looks like Ed made this change when he switched from mathjax3 to mathjax-full
63
- // I think it was supposed to make sure version 1 (using mathjax3) is not used
64
- // in combination with version 2 (using mathjax-full)
65
-
66
- // TODO higher level wrappers use this instance of math-rendering, and if 2 different instances are used, math rendering is not working
67
- // so I will hardcode this for now until a better solution is found
68
- var key = '@pie-lib/math-rendering@2';
69
- if (typeof window !== 'undefined') {
70
- if (!window[key]) {
71
- window[key] = {};
72
- }
73
- return window[key];
74
- } else {
75
- return {};
76
- }
77
- };
78
-
79
- /** Add temporary support for a global singleDollar override
80
- * <code>
81
- * // This will enable single dollar rendering
82
- * window.pie = window.pie || {};
83
- * window.pie.mathRendering = {useSingleDollar: true };
84
- * </code>
85
- */
86
- var defaultOpts = function defaultOpts() {
87
- return getGlobal().opts || {};
88
- };
89
- var fixMathElement = exports.fixMathElement = function fixMathElement(element) {
90
- if (element.dataset.mathHandled) {
91
- return;
92
- }
93
- var property = 'innerText';
94
- if (element.textContent) {
95
- property = 'textContent';
96
- }
97
- if (element[property]) {
98
- element[property] = (0, _normalization.wrapMath)((0, _normalization.unWrapMath)(element[property]).unwrapped);
99
- // because mathquill doesn't understand line breaks, sometimes we end up with custom elements on prompts/rationale/etc.
100
- // we need to replace the custom embedded elements with valid latex that Mathjax can understand
101
- element[property] = element[property].replace(NEWLINE_BLOCK_REGEX, NEWLINE_LATEX);
102
- element.dataset.mathHandled = true;
103
- }
104
- };
105
- var fixMathElements = exports.fixMathElements = function fixMathElements() {
106
- var el = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : document;
107
- var mathElements = el.querySelectorAll('[data-latex]');
108
- mathElements.forEach(function (item) {
109
- return fixMathElement(item);
110
- });
111
- };
112
- var adjustMathMLStyle = function adjustMathMLStyle() {
113
- var el = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : document;
114
- var nodes = el.querySelectorAll('math');
115
- nodes.forEach(function (node) {
116
- return node.setAttribute('displaystyle', 'true');
117
- });
118
- };
119
- var myFindMathML = /*#__PURE__*/function (_FindMathML) {
120
- function myFindMathML() {
121
- (0, _classCallCheck2["default"])(this, myFindMathML);
122
- return _callSuper(this, myFindMathML, arguments);
123
- }
124
- (0, _inherits2["default"])(myFindMathML, _FindMathML);
125
- return (0, _createClass2["default"])(myFindMathML, [{
126
- key: "processMath",
127
- value: function processMath(set) {
128
- var adaptor = this.adaptor;
129
- for (var _i = 0, _Array$from = Array.from(set); _i < _Array$from.length; _i++) {
130
- var mml = _Array$from[_i];
131
- if (adaptor.kind(adaptor.parent(mml)) === 'mjx-assistive-mml') {
132
- set["delete"](mml);
133
- }
134
- }
135
- return _superPropGet(myFindMathML, "processMath", this, 3)([set]);
136
- }
137
- }]);
138
- }(_FindMathML2.FindMathML);
139
- var createMathMLInstance = function createMathMLInstance(opts) {
140
- var docProvided = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : document;
141
- opts = opts || defaultOpts();
142
- if (opts.useSingleDollar) {
143
- // eslint-disable-next-line
144
- console.warn('[math-rendering] using $ is not advisable, please use $$..$$ or \\(...\\)');
145
- }
146
- var packages = _AllPackages.AllPackages.filter(function (name) {
147
- return name !== 'bussproofs';
148
- }); // Bussproofs needs an output jax
149
-
150
- // The autoload extension predefines all the macros from the extensions that haven't been loaded already
151
- // so that they automatically load the needed extension when they are first used
152
- packages.push('autoload');
153
- var macros = {
154
- parallelogram: "\\lower.2em{\\Huge\\unicode{x25B1}}",
155
- overarc: '\\overparen',
156
- napprox: '\\not\\approx',
157
- longdiv: '\\enclose{longdiv}'
158
- };
159
- var texConfig = opts.useSingleDollar ? {
160
- packages: packages,
161
- macros: macros,
162
- inlineMath: [['$', '$'], ['\\(', '\\)']],
163
- processEscapes: true
164
- } : {
165
- packages: packages,
166
- macros: macros
167
- };
168
- var mmlConfig = {
169
- parseError: function parseError(node) {
170
- // function to process parsing errors
171
- // eslint-disable-next-line no-console
172
- console.log('error:', node);
173
- this.error(this.adaptor.textContent(node).replace(/\n.*/g, ''));
174
- },
175
- FindMathML: new myFindMathML()
176
- };
177
- var cachedMathjax;
178
- if (_global.MathJax && _global.MathJax.version !== _mathjax.mathjax.version) {
179
- // handling other MathJax version on the page
180
- // replacing it temporarily with the version we have
181
- window.MathJax._ = window.MathJax._ || {};
182
- window.MathJax.config = window.MathJax.config || {};
183
- cachedMathjax = window.MathJax;
184
- Object.assign(_global.MathJax, _mathjax.mathjax);
185
- }
186
- var fontURL = "https://unpkg.com/mathjax-full@".concat(_mathjax.mathjax.version, "/ts/output/chtml/fonts/tex-woff-v2");
187
- var htmlConfig = {
188
- fontURL: fontURL,
189
- wrapperFactory: new _WrapperFactory.CHTMLWrapperFactory(_objectSpread(_objectSpread({}, _WrapperFactory.CHTMLWrapperFactory.defaultNodes), _mstack.chtmlNodes))
190
- };
191
- var mml = new _mathml.MathML(mmlConfig);
192
- var customMmlFactory = new _MmlFactory.MmlFactory(_objectSpread(_objectSpread({}, _MmlFactory.MmlFactory.defaultNodes), _mstack.mmlNodes));
193
- var classFactory = (0, _semanticEnrich.EnrichHandler)((0, _MenuHandler.MenuHandler)((0, _assistiveMml.AssistiveMmlHandler)(_mathjax.mathjax.handlers.handlesDocument(docProvided))), mml);
194
- var html = classFactory.create(docProvided, {
195
- compileError: function compileError(mj, math, err) {
196
- // eslint-disable-next-line no-console
197
- console.log('bad math?:', math);
198
- // eslint-disable-next-line no-console
199
- console.error(err);
200
- },
201
- typesetError: function typesetError(doc, math, err) {
202
- // eslint-disable-next-line no-console
203
- console.log('typeset error');
204
- // eslint-disable-next-line no-console
205
- console.error(err);
206
- doc.typesetError(math, err);
207
- },
208
- sre: {
209
- speech: 'deep'
210
- },
211
- enrichSpeech: 'deep',
212
- InputJax: [new _tex.TeX(texConfig), mml],
213
- OutputJax: new _chtml.CHTML(htmlConfig),
214
- DomStrings: new _HTMLDomStrings.HTMLDomStrings({
215
- skipHtmlTags: ['script', 'noscript', 'style', 'textarea', 'pre', 'code', 'annotation', 'annotation-xml', 'mjx-assistive-mml', 'mjx-container']
216
- })
217
- });
218
-
219
- // Note: we must set this *after* mathjax.document (no idea why)
220
- mml.setMmlFactory(customMmlFactory);
221
- if (cachedMathjax) {
222
- // if we have a cached version, we replace it here
223
- window.MathJax = cachedMathjax;
224
- }
225
- return html;
226
- };
227
- var enrichSpeechInitialized = false;
228
- var bootstrap = function bootstrap(opts) {
229
- if (typeof window === 'undefined') {
230
- return {
231
- Typeset: function Typeset() {
232
- return {};
233
- }
234
- };
235
- }
236
- var html = createMathMLInstance(opts);
237
- return {
238
- version: _mathjax.mathjax.version,
239
- html: html,
240
- Typeset: function Typeset() {
241
- var _this = this;
242
- for (var _len = arguments.length, elements = new Array(_len), _key = 0; _key < _len; _key++) {
243
- elements[_key] = arguments[_key];
244
- }
245
- var attemptRender = function attemptRender() {
246
- var _updatedDocument$math;
247
- var temporary = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
248
- var updatedDocument = _this.html.findMath(elements.length ? {
249
- elements: elements
250
- } : {}).compile();
251
- if (!temporary && sreReady) {
252
- try {
253
- updatedDocument = updatedDocument.enrich();
254
- } catch (e) {
255
- // If enrich fails, speech-rule-engine isn't actually ready yet
256
- // eslint-disable-next-line no-console
257
- console.warn('[math-rendering] Speech-rule-engine not fully initialized, skipping enrichment');
258
- sreReady = false;
259
- }
260
- }
261
- updatedDocument = updatedDocument.getMetrics().typeset();
262
-
263
- // Only add assistive MML and speech if speech-rule-engine is ready and not in temporary mode
264
- if (!temporary && sreReady) {
265
- try {
266
- updatedDocument = updatedDocument.assistiveMml().attachSpeech();
267
- } catch (e) {
268
- // If this fails, speech-rule-engine isn't ready
269
- // eslint-disable-next-line no-console
270
- console.warn('[math-rendering] Speech-rule-engine not fully initialized, skipping assistive features');
271
- sreReady = false;
272
- }
273
- }
274
- updatedDocument = updatedDocument.addMenu().updateDocument();
275
- if (!enrichSpeechInitialized && (0, _typeof2["default"])((_updatedDocument$math = updatedDocument.math.list) === null || _updatedDocument$math === void 0 || (_updatedDocument$math = _updatedDocument$math.next) === null || _updatedDocument$math === void 0 ? void 0 : _updatedDocument$math.data) === 'object') {
276
- enrichSpeechInitialized = true;
277
- }
278
- try {
279
- var list = updatedDocument.math.list;
280
- if (list) {
281
- for (var item = list.next; (0, _typeof2["default"])(item.data) !== 'symbol'; item = item.next) {
282
- var mathMl = toMMl(item.data.root);
283
- var parsedMathMl = mathMl.replaceAll('\n', '');
284
- item.data.typesetRoot.setAttribute('data-mathml', parsedMathMl);
285
- item.data.typesetRoot.setAttribute('tabindex', '-1');
286
- }
287
- }
288
- } catch (e) {
289
- // eslint-disable-next-line no-console
290
- console.error(e.toString());
291
- }
292
- updatedDocument.clear();
293
- };
294
- if (!enrichSpeechInitialized) {
295
- attemptRender(true);
296
- }
297
- _mathjax.mathjax.handleRetriesFor(function () {
298
- attemptRender();
299
- });
300
- }
301
- };
302
- };
303
- var renderMath = function renderMath(el, renderOpts) {
304
- var _getGlobal$instance, _getGlobal$instance2;
305
- if (window && window.MathJax && window.MathJax.customKey && window.MathJax.customKey == '@pie-lib/math-rendering-accessible@1') {
306
- return;
307
- }
308
- var isString = typeof el === 'string';
309
- var executeOn = document.body;
310
- if (isString) {
311
- var div = document.createElement('div');
312
- div.innerHTML = el;
313
- executeOn = div;
314
- }
315
- fixMathElements(executeOn);
316
- adjustMathMLStyle(executeOn);
317
- if (isString) {
318
- var html = createMathMLInstance(undefined, executeOn);
319
- var updatedDocument = html.findMath().compile().getMetrics().typeset().updateDocument();
320
- var list = updatedDocument.math.list;
321
- var item = list.next;
322
- if (!item) {
323
- return '';
324
- }
325
- var mathMl = toMMl(item.data.root);
326
- var parsedMathMl = mathMl.replaceAll('\n', '');
327
- return parsedMathMl;
328
- }
329
- if (!getGlobal().instance) {
330
- getGlobal().instance = bootstrap(renderOpts);
331
- }
332
- if (!el) {
333
- log('el is undefined');
334
- return;
335
- }
336
- if (el instanceof Element && (_getGlobal$instance = getGlobal().instance) !== null && _getGlobal$instance !== void 0 && _getGlobal$instance.Typeset) {
337
- getGlobal().instance.Typeset(el);
338
- } else if (el.length && (_getGlobal$instance2 = getGlobal().instance) !== null && _getGlobal$instance2 !== void 0 && _getGlobal$instance2.Typeset) {
339
- var _getGlobal$instance3;
340
- var arr = Array.from(el);
341
- (_getGlobal$instance3 = getGlobal().instance).Typeset.apply(_getGlobal$instance3, arr);
342
- }
343
- };
344
-
345
- /**
346
- * This style is added to overried default styling of mjx-mspace Mathjax tag
347
- * In mathjax src code \newline latex gets parsed to <mjx-mspace></mjx-mspace>,
348
- * but has the default style
349
- * 'mjx-mspace': {
350
- "display": 'in-line',
351
- "text-align": 'left'
352
- } which prevents it from showing as a newline value
353
- */
354
- _mspace.CHTMLmspace.styles = {
355
- 'mjx-mspace': {
356
- display: 'block',
357
- 'text-align': 'center',
358
- height: '5px'
359
- }
360
- };
361
- var _default = exports["default"] = renderMath;
362
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbWF0aGpheCIsInJlcXVpcmUiLCJfZ2xvYmFsIiwiX2Fzc2lzdGl2ZU1tbCIsIl9zZW1hbnRpY0VucmljaCIsIl9NZW51SGFuZGxlciIsIl9GaW5kTWF0aE1MMiIsIl9tYXRobWwiLCJfdGV4IiwiX2NodG1sIiwiX2h0bWwiLCJfYnJvd3NlckFkYXB0b3IiLCJfQWxsUGFja2FnZXMiLCJfc3lzdGVtIiwiX21zdGFjayIsIl9kZWJ1ZyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfbm9ybWFsaXphdGlvbiIsIl9NbWxGYWN0b3J5IiwiX1NlcmlhbGl6ZWRNbWxWaXNpdG9yIiwiX1dyYXBwZXJGYWN0b3J5IiwiX21zcGFjZSIsIl9IVE1MRG9tU3RyaW5ncyIsIm93bktleXMiLCJlIiwiciIsInQiLCJPYmplY3QiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwibyIsImZpbHRlciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwiX2NhbGxTdXBlciIsIl9nZXRQcm90b3R5cGVPZjIiLCJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybjIiLCJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwiUmVmbGVjdCIsImNvbnN0cnVjdCIsImNvbnN0cnVjdG9yIiwiQm9vbGVhbiIsInByb3RvdHlwZSIsInZhbHVlT2YiLCJjYWxsIiwiX3N1cGVyUHJvcEdldCIsInAiLCJfZ2V0MiIsIndpbmRvdyIsIlJlZ2lzdGVySFRNTEhhbmRsZXIiLCJicm93c2VyQWRhcHRvciIsInNyZVJlYWR5IiwiZW5naW5lUmVhZHkiLCJ0aGVuIiwidmlzaXRvciIsIlNlcmlhbGl6ZWRNbWxWaXNpdG9yIiwidG9NTWwiLCJub2RlIiwidmlzaXRUcmVlIiwibG9nIiwiZGVidWciLCJORVdMSU5FX0JMT0NLX1JFR0VYIiwiTkVXTElORV9MQVRFWCIsImdldEdsb2JhbCIsImtleSIsImRlZmF1bHRPcHRzIiwib3B0cyIsImZpeE1hdGhFbGVtZW50IiwiZXhwb3J0cyIsImVsZW1lbnQiLCJkYXRhc2V0IiwibWF0aEhhbmRsZWQiLCJwcm9wZXJ0eSIsInRleHRDb250ZW50Iiwid3JhcE1hdGgiLCJ1bldyYXBNYXRoIiwidW53cmFwcGVkIiwicmVwbGFjZSIsImZpeE1hdGhFbGVtZW50cyIsImVsIiwidW5kZWZpbmVkIiwiZG9jdW1lbnQiLCJtYXRoRWxlbWVudHMiLCJxdWVyeVNlbGVjdG9yQWxsIiwiaXRlbSIsImFkanVzdE1hdGhNTFN0eWxlIiwibm9kZXMiLCJzZXRBdHRyaWJ1dGUiLCJteUZpbmRNYXRoTUwiLCJfRmluZE1hdGhNTCIsIl9jbGFzc0NhbGxDaGVjazIiLCJfaW5oZXJpdHMyIiwiX2NyZWF0ZUNsYXNzMiIsInZhbHVlIiwicHJvY2Vzc01hdGgiLCJzZXQiLCJhZGFwdG9yIiwiX2kiLCJfQXJyYXkkZnJvbSIsIkFycmF5IiwiZnJvbSIsIm1tbCIsImtpbmQiLCJwYXJlbnQiLCJGaW5kTWF0aE1MIiwiY3JlYXRlTWF0aE1MSW5zdGFuY2UiLCJkb2NQcm92aWRlZCIsInVzZVNpbmdsZURvbGxhciIsImNvbnNvbGUiLCJ3YXJuIiwicGFja2FnZXMiLCJBbGxQYWNrYWdlcyIsIm5hbWUiLCJtYWNyb3MiLCJwYXJhbGxlbG9ncmFtIiwib3ZlcmFyYyIsIm5hcHByb3giLCJsb25nZGl2IiwidGV4Q29uZmlnIiwiaW5saW5lTWF0aCIsInByb2Nlc3NFc2NhcGVzIiwibW1sQ29uZmlnIiwicGFyc2VFcnJvciIsImVycm9yIiwiY2FjaGVkTWF0aGpheCIsImdsb2JhbE1hdGhqYXgiLCJ2ZXJzaW9uIiwibWF0aGpheCIsIk1hdGhKYXgiLCJfIiwiY29uZmlnIiwiYXNzaWduIiwiZm9udFVSTCIsImNvbmNhdCIsImh0bWxDb25maWciLCJ3cmFwcGVyRmFjdG9yeSIsIkNIVE1MV3JhcHBlckZhY3RvcnkiLCJkZWZhdWx0Tm9kZXMiLCJjaHRtbE5vZGVzIiwiTWF0aE1MIiwiY3VzdG9tTW1sRmFjdG9yeSIsIk1tbEZhY3RvcnkiLCJtbWxOb2RlcyIsImNsYXNzRmFjdG9yeSIsIkVucmljaEhhbmRsZXIiLCJNZW51SGFuZGxlciIsIkFzc2lzdGl2ZU1tbEhhbmRsZXIiLCJoYW5kbGVycyIsImhhbmRsZXNEb2N1bWVudCIsImh0bWwiLCJjcmVhdGUiLCJjb21waWxlRXJyb3IiLCJtaiIsIm1hdGgiLCJlcnIiLCJ0eXBlc2V0RXJyb3IiLCJkb2MiLCJzcmUiLCJzcGVlY2giLCJlbnJpY2hTcGVlY2giLCJJbnB1dEpheCIsIlRlWCIsIk91dHB1dEpheCIsIkNIVE1MIiwiRG9tU3RyaW5ncyIsIkhUTUxEb21TdHJpbmdzIiwic2tpcEh0bWxUYWdzIiwic2V0TW1sRmFjdG9yeSIsImVucmljaFNwZWVjaEluaXRpYWxpemVkIiwiYm9vdHN0cmFwIiwiVHlwZXNldCIsIl90aGlzIiwiX2xlbiIsImVsZW1lbnRzIiwiX2tleSIsImF0dGVtcHRSZW5kZXIiLCJfdXBkYXRlZERvY3VtZW50JG1hdGgiLCJ0ZW1wb3JhcnkiLCJ1cGRhdGVkRG9jdW1lbnQiLCJmaW5kTWF0aCIsImNvbXBpbGUiLCJlbnJpY2giLCJnZXRNZXRyaWNzIiwidHlwZXNldCIsImFzc2lzdGl2ZU1tbCIsImF0dGFjaFNwZWVjaCIsImFkZE1lbnUiLCJ1cGRhdGVEb2N1bWVudCIsIl90eXBlb2YyIiwibGlzdCIsIm5leHQiLCJkYXRhIiwibWF0aE1sIiwicm9vdCIsInBhcnNlZE1hdGhNbCIsInJlcGxhY2VBbGwiLCJ0eXBlc2V0Um9vdCIsInRvU3RyaW5nIiwiY2xlYXIiLCJoYW5kbGVSZXRyaWVzRm9yIiwicmVuZGVyTWF0aCIsInJlbmRlck9wdHMiLCJfZ2V0R2xvYmFsJGluc3RhbmNlIiwiX2dldEdsb2JhbCRpbnN0YW5jZTIiLCJjdXN0b21LZXkiLCJpc1N0cmluZyIsImV4ZWN1dGVPbiIsImJvZHkiLCJkaXYiLCJjcmVhdGVFbGVtZW50IiwiaW5uZXJIVE1MIiwiaW5zdGFuY2UiLCJFbGVtZW50IiwiX2dldEdsb2JhbCRpbnN0YW5jZTMiLCJhcnIiLCJDSFRNTG1zcGFjZSIsInN0eWxlcyIsImRpc3BsYXkiLCJoZWlnaHQiLCJfZGVmYXVsdCJdLCJzb3VyY2VzIjpbIi4uL3NyYy9yZW5kZXItbWF0aC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBtYXRoamF4IH0gZnJvbSAnbWF0aGpheC1mdWxsL2pzL21hdGhqYXgnO1xuaW1wb3J0IHsgTWF0aEpheCBhcyBnbG9iYWxNYXRoamF4IH0gZnJvbSAnbWF0aGpheC1mdWxsL2pzL2NvbXBvbmVudHMvZ2xvYmFsJztcbmltcG9ydCB7IEFzc2lzdGl2ZU1tbEhhbmRsZXIgfSBmcm9tICdtYXRoamF4LWZ1bGwvanMvYTExeS9hc3Npc3RpdmUtbW1sJztcbmltcG9ydCB7IEVucmljaEhhbmRsZXIgfSBmcm9tICdtYXRoamF4LWZ1bGwvanMvYTExeS9zZW1hbnRpYy1lbnJpY2gnO1xuaW1wb3J0IHsgTWVudUhhbmRsZXIgfSBmcm9tICdtYXRoamF4LWZ1bGwvanMvdWkvbWVudS9NZW51SGFuZGxlcic7XG5pbXBvcnQgeyBGaW5kTWF0aE1MIH0gZnJvbSAnbWF0aGpheC1mdWxsL2pzL2lucHV0L21hdGhtbC9GaW5kTWF0aE1MJztcbmltcG9ydCB7IE1hdGhNTCB9IGZyb20gJ21hdGhqYXgtZnVsbC9qcy9pbnB1dC9tYXRobWwnO1xuaW1wb3J0IHsgVGVYIH0gZnJvbSAnbWF0aGpheC1mdWxsL2pzL2lucHV0L3RleCc7XG5cbmltcG9ydCB7IENIVE1MIH0gZnJvbSAnbWF0aGpheC1mdWxsL2pzL291dHB1dC9jaHRtbCc7XG5pbXBvcnQgeyBSZWdpc3RlckhUTUxIYW5kbGVyIH0gZnJvbSAnbWF0aGpheC1mdWxsL2pzL2hhbmRsZXJzL2h0bWwnO1xuaW1wb3J0IHsgYnJvd3NlckFkYXB0b3IgfSBmcm9tICdtYXRoamF4LWZ1bGwvanMvYWRhcHRvcnMvYnJvd3NlckFkYXB0b3InO1xuaW1wb3J0IHsgQWxsUGFja2FnZXMgfSBmcm9tICdtYXRoamF4LWZ1bGwvanMvaW5wdXQvdGV4L0FsbFBhY2thZ2VzJztcbmltcG9ydCB7IGVuZ2luZVJlYWR5IH0gZnJvbSAnc3BlZWNoLXJ1bGUtZW5naW5lL2pzL2NvbW1vbi9zeXN0ZW0nO1xuXG5pZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgUmVnaXN0ZXJIVE1MSGFuZGxlcihicm93c2VyQWRhcHRvcigpKTtcbn1cblxubGV0IHNyZVJlYWR5ID0gZmFsc2U7XG5cbmVuZ2luZVJlYWR5KCkudGhlbigoKSA9PiB7XG4gIHNyZVJlYWR5ID0gdHJ1ZTtcbn0pO1xuXG4vLyBpbXBvcnQgcGtnIGZyb20gJy4uLy4uL3BhY2thZ2UuanNvbic7XG5pbXBvcnQgeyBtbWxOb2RlcywgY2h0bWxOb2RlcyB9IGZyb20gJy4vbXN0YWNrJztcbmltcG9ydCBkZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5pbXBvcnQgeyB3cmFwTWF0aCwgdW5XcmFwTWF0aCB9IGZyb20gJy4vbm9ybWFsaXphdGlvbic7XG5pbXBvcnQgeyBNbWxGYWN0b3J5IH0gZnJvbSAnbWF0aGpheC1mdWxsL2pzL2NvcmUvTW1sVHJlZS9NbWxGYWN0b3J5JztcbmltcG9ydCB7IFNlcmlhbGl6ZWRNbWxWaXNpdG9yIH0gZnJvbSAnbWF0aGpheC1mdWxsL2pzL2NvcmUvTW1sVHJlZS9TZXJpYWxpemVkTW1sVmlzaXRvcic7XG5pbXBvcnQgeyBDSFRNTFdyYXBwZXJGYWN0b3J5IH0gZnJvbSAnbWF0aGpheC1mdWxsL2pzL291dHB1dC9jaHRtbC9XcmFwcGVyRmFjdG9yeSc7XG5pbXBvcnQgeyBDSFRNTG1zcGFjZSB9IGZyb20gJ21hdGhqYXgtZnVsbC9qcy9vdXRwdXQvY2h0bWwvV3JhcHBlcnMvbXNwYWNlJztcbmltcG9ydCB7IEhUTUxEb21TdHJpbmdzIH0gZnJvbSAnbWF0aGpheC1mdWxsL2pzL2hhbmRsZXJzL2h0bWwvSFRNTERvbVN0cmluZ3MnO1xuXG5jb25zdCB2aXNpdG9yID0gbmV3IFNlcmlhbGl6ZWRNbWxWaXNpdG9yKCk7XG5jb25zdCB0b01NbCA9IChub2RlKSA9PiB2aXNpdG9yLnZpc2l0VHJlZShub2RlKTtcblxuY29uc3QgbG9nID0gZGVidWcoJ3BpZS1saWI6bWF0aC1yZW5kZXJpbmcnKTtcblxuY29uc3QgTkVXTElORV9CTE9DS19SRUdFWCA9IC9cXFxcZW1iZWRcXHtuZXdMaW5lXFx9XFxbXFxdL2c7XG5jb25zdCBORVdMSU5FX0xBVEVYID0gJ1xcXFxuZXdsaW5lICc7XG5cbmNvbnN0IGdldEdsb2JhbCA9ICgpID0+IHtcbiAgLy8gVE9ETyBkb2VzIGl0IG1ha2Ugc2Vuc2UgdG8gdXNlIHZlcnNpb24/XG4gIC8vIGNvbnN0IGtleSA9IGAke3BrZy5uYW1lfUAke3BrZy52ZXJzaW9uLnNwbGl0KCcuJylbMF19YDtcbiAgLy8gSXQgbG9va3MgbGlrZSBFZCBtYWRlIHRoaXMgY2hhbmdlIHdoZW4gaGUgc3dpdGNoZWQgZnJvbSBtYXRoamF4MyB0byBtYXRoamF4LWZ1bGxcbiAgLy8gSSB0aGluayBpdCB3YXMgc3VwcG9zZWQgdG8gbWFrZSBzdXJlIHZlcnNpb24gMSAodXNpbmcgbWF0aGpheDMpIGlzIG5vdCB1c2VkXG4gIC8vIGluIGNvbWJpbmF0aW9uIHdpdGggdmVyc2lvbiAyICh1c2luZyBtYXRoamF4LWZ1bGwpXG5cbiAgLy8gVE9ETyBoaWdoZXIgbGV2ZWwgd3JhcHBlcnMgdXNlIHRoaXMgaW5zdGFuY2Ugb2YgbWF0aC1yZW5kZXJpbmcsIGFuZCBpZiAyIGRpZmZlcmVudCBpbnN0YW5jZXMgYXJlIHVzZWQsIG1hdGggcmVuZGVyaW5nIGlzIG5vdCB3b3JraW5nXG4gIC8vICBzbyBJIHdpbGwgaGFyZGNvZGUgdGhpcyBmb3Igbm93IHVudGlsIGEgYmV0dGVyIHNvbHV0aW9uIGlzIGZvdW5kXG4gIGNvbnN0IGtleSA9ICdAcGllLWxpYi9tYXRoLXJlbmRlcmluZ0AyJztcblxuICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBpZiAoIXdpbmRvd1trZXldKSB7XG4gICAgICB3aW5kb3dba2V5XSA9IHt9O1xuICAgIH1cbiAgICByZXR1cm4gd2luZG93W2tleV07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG59O1xuXG4vKiogQWRkIHRlbXBvcmFyeSBzdXBwb3J0IGZvciBhIGdsb2JhbCBzaW5nbGVEb2xsYXIgb3ZlcnJpZGVcbiAqICA8Y29kZT5cbiAqICAgLy8gVGhpcyB3aWxsIGVuYWJsZSBzaW5nbGUgZG9sbGFyIHJlbmRlcmluZ1xuICogICB3aW5kb3cucGllID0gd2luZG93LnBpZSB8fCB7fTtcbiAqICAgd2luZG93LnBpZS5tYXRoUmVuZGVyaW5nID0gIHt1c2VTaW5nbGVEb2xsYXI6IHRydWUgfTtcbiAqICA8L2NvZGU+XG4gKi9cbmNvbnN0IGRlZmF1bHRPcHRzID0gKCkgPT4gZ2V0R2xvYmFsKCkub3B0cyB8fCB7fTtcblxuZXhwb3J0IGNvbnN0IGZpeE1hdGhFbGVtZW50ID0gKGVsZW1lbnQpID0+IHtcbiAgaWYgKGVsZW1lbnQuZGF0YXNldC5tYXRoSGFuZGxlZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxldCBwcm9wZXJ0eSA9ICdpbm5lclRleHQnO1xuXG4gIGlmIChlbGVtZW50LnRleHRDb250ZW50KSB7XG4gICAgcHJvcGVydHkgPSAndGV4dENvbnRlbnQnO1xuICB9XG5cbiAgaWYgKGVsZW1lbnRbcHJvcGVydHldKSB7XG4gICAgZWxlbWVudFtwcm9wZXJ0eV0gPSB3cmFwTWF0aCh1bldyYXBNYXRoKGVsZW1lbnRbcHJvcGVydHldKS51bndyYXBwZWQpO1xuICAgIC8vIGJlY2F1c2UgbWF0aHF1aWxsIGRvZXNuJ3QgdW5kZXJzdGFuZCBsaW5lIGJyZWFrcywgc29tZXRpbWVzIHdlIGVuZCB1cCB3aXRoIGN1c3RvbSBlbGVtZW50cyBvbiBwcm9tcHRzL3JhdGlvbmFsZS9ldGMuXG4gICAgLy8gd2UgbmVlZCB0byByZXBsYWNlIHRoZSBjdXN0b20gZW1iZWRkZWQgZWxlbWVudHMgd2l0aCB2YWxpZCBsYXRleCB0aGF0IE1hdGhqYXggY2FuIHVuZGVyc3RhbmRcbiAgICBlbGVtZW50W3Byb3BlcnR5XSA9IGVsZW1lbnRbcHJvcGVydHldLnJlcGxhY2UoTkVXTElORV9CTE9DS19SRUdFWCwgTkVXTElORV9MQVRFWCk7XG4gICAgZWxlbWVudC5kYXRhc2V0Lm1hdGhIYW5kbGVkID0gdHJ1ZTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGZpeE1hdGhFbGVtZW50cyA9IChlbCA9IGRvY3VtZW50KSA9PiB7XG4gIGNvbnN0IG1hdGhFbGVtZW50cyA9IGVsLnF1ZXJ5U2VsZWN0b3JBbGwoJ1tkYXRhLWxhdGV4XScpO1xuXG4gIG1hdGhFbGVtZW50cy5mb3JFYWNoKChpdGVtKSA9PiBmaXhNYXRoRWxlbWVudChpdGVtKSk7XG59O1xuXG5jb25zdCBhZGp1c3RNYXRoTUxTdHlsZSA9IChlbCA9IGRvY3VtZW50KSA9PiB7XG4gIGNvbnN0IG5vZGVzID0gZWwucXVlcnlTZWxlY3RvckFsbCgnbWF0aCcpO1xuICBub2Rlcy5mb3JFYWNoKChub2RlKSA9PiBub2RlLnNldEF0dHJpYnV0ZSgnZGlzcGxheXN0eWxlJywgJ3RydWUnKSk7XG59O1xuXG5jbGFzcyBteUZpbmRNYXRoTUwgZXh0ZW5kcyBGaW5kTWF0aE1MIHtcbiAgcHJvY2Vzc01hdGgoc2V0KSB7XG4gICAgY29uc3QgYWRhcHRvciA9IHRoaXMuYWRhcHRvcjtcbiAgICBmb3IgKGNvbnN0IG1tbCBvZiBBcnJheS5mcm9tKHNldCkpIHtcbiAgICAgIGlmIChhZGFwdG9yLmtpbmQoYWRhcHRvci5wYXJlbnQobW1sKSkgPT09ICdtangtYXNzaXN0aXZlLW1tbCcpIHtcbiAgICAgICAgc2V0LmRlbGV0ZShtbWwpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc3VwZXIucHJvY2Vzc01hdGgoc2V0KTtcbiAgfVxufVxuXG5jb25zdCBjcmVhdGVNYXRoTUxJbnN0YW5jZSA9IChvcHRzLCBkb2NQcm92aWRlZCA9IGRvY3VtZW50KSA9PiB7XG4gIG9wdHMgPSBvcHRzIHx8IGRlZmF1bHRPcHRzKCk7XG5cbiAgaWYgKG9wdHMudXNlU2luZ2xlRG9sbGFyKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgY29uc29sZS53YXJuKCdbbWF0aC1yZW5kZXJpbmddIHVzaW5nICQgaXMgbm90IGFkdmlzYWJsZSwgcGxlYXNlIHVzZSAkJC4uJCQgb3IgXFxcXCguLi5cXFxcKScpO1xuICB9XG5cbiAgY29uc3QgcGFja2FnZXMgPSBBbGxQYWNrYWdlcy5maWx0ZXIoKG5hbWUpID0+IG5hbWUgIT09ICdidXNzcHJvb2ZzJyk7IC8vIEJ1c3Nwcm9vZnMgbmVlZHMgYW4gb3V0cHV0IGpheFxuXG4gIC8vIFRoZSBhdXRvbG9hZCBleHRlbnNpb24gcHJlZGVmaW5lcyBhbGwgdGhlIG1hY3JvcyBmcm9tIHRoZSBleHRlbnNpb25zIHRoYXQgaGF2ZW4ndCBiZWVuIGxvYWRlZCBhbHJlYWR5XG4gIC8vIHNvIHRoYXQgdGhleSBhdXRvbWF0aWNhbGx5IGxvYWQgdGhlIG5lZWRlZCBleHRlbnNpb24gd2hlbiB0aGV5IGFyZSBmaXJzdCB1c2VkXG4gIHBhY2thZ2VzLnB1c2goJ2F1dG9sb2FkJyk7XG5cbiAgY29uc3QgbWFjcm9zID0ge1xuICAgIHBhcmFsbGVsb2dyYW06ICdcXFxcbG93ZXIuMmVte1xcXFxIdWdlXFxcXHVuaWNvZGV7eDI1QjF9fScsXG4gICAgb3ZlcmFyYzogJ1xcXFxvdmVycGFyZW4nLFxuICAgIG5hcHByb3g6ICdcXFxcbm90XFxcXGFwcHJveCcsXG4gICAgbG9uZ2RpdjogJ1xcXFxlbmNsb3Nle2xvbmdkaXZ9JyxcbiAgfTtcblxuICBjb25zdCB0ZXhDb25maWcgPSBvcHRzLnVzZVNpbmdsZURvbGxhclxuICAgID8ge1xuICAgICAgICBwYWNrYWdlcyxcbiAgICAgICAgbWFjcm9zLFxuICAgICAgICBpbmxpbmVNYXRoOiBbXG4gICAgICAgICAgWyckJywgJyQnXSxcbiAgICAgICAgICBbJ1xcXFwoJywgJ1xcXFwpJ10sXG4gICAgICAgIF0sXG4gICAgICAgIHByb2Nlc3NFc2NhcGVzOiB0cnVlLFxuICAgICAgfVxuICAgIDoge1xuICAgICAgICBwYWNrYWdlcyxcbiAgICAgICAgbWFjcm9zLFxuICAgICAgfTtcblxuICBjb25zdCBtbWxDb25maWcgPSB7XG4gICAgcGFyc2VFcnJvcjogZnVuY3Rpb24obm9kZSkge1xuICAgICAgLy8gZnVuY3Rpb24gdG8gcHJvY2VzcyBwYXJzaW5nIGVycm9yc1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUubG9nKCdlcnJvcjonLCBub2RlKTtcbiAgICAgIHRoaXMuZXJyb3IodGhpcy5hZGFwdG9yLnRleHRDb250ZW50KG5vZGUpLnJlcGxhY2UoL1xcbi4qL2csICcnKSk7XG4gICAgfSxcbiAgICBGaW5kTWF0aE1MOiBuZXcgbXlGaW5kTWF0aE1MKCksXG4gIH07XG5cbiAgbGV0IGNhY2hlZE1hdGhqYXg7XG5cbiAgaWYgKGdsb2JhbE1hdGhqYXggJiYgZ2xvYmFsTWF0aGpheC52ZXJzaW9uICE9PSBtYXRoamF4LnZlcnNpb24pIHtcbiAgICAvLyBoYW5kbGluZyBvdGhlciBNYXRoSmF4IHZlcnNpb24gb24gdGhlIHBhZ2VcbiAgICAvLyByZXBsYWNpbmcgaXQgdGVtcG9yYXJpbHkgd2l0aCB0aGUgdmVyc2lvbiB3ZSBoYXZlXG4gICAgd2luZG93Lk1hdGhKYXguXyA9IHdpbmRvdy5NYXRoSmF4Ll8gfHwge307XG4gICAgd2luZG93Lk1hdGhKYXguY29uZmlnID0gd2luZG93Lk1hdGhKYXguY29uZmlnIHx8IHt9O1xuICAgIGNhY2hlZE1hdGhqYXggPSB3aW5kb3cuTWF0aEpheDtcbiAgICBPYmplY3QuYXNzaWduKGdsb2JhbE1hdGhqYXgsIG1hdGhqYXgpO1xuICB9XG5cbiAgY29uc3QgZm9udFVSTCA9IGBodHRwczovL3VucGtnLmNvbS9tYXRoamF4LWZ1bGxAJHttYXRoamF4LnZlcnNpb259L3RzL291dHB1dC9jaHRtbC9mb250cy90ZXgtd29mZi12MmA7XG4gIGNvbnN0IGh0bWxDb25maWcgPSB7XG4gICAgZm9udFVSTCxcblxuICAgIHdyYXBwZXJGYWN0b3J5OiBuZXcgQ0hUTUxXcmFwcGVyRmFjdG9yeSh7XG4gICAgICAuLi5DSFRNTFdyYXBwZXJGYWN0b3J5LmRlZmF1bHROb2RlcyxcbiAgICAgIC4uLmNodG1sTm9kZXMsXG4gICAgfSksXG4gIH07XG5cbiAgY29uc3QgbW1sID0gbmV3IE1hdGhNTChtbWxDb25maWcpO1xuXG4gIGNvbnN0IGN1c3RvbU1tbEZhY3RvcnkgPSBuZXcgTW1sRmFjdG9yeSh7XG4gICAgLi4uTW1sRmFjdG9yeS5kZWZhdWx0Tm9kZXMsXG4gICAgLi4ubW1sTm9kZXMsXG4gIH0pO1xuICBjb25zdCBjbGFzc0ZhY3RvcnkgPSBFbnJpY2hIYW5kbGVyKFxuICAgIE1lbnVIYW5kbGVyKEFzc2lzdGl2ZU1tbEhhbmRsZXIobWF0aGpheC5oYW5kbGVycy5oYW5kbGVzRG9jdW1lbnQoZG9jUHJvdmlkZWQpKSksXG4gICAgbW1sLFxuICApO1xuXG4gIGNvbnN0IGh0bWwgPSBjbGFzc0ZhY3RvcnkuY3JlYXRlKGRvY1Byb3ZpZGVkLCB7XG4gICAgY29tcGlsZUVycm9yOiAobWosIG1hdGgsIGVycikgPT4ge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUubG9nKCdiYWQgbWF0aD86JywgbWF0aCk7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgIH0sXG4gICAgdHlwZXNldEVycm9yOiBmdW5jdGlvbihkb2MsIG1hdGgsIGVycikge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUubG9nKCd0eXBlc2V0IGVycm9yJyk7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgZG9jLnR5cGVzZXRFcnJvcihtYXRoLCBlcnIpO1xuICAgIH0sXG5cbiAgICBzcmU6IHtcbiAgICAgIHNwZWVjaDogJ2RlZXAnLFxuICAgIH0sXG4gICAgZW5yaWNoU3BlZWNoOiAnZGVlcCcsXG5cbiAgICBJbnB1dEpheDogW25ldyBUZVgodGV4Q29uZmlnKSwgbW1sXSxcbiAgICBPdXRwdXRKYXg6IG5ldyBDSFRNTChodG1sQ29uZmlnKSxcbiAgICBEb21TdHJpbmdzOiBuZXcgSFRNTERvbVN0cmluZ3Moe1xuICAgICAgc2tpcEh0bWxUYWdzOiBbXG4gICAgICAgICdzY3JpcHQnLFxuICAgICAgICAnbm9zY3JpcHQnLFxuICAgICAgICAnc3R5bGUnLFxuICAgICAgICAndGV4dGFyZWEnLFxuICAgICAgICAncHJlJyxcbiAgICAgICAgJ2NvZGUnLFxuICAgICAgICAnYW5ub3RhdGlvbicsXG4gICAgICAgICdhbm5vdGF0aW9uLXhtbCcsXG4gICAgICAgICdtangtYXNzaXN0aXZlLW1tbCcsXG4gICAgICAgICdtangtY29udGFpbmVyJyxcbiAgICAgIF0sXG4gICAgfSksXG4gIH0pO1xuXG4gIC8vIE5vdGU6IHdlIG11c3Qgc2V0IHRoaXMgKmFmdGVyKiBtYXRoamF4LmRvY3VtZW50IChubyBpZGVhIHdoeSlcbiAgbW1sLnNldE1tbEZhY3RvcnkoY3VzdG9tTW1sRmFjdG9yeSk7XG5cbiAgaWYgKGNhY2hlZE1hdGhqYXgpIHtcbiAgICAvLyBpZiB3ZSBoYXZlIGEgY2FjaGVkIHZlcnNpb24sIHdlIHJlcGxhY2UgaXQgaGVyZVxuICAgIHdpbmRvdy5NYXRoSmF4ID0gY2FjaGVkTWF0aGpheDtcbiAgfVxuXG4gIHJldHVybiBodG1sO1xufTtcblxubGV0IGVucmljaFNwZWVjaEluaXRpYWxpemVkID0gZmFsc2U7XG5cbmNvbnN0IGJvb3RzdHJhcCA9IChvcHRzKSA9PiB7XG4gIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiB7IFR5cGVzZXQ6ICgpID0+ICh7fSkgfTtcbiAgfVxuXG4gIGNvbnN0IGh0bWwgPSBjcmVhdGVNYXRoTUxJbnN0YW5jZShvcHRzKTtcblxuICByZXR1cm4ge1xuICAgIHZlcnNpb246IG1hdGhqYXgudmVyc2lvbixcbiAgICBodG1sOiBodG1sLFxuICAgIFR5cGVzZXQ6IGZ1bmN0aW9uKC4uLmVsZW1lbnRzKSB7XG4gICAgICBjb25zdCBhdHRlbXB0UmVuZGVyID0gKHRlbXBvcmFyeSA9IGZhbHNlKSA9PiB7XG4gICAgICAgIGxldCB1cGRhdGVkRG9jdW1lbnQgPSB0aGlzLmh0bWwuZmluZE1hdGgoZWxlbWVudHMubGVuZ3RoID8geyBlbGVtZW50cyB9IDoge30pLmNvbXBpbGUoKTtcblxuICAgICAgICBpZiAoIXRlbXBvcmFyeSAmJiBzcmVSZWFkeSkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICB1cGRhdGVkRG9jdW1lbnQgPSB1cGRhdGVkRG9jdW1lbnQuZW5yaWNoKCk7XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgLy8gSWYgZW5yaWNoIGZhaWxzLCBzcGVlY2gtcnVsZS1lbmdpbmUgaXNuJ3QgYWN0dWFsbHkgcmVhZHkgeWV0XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdbbWF0aC1yZW5kZXJpbmddIFNwZWVjaC1ydWxlLWVuZ2luZSBub3QgZnVsbHkgaW5pdGlhbGl6ZWQsIHNraXBwaW5nIGVucmljaG1lbnQnKTtcbiAgICAgICAgICAgIHNyZVJlYWR5ID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdXBkYXRlZERvY3VtZW50ID0gdXBkYXRlZERvY3VtZW50XG4gICAgICAgICAgLmdldE1ldHJpY3MoKVxuICAgICAgICAgIC50eXBlc2V0KCk7XG5cbiAgICAgICAgLy8gT25seSBhZGQgYXNzaXN0aXZlIE1NTCBhbmQgc3BlZWNoIGlmIHNwZWVjaC1ydWxlLWVuZ2luZSBpcyByZWFkeSBhbmQgbm90IGluIHRlbXBvcmFyeSBtb2RlXG4gICAgICAgIGlmICghdGVtcG9yYXJ5ICYmIHNyZVJlYWR5KSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHVwZGF0ZWREb2N1bWVudCA9IHVwZGF0ZWREb2N1bWVudFxuICAgICAgICAgICAgICAuYXNzaXN0aXZlTW1sKClcbiAgICAgICAgICAgICAgLmF0dGFjaFNwZWVjaCgpO1xuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIC8vIElmIHRoaXMgZmFpbHMsIHNwZWVjaC1ydWxlLWVuZ2luZSBpc24ndCByZWFkeVxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignW21hdGgtcmVuZGVyaW5nXSBTcGVlY2gtcnVsZS1lbmdpbmUgbm90IGZ1bGx5IGluaXRpYWxpemVkLCBza2lwcGluZyBhc3Npc3RpdmUgZmVhdHVyZXMnKTtcbiAgICAgICAgICAgIHNyZVJlYWR5ID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdXBkYXRlZERvY3VtZW50ID0gdXBkYXRlZERvY3VtZW50XG4gICAgICAgICAgLmFkZE1lbnUoKVxuICAgICAgICAgIC51cGRhdGVEb2N1bWVudCgpO1xuXG4gICAgICAgIGlmICghZW5yaWNoU3BlZWNoSW5pdGlhbGl6ZWQgJiYgdHlwZW9mIHVwZGF0ZWREb2N1bWVudC5tYXRoLmxpc3Q/Lm5leHQ/LmRhdGEgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgZW5yaWNoU3BlZWNoSW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBsaXN0ID0gdXBkYXRlZERvY3VtZW50Lm1hdGgubGlzdDtcblxuICAgICAgICAgIGlmIChsaXN0KSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpdGVtID0gbGlzdC5uZXh0OyB0eXBlb2YgaXRlbS5kYXRhICE9PSAnc3ltYm9sJzsgaXRlbSA9IGl0ZW0ubmV4dCkge1xuICAgICAgICAgICAgICBjb25zdCBtYXRoTWwgPSB0b01NbChpdGVtLmRhdGEucm9vdCk7XG4gICAgICAgICAgICAgIGNvbnN0IHBhcnNlZE1hdGhNbCA9IG1hdGhNbC5yZXBsYWNlQWxsKCdcXG4nLCAnJyk7XG5cbiAgICAgICAgICAgICAgaXRlbS5kYXRhLnR5cGVzZXRSb290LnNldEF0dHJpYnV0ZSgnZGF0YS1tYXRobWwnLCBwYXJzZWRNYXRoTWwpO1xuICAgICAgICAgICAgICBpdGVtLmRhdGEudHlwZXNldFJvb3Quc2V0QXR0cmlidXRlKCd0YWJpbmRleCcsICctMScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgY29uc29sZS5lcnJvcihlLnRvU3RyaW5nKCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgdXBkYXRlZERvY3VtZW50LmNsZWFyKCk7XG4gICAgICB9O1xuXG4gICAgICBpZiAoIWVucmljaFNwZWVjaEluaXRpYWxpemVkKSB7XG4gICAgICAgIGF0dGVtcHRSZW5kZXIodHJ1ZSk7XG4gICAgICB9XG5cbiAgICAgIG1hdGhqYXguaGFuZGxlUmV0cmllc0ZvcigoKSA9PiB7XG4gICAgICAgIGF0dGVtcHRSZW5kZXIoKTtcbiAgICAgIH0pO1xuICAgIH0sXG4gIH07XG59O1xuXG5jb25zdCByZW5kZXJNYXRoID0gKGVsLCByZW5kZXJPcHRzKSA9PiB7XG4gIGlmIChcbiAgICB3aW5kb3cgJiZcbiAgICB3aW5kb3cuTWF0aEpheCAmJlxuICAgIHdpbmRvdy5NYXRoSmF4LmN1c3RvbUtleSAmJlxuICAgIHdpbmRvdy5NYXRoSmF4LmN1c3RvbUtleSA9PSAnQHBpZS1saWIvbWF0aC1yZW5kZXJpbmctYWNjZXNzaWJsZUAxJ1xuICApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBpc1N0cmluZyA9IHR5cGVvZiBlbCA9PT0gJ3N0cmluZyc7XG4gIGxldCBleGVjdXRlT24gPSBkb2N1bWVudC5ib2R5O1xuXG4gIGlmIChpc1N0cmluZykge1xuICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuXG4gICAgZGl2LmlubmVySFRNTCA9IGVsO1xuICAgIGV4ZWN1dGVPbiA9IGRpdjtcbiAgfVxuXG4gIGZpeE1hdGhFbGVtZW50cyhleGVjdXRlT24pO1xuICBhZGp1c3RNYXRoTUxTdHlsZShleGVjdXRlT24pO1xuXG4gIGlmIChpc1N0cmluZykge1xuICAgIGNvbnN0IGh0bWwgPSBjcmVhdGVNYXRoTUxJbnN0YW5jZSh1bmRlZmluZWQsIGV4ZWN1dGVPbik7XG5cbiAgICBjb25zdCB1cGRhdGVkRG9jdW1lbnQgPSBodG1sXG4gICAgICAuZmluZE1hdGgoKVxuICAgICAgLmNvbXBpbGUoKVxuICAgICAgLmdldE1ldHJpY3MoKVxuICAgICAgLnR5cGVzZXQoKVxuICAgICAgLnVwZGF0ZURvY3VtZW50KCk7XG5cbiAgICBjb25zdCBsaXN0ID0gdXBkYXRlZERvY3VtZW50Lm1hdGgubGlzdDtcbiAgICBjb25zdCBpdGVtID0gbGlzdC5uZXh0O1xuXG4gICAgaWYgKCFpdGVtKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgY29uc3QgbWF0aE1sID0gdG9NTWwoaXRlbS5kYXRhLnJvb3QpO1xuICAgIGNvbnN0IHBhcnNlZE1hdGhNbCA9IG1hdGhNbC5yZXBsYWNlQWxsKCdcXG4nLCAnJyk7XG5cbiAgICByZXR1cm4gcGFyc2VkTWF0aE1sO1xuICB9XG5cbiAgaWYgKCFnZXRHbG9iYWwoKS5pbnN0YW5jZSkge1xuICAgIGdldEdsb2JhbCgpLmluc3RhbmNlID0gYm9vdHN0cmFwKHJlbmRlck9wdHMpO1xuICB9XG5cbiAgaWYgKCFlbCkge1xuICAgIGxvZygnZWwgaXMgdW5kZWZpbmVkJyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGVsIGluc3RhbmNlb2YgRWxlbWVudCAmJiBnZXRHbG9iYWwoKS5pbnN0YW5jZT8uVHlwZXNldCkge1xuICAgIGdldEdsb2JhbCgpLmluc3RhbmNlLlR5cGVzZXQoZWwpO1xuICB9IGVsc2UgaWYgKGVsLmxlbmd0aCAmJiBnZXRHbG9iYWwoKS5pbnN0YW5jZT8uVHlwZXNldCkge1xuICAgIGNvbnN0IGFyciA9IEFycmF5LmZyb20oZWwpO1xuICAgIGdldEdsb2JhbCgpLmluc3RhbmNlLlR5cGVzZXQoLi4uYXJyKTtcbiAgfVxufTtcblxuLyoqXG4gKiBUaGlzIHN0eWxlIGlzIGFkZGVkIHRvIG92ZXJyaWVkIGRlZmF1bHQgc3R5bGluZyBvZiBtangtbXNwYWNlIE1hdGhqYXggdGFnXG4gKiBJbiBtYXRoamF4IHNyYyBjb2RlIFxcbmV3bGluZSBsYXRleCBnZXRzIHBhcnNlZCB0byA8bWp4LW1zcGFjZT48L21qeC1tc3BhY2U+LFxuICogYnV0IGhhcyB0aGUgZGVmYXVsdCBzdHlsZVxuICogJ21qeC1tc3BhY2UnOiB7XG4gIFwiZGlzcGxheVwiOiAnaW4tbGluZScsXG4gIFwidGV4dC1hbGlnblwiOiAnbGVmdCdcbn0gd2hpY2ggcHJldmVudHMgaXQgZnJvbSBzaG93aW5nIGFzIGEgbmV3bGluZSB2YWx1ZVxuICovXG5DSFRNTG1zcGFjZS5zdHlsZXMgPSB7XG4gICdtangtbXNwYWNlJzoge1xuICAgIGRpc3BsYXk6ICdibG9jaycsXG4gICAgJ3RleHQtYWxpZ24nOiAnY2VudGVyJyxcbiAgICBoZWlnaHQ6ICc1cHgnLFxuICB9LFxufTtcblxuZXhwb3J0IGRlZmF1bHQgcmVuZGVyTWF0aDtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsSUFBQUEsUUFBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsT0FBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsYUFBQSxHQUFBRixPQUFBO0FBQ0EsSUFBQUcsZUFBQSxHQUFBSCxPQUFBO0FBQ0EsSUFBQUksWUFBQSxHQUFBSixPQUFBO0FBQ0EsSUFBQUssWUFBQSxHQUFBTCxPQUFBO0FBQ0EsSUFBQU0sT0FBQSxHQUFBTixPQUFBO0FBQ0EsSUFBQU8sSUFBQSxHQUFBUCxPQUFBO0FBRUEsSUFBQVEsTUFBQSxHQUFBUixPQUFBO0FBQ0EsSUFBQVMsS0FBQSxHQUFBVCxPQUFBO0FBQ0EsSUFBQVUsZUFBQSxHQUFBVixPQUFBO0FBQ0EsSUFBQVcsWUFBQSxHQUFBWCxPQUFBO0FBQ0EsSUFBQVksT0FBQSxHQUFBWixPQUFBO0FBYUEsSUFBQWEsT0FBQSxHQUFBYixPQUFBO0FBQ0EsSUFBQWMsTUFBQSxHQUFBQyxzQkFBQSxDQUFBZixPQUFBO0FBQ0EsSUFBQWdCLGNBQUEsR0FBQWhCLE9BQUE7QUFDQSxJQUFBaUIsV0FBQSxHQUFBakIsT0FBQTtBQUNBLElBQUFrQixxQkFBQSxHQUFBbEIsT0FBQTtBQUNBLElBQUFtQixlQUFBLEdBQUFuQixPQUFBO0FBQ0EsSUFBQW9CLE9BQUEsR0FBQXBCLE9BQUE7QUFDQSxJQUFBcUIsZUFBQSxHQUFBckIsT0FBQTtBQUE4RSxTQUFBc0IsUUFBQUMsQ0FBQSxFQUFBQyxDQUFBLFFBQUFDLENBQUEsR0FBQUMsTUFBQSxDQUFBQyxJQUFBLENBQUFKLENBQUEsT0FBQUcsTUFBQSxDQUFBRSxxQkFBQSxRQUFBQyxDQUFBLEdBQUFILE1BQUEsQ0FBQUUscUJBQUEsQ0FBQUwsQ0FBQSxHQUFBQyxDQUFBLEtBQUFLLENBQUEsR0FBQUEsQ0FBQSxDQUFBQyxNQUFBLFdBQUFOLENBQUEsV0FBQUUsTUFBQSxDQUFBSyx3QkFBQSxDQUFBUixDQUFBLEVBQUFDLENBQUEsRUFBQVEsVUFBQSxPQUFBUCxDQUFBLENBQUFRLElBQUEsQ0FBQUMsS0FBQSxDQUFBVCxDQUFBLEVBQUFJLENBQUEsWUFBQUosQ0FBQTtBQUFBLFNBQUFVLGNBQUFaLENBQUEsYUFBQUMsQ0FBQSxNQUFBQSxDQUFBLEdBQUFZLFNBQUEsQ0FBQUMsTUFBQSxFQUFBYixDQUFBLFVBQUFDLENBQUEsV0FBQVcsU0FBQSxDQUFBWixDQUFBLElBQUFZLFNBQUEsQ0FBQVosQ0FBQSxRQUFBQSxDQUFBLE9BQUFGLE9BQUEsQ0FBQUksTUFBQSxDQUFBRCxDQUFBLE9BQUFhLE9BQUEsV0FBQWQsQ0FBQSxRQUFBZSxnQkFBQSxhQUFBaEIsQ0FBQSxFQUFBQyxDQUFBLEVBQUFDLENBQUEsQ0FBQUQsQ0FBQSxTQUFBRSxNQUFBLENBQUFjLHlCQUFBLEdBQUFkLE1BQUEsQ0FBQWUsZ0JBQUEsQ0FBQWxCLENBQUEsRUFBQUcsTUFBQSxDQUFBYyx5QkFBQSxDQUFBZixDQUFBLEtBQUFILE9BQUEsQ0FBQUksTUFBQSxDQUFBRCxDQUFBLEdBQUFhLE9BQUEsV0FBQWQsQ0FBQSxJQUFBRSxNQUFBLENBQUFnQixjQUFBLENBQUFuQixDQUFBLEVBQUFDLENBQUEsRUFBQUUsTUFBQSxDQUFBSyx3QkFBQSxDQUFBTixDQUFBLEVBQUFELENBQUEsaUJBQUFELENBQUE7QUFBQSxTQUFBb0IsV0FBQWxCLENBQUEsRUFBQUksQ0FBQSxFQUFBTixDQUFBLFdBQUFNLENBQUEsT0FBQWUsZ0JBQUEsYUFBQWYsQ0FBQSxPQUFBZ0IsMkJBQUEsYUFBQXBCLENBQUEsRUFBQXFCLHlCQUFBLEtBQUFDLE9BQUEsQ0FBQUMsU0FBQSxDQUFBbkIsQ0FBQSxFQUFBTixDQUFBLFlBQUFxQixnQkFBQSxhQUFBbkIsQ0FBQSxFQUFBd0IsV0FBQSxJQUFBcEIsQ0FBQSxDQUFBSyxLQUFBLENBQUFULENBQUEsRUFBQUYsQ0FBQTtBQUFBLFNBQUF1QiwwQkFBQSxjQUFBckIsQ0FBQSxJQUFBeUIsT0FBQSxDQUFBQyxTQUFBLENBQUFDLE9BQUEsQ0FBQUMsSUFBQSxDQUFBTixPQUFBLENBQUFDLFNBQUEsQ0FBQUUsT0FBQSxpQ0FBQXpCLENBQUEsYUFBQXFCLHlCQUFBLFlBQUFBLDBCQUFBLGFBQUFyQixDQUFBO0FBQUEsU0FBQTZCLGNBQUE3QixDQUFBLEVBQUFJLENBQUEsRUFBQU4sQ0FBQSxFQUFBQyxDQUFBLFFBQUErQixDQUFBLE9BQUFDLEtBQUEsaUJBQUFaLGdCQUFBLGlCQUFBcEIsQ0FBQSxHQUFBQyxDQUFBLENBQUEwQixTQUFBLEdBQUExQixDQUFBLEdBQUFJLENBQUEsRUFBQU4sQ0FBQSxjQUFBQyxDQUFBLHlCQUFBK0IsQ0FBQSxhQUFBOUIsQ0FBQSxXQUFBOEIsQ0FBQSxDQUFBckIsS0FBQSxDQUFBWCxDQUFBLEVBQUFFLENBQUEsT0FBQThCLENBQUE7QUFsQjlFLElBQUksT0FBT0UsTUFBTSxLQUFLLFdBQVcsRUFBRTtFQUNqQyxJQUFBQyx5QkFBbUIsRUFBQyxJQUFBQyw4QkFBYyxFQUFDLENBQUMsQ0FBQztBQUN2QztBQUVBLElBQUlDLFFBQVEsR0FBRyxLQUFLO0FBRXBCLElBQUFDLG1CQUFXLEVBQUMsQ0FBQyxDQUFDQyxJQUFJLENBQUMsWUFBTTtFQUN2QkYsUUFBUSxHQUFHLElBQUk7QUFDakIsQ0FBQyxDQUFDOztBQUVGOztBQVVBLElBQU1HLE9BQU8sR0FBRyxJQUFJQywwQ0FBb0IsQ0FBQyxDQUFDO0FBQzFDLElBQU1DLEtBQUssR0FBRyxTQUFSQSxLQUFLQSxDQUFJQyxJQUFJO0VBQUEsT0FBS0gsT0FBTyxDQUFDSSxTQUFTLENBQUNELElBQUksQ0FBQztBQUFBO0FBRS9DLElBQU1FLEdBQUcsR0FBRyxJQUFBQyxpQkFBSyxFQUFDLHdCQUF3QixDQUFDO0FBRTNDLElBQU1DLG1CQUFtQixHQUFHLHlCQUF5QjtBQUNyRCxJQUFNQyxhQUFhLEdBQUcsWUFBWTtBQUVsQyxJQUFNQyxTQUFTLEdBQUcsU0FBWkEsU0FBU0EsQ0FBQSxFQUFTO0VBQ3RCO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0VBRUE7RUFDQTtFQUNBLElBQU1DLEdBQUcsR0FBRywyQkFBMkI7RUFFdkMsSUFBSSxPQUFPaEIsTUFBTSxLQUFLLFdBQVcsRUFBRTtJQUNqQyxJQUFJLENBQUNBLE1BQU0sQ0FBQ2dCLEdBQUcsQ0FBQyxFQUFFO01BQ2hCaEIsTUFBTSxDQUFDZ0IsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCO0lBQ0EsT0FBT2hCLE1BQU0sQ0FBQ2dCLEdBQUcsQ0FBQztFQUNwQixDQUFDLE1BQU07SUFDTCxPQUFPLENBQUMsQ0FBQztFQUNYO0FBQ0YsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQU1DLFdBQVcsR0FBRyxTQUFkQSxXQUFXQSxDQUFBO0VBQUEsT0FBU0YsU0FBUyxDQUFDLENBQUMsQ0FBQ0csSUFBSSxJQUFJLENBQUMsQ0FBQztBQUFBO0FBRXpDLElBQU1DLGNBQWMsR0FBQUMsT0FBQSxDQUFBRCxjQUFBLEdBQUcsU0FBakJBLGNBQWNBLENBQUlFLE9BQU8sRUFBSztFQUN6QyxJQUFJQSxPQUFPLENBQUNDLE9BQU8sQ0FBQ0MsV0FBVyxFQUFFO0lBQy9CO0VBQ0Y7RUFFQSxJQUFJQyxRQUFRLEdBQUcsV0FBVztFQUUxQixJQUFJSCxPQUFPLENBQUNJLFdBQVcsRUFBRTtJQUN2QkQsUUFBUSxHQUFHLGFBQWE7RUFDMUI7RUFFQSxJQUFJSCxPQUFPLENBQUNHLFFBQVEsQ0FBQyxFQUFFO0lBQ3JCSCxPQUFPLENBQUNHLFFBQVEsQ0FBQyxHQUFHLElBQUFFLHVCQUFRLEVBQUMsSUFBQUMseUJBQVUsRUFBQ04sT0FBTyxDQUFDRyxRQUFRLENBQUMsQ0FBQyxDQUFDSSxTQUFTLENBQUM7SUFDckU7SUFDQTtJQUNBUCxPQUFPLENBQUNHLFFBQVEsQ0FBQyxHQUFHSCxPQUFPLENBQUNHLFFBQVEsQ0FBQyxDQUFDSyxPQUFPLENBQUNoQixtQkFBbUIsRUFBRUMsYUFBYSxDQUFDO0lBQ2pGTyxPQUFPLENBQUNDLE9BQU8sQ0FBQ0MsV0FBVyxHQUFHLElBQUk7RUFDcEM7QUFDRixDQUFDO0FBRU0sSUFBTU8sZUFBZSxHQUFBVixPQUFBLENBQUFVLGVBQUEsR0FBRyxTQUFsQkEsZUFBZUEsQ0FBQSxFQUFzQjtFQUFBLElBQWxCQyxFQUFFLEdBQUFwRCxTQUFBLENBQUFDLE1BQUEsUUFBQUQsU0FBQSxRQUFBcUQsU0FBQSxHQUFBckQsU0FBQSxNQUFHc0QsUUFBUTtFQUMzQyxJQUFNQyxZQUFZLEdBQUdILEVBQUUsQ0FBQ0ksZ0JBQWdCLENBQUMsY0FBYyxDQUFDO0VBRXhERCxZQUFZLENBQUNyRCxPQUFPLENBQUMsVUFBQ3VELElBQUk7SUFBQSxPQUFLakIsY0FBYyxDQUFDaUIsSUFBSSxDQUFDO0VBQUEsRUFBQztBQUN0RCxDQUFDO0FBRUQsSUFBTUMsaUJBQWlCLEdBQUcsU0FBcEJBLGlCQUFpQkEsQ0FBQSxFQUFzQjtFQUFBLElBQWxCTixFQUFFLEdBQUFwRCxTQUFBLENBQUFDLE1BQUEsUUFBQUQsU0FBQSxRQUFBcUQsU0FBQSxHQUFBckQsU0FBQSxNQUFHc0QsUUFBUTtFQUN0QyxJQUFNSyxLQUFLLEdBQUdQLEVBQUUsQ0FBQ0ksZ0JBQWdCLENBQUMsTUFBTSxDQUFDO0VBQ3pDRyxLQUFLLENBQUN6RCxPQUFPLENBQUMsVUFBQzRCLElBQUk7SUFBQSxPQUFLQSxJQUFJLENBQUM4QixZQUFZLENBQUMsY0FBYyxFQUFFLE1BQU0sQ0FBQztFQUFBLEVBQUM7QUFDcEUsQ0FBQztBQUFDLElBRUlDLFlBQVksMEJBQUFDLFdBQUE7RUFBQSxTQUFBRCxhQUFBO0lBQUEsSUFBQUUsZ0JBQUEsbUJBQUFGLFlBQUE7SUFBQSxPQUFBdEQsVUFBQSxPQUFBc0QsWUFBQSxFQUFBN0QsU0FBQTtFQUFBO0VBQUEsSUFBQWdFLFVBQUEsYUFBQUgsWUFBQSxFQUFBQyxXQUFBO0VBQUEsV0FBQUcsYUFBQSxhQUFBSixZQUFBO0lBQUF4QixHQUFBO0lBQUE2QixLQUFBLEVBQ2hCLFNBQUFDLFdBQVdBLENBQUNDLEdBQUcsRUFBRTtNQUNmLElBQU1DLE9BQU8sR0FBRyxJQUFJLENBQUNBLE9BQU87TUFDNUIsU0FBQUMsRUFBQSxNQUFBQyxXQUFBLEdBQWtCQyxLQUFLLENBQUNDLElBQUksQ0FBQ0wsR0FBRyxDQUFDLEVBQUFFLEVBQUEsR0FBQUMsV0FBQSxDQUFBdEUsTUFBQSxFQUFBcUUsRUFBQSxJQUFFO1FBQTlCLElBQU1JLEdBQUcsR0FBQUgsV0FBQSxDQUFBRCxFQUFBO1FBQ1osSUFBSUQsT0FBTyxDQUFDTSxJQUFJLENBQUNOLE9BQU8sQ0FBQ08sTUFBTSxDQUFDRixHQUFHLENBQUMsQ0FBQyxLQUFLLG1CQUFtQixFQUFFO1VBQzdETixHQUFHLFVBQU8sQ0FBQ00sR0FBRyxDQUFDO1FBQ2pCO01BQ0Y7TUFDQSxPQUFBeEQsYUFBQSxDQUFBMkMsWUFBQSwyQkFBeUJPLEdBQUc7SUFDOUI7RUFBQztBQUFBLEVBVHdCUyx1QkFBVTtBQVlyQyxJQUFNQyxvQkFBb0IsR0FBRyxTQUF2QkEsb0JBQW9CQSxDQUFJdkMsSUFBSSxFQUE2QjtFQUFBLElBQTNCd0MsV0FBVyxHQUFBL0UsU0FBQSxDQUFBQyxNQUFBLFFBQUFELFNBQUEsUUFBQXFELFNBQUEsR0FBQXJELFNBQUEsTUFBR3NELFFBQVE7RUFDeERmLElBQUksR0FBR0EsSUFBSSxJQUFJRCxXQUFXLENBQUMsQ0FBQztFQUU1QixJQUFJQyxJQUFJLENBQUN5QyxlQUFlLEVBQUU7SUFDeEI7SUFDQUMsT0FBTyxDQUFDQyxJQUFJLENBQUMsMkVBQTJFLENBQUM7RUFDM0Y7RUFFQSxJQUFNQyxRQUFRLEdBQUdDLHdCQUFXLENBQUMxRixNQUFNLENBQUMsVUFBQzJGLElBQUk7SUFBQSxPQUFLQSxJQUFJLEtBQUssWUFBWTtFQUFBLEVBQUMsQ0FBQyxDQUFDOztFQUV0RTtFQUNBO0VBQ0FGLFFBQVEsQ0FBQ3RGLElBQUksQ0FBQyxVQUFVLENBQUM7RUFFekIsSUFBTXlGLE1BQU0sR0FBRztJQUNiQyxhQUFhLEVBQUUscUNBQXFDO0lBQ3BEQyxPQUFPLEVBQUUsYUFBYTtJQUN0QkMsT0FBTyxFQUFFLGVBQWU7SUFDeEJDLE9BQU8sRUFBRTtFQUNYLENBQUM7RUFFRCxJQUFNQyxTQUFTLEdBQUdwRCxJQUFJLENBQUN5QyxlQUFlLEdBQ2xDO0lBQ0VHLFFBQVEsRUFBUkEsUUFBUTtJQUNSRyxNQUFNLEVBQU5BLE1BQU07SUFDTk0sVUFBVSxFQUFFLENBQ1YsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQ1YsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQ2Y7SUFDREMsY0FBYyxFQUFFO0VBQ2xCLENBQUMsR0FDRDtJQUNFVixRQUFRLEVBQVJBLFFBQVE7SUFDUkcsTUFBTSxFQUFOQTtFQUNGLENBQUM7RUFFTCxJQUFNUSxTQUFTLEdBQUc7SUFDaEJDLFVBQVUsRUFBRSxTQUFaQSxVQUFVQSxDQUFXakUsSUFBSSxFQUFFO01BQ3pCO01BQ0E7TUFDQW1ELE9BQU8sQ0FBQ2pELEdBQUcsQ0FBQyxRQUFRLEVBQUVGLElBQUksQ0FBQztNQUMzQixJQUFJLENBQUNrRSxLQUFLLENBQUMsSUFBSSxDQUFDM0IsT0FBTyxDQUFDdkIsV0FBVyxDQUFDaEIsSUFBSSxDQUFDLENBQUNvQixPQUFPLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFDRDJCLFVBQVUsRUFBRSxJQUFJaEIsWUFBWSxDQUFDO0VBQy9CLENBQUM7RUFFRCxJQUFJb0MsYUFBYTtFQUVqQixJQUFJQyxlQUFhLElBQUlBLGVBQWEsQ0FBQ0MsT0FBTyxLQUFLQyxnQkFBTyxDQUFDRCxPQUFPLEVBQUU7SUFDOUQ7SUFDQTtJQUNBOUUsTUFBTSxDQUFDZ0YsT0FBTyxDQUFDQyxDQUFDLEdBQUdqRixNQUFNLENBQUNnRixPQUFPLENBQUNDLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDekNqRixNQUFNLENBQUNnRixPQUFPLENBQUNFLE1BQU0sR0FBR2xGLE1BQU0sQ0FBQ2dGLE9BQU8sQ0FBQ0UsTUFBTSxJQUFJLENBQUMsQ0FBQztJQUNuRE4sYUFBYSxHQUFHNUUsTUFBTSxDQUFDZ0YsT0FBTztJQUM5Qi9HLE1BQU0sQ0FBQ2tILE1BQU0sQ0FBQ04sZUFBYSxFQUFFRSxnQkFBTyxDQUFDO0VBQ3ZDO0VBRUEsSUFBTUssT0FBTyxxQ0FBQUMsTUFBQSxDQUFxQ04sZ0JBQU8sQ0FBQ0QsT0FBTyx1Q0FBb0M7RUFDckcsSUFBTVEsVUFBVSxHQUFHO0lBQ2pCRixPQUFPLEVBQVBBLE9BQU87SUFFUEcsY0FBYyxFQUFFLElBQUlDLG1DQUFtQixDQUFBOUcsYUFBQSxDQUFBQSxhQUFBLEtBQ2xDOEcsbUNBQW1CLENBQUNDLFlBQVksR0FDaENDLGtCQUFVLENBQ2Q7RUFDSCxDQUFDO0VBRUQsSUFBTXJDLEdBQUcsR0FBRyxJQUFJc0MsY0FBTSxDQUFDbEIsU0FBUyxDQUFDO0VBRWpDLElBQU1tQixnQkFBZ0IsR0FBRyxJQUFJQyxzQkFBVSxDQUFBbkgsYUFBQSxDQUFBQSxhQUFBLEtBQ2xDbUgsc0JBQVUsQ0FBQ0osWUFBWSxHQUN2QkssZ0JBQVEsQ0FDWixDQUFDO0VBQ0YsSUFBTUMsWUFBWSxHQUFHLElBQUFDLDZCQUFhLEVBQ2hDLElBQUFDLHdCQUFXLEVBQUMsSUFBQUMsaUNBQW1CLEVBQUNuQixnQkFBTyxDQUFDb0IsUUFBUSxDQUFDQyxlQUFlLENBQUMxQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQy9FTCxHQUNGLENBQUM7RUFFRCxJQUFNZ0QsSUFBSSxHQUFHTixZQUFZLENBQUNPLE1BQU0sQ0FBQzVDLFdBQVcsRUFBRTtJQUM1QzZDLFlBQVksRUFBRSxTQUFkQSxZQUFZQSxDQUFHQyxFQUFFLEVBQUVDLElBQUksRUFBRUMsR0FBRyxFQUFLO01BQy9CO01BQ0E5QyxPQUFPLENBQUNqRCxHQUFHLENBQUMsWUFBWSxFQUFFOEYsSUFBSSxDQUFDO01BQy9CO01BQ0E3QyxPQUFPLENBQUNlLEtBQUssQ0FBQytCLEdBQUcsQ0FBQztJQUNwQixDQUFDO0lBQ0RDLFlBQVksRUFBRSxTQUFkQSxZQUFZQSxDQUFXQyxHQUFHLEVBQUVILElBQUksRUFBRUMsR0FBRyxFQUFFO01BQ3JDO01BQ0E5QyxPQUFPLENBQUNqRCxHQUFHLENBQUMsZUFBZSxDQUFDO01BQzVCO01BQ0FpRCxPQUFPLENBQUNlLEtBQUssQ0FBQytCLEdBQUcsQ0FBQztNQUNsQkUsR0FBRyxDQUFDRCxZQUFZLENBQUNGLElBQUksRUFBRUMsR0FBRyxDQUFDO0lBQzdCLENBQUM7SUFFREcsR0FBRyxFQUFFO01BQ0hDLE1BQU0sRUFBRTtJQUNWLENBQUM7SUFDREMsWUFBWSxFQUFFLE1BQU07SUFFcEJDLFFBQVEsRUFBRSxDQUFDLElBQUlDLFFBQUcsQ0FBQzNDLFNBQVMsQ0FBQyxFQUFFakIsR0FBRyxDQUFDO0lBQ25DNkQsU0FBUyxFQUFFLElBQUlDLFlBQUssQ0FBQzdCLFVBQVUsQ0FBQztJQUNoQzhCLFVBQVUsRUFBRSxJQUFJQyw4QkFBYyxDQUFDO01BQzdCQyxZQUFZLEVBQUUsQ0FDWixRQUFRLEVBQ1IsVUFBVSxFQUNWLE9BQU8sRUFDUCxVQUFVLEVBQ1YsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBQ1osZ0JBQWdCLEVBQ2hCLG1CQUFtQixFQUNuQixlQUFlO0lBRW5CLENBQUM7RUFDSCxDQUFDLENBQUM7O0VBRUY7RUFDQWpFLEdBQUcsQ0FBQ2tFLGFBQWEsQ0FBQzNCLGdCQUFnQixDQUFDO0VBRW5DLElBQUloQixhQUFhLEVBQUU7SUFDakI7SUFDQTVFLE1BQU0sQ0FBQ2dGLE9BQU8sR0FBR0osYUFBYTtFQUNoQztFQUVBLE9BQU95QixJQUFJO0FBQ2IsQ0FBQztBQUVELElBQUltQix1QkFBdUIsR0FBRyxLQUFLO0FBRW5DLElBQU1DLFNBQVMsR0FBRyxTQUFaQSxTQUFTQSxDQUFJdkcsSUFBSSxFQUFLO0VBQzFCLElBQUksT0FBT2xCLE1BQU0sS0FBSyxXQUFXLEVBQUU7SUFDakMsT0FBTztNQUFFMEgsT0FBTyxFQUFFLFNBQVRBLE9BQU9BLENBQUE7UUFBQSxPQUFTLENBQUMsQ0FBQztNQUFBO0lBQUUsQ0FBQztFQUNoQztFQUVBLElBQU1yQixJQUFJLEdBQUc1QyxvQkFBb0IsQ0FBQ3ZDLElBQUksQ0FBQztFQUV2QyxPQUFPO0lBQ0w0RCxPQUFPLEVBQUVDLGdCQUFPLENBQUNELE9BQU87SUFDeEJ1QixJQUFJLEVBQUVBLElBQUk7SUFDVnFCLE9BQU8sRUFBRSxTQUFUQSxPQUFPQSxDQUFBLEVBQXdCO01BQUEsSUFBQUMsS0FBQTtNQUFBLFNBQUFDLElBQUEsR0FBQWpKLFNBQUEsQ0FBQUMsTUFBQSxFQUFWaUosUUFBUSxPQUFBMUUsS0FBQSxDQUFBeUUsSUFBQSxHQUFBRSxJQUFBLE1BQUFBLElBQUEsR0FBQUYsSUFBQSxFQUFBRSxJQUFBO1FBQVJELFFBQVEsQ0FBQUMsSUFBQSxJQUFBbkosU0FBQSxDQUFBbUosSUFBQTtNQUFBO01BQzNCLElBQU1DLGFBQWEsR0FBRyxTQUFoQkEsYUFBYUEsQ0FBQSxFQUEwQjtRQUFBLElBQUFDLHFCQUFBO1FBQUEsSUFBdEJDLFNBQVMsR0FBQXRKLFNBQUEsQ0FBQUMsTUFBQSxRQUFBRCxTQUFBLFFBQUFxRCxTQUFBLEdBQUFyRCxTQUFBLE1BQUcsS0FBSztRQUN0QyxJQUFJdUosZUFBZSxHQUFHUCxLQUFJLENBQUN0QixJQUFJLENBQUM4QixRQUFRLENBQUNOLFFBQVEsQ0FBQ2pKLE1BQU0sR0FBRztVQUFFaUosUUFBUSxFQUFSQTtRQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDTyxPQUFPLENBQUMsQ0FBQztRQUV2RixJQUFJLENBQUNILFNBQVMsSUFBSTlILFFBQVEsRUFBRTtVQUMxQixJQUFJO1lBQ0YrSCxlQUFlLEdBQUdBLGVBQWUsQ0FBQ0csTUFBTSxDQUFDLENBQUM7VUFDNUMsQ0FBQyxDQUFDLE9BQU92SyxDQUFDLEVBQUU7WUFDVjtZQUNBO1lBQ0E4RixPQUFPLENBQUNDLElBQUksQ0FBQyxnRkFBZ0YsQ0FBQztZQUM5RjFELFFBQVEsR0FBRyxLQUFLO1VBQ2xCO1FBQ0Y7UUFFQStILGVBQWUsR0FBR0EsZUFBZSxDQUM5QkksVUFBVSxDQUFDLENBQUMsQ0FDWkMsT0FBTyxDQUFDLENBQUM7O1FBRVo7UUFDQSxJQUFJLENBQUNOLFNBQVMsSUFBSTlILFFBQVEsRUFBRTtVQUMxQixJQUFJO1lBQ0YrSCxlQUFlLEdBQUdBLGVBQWUsQ0FDOUJNLFlBQVksQ0FBQyxDQUFDLENBQ2RDLFlBQVksQ0FBQyxDQUFDO1VBQ25CLENBQUMsQ0FBQyxPQUFPM0ssQ0FBQyxFQUFFO1lBQ1Y7WUFDQTtZQUNBOEYsT0FBTyxDQUFDQyxJQUFJLENBQUMsd0ZBQXdGLENBQUM7WUFDdEcxRCxRQUFRLEdBQUcsS0FBSztVQUNsQjtRQUNGO1FBRUErSCxlQUFlLEdBQUdBLGVBQWUsQ0FDOUJRLE9BQU8sQ0FBQyxDQUFDLENBQ1RDLGNBQWMsQ0FBQyxDQUFDO1FBRW5CLElBQUksQ0FBQ25CLHVCQUF1QixJQUFJLElBQUFvQixRQUFBLGNBQUFaLHFCQUFBLEdBQU9FLGVBQWUsQ0FBQ3pCLElBQUksQ0FBQ29DLElBQUksY0FBQWIscUJBQUEsZ0JBQUFBLHFCQUFBLEdBQXpCQSxxQkFBQSxDQUEyQmMsSUFBSSxjQUFBZCxxQkFBQSx1QkFBL0JBLHFCQUFBLENBQWlDZSxJQUFJLE1BQUssUUFBUSxFQUFFO1VBQ3pGdkIsdUJBQXVCLEdBQUcsSUFBSTtRQUNoQztRQUVBLElBQUk7VUFDRixJQUFNcUIsSUFBSSxHQUFHWCxlQUFlLENBQUN6QixJQUFJLENBQUNvQyxJQUFJO1VBRXRDLElBQUlBLElBQUksRUFBRTtZQUNSLEtBQUssSUFBSXpHLElBQUksR0FBR3lHLElBQUksQ0FBQ0MsSUFBSSxFQUFFLElBQUFGLFFBQUEsYUFBT3hHLElBQUksQ0FBQzJHLElBQUksTUFBSyxRQUFRLEVBQUUzRyxJQUFJLEdBQUdBLElBQUksQ0FBQzBHLElBQUksRUFBRTtjQUMxRSxJQUFNRSxNQUFNLEdBQUd4SSxLQUFLLENBQUM0QixJQUFJLENBQUMyRyxJQUFJLENBQUNFLElBQUksQ0FBQztjQUNwQyxJQUFNQyxZQUFZLEdBQUdGLE1BQU0sQ0FBQ0csVUFBVSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7Y0FFaEQvRyxJQUFJLENBQUMyRyxJQUFJLENBQUNLLFdBQVcsQ0FBQzdHLFlBQVksQ0FBQyxhQUFhLEVBQUUyRyxZQUFZLENBQUM7Y0FDL0Q5RyxJQUFJLENBQUMyRyxJQUFJLENBQUNLLFdBQVcsQ0FBQzdHLFlBQVksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDO1lBQ3REO1VBQ0Y7UUFDRixDQUFDLENBQUMsT0FBT3pFLENBQUMsRUFBRTtVQUNWO1VBQ0E4RixPQUFPLENBQUNlLEtBQUssQ0FBQzdHLENBQUMsQ0FBQ3VMLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDN0I7UUFFQW5CLGVBQWUsQ0FBQ29CLEtBQUssQ0FBQyxDQUFDO01BQ3pCLENBQUM7TUFFRCxJQUFJLENBQUM5Qix1QkFBdUIsRUFBRTtRQUM1Qk8sYUFBYSxDQUFDLElBQUksQ0FBQztNQUNyQjtNQUVBaEQsZ0JBQU8sQ0FBQ3dFLGdCQUFnQixDQUFDLFlBQU07UUFDN0J4QixhQUFhLENBQUMsQ0FBQztNQUNqQixDQUFDLENBQUM7SUFDSjtFQUNGLENBQUM7QUFDSCxDQUFDO0FBRUQsSUFBTXlCLFVBQVUsR0FBRyxTQUFiQSxVQUFVQSxDQUFJekgsRUFBRSxFQUFFMEgsVUFBVSxFQUFLO0VBQUEsSUFBQUMsbUJBQUEsRUFBQUMsb0JBQUE7RUFDckMsSUFDRTNKLE1BQU0sSUFDTkEsTUFBTSxDQUFDZ0YsT0FBTyxJQUNkaEYsTUFBTSxDQUFDZ0YsT0FBTyxDQUFDNEUsU0FBUyxJQUN4QjVKLE1BQU0sQ0FBQ2dGLE9BQU8sQ0FBQzRFLFNBQVMsSUFBSSxzQ0FBc0MsRUFDbEU7SUFDQTtFQUNGO0VBRUEsSUFBTUMsUUFBUSxHQUFHLE9BQU85SCxFQUFFLEtBQUssUUFBUTtFQUN2QyxJQUFJK0gsU0FBUyxHQUFHN0gsUUFBUSxDQUFDOEgsSUFBSTtFQUU3QixJQUFJRixRQUFRLEVBQUU7SUFDWixJQUFNRyxHQUFHLEdBQUcvSCxRQUFRLENBQUNnSSxhQUFhLENBQUMsS0FBSyxDQUFDO0lBRXpDRCxHQUFHLENBQUNFLFNBQVMsR0FBR25JLEVBQUU7SUFDbEIrSCxTQUFTLEdBQUdFLEdBQUc7RUFDakI7RUFFQWxJLGVBQWUsQ0FBQ2dJLFNBQVMsQ0FBQztFQUMxQnpILGlCQUFpQixDQUFDeUgsU0FBUyxDQUFDO0VBRTVCLElBQUlELFFBQVEsRUFBRTtJQUNaLElBQU14RCxJQUFJLEdBQUc1QyxvQkFBb0IsQ0FBQ3pCLFNBQVMsRUFBRThILFNBQVMsQ0FBQztJQUV2RCxJQUFNNUIsZUFBZSxHQUFHN0IsSUFBSSxDQUN6QjhCLFFBQVEsQ0FBQyxDQUFDLENBQ1ZDLE9BQU8sQ0FBQyxDQUFDLENBQ1RFLFVBQVUsQ0FBQyxDQUFDLENBQ1pDLE9BQU8sQ0FBQyxDQUFDLENBQ1RJLGNBQWMsQ0FBQyxDQUFDO0lBRW5CLElBQU1FLElBQUksR0FBR1gsZUFBZSxDQUFDekIsSUFBSSxDQUFDb0MsSUFBSTtJQUN0QyxJQUFNekcsSUFBSSxHQUFHeUcsSUFBSSxDQUFDQyxJQUFJO0lBRXRCLElBQUksQ0FBQzFHLElBQUksRUFBRTtNQUNULE9BQU8sRUFBRTtJQUNYO0lBRUEsSUFBTTRHLE1BQU0sR0FBR3hJLEtBQUssQ0FBQzRCLElBQUksQ0FBQzJHLElBQUksQ0FBQ0UsSUFBSSxDQUFDO0lBQ3BDLElBQU1DLFlBQVksR0FBR0YsTUFBTSxDQUFDRyxVQUFVLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQztJQUVoRCxPQUFPRCxZQUFZO0VBQ3JCO0VBRUEsSUFBSSxDQUFDbkksU0FBUyxDQUFDLENBQUMsQ0FBQ29KLFFBQVEsRUFBRTtJQUN6QnBKLFNBQVMsQ0FBQyxDQUFDLENBQUNvSixRQUFRLEdBQUcxQyxTQUFTLENBQUNnQyxVQUFVLENBQUM7RUFDOUM7RUFFQSxJQUFJLENBQUMxSCxFQUFFLEVBQUU7SUFDUHBCLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQztJQUN0QjtFQUNGO0VBRUEsSUFBSW9CLEVBQUUsWUFBWXFJLE9BQU8sS0FBQVYsbUJBQUEsR0FBSTNJLFNBQVMsQ0FBQyxDQUFDLENBQUNvSixRQUFRLGNBQUFULG1CQUFBLGVBQXBCQSxtQkFBQSxDQUFzQmhDLE9BQU8sRUFBRTtJQUMxRDNHLFNBQVMsQ0FBQyxDQUFDLENBQUNvSixRQUFRLENBQUN6QyxPQUFPLENBQUMzRixFQUFFLENBQUM7RUFDbEMsQ0FBQyxNQUFNLElBQUlBLEVBQUUsQ0FBQ25ELE1BQU0sS0FBQStLLG9CQUFBLEdBQUk1SSxTQUFTLENBQUMsQ0FBQyxDQUFDb0osUUFBUSxjQUFBUixvQkFBQSxlQUFwQkEsb0JBQUEsQ0FBc0JqQyxPQUFPLEVBQUU7SUFBQSxJQUFBMkMsb0JBQUE7SUFDckQsSUFBTUMsR0FBRyxHQUFHbkgsS0FBSyxDQUFDQyxJQUFJLENBQUNyQixFQUFFLENBQUM7SUFDMUIsQ0FBQXNJLG9CQUFBLEdBQUF0SixTQUFTLENBQUMsQ0FBQyxDQUFDb0osUUFBUSxFQUFDekMsT0FBTyxDQUFBakosS0FBQSxDQUFBNEwsb0JBQUEsRUFBSUMsR0FBRyxDQUFDO0VBQ3RDO0FBQ0YsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQUMsbUJBQVcsQ0FBQ0MsTUFBTSxHQUFHO0VBQ25CLFlBQVksRUFBRTtJQUNaQyxPQUFPLEVBQUUsT0FBTztJQUNoQixZQUFZLEVBQUUsUUFBUTtJQUN0QkMsTUFBTSxFQUFFO0VBQ1Y7QUFDRixDQUFDO0FBQUMsSUFBQUMsUUFBQSxHQUFBdkosT0FBQSxjQUVhb0ksVUFBVSIsImlnbm9yZUxpc3QiOltdfQ==
@@ -1 +0,0 @@
1
- {"version":3,"file":"render-math.js","names":["_mathjax","require","_global","_assistiveMml","_semanticEnrich","_MenuHandler","_FindMathML2","_mathml","_tex","_chtml","_html","_browserAdaptor","_AllPackages","_system","_mstack","_debug","_interopRequireDefault","_normalization","_MmlFactory","_SerializedMmlVisitor","_WrapperFactory","_mspace","_HTMLDomStrings","ownKeys","e","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty2","getOwnPropertyDescriptors","defineProperties","defineProperty","_callSuper","_getPrototypeOf2","_possibleConstructorReturn2","_isNativeReflectConstruct","Reflect","construct","constructor","Boolean","prototype","valueOf","call","_superPropGet","p","_get2","window","RegisterHTMLHandler","browserAdaptor","sreReady","engineReady","then","visitor","SerializedMmlVisitor","toMMl","node","visitTree","log","debug","NEWLINE_BLOCK_REGEX","NEWLINE_LATEX","getGlobal","key","defaultOpts","opts","fixMathElement","exports","element","dataset","mathHandled","property","textContent","wrapMath","unWrapMath","unwrapped","replace","fixMathElements","el","undefined","document","mathElements","querySelectorAll","item","adjustMathMLStyle","nodes","setAttribute","myFindMathML","_FindMathML","_classCallCheck2","_inherits2","_createClass2","value","processMath","set","adaptor","_i","_Array$from","Array","from","mml","kind","parent","FindMathML","createMathMLInstance","docProvided","useSingleDollar","console","warn","packages","AllPackages","name","macros","parallelogram","overarc","napprox","longdiv","texConfig","inlineMath","processEscapes","mmlConfig","parseError","error","cachedMathjax","globalMathjax","version","mathjax","MathJax","_","config","assign","fontURL","concat","htmlConfig","wrapperFactory","CHTMLWrapperFactory","defaultNodes","chtmlNodes","MathML","customMmlFactory","MmlFactory","mmlNodes","classFactory","EnrichHandler","MenuHandler","AssistiveMmlHandler","handlers","handlesDocument","html","create","compileError","mj","math","err","typesetError","doc","sre","speech","enrichSpeech","InputJax","TeX","OutputJax","CHTML","DomStrings","HTMLDomStrings","skipHtmlTags","setMmlFactory","enrichSpeechInitialized","bootstrap","Typeset","_this","_len","elements","_key","attemptRender","_updatedDocument$math","temporary","updatedDocument","findMath","compile","enrich","getMetrics","typeset","assistiveMml","attachSpeech","addMenu","updateDocument","_typeof2","list","next","data","mathMl","root","parsedMathMl","replaceAll","typesetRoot","toString","clear","handleRetriesFor","renderMath","renderOpts","_getGlobal$instance","_getGlobal$instance2","customKey","isString","executeOn","body","div","createElement","innerHTML","instance","Element","_getGlobal$instance3","arr","CHTMLmspace","styles","display","height","_default"],"sources":["../src/render-math.js"],"sourcesContent":["import { mathjax } from 'mathjax-full/js/mathjax';\nimport { MathJax as globalMathjax } from 'mathjax-full/js/components/global';\nimport { AssistiveMmlHandler } from 'mathjax-full/js/a11y/assistive-mml';\nimport { EnrichHandler } from 'mathjax-full/js/a11y/semantic-enrich';\nimport { MenuHandler } from 'mathjax-full/js/ui/menu/MenuHandler';\nimport { FindMathML } from 'mathjax-full/js/input/mathml/FindMathML';\nimport { MathML } from 'mathjax-full/js/input/mathml';\nimport { TeX } from 'mathjax-full/js/input/tex';\n\nimport { CHTML } from 'mathjax-full/js/output/chtml';\nimport { RegisterHTMLHandler } from 'mathjax-full/js/handlers/html';\nimport { browserAdaptor } from 'mathjax-full/js/adaptors/browserAdaptor';\nimport { AllPackages } from 'mathjax-full/js/input/tex/AllPackages';\nimport { engineReady } from 'speech-rule-engine/js/common/system';\n\nif (typeof window !== 'undefined') {\n RegisterHTMLHandler(browserAdaptor());\n}\n\nlet sreReady = false;\n\nengineReady().then(() => {\n sreReady = true;\n});\n\n// import pkg from '../../package.json';\nimport { mmlNodes, chtmlNodes } from './mstack';\nimport debug from 'debug';\nimport { wrapMath, unWrapMath } from './normalization';\nimport { MmlFactory } from 'mathjax-full/js/core/MmlTree/MmlFactory';\nimport { SerializedMmlVisitor } from 'mathjax-full/js/core/MmlTree/SerializedMmlVisitor';\nimport { CHTMLWrapperFactory } from 'mathjax-full/js/output/chtml/WrapperFactory';\nimport { CHTMLmspace } from 'mathjax-full/js/output/chtml/Wrappers/mspace';\nimport { HTMLDomStrings } from 'mathjax-full/js/handlers/html/HTMLDomStrings';\n\nconst visitor = new SerializedMmlVisitor();\nconst toMMl = (node) => visitor.visitTree(node);\n\nconst log = debug('pie-lib:math-rendering');\n\nconst NEWLINE_BLOCK_REGEX = /\\\\embed\\{newLine\\}\\[\\]/g;\nconst NEWLINE_LATEX = '\\\\newline ';\n\nconst getGlobal = () => {\n // TODO does it make sense to use version?\n // const key = `${pkg.name}@${pkg.version.split('.')[0]}`;\n // It looks like Ed made this change when he switched from mathjax3 to mathjax-full\n // I think it was supposed to make sure version 1 (using mathjax3) is not used\n // in combination with version 2 (using mathjax-full)\n\n // TODO higher level wrappers use this instance of math-rendering, and if 2 different instances are used, math rendering is not working\n // so I will hardcode this for now until a better solution is found\n const key = '@pie-lib/math-rendering@2';\n\n if (typeof window !== 'undefined') {\n if (!window[key]) {\n window[key] = {};\n }\n return window[key];\n } else {\n return {};\n }\n};\n\n/** Add temporary support for a global singleDollar override\n * <code>\n * // This will enable single dollar rendering\n * window.pie = window.pie || {};\n * window.pie.mathRendering = {useSingleDollar: true };\n * </code>\n */\nconst defaultOpts = () => getGlobal().opts || {};\n\nexport const fixMathElement = (element) => {\n if (element.dataset.mathHandled) {\n return;\n }\n\n let property = 'innerText';\n\n if (element.textContent) {\n property = 'textContent';\n }\n\n if (element[property]) {\n element[property] = wrapMath(unWrapMath(element[property]).unwrapped);\n // because mathquill doesn't understand line breaks, sometimes we end up with custom elements on prompts/rationale/etc.\n // we need to replace the custom embedded elements with valid latex that Mathjax can understand\n element[property] = element[property].replace(NEWLINE_BLOCK_REGEX, NEWLINE_LATEX);\n element.dataset.mathHandled = true;\n }\n};\n\nexport const fixMathElements = (el = document) => {\n const mathElements = el.querySelectorAll('[data-latex]');\n\n mathElements.forEach((item) => fixMathElement(item));\n};\n\nconst adjustMathMLStyle = (el = document) => {\n const nodes = el.querySelectorAll('math');\n nodes.forEach((node) => node.setAttribute('displaystyle', 'true'));\n};\n\nclass myFindMathML extends FindMathML {\n processMath(set) {\n const adaptor = this.adaptor;\n for (const mml of Array.from(set)) {\n if (adaptor.kind(adaptor.parent(mml)) === 'mjx-assistive-mml') {\n set.delete(mml);\n }\n }\n return super.processMath(set);\n }\n}\n\nconst createMathMLInstance = (opts, docProvided = document) => {\n opts = opts || defaultOpts();\n\n if (opts.useSingleDollar) {\n // eslint-disable-next-line\n console.warn('[math-rendering] using $ is not advisable, please use $$..$$ or \\\\(...\\\\)');\n }\n\n const packages = AllPackages.filter((name) => name !== 'bussproofs'); // Bussproofs needs an output jax\n\n // The autoload extension predefines all the macros from the extensions that haven't been loaded already\n // so that they automatically load the needed extension when they are first used\n packages.push('autoload');\n\n const macros = {\n parallelogram: '\\\\lower.2em{\\\\Huge\\\\unicode{x25B1}}',\n overarc: '\\\\overparen',\n napprox: '\\\\not\\\\approx',\n longdiv: '\\\\enclose{longdiv}',\n };\n\n const texConfig = opts.useSingleDollar\n ? {\n packages,\n macros,\n inlineMath: [\n ['$', '$'],\n ['\\\\(', '\\\\)'],\n ],\n processEscapes: true,\n }\n : {\n packages,\n macros,\n };\n\n const mmlConfig = {\n parseError: function(node) {\n // function to process parsing errors\n // eslint-disable-next-line no-console\n console.log('error:', node);\n this.error(this.adaptor.textContent(node).replace(/\\n.*/g, ''));\n },\n FindMathML: new myFindMathML(),\n };\n\n let cachedMathjax;\n\n if (globalMathjax && globalMathjax.version !== mathjax.version) {\n // handling other MathJax version on the page\n // replacing it temporarily with the version we have\n window.MathJax._ = window.MathJax._ || {};\n window.MathJax.config = window.MathJax.config || {};\n cachedMathjax = window.MathJax;\n Object.assign(globalMathjax, mathjax);\n }\n\n const fontURL = `https://unpkg.com/mathjax-full@${mathjax.version}/ts/output/chtml/fonts/tex-woff-v2`;\n const htmlConfig = {\n fontURL,\n\n wrapperFactory: new CHTMLWrapperFactory({\n ...CHTMLWrapperFactory.defaultNodes,\n ...chtmlNodes,\n }),\n };\n\n const mml = new MathML(mmlConfig);\n\n const customMmlFactory = new MmlFactory({\n ...MmlFactory.defaultNodes,\n ...mmlNodes,\n });\n const classFactory = EnrichHandler(\n MenuHandler(AssistiveMmlHandler(mathjax.handlers.handlesDocument(docProvided))),\n mml,\n );\n\n const html = classFactory.create(docProvided, {\n compileError: (mj, math, err) => {\n // eslint-disable-next-line no-console\n console.log('bad math?:', math);\n // eslint-disable-next-line no-console\n console.error(err);\n },\n typesetError: function(doc, math, err) {\n // eslint-disable-next-line no-console\n console.log('typeset error');\n // eslint-disable-next-line no-console\n console.error(err);\n doc.typesetError(math, err);\n },\n\n sre: {\n speech: 'deep',\n },\n enrichSpeech: 'deep',\n\n InputJax: [new TeX(texConfig), mml],\n OutputJax: new CHTML(htmlConfig),\n DomStrings: new HTMLDomStrings({\n skipHtmlTags: [\n 'script',\n 'noscript',\n 'style',\n 'textarea',\n 'pre',\n 'code',\n 'annotation',\n 'annotation-xml',\n 'mjx-assistive-mml',\n 'mjx-container',\n ],\n }),\n });\n\n // Note: we must set this *after* mathjax.document (no idea why)\n mml.setMmlFactory(customMmlFactory);\n\n if (cachedMathjax) {\n // if we have a cached version, we replace it here\n window.MathJax = cachedMathjax;\n }\n\n return html;\n};\n\nlet enrichSpeechInitialized = false;\n\nconst bootstrap = (opts) => {\n if (typeof window === 'undefined') {\n return { Typeset: () => ({}) };\n }\n\n const html = createMathMLInstance(opts);\n\n return {\n version: mathjax.version,\n html: html,\n Typeset: function(...elements) {\n const attemptRender = (temporary = false) => {\n let updatedDocument = this.html.findMath(elements.length ? { elements } : {}).compile();\n\n if (!temporary && sreReady) {\n try {\n updatedDocument = updatedDocument.enrich();\n } catch (e) {\n // If enrich fails, speech-rule-engine isn't actually ready yet\n // eslint-disable-next-line no-console\n console.warn('[math-rendering] Speech-rule-engine not fully initialized, skipping enrichment');\n sreReady = false;\n }\n }\n\n updatedDocument = updatedDocument\n .getMetrics()\n .typeset();\n\n // Only add assistive MML and speech if speech-rule-engine is ready and not in temporary mode\n if (!temporary && sreReady) {\n try {\n updatedDocument = updatedDocument\n .assistiveMml()\n .attachSpeech();\n } catch (e) {\n // If this fails, speech-rule-engine isn't ready\n // eslint-disable-next-line no-console\n console.warn('[math-rendering] Speech-rule-engine not fully initialized, skipping assistive features');\n sreReady = false;\n }\n }\n\n updatedDocument = updatedDocument\n .addMenu()\n .updateDocument();\n\n if (!enrichSpeechInitialized && typeof updatedDocument.math.list?.next?.data === 'object') {\n enrichSpeechInitialized = true;\n }\n\n try {\n const list = updatedDocument.math.list;\n\n if (list) {\n for (let item = list.next; typeof item.data !== 'symbol'; item = item.next) {\n const mathMl = toMMl(item.data.root);\n const parsedMathMl = mathMl.replaceAll('\\n', '');\n\n item.data.typesetRoot.setAttribute('data-mathml', parsedMathMl);\n item.data.typesetRoot.setAttribute('tabindex', '-1');\n }\n }\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error(e.toString());\n }\n\n updatedDocument.clear();\n };\n\n if (!enrichSpeechInitialized) {\n attemptRender(true);\n }\n\n mathjax.handleRetriesFor(() => {\n attemptRender();\n });\n },\n };\n};\n\nconst renderMath = (el, renderOpts) => {\n if (\n window &&\n window.MathJax &&\n window.MathJax.customKey &&\n window.MathJax.customKey == '@pie-lib/math-rendering-accessible@1'\n ) {\n return;\n }\n\n const isString = typeof el === 'string';\n let executeOn = document.body;\n\n if (isString) {\n const div = document.createElement('div');\n\n div.innerHTML = el;\n executeOn = div;\n }\n\n fixMathElements(executeOn);\n adjustMathMLStyle(executeOn);\n\n if (isString) {\n const html = createMathMLInstance(undefined, executeOn);\n\n const updatedDocument = html\n .findMath()\n .compile()\n .getMetrics()\n .typeset()\n .updateDocument();\n\n const list = updatedDocument.math.list;\n const item = list.next;\n\n if (!item) {\n return '';\n }\n\n const mathMl = toMMl(item.data.root);\n const parsedMathMl = mathMl.replaceAll('\\n', '');\n\n return parsedMathMl;\n }\n\n if (!getGlobal().instance) {\n getGlobal().instance = bootstrap(renderOpts);\n }\n\n if (!el) {\n log('el is undefined');\n return;\n }\n\n if (el instanceof Element && getGlobal().instance?.Typeset) {\n getGlobal().instance.Typeset(el);\n } else if (el.length && getGlobal().instance?.Typeset) {\n const arr = Array.from(el);\n getGlobal().instance.Typeset(...arr);\n }\n};\n\n/**\n * This style is added to overried default styling of mjx-mspace Mathjax tag\n * In mathjax src code \\newline latex gets parsed to <mjx-mspace></mjx-mspace>,\n * but has the default style\n * 'mjx-mspace': {\n \"display\": 'in-line',\n \"text-align\": 'left'\n} which prevents it from showing as a newline value\n */\nCHTMLmspace.styles = {\n 'mjx-mspace': {\n display: 'block',\n 'text-align': 'center',\n height: '5px',\n },\n};\n\nexport default renderMath;\n"],"mappings":"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","ignoreList":[]}