@agilemotion/oui-react-js 2.0.14 → 2.0.16

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.
package/dist/Utils.js CHANGED
@@ -326,6 +326,87 @@ class Utils {
326
326
  }
327
327
  return current[keys[keys.length - 1]];
328
328
  }
329
+
330
+ /**
331
+ * Decode a CDUI wire-compressed asset response if it is wrapped, or
332
+ * pass the value through unchanged otherwise. Pairs with oui-server's
333
+ * wireCompression.ts.
334
+ *
335
+ * <p>Three wrapper shapes are accepted (newest first):
336
+ * <ul>
337
+ * <li><b>Randomised chunked (current):</b>
338
+ * {@code { v, r, &lt;rand1&gt;, &lt;rand2&gt;, &lt;rand3&gt; }} —
339
+ * v / r are red-herring metadata; the other string-valued
340
+ * keys are base64 chunks. Sort the chunk KEYS alphabetically,
341
+ * concatenate the values, base64-decode, gunzip, JSON.parse.</li>
342
+ * <li><b>Fixed chunked (earlier):</b> {@code { v, r, a, b, c }} —
343
+ * same algorithm; the chunk keys happen to be the literals
344
+ * a/b/c. The alphabetical-sort approach handles this shape
345
+ * too without a special case.</li>
346
+ * <li><b>Single blob (earliest):</b> {@code { _cdui_z: "&lt;blob&gt;" }}
347
+ * — kept so in-flight clients don't break during a partial
348
+ * deploy.</li>
349
+ * </ul>
350
+ *
351
+ * <p>Detection signature: the wrapper has BOTH {@code v} and
352
+ * {@code r} as string fields, AND at least one other string-valued
353
+ * key. CDUI views use {@code version} (not {@code v}) and don't use
354
+ * a top-level {@code r}, so the signature is collision-free against
355
+ * raw asset JSON in dev mode.
356
+ *
357
+ * <p>Uses the browser-native DecompressionStream — Chrome 80+,
358
+ * Firefox 113+, Safari 16.4+. No new JS bundle deps.
359
+ *
360
+ * @param {any} data — The asset payload or a wrapper.
361
+ * @returns {Promise<any>} — The asset payload (decoded if wrapped).
362
+ */
363
+ static async maybeDecodeWire(data) {
364
+ if (!data || typeof data !== 'object') {
365
+ return data;
366
+ }
367
+ let b64;
368
+ if (typeof data._cdui_z === 'string') {
369
+ // Legacy single-blob shape.
370
+ b64 = data._cdui_z;
371
+ } else if (typeof data.v === 'string' && typeof data.r === 'string') {
372
+ // Chunked shape (fixed or randomised). Sort all non-herring
373
+ // string-valued keys alphabetically; concatenate their values.
374
+ // The server sorts its random keys before assigning chunks,
375
+ // so alphabetical reassembly here is guaranteed to match.
376
+ const herrings = new Set(['v', 'r']);
377
+ const entries = Object.entries(data).filter(_ref => {
378
+ let [k, val] = _ref;
379
+ return typeof val === 'string' && !herrings.has(k);
380
+ });
381
+ if (entries.length < 1) {
382
+ return data;
383
+ }
384
+ entries.sort((_ref2, _ref3) => {
385
+ let [a] = _ref2;
386
+ let [b] = _ref3;
387
+ return a < b ? -1 : a > b ? 1 : 0;
388
+ });
389
+ b64 = entries.map(_ref4 => {
390
+ let [, val] = _ref4;
391
+ return val;
392
+ }).join('');
393
+ } else {
394
+ return data;
395
+ }
396
+ try {
397
+ const binaryString = atob(b64);
398
+ const bytes = new Uint8Array(binaryString.length);
399
+ for (let i = 0; i < binaryString.length; i++) {
400
+ bytes[i] = binaryString.charCodeAt(i);
401
+ }
402
+ const stream = new Blob([bytes]).stream().pipeThrough(new DecompressionStream('gzip'));
403
+ const text = await new Response(stream).text();
404
+ return JSON.parse(text);
405
+ } catch (e) {
406
+ console.error('[Utils.maybeDecodeWire] failed to decode wire payload — returning raw blob', e);
407
+ return data;
408
+ }
409
+ }
329
410
  static stripHtml(html) {
330
411
  if (!html) return '';
331
412
  const temp = document.createElement('div');
@@ -431,4 +512,4 @@ _defineProperty(Utils, "base64ToArrayBuffer", base64 => {
431
512
  }
432
513
  return bytes.buffer;
433
514
  });
434
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfRHluYW1pY0pTIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfRXZlbnQiLCJfQXBwbGljYXRpb25NYW5hZ2VyIiwiX09ic2VydmFibGUiLCJfRXZlbnRUeXBlIiwiX1V0aWxzIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0Iiwib3duS2V5cyIsInIiLCJ0IiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm8iLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwiX3RvUHJvcGVydHlLZXkiLCJ2YWx1ZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwiaSIsIl90b1ByaW1pdGl2ZSIsIlN5bWJvbCIsInRvUHJpbWl0aXZlIiwiY2FsbCIsIlR5cGVFcnJvciIsIlN0cmluZyIsIk51bWJlciIsImNvbG9ycyIsIlV0aWxzIiwiY29uc3RydWN0b3IiLCJ2aWV3UmVmIiwibWVzc2FnZSIsInR5cGUiLCJpc051bGwiLCJtZXNzYWdlVHlwZSIsInNldFN0YXRlIiwibWVzc2FnZVN0eWxlIiwibm9ybWFsaXplQ3NzU2l6ZSIsImZhbGxiYWNrIiwidHJpbSIsImlzRmluaXRlIiwiY29uY2F0IiwiZ2V0SW5pdGlhbHMiLCJuYW1lIiwicGFydHMiLCJzcGxpdCIsImluaXRpYWxzIiwidXBkYXRlTW9kZWwiLCJ2YWx1ZXMiLCJtb2RlbCIsImpvaW5TY3JpcHQiLCJsaW5lcyIsInNjcmlwdCIsImxpbmUiLCJlbmRzV2l0aCIsInNsZWVwIiwibWlsbGlzZWNvbmRzIiwiZGF0ZSIsIkRhdGUiLCJub3ciLCJjdXJyZW50RGF0ZSIsInBhcnNlQ29uZmlnIiwiY29uZmlnIiwiY3VycmVudFZpZXdJZCIsImluZGV4IiwidW5kZWZpbmVkIiwiaWQiLCJjb25maWdKc29uIiwiSlNPTiIsInN0cmluZ2lmeSIsInJlcGxhY2UiLCJwYXJzZSIsImlzRmllbGRSZXF1aXJlZCIsImZvcm1JZCIsImlzU3RyaW5nRW1wdHkiLCJmaWVsZHMiLCJnZXRGaWVsZHMiLCJyZXF1aXJlZCIsInZhbCIsImNsYXNzTmFtZSIsImlucHV0RmllbGRzIiwiZm9ybSIsImRvY3VtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJpbnB1dERpdnMiLCJnZXRFbGVtZW50c0J5Q2xhc3NOYW1lIiwiaW5wdXRzIiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJqIiwidmFsaWRhdGVGaWVsZCIsImN1cnJlbnRWYWx1ZSIsInZhbGlkYXRvciIsImVycm9yTWVzc2FnZSIsInJlZ2V4IiwicmVzdWx0IiwidmFsaWQiLCJoYXNFcnJvcnMiLCJ0b1N0cmluZyIsIm1hdGNoIiwiZ2V0Q29tcG9uZW50QXR0cmlidXRlIiwiZmllbGQiLCJhdHRyaWJ1dGUiLCJkZWZhdWx0VmFsdWUiLCJhdHRyaWJ1dGVzIiwiZ2V0Q29tcG9uZW50U3R5bGVBdHRyaWJ1dGUiLCJzdHlsZSIsImRvR2V0UmVxdWVzdEpzb24iLCJjdXJyZW50UGFnZSIsImN1cnJldFJvd3NQZXJQYWdlIiwiY3VycmVudFNlYXJjaFBhcmFtZXRlcnMiLCJwYWdlZCIsInJlcXVlc3QiLCJwYWdlU2l6ZSIsInNlYXJjaFBhcmFtZXRlcnMiLCJnZXRGaWVsZEdyaWQiLCJmaWVsZEdyaWQiLCJtYXhDb2xzcGFuIiwibGF5b3V0Q29sdW1ucyIsIm1heENvbFBlclJvdyIsInJvd3MiLCJjdXJyUm93IiwiY3JlYXRlUm93IiwiY29sc3BhbiIsImdldEZpZWxkQ29sc3BhbiIsInJvd0hhc1NwYWNlRm9yTmV3RmllbGQiLCJmaWxsUm93V2l0aFNwYWNlcnMiLCJ1c2VkU2xvdHMiLCJldmFsdWF0ZUJvb2xlYW5FeHByZXNzaW9uIiwiZXhwcmVzc2lvbiIsImR5bmFtaWNKUyIsImV4ZWN1dGVTY3JpcHQiLCJjb25zb2xlIiwiZXJyb3IiLCJnZXRFbnRpdHlWaWV3VGl0bGUiLCJxdWVyeVBhcmFtZXRlclN0YXRlIiwidmlld05hbWUiLCJzZWxlY3Rpb24iLCJwcm9wcyIsIl9sZW4iLCJBcnJheSIsIl9rZXkiLCJwcmVmaXgiLCJzZXRMZWdlbmRDb2xvciIsImNvbG9yIiwibGVnZW5kcyIsInNldExlZ2VuZCIsInRleHQiLCJsZWdlbmQiLCJpbm5lckhUTUwiLCJzYXZlRm9ybSIsImZvcm1SZWYiLCJ1cmwiLCJzdWNjZXNzQ2FsbGJhY2siLCJlcnJvckNhbGxiYWNrIiwib2Zmc2V0RGF0ZSIsInllYXJPZmZzZXQiLCJtb250aE9mZnNldCIsImRheU9mZnNldCIsInllYXIiLCJnZXRGdWxsWWVhciIsImRheSIsImdldERhdGUiLCJtb250aCIsImdldE1vbnRoIiwiYXV0b1NldERhdGUiLCJuZXdEYXRlIiwiYXV0b0ZpbGxEYXRlTmFtZSIsInJlZkRhdGVOYW1lIiwic3RhdGVEYXRlIiwic3RhdGUiLCJ0ZW1wRGF0ZSIsImdldFRpbWUiLCJhdXRvRmlsbERhdGUiLCJjdXJyZW50Iiwic2V0VmFsdWUiLCJnZXRBcmdzIiwiZnVuYyIsImFyZ3MiLCJtYXAiLCJhcmciLCJtZXJnZU9iamVjdHMiLCJzb3VyY2UiLCJ0YXJnZXQiLCJwcm9wZXJ0aWVzIiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsInByb3BlcnR5IiwiYXBwbGljYXRpb25NYW5hZ2VyIiwiaXNFeHByZXNzaW9uIiwiZ2V0QXZhdGFyQ29sb3IiLCJzdWJzdHIiLCJoYXNoIiwiY2hhckNvZGVBdCIsIk1hdGgiLCJhYnMiLCJmb3JtYXREYXRlVGltZSIsImRhdGVUaW1lU3RyaW5nIiwibW9udGhOYW1lcyIsIm1vbnRoSW5kZXgiLCJnZXRIb3VycyIsImdldE1pbnV0ZXMiLCJ1cGRhdGVOZXN0ZWRQcm9wZXJ0eSIsIm9iaiIsInBhdGgiLCJFcnJvciIsInJlYWROZXN0ZWRQcm9wZXJ0eSIsInN0cmlwSHRtbCIsImh0bWwiLCJ0ZW1wIiwiY3JlYXRlRWxlbWVudCIsInRleHRDb250ZW50IiwiZXhwb3J0cyIsInMiLCJjaGFyQXQiLCJ0b1VwcGVyQ2FzZSIsInNsaWNlIiwicGFyc2VJbnQiLCJyYW5kb20iLCJyb3ciLCJtYXgiLCJmaWVsZFR5cGUiLCJ0b2tlbnMiLCJ2b0V4cHJlc3Npb24iLCJzdWJzdHJpbmciLCJpbmRleE9mIiwidmFsdWVPYmplY3QiLCJ0b2tlbiIsImdldHRlciIsImRlZmF1bHRTdHlsZSIsImNvbmZpZ1N0eWxlIiwidmlld0lkIiwiY29tcG9uZW50IiwibWVzc2FnZVRleHQiLCJqc29uIiwiZGF0YSIsIlNZU1RFTV9FUlJPUl9NRVNTQUdFIiwiZXZlbnQiLCJFdmVudCIsImV2ZW50TWFuYWdlciIsImZpcmVFdmVudCIsIkV2ZW50VHlwZSIsIk1FU1NBR0VfQVJSSVZFRCIsInB1Ymxpc2hFcnJvck1lc3NhZ2UiLCJiYXNlNjQiLCJiaW5hcnlTdHJpbmciLCJ3aW5kb3ciLCJhdG9iIiwibGVuIiwiYnl0ZXMiLCJVaW50OEFycmF5IiwiYnVmZmVyIl0sInNvdXJjZXMiOlsiLi4vc3JjL2xpYi9VdGlscy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyLvu79pbXBvcnQgZHluYW1pY0pTIGZyb20gXCIuL0R5bmFtaWNKU1wiO1xuaW1wb3J0IEV2ZW50IGZyb20gXCIuL2V2ZW50L0V2ZW50XCI7XG5pbXBvcnQgYXBwbGljYXRpb25NYW5hZ2VyIGZyb20gXCIuL0FwcGxpY2F0aW9uTWFuYWdlclwiO1xuaW1wb3J0IGV2ZW50TWFuYWdlciBmcm9tIFwiLi9ldmVudC9PYnNlcnZhYmxlXCI7XG5pbXBvcnQgRXZlbnRUeXBlIGZyb20gXCIuL2V2ZW50L0V2ZW50VHlwZVwiO1xuXG5jb25zdCBjb2xvcnMgPSBbXG4gICAgJyNGNDQzMzYnLCAnI2U5MWU2MycsICcjOWMyN2IwJywgJyM2NzNhYjcnLFxuICAgICcjZmY5ODAwJywgJyNmZjU3MjInLCAnIzc5NTU0OCcsICcjNjA3ZDhiJyxcbiAgICAnIzNmNTFiNScsICcjMjE5NkYzJywgJyMwMGJjZDQnLCAnIzAwOTY4OCcsXG4gICAgJyMyMTk2RjMnLCAnIzMyYzc4NycsICcjMDBCQ0Q0JywgJyNmZjU2NTInLFxuICAgICcjZmZjMTA3JywgJyNmZjg1YWYnLCAnI0ZGOTgwMCcsICcjMzliYmIwJyxcbiAgICAnIzRDQUY1MCcsICcjZmZlYjNiJywgJyNmZmMxMDcnLFxuXTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVXRpbHMge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgIH1cblxuICAgIHN0YXRpYyBTWVNURU1fRVJST1JfTUVTU0FHRSA9IFwiQSBzeXN0ZW0gZXJyb3IgaGFzIG9jY3VycmVkLiBQbGVhc2UgY29udGFjdCB5b3VyIHN5c3RlbSBhZG1pbmlzdHJhdG9yXCI7XG5cbiAgICBzdGF0aWMgaXNOdWxsKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnO1xuICAgIH1cblxuICAgIHN0YXRpYyBub3JtYWxpemVDc3NTaXplKHZhbHVlLCBmYWxsYmFjaykge1xuICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIGZhbGxiYWNrO1xuICAgICAgICAvLyBhbGxvdyBcIjcycHhcIiwgXCI1cmVtXCIsIGV0Yy5cbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiAmJiB2YWx1ZS50cmltKCkpIHJldHVybiB2YWx1ZS50cmltKCk7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIgJiYgTnVtYmVyLmlzRmluaXRlKHZhbHVlKSkgcmV0dXJuIGAke3ZhbHVlfXB4YDtcbiAgICAgICAgcmV0dXJuIGZhbGxiYWNrO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXRJbml0aWFscyhuYW1lKSB7XG4gICAgICAgIGNvbnN0IHBhcnRzID0gbmFtZS5zcGxpdCgnICcpO1xuICAgICAgICBsZXQgaW5pdGlhbHMgPSAnJztcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJ0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHBhcnRzW2ldLmxlbmd0aCA+IDAgJiYgcGFydHNbaV0gIT09ICcnKSB7XG4gICAgICAgICAgICAgICAgaW5pdGlhbHMgKz0gcGFydHNbaV1bMF1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaW5pdGlhbHNcbiAgICB9XG5cbiAgICBzdGF0aWMgdXBkYXRlTW9kZWwodmFsdWVzLCBtb2RlbCkge1xuICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbCh2YWx1ZXMpKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCB2YWx1ZSA9IHZhbHVlc1tpXTtcbiAgICAgICAgICAgICAgICBtb2RlbFt2YWx1ZS5uYW1lXSA9IHZhbHVlLnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICBzdGF0aWMgY2FwaXRhbGl6ZSA9IChzKSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgcyAhPT0gJ3N0cmluZycpIHJldHVybiAnJztcbiAgICAgICAgcmV0dXJuIHMuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBzLnNsaWNlKDEpXG4gICAgfTtcblxuICAgIHN0YXRpYyBqb2luU2NyaXB0KGxpbmVzKSB7XG4gICAgICAgIGxldCBzY3JpcHQgPSAnJztcblxuICAgICAgICBmb3IobGV0IGk9MDtpPGxpbmVzLmxlbmd0aDtpKyspIHtcbiAgICAgICAgICAgIGxldCBsaW5lID0gbGluZXNbaV0udHJpbSgpO1xuICAgICAgICAgICAgaWYoIWxpbmUuZW5kc1dpdGgoJzsnKSAmJiAhbGluZS5lbmRzV2l0aCgnOicpKSB7XG4gICAgICAgICAgICAgICAgbGluZSArPSAnOydcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGluZSArPSAnXFxuJztcbiAgICAgICAgICAgIHNjcmlwdCArPSBsaW5lO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHNjcmlwdDtcbiAgICB9XG5cbiAgICBzdGF0aWMgc2xlZXAobWlsbGlzZWNvbmRzKSB7XG4gICAgICAgIGNvbnN0IGRhdGUgPSBEYXRlLm5vdygpO1xuICAgICAgICBsZXQgY3VycmVudERhdGUgPSBudWxsO1xuICAgICAgICBkbyB7XG4gICAgICAgICAgICBjdXJyZW50RGF0ZSA9IERhdGUubm93KCk7XG4gICAgICAgIH0gd2hpbGUgKGN1cnJlbnREYXRlIC0gZGF0ZSA8IG1pbGxpc2Vjb25kcyk7XG4gICAgfVxuXG4gICAgc3RhdGljIHBhcnNlQ29uZmlnKGNvbmZpZywgY3VycmVudFZpZXdJZCwgaW5kZXggPSBudWxsKSB7XG4gICAgICAgIGlmKCF0aGlzLmlzTnVsbChjb25maWcpICYmICF0aGlzLmlzTnVsbChjb25maWcuaWQpKSB7XG4gICAgICAgICAgICBsZXQgY29uZmlnSnNvbiA9IEpTT04uc3RyaW5naWZ5KGNvbmZpZyk7XG4gICAgICAgICAgICBsZXQgcmVwbGFjZSA9IGNvbmZpZ0pzb24ucmVwbGFjZSgvI3t0aGlzfS9nLCAnI3snICsgY29uZmlnLmlkICsgJ30nKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC8je3ZpZXd9L2csICcjeycgKyBjdXJyZW50Vmlld0lkICsgJ30nKTtcblxuICAgICAgICAgICAgaWYoaW5kZXggIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXBsYWNlID0gcmVwbGFjZS5yZXBsYWNlKC9cXFsjaV0vZywgYFske2luZGV4fV1gKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UocmVwbGFjZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY29uZmlnO1xuICAgIH1cblxuICAgIHN0YXRpYyBpc0ZpZWxkUmVxdWlyZWQoaWQsIGZvcm1JZCkge1xuICAgICAgICBpZiAoIVV0aWxzLmlzU3RyaW5nRW1wdHkoZm9ybUlkKSkge1xuICAgICAgICAgICAgbGV0IGZpZWxkcyA9IFV0aWxzLmdldEZpZWxkcyhmb3JtSWQsICd2YWxpZGF0ZScpO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmaWVsZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoZmllbGRzW2ldLmlkID09PSBpZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmllbGRzW2ldLnJlcXVpcmVkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBzdGF0aWMgaXNTdHJpbmdFbXB0eSh2YWwpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICd1bmRlZmluZWQnIHx8IHZhbCA9PT0gbnVsbCB8fCB2YWwudHJpbSgpLmxlbmd0aCA9PT0gMDtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0RmllbGRzKGZvcm1JZCwgY2xhc3NOYW1lKSB7XG4gICAgICAgIGxldCBpbnB1dEZpZWxkcyA9IFtdO1xuICAgICAgICBsZXQgZm9ybSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGZvcm1JZCk7XG4gICAgICAgIGlmICghVXRpbHMuaXNOdWxsKGZvcm0pKSB7XG4gICAgICAgICAgICBsZXQgaW5wdXREaXZzID0gZm9ybS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGNsYXNzTmFtZSk7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0RGl2cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBpbnB1dHMgPSBpbnB1dERpdnNbaV0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJpbnB1dFwiKTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGlucHV0cy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgICAgICBpbnB1dEZpZWxkcy5wdXNoKGlucHV0c1tqXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGlucHV0RmllbGRzO1xuICAgIH1cblxuICAgIHN0YXRpYyB2YWxpZGF0ZUZpZWxkKGlkLCByZXF1aXJlZCwgdmFsdWVzLCBjdXJyZW50VmFsdWUsIHZhbGlkYXRvcikge1xuICAgICAgICBsZXQgbWVzc2FnZSA9ICF0aGlzLmlzTnVsbCh2YWxpZGF0b3IpID8gdmFsaWRhdG9yLmVycm9yTWVzc2FnZSA6IG51bGw7XG4gICAgICAgIGxldCByZWdleCA9ICF0aGlzLmlzTnVsbCh2YWxpZGF0b3IpID8gdmFsaWRhdG9yLnJlZ2V4IDogbnVsbDtcblxuICAgICAgICBsZXQgcmVzdWx0ID0ge307XG4gICAgICAgIHJlc3VsdC52YWxpZCA9IHRydWU7XG4gICAgICAgIHJlc3VsdC5tZXNzYWdlID0gXCJcIjtcblxuICAgICAgICBsZXQgdmFsdWU7XG4gICAgICAgIGlmICghdGhpcy5pc051bGwoY3VycmVudFZhbHVlKSkge1xuICAgICAgICAgICAgdmFsdWUgPSBjdXJyZW50VmFsdWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YWx1ZSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodmFsdWVzKSlbaWRdO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGhhc0Vycm9ycyA9IGZhbHNlO1xuXG4gICAgICAgIGlmIChyZXF1aXJlZCAmJiAoVXRpbHMuaXNOdWxsKHZhbHVlKSB8fCBVdGlscy5pc1N0cmluZ0VtcHR5KHZhbHVlLnRvU3RyaW5nKCkpKSkge1xuICAgICAgICAgICAgcmVzdWx0Lm1lc3NhZ2UgPSAhVXRpbHMuaXNOdWxsKG1lc3NhZ2UpID8gbWVzc2FnZSA6IFwiVGhpcyBmaWVsZCBpcyByZXF1aXJlZFwiO1xuICAgICAgICAgICAgaGFzRXJyb3JzID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdC5tZXNzYWdlID0gXCJcIjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaGFzRXJyb3JzICYmICFVdGlscy5pc051bGwocmVnZXgpICYmICFVdGlscy5pc051bGwodmFsdWUpKSB7XG4gICAgICAgICAgICBoYXNFcnJvcnMgPSBVdGlscy5pc051bGwodmFsdWUudG9TdHJpbmcoKS5tYXRjaChyZWdleCkpO1xuICAgICAgICAgICAgaWYgKGhhc0Vycm9ycykge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5tZXNzYWdlID0gIVV0aWxzLmlzTnVsbChtZXNzYWdlKSA/IG1lc3NhZ2UgOiBcIlRoaXMgZmllbGQgaXMgaW52YWxpZFwiO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmVzdWx0LnZhbGlkID0gIWhhc0Vycm9ycztcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0Q29tcG9uZW50QXR0cmlidXRlKGZpZWxkLCBhdHRyaWJ1dGUsIGRlZmF1bHRWYWx1ZSkge1xuICAgICAgICBpZih0aGlzLmlzTnVsbChmaWVsZC5hdHRyaWJ1dGVzKSkge1xuICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmlzTnVsbChmaWVsZC5hdHRyaWJ1dGVzW2F0dHJpYnV0ZV0pID8gZGVmYXVsdFZhbHVlIDogZmllbGQuYXR0cmlidXRlc1thdHRyaWJ1dGVdO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXRDb21wb25lbnRTdHlsZUF0dHJpYnV0ZShmaWVsZCwgYXR0cmlidXRlLCBkZWZhdWx0VmFsdWUpIHtcbiAgICAgICAgaWYodGhpcy5pc051bGwoZmllbGQuYXR0cmlidXRlcykgfHwgdGhpcy5pc051bGwoZmllbGQuYXR0cmlidXRlcy5zdHlsZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5pc051bGwoZmllbGQuYXR0cmlidXRlcy5zdHlsZVthdHRyaWJ1dGVdKSA/IGRlZmF1bHRWYWx1ZSA6IGZpZWxkLmF0dHJpYnV0ZXMuc3R5bGVbYXR0cmlidXRlXTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZG9HZXRSZXF1ZXN0SnNvbihjdXJyZW50UGFnZSwgY3VycmV0Um93c1BlclBhZ2UsIGN1cnJlbnRTZWFyY2hQYXJhbWV0ZXJzLCBwYWdlZCkge1xuICAgICAgICB2YXIgcmVxdWVzdCA9IHt9O1xuICAgICAgICByZXF1ZXN0LnBhZ2VTaXplID0gY3VycmV0Um93c1BlclBhZ2U7XG4gICAgICAgIHJlcXVlc3QuY3VycmVudFBhZ2UgPSBjdXJyZW50UGFnZTtcbiAgICAgICAgcmVxdWVzdC5zZWFyY2hQYXJhbWV0ZXJzID0gY3VycmVudFNlYXJjaFBhcmFtZXRlcnM7XG4gICAgICAgIHJlcXVlc3QucGFnZWQgPSB0eXBlb2YgcGFnZWQgPT09ICd1bmRlZmluZWQnIHx8IHBhZ2VkID09PSBudWxsIHx8IHBhZ2VkO1xuXG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShyZXF1ZXN0KTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0RmllbGRDb2xzcGFuID0gKGZpZWxkKSA9PiB7XG4gICAgICAgIHJldHVybiAhVXRpbHMuaXNOdWxsKGZpZWxkLmF0dHJpYnV0ZXMpICYmICFVdGlscy5pc051bGwoZmllbGQuYXR0cmlidXRlc1snY29sc3BhbiddKSA/XG4gICAgICAgICAgICBwYXJzZUludCh0eXBlb2YgZmllbGQuYXR0cmlidXRlcy5jb2xzcGFuID09PSAnc3RyaW5nJyA/XG4gICAgICAgICAgICAgICAgZHluYW1pY0pTLmV4ZWN1dGVTY3JpcHQoXCJfX2NvbHNwYW5fXCIgKyBmaWVsZC5pZCwgZmllbGQuYXR0cmlidXRlcy5jb2xzcGFuKSA6XG4gICAgICAgICAgICAgICAgZmllbGQuYXR0cmlidXRlcy5jb2xzcGFuKSA6IDE7XG4gICAgfTtcblxuICAgIHN0YXRpYyBwcm9wID0gKHZhbHVlKSA9PiB7XG4gICAgICAgIHJldHVybiBhcHBsaWNhdGlvbk1hbmFnZXIuaXNFeHByZXNzaW9uKHZhbHVlKSA/XG4gICAgICAgICAgICBkeW5hbWljSlMuZXhlY3V0ZVNjcmlwdChcInJlYWRQcm9wX1wiICsgTWF0aC5yYW5kb20oKSwgdmFsdWUsIG51bGwsIHRydWUsIG51bGwsIG51bGwsIGZhbHNlKSA6XG4gICAgICAgICAgICAgICAgdmFsdWU7XG4gICAgfTtcblxuICAgIHN0YXRpYyBjcmVhdGVSb3cgPSAoKSA9PiB7XG4gICAgICAgIGxldCByb3cgPSB7fTtcbiAgICAgICAgcm93LmZpZWxkcyA9IFtdO1xuICAgICAgICByb3cudXNlZFNsb3RzID0gMDtcblxuICAgICAgICByZXR1cm4gcm93O1xuICAgIH07XG5cbiAgICBzdGF0aWMgZmlsbFJvd1dpdGhTcGFjZXJzID0gKHJvdywgbWF4KSA9PiB7XG4gICAgICAgIGZvciAobGV0IGkgPSByb3cudXNlZFNsb3RzOyBpIDwgbWF4OyBpKyspIHtcbiAgICAgICAgICAgIGxldCBmaWVsZCA9IHt9O1xuICAgICAgICAgICAgZmllbGQuZmllbGRUeXBlID0gJ0xBQkVMJztcbiAgICAgICAgICAgIGZpZWxkLmlkID0gJ3N5c3RlbV9jb2xfc3Bhbl9zcGFjZXJfJyArIGk7XG4gICAgICAgICAgICByb3cuZmllbGRzLnB1c2goZmllbGQpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHN0YXRpYyByb3dIYXNTcGFjZUZvck5ld0ZpZWxkID0gKHJvdywgY29sc3BhbiwgbWF4KSA9PiB7XG4gICAgICAgIHJldHVybiBjb2xzcGFuIDw9IG1heCAtIHJvdy51c2VkU2xvdHM7XG4gICAgfTtcblxuICAgIHN0YXRpYyBnZXRGaWVsZEdyaWQoYXR0cmlidXRlcywgZmllbGRzKSB7XG4gICAgICAgIGxldCBmaWVsZEdyaWQgPSB7fTtcbiAgICAgICAgbGV0IG1heENvbHNwYW4gPSAhVXRpbHMuaXNOdWxsKGF0dHJpYnV0ZXMpICYmICFVdGlscy5pc051bGwoYXR0cmlidXRlcy5sYXlvdXRDb2x1bW5zKSA/IGF0dHJpYnV0ZXMubGF5b3V0Q29sdW1ucyA6IDE7XG4gICAgICAgIGZpZWxkR3JpZC5tYXhDb2xQZXJSb3cgPSBtYXhDb2xzcGFuO1xuICAgICAgICBmaWVsZEdyaWQucm93cyA9IFtdO1xuICAgICAgICBsZXQgY3VyclJvdyA9IHRoaXMuY3JlYXRlUm93KCk7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaWVsZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGxldCBmaWVsZCA9IGZpZWxkc1tpXTtcbiAgICAgICAgICAgIGxldCBjb2xzcGFuID0gdGhpcy5nZXRGaWVsZENvbHNwYW4oZmllbGQpO1xuXG4gICAgICAgICAgICBpZiAoIXRoaXMucm93SGFzU3BhY2VGb3JOZXdGaWVsZChjdXJyUm93LCBjb2xzcGFuLCBtYXhDb2xzcGFuKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZmlsbFJvd1dpdGhTcGFjZXJzKGN1cnJSb3csIG1heENvbHNwYW4pO1xuICAgICAgICAgICAgICAgIGN1cnJSb3cgPSB0aGlzLmNyZWF0ZVJvdygpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY3VyclJvdy5maWVsZHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgZmllbGRHcmlkLnJvd3MucHVzaChjdXJyUm93KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY3VyclJvdy5maWVsZHMucHVzaChmaWVsZCk7XG4gICAgICAgICAgICBjdXJyUm93LnVzZWRTbG90cyArPSBjb2xzcGFuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZpZWxkR3JpZDtcbiAgICB9XG5cbiAgICBzdGF0aWMgZXZhbHVhdGVCb29sZWFuRXhwcmVzc2lvbihleHByZXNzaW9uLCBpZCwgZGVmYXVsdFZhbHVlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoZXhwcmVzc2lvbiA9PT0gXCJmYWxzZVwiIHx8IGV4cHJlc3Npb24gPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChleHByZXNzaW9uID09PSBcInRydWVcIiB8fCBleHByZXNzaW9uID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFVdGlscy5pc051bGwoZXhwcmVzc2lvbikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZHluYW1pY0pTLmV4ZWN1dGVTY3JpcHQoYCR7aWR9VXRpbHNCb29sRXZhbGAsIGV4cHJlc3Npb24pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gIXRoaXMuaXNOdWxsKGRlZmF1bHRWYWx1ZSkgPyBkZWZhdWx0VmFsdWUgOiBmYWxzZTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIGV2YWx1YXRpb24gYSBib29sZWFuIGV4cHJlc3Npb24gW1wiICsgZXhwcmVzc2lvbiArIFwiXSBmb3IgOiBcIiArIGlkKTtcbiAgICAgICAgICAgIHRocm93KGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGdldEVudGl0eVZpZXdUaXRsZShxdWVyeVBhcmFtZXRlclN0YXRlLCB2aWV3TmFtZSwgLi4uZmllbGRzKSB7XG4gICAgICAgIGlmIChVdGlscy5pc051bGwocXVlcnlQYXJhbWV0ZXJTdGF0ZSkgfHwgVXRpbHMuaXNOdWxsKHF1ZXJ5UGFyYW1ldGVyU3RhdGUuc2VsZWN0aW9uKSkge1xuICAgICAgICAgICAgcmV0dXJuICFVdGlscy5pc051bGwodmlld05hbWUpID8gdmlld05hbWUgKyBcIiA+IEFkZFwiIDogXCJBZGRcIjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBwcm9wcyA9IFwiXCI7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmllbGRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChmaWVsZHNbaV0pKSB7XG4gICAgICAgICAgICAgICAgcHJvcHMgKz0gZmllbGRzW2ldLnRyaW0oKTtcbiAgICAgICAgICAgICAgICBwcm9wcyArPSBcIiBcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHByb3BzID0gcHJvcHMudHJpbSgpO1xuICAgICAgICBsZXQgcHJlZml4ID0gVXRpbHMuaXNOdWxsKHZpZXdOYW1lKSA/IFwiXCIgOiBcIiA+IFwiO1xuICAgICAgICByZXR1cm4gKFV0aWxzLmlzTnVsbCh2aWV3TmFtZSkgPyBcIlwiIDogdmlld05hbWUpICsgKHByb3BzLmxlbmd0aCA+IDAgPyAocHJlZml4ICsgcHJvcHMpIDogXCJcIik7XG4gICAgfVxuXG4gICAgc3RhdGljIHNldExlZ2VuZENvbG9yKGNvbG9yKSB7XG4gICAgICAgIGxldCBsZWdlbmRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcImxlZ2VuZFwiKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZWdlbmRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBsZWdlbmRzW2ldLnN0eWxlLmNvbG9yID0gY29sb3I7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgc2V0TGVnZW5kKHRleHQpIHtcbiAgICAgICAgaWYgKCFVdGlscy5pc051bGwodGV4dCkpIHtcbiAgICAgICAgICAgIGxldCBsZWdlbmQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImdsb2JhbExlZ2VuZFwiKTtcbiAgICAgICAgICAgIGxlZ2VuZC5pbm5lckhUTUwgPSB0ZXh0O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2hvd01lc3NhZ2UgPSAodmlld1JlZiwgbWVzc2FnZSwgdHlwZSkgPT4ge1xuICAgICAgICBpZiAoVXRpbHMuaXNOdWxsKG1lc3NhZ2UpKSB7XG4gICAgICAgICAgICBtZXNzYWdlID0gXCJcIjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBtZXNzYWdlVHlwZSA9IHR5cGUgPT09IFwiRVJST1JcIiA/IFwiZGFuZ2VyXCIgOiAoVXRpbHMuaXNOdWxsKHR5cGUpID8gXCJtZXNzYWdlXCIgOiB0eXBlKTtcbiAgICAgICAgdmlld1JlZi5zZXRTdGF0ZSh7IG1lc3NhZ2U6IG1lc3NhZ2UsIG1lc3NhZ2VTdHlsZTogbWVzc2FnZVR5cGUgfSk7XG4gICAgfTtcblxuICAgIHNhdmVGb3JtKHZpZXdSZWYsIGZvcm1SZWYsIHVybCkge1xuICAgICAgICB0aGlzLnNhdmVGb3JtKHZpZXdSZWYsIGZvcm1SZWYsIHVybCwgbnVsbCwgbnVsbCwgbnVsbCk7XG4gICAgfVxuXG4gICAgc2F2ZUZvcm0odmlld1JlZiwgZm9ybVJlZiwgdXJsLCBzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy5zYXZlRm9ybSh2aWV3UmVmLCBmb3JtUmVmLCB1cmwsIHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjaywgbnVsbCk7XG4gICAgfVxuXG4gICAgc3RhdGljIG9mZnNldERhdGUoZGF0ZSwgeWVhck9mZnNldCwgbW9udGhPZmZzZXQsIGRheU9mZnNldCkge1xuICAgICAgICBsZXQgeWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKSArIHllYXJPZmZzZXQ7XG4gICAgICAgIGxldCBkYXkgPSBkYXRlLmdldERhdGUoKSArIGRheU9mZnNldDtcbiAgICAgICAgbGV0IG1vbnRoID0gZGF0ZS5nZXRNb250aCgpICsgbW9udGhPZmZzZXQ7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHllYXIsIG1vbnRoLCBkYXkpO1xuICAgIH1cblxuICAgIGF1dG9TZXREYXRlKHZpZXdSZWYsIGZvcm1SZWYsIG5ld0RhdGUsIHllYXJPZmZzZXQsIG1vbnRoT2Zmc2V0LCBkYXlPZmZzZXQsIGF1dG9GaWxsRGF0ZU5hbWUsIHJlZkRhdGVOYW1lKSB7XG4gICAgICAgIGxldCBzdGF0ZURhdGUgPSB2aWV3UmVmLnN0YXRlW3JlZkRhdGVOYW1lXTtcbiAgICAgICAgbGV0IHRlbXBEYXRlID0gc3RhdGVEYXRlO1xuICAgICAgICBpZiAoVXRpbHMuaXNOdWxsKHN0YXRlRGF0ZSkgfHwgc3RhdGVEYXRlLmdldFRpbWUoKSAhPT0gbmV3RGF0ZS5nZXRUaW1lKCkpIHtcbiAgICAgICAgICAgIHZpZXdSZWYuc2V0U3RhdGUoeyAuLi52aWV3UmVmLnN0YXRlLCBbcmVmRGF0ZU5hbWVdOiBuZXdEYXRlIH0sICgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbCh0ZW1wRGF0ZSkgJiYgIVV0aWxzLmlzTnVsbCh2aWV3UmVmLnN0YXRlLmlkKSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgYXV0b0ZpbGxEYXRlID0gVXRpbHMub2Zmc2V0RGF0ZShuZXdEYXRlLCB5ZWFyT2Zmc2V0LCBtb250aE9mZnNldCwgZGF5T2Zmc2V0KTtcbiAgICAgICAgICAgICAgICAgICAgZm9ybVJlZi5jdXJyZW50LnNldFZhbHVlKGF1dG9GaWxsRGF0ZU5hbWUsIGF1dG9GaWxsRGF0ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKFV0aWxzLmlzTnVsbCh2aWV3UmVmLnN0YXRlLmlkKSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgYXV0b0ZpbGxEYXRlID0gVXRpbHMub2Zmc2V0RGF0ZShuZXdEYXRlLCB5ZWFyT2Zmc2V0LCBtb250aE9mZnNldCwgZGF5T2Zmc2V0KTtcbiAgICAgICAgICAgICAgICAgICAgZm9ybVJlZi5jdXJyZW50LnNldFZhbHVlKGF1dG9GaWxsRGF0ZU5hbWUsIGF1dG9GaWxsRGF0ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0QXJncyhmdW5jKSB7XG4gICAgICAgIC8vIEZpcnN0IG1hdGNoIGV2ZXJ5dGhpbmcgaW5zaWRlIHRoZSBmdW5jdGlvbiBhcmd1bWVudCBwYXJlbnMuXG4gICAgICAgIHZhciBhcmdzID0gZnVuYy50b1N0cmluZygpLm1hdGNoKC9mdW5jdGlvblxccy4qP1xcKChbXildKilcXCkvKVsxXTtcblxuICAgICAgICAvLyBTcGxpdCB0aGUgYXJndW1lbnRzIHN0cmluZyBpbnRvIGFuIGFycmF5IGNvbW1hIGRlbGltaXRlZC5cbiAgICAgICAgcmV0dXJuIGFyZ3Muc3BsaXQoJywnKS5tYXAoZnVuY3Rpb24oYXJnKSB7XG4gICAgICAgICAgICAvLyBFbnN1cmUgbm8gaW5saW5lIGNvbW1lbnRzIGFyZSBwYXJzZWQgYW5kIHRyaW0gdGhlIHdoaXRlc3BhY2UuXG4gICAgICAgICAgICByZXR1cm4gYXJnLnJlcGxhY2UoL1xcL1xcKi4qXFwqXFwvLywgJycpLnRyaW0oKTtcbiAgICAgICAgfSkuZmlsdGVyKGZ1bmN0aW9uKGFyZykge1xuICAgICAgICAgICAgLy8gRW5zdXJlIG5vIHVuZGVmaW5lZCB2YWx1ZXMgYXJlIGFkZGVkLlxuICAgICAgICAgICAgcmV0dXJuIGFyZztcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldFByb3BlcnR5Q2hhaW5QYXRoID0gKGV4cHJlc3Npb24pID0+IHtcbiAgICAgICAgbGV0IHBhdGggPSB7fTtcblxuICAgICAgICBpZighdGhpcy5pc051bGwoZXhwcmVzc2lvbikpIHtcbiAgICAgICAgICAgIGxldCB0b2tlbnMgPSBleHByZXNzaW9uLnNwbGl0KCcuJyk7XG4gICAgICAgICAgICBwYXRoLnByb3BlcnR5ID0gdG9rZW5zW3Rva2Vucy5sZW5ndGggLSAxXTtcblxuICAgICAgICAgICAgbGV0IHZvRXhwcmVzc2lvbiA9IGV4cHJlc3Npb24uc3Vic3RyaW5nKDAsIGV4cHJlc3Npb24uaW5kZXhPZignLicpKTtcbiAgICAgICAgICAgIHBhdGgudmFsdWVPYmplY3QgPSBkeW5hbWljSlMuZXhlY3V0ZVNjcmlwdChgJHtNYXRoLnJhbmRvbSgpfV9Qcm9wZXJ0eUNoYWluVXRpbHNFdmFsYCwgdm9FeHByZXNzaW9uKTtcbiAgICAgICAgICAgIGZvciAobGV0IGk9MTtpPHRva2Vucy5sZW5ndGggLSAxO2krKykge1xuICAgICAgICAgICAgICAgIGxldCB0b2tlbiA9IHRva2Vuc1tpXTtcbiAgICAgICAgICAgICAgICBpZighdGhpcy5pc051bGwocGF0aC52YWx1ZU9iamVjdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGdldHRlciA9IHBhdGgudmFsdWVPYmplY3RbdG9rZW5dO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChnZXR0ZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGdldHRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGgudmFsdWVPYmplY3QgPSBnZXR0ZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aC52YWx1ZU9iamVjdCA9IGdldHRlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwYXRoO1xuICAgIH07XG5cbiAgICBzdGF0aWMgbWVyZ2VTdHlsZXMgPSAoZGVmYXVsdFN0eWxlLCBjb25maWcpID0+IHtcbiAgICAgICAgbGV0IGNvbmZpZ1N0eWxlID0gVXRpbHMuZ2V0Q29tcG9uZW50QXR0cmlidXRlKGNvbmZpZywgJ3N0eWxlJywgbnVsbCk7XG4gICAgICAgIGlmKGNvbmZpZ1N0eWxlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tZXJnZU9iamVjdHMoY29uZmlnU3R5bGUsIGRlZmF1bHRTdHlsZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGVmYXVsdFN0eWxlO1xuICAgIH07XG5cbiAgICBzdGF0aWMgbWVyZ2VPYmplY3RzKHNvdXJjZSwgdGFyZ2V0KSB7XG4gICAgICAgIGlmKCF0YXJnZXQpIHtcbiAgICAgICAgICAgIHJldHVybiBzb3VyY2U7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcHJvcGVydGllcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHNvdXJjZSk7XG4gICAgICAgIGxldCByZXN1bHQgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRhcmdldCkpO1xuICAgICAgICBmb3IgKGNvbnN0IHByb3BlcnR5IG9mIHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIHJlc3VsdFtwcm9wZXJ0eV0gPSBhcHBsaWNhdGlvbk1hbmFnZXIuaXNFeHByZXNzaW9uKHNvdXJjZVtwcm9wZXJ0eV0pID9cbiAgICAgICAgICAgICAgICBVdGlscy5ldmFsdWF0ZUJvb2xlYW5FeHByZXNzaW9uKHNvdXJjZVtwcm9wZXJ0eV0sIHByb3BlcnR5KSA6IHNvdXJjZVtwcm9wZXJ0eV07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHN0YXRpYyBwdWJsaXNoRXJyb3JNZXNzYWdlID0gYXN5bmMgKGUsIHZpZXdJZCwgY29tcG9uZW50ID0gbnVsbCkgPT4ge1xuICAgICAgICBsZXQgbWVzc2FnZVRleHQ7XG5cbiAgICAgICAgaWYoZS5qc29uKSB7XG4gICAgICAgICAgICBsZXQgZGF0YSA9IGF3YWl0IGUuanNvbigpO1xuICAgICAgICAgICAgbWVzc2FnZVRleHQgPSBkYXRhLm1lc3NhZ2U7XG4gICAgICAgICAgICBpZighbWVzc2FnZVRleHQpIHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlVGV4dCA9IFV0aWxzLlNZU1RFTV9FUlJPUl9NRVNTQUdFO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbWVzc2FnZVRleHQgPSBVdGlscy5TWVNURU1fRVJST1JfTUVTU0FHRTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBtZXNzYWdlID0ge1xuICAgICAgICAgICAgbWVzc2FnZVR5cGU6ICdFUlJPUicsXG4gICAgICAgICAgICBtZXNzYWdlOiBtZXNzYWdlVGV4dFxuICAgICAgICB9O1xuXG4gICAgICAgIGxldCBldmVudCA9IG5ldyBFdmVudChhcHBsaWNhdGlvbk1hbmFnZXIsIHZpZXdJZCwgbWVzc2FnZSk7XG4gICAgICAgIGV2ZW50TWFuYWdlci5maXJlRXZlbnQoRXZlbnRUeXBlLk1FU1NBR0VfQVJSSVZFRCwgZXZlbnQpO1xuXG4gICAgICAgIGlmKGNvbXBvbmVudCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgZXZlbnQgPSBuZXcgRXZlbnQoY29tcG9uZW50LCB2aWV3SWQsIG1lc3NhZ2UpO1xuICAgICAgICAgICAgZXZlbnRNYW5hZ2VyLmZpcmVFdmVudChFdmVudFR5cGUuTUVTU0FHRV9BUlJJVkVELCBldmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgcHVibGlzaFN5c3RlbUVycm9yTWVzc2FnZSA9ICh2aWV3SWQsIGNvbXBvbmVudCA9IG51bGwpID0+IHtcbiAgICAgICAgVXRpbHMucHVibGlzaEVycm9yTWVzc2FnZSgnQSBzeXN0ZW0gZXJyb3IgaGFzIG9jY3VycmVkLiBQbGVhc2UgdHJ5IGFnYWluIGxhdGVyJywgdmlld0lkLCBjb21wb25lbnQpO1xuICAgIH1cblxuICAgIHN0YXRpYyBiYXNlNjRUb0FycmF5QnVmZmVyID0gKGJhc2U2NCkgPT4ge1xuICAgICAgICBjb25zdCBiaW5hcnlTdHJpbmcgPSB3aW5kb3cuYXRvYihiYXNlNjQpO1xuICAgICAgICBjb25zdCBsZW4gPSBiaW5hcnlTdHJpbmcubGVuZ3RoO1xuICAgICAgICBjb25zdCBieXRlcyA9IG5ldyBVaW50OEFycmF5KGxlbik7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgIGJ5dGVzW2ldID0gYmluYXJ5U3RyaW5nLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYnl0ZXMuYnVmZmVyO1xuICAgIH07XG5cbiAgICBzdGF0aWMgZ2V0QXZhdGFyQ29sb3IobmFtZSkge1xuICAgICAgICBuYW1lID0gbmFtZS5zdWJzdHIoMCwgNik7XG5cbiAgICAgICAgbGV0IGhhc2ggPSAwO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5hbWUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGhhc2ggPSAzMSAqIGhhc2ggKyBuYW1lLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGluZGV4ID0gTWF0aC5hYnMoaGFzaCAlIGNvbG9ycy5sZW5ndGgpO1xuICAgICAgICByZXR1cm4gY29sb3JzW2luZGV4XTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZm9ybWF0RGF0ZVRpbWUoZGF0ZVRpbWVTdHJpbmcpIHtcbiAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKGRhdGVUaW1lU3RyaW5nKTtcblxuICAgICAgICBjb25zdCBtb250aE5hbWVzID0gW1xuICAgICAgICAgICAgXCJKYW5cIiwgXCJGZWJcIiwgXCJNYXJcIiwgXCJBcHJcIixcbiAgICAgICAgICAgIFwiTWF5XCIsIFwiSnVuXCIsIFwiSnVsXCIsIFwiQXVnXCIsXG4gICAgICAgICAgICBcIlNlcFwiLCBcIk9jdFwiLCBcIk5vdlwiLCBcIkRlY1wiXG4gICAgICAgIF07XG5cbiAgICAgICAgY29uc3QgbW9udGhJbmRleCA9IGRhdGUuZ2V0TW9udGgoKTtcbiAgICAgICAgY29uc3QgeWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKTtcblxuICAgICAgICByZXR1cm4gZGF0ZS5nZXREYXRlKCkgKyAnICcgKyBtb250aE5hbWVzW21vbnRoSW5kZXhdICsgJyAnICsgeWVhciArICcgLSAnICsgZGF0ZS5nZXRIb3VycygpICsgJzonICsgZGF0ZS5nZXRNaW51dGVzKCk7XG4gICAgfVxuXG4gICAgc3RhdGljIHVwZGF0ZU5lc3RlZFByb3BlcnR5KG9iaiwgcGF0aCwgdmFsdWUpIHtcbiAgICAgICAgY29uc3Qga2V5cyA9IHBhdGguc3BsaXQoJy4nKTtcbiAgICAgICAgbGV0IGN1cnJlbnQgPSBvYmo7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICAgICAgaWYgKCFjdXJyZW50W2tleXNbaV1dKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFtrZXlzW2ldXSA9IHt9O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZih0eXBlb2YgY3VycmVudFtrZXlzW2ldXSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBwcm9wZXJ0eSB2YWx1ZSBpbiBwcm9wZXJ0eSBjaGFpbiBbXCIgKyBwYXRoICsgXCJdIC0gW1wiICsga2V5c1tpXSArIFwiXVwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50W2tleXNbaV1dO1xuICAgICAgICB9XG5cbiAgICAgICAgY3VycmVudFtrZXlzW2tleXMubGVuZ3RoIC0gMV1dID0gdmFsdWU7XG4gICAgfVxuXG4gICAgc3RhdGljIHJlYWROZXN0ZWRQcm9wZXJ0eShvYmosIHBhdGgpIHtcbiAgICAgICAgY29uc3Qga2V5cyA9IHBhdGguc3BsaXQoJy4nKTtcbiAgICAgICAgbGV0IGN1cnJlbnQgPSBvYmo7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICAgICAgaWYgKCFjdXJyZW50W2tleXNbaV1dIHx8IHR5cGVvZiBjdXJyZW50W2tleXNbaV1dICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjdXJyZW50ID0gY3VycmVudFtrZXlzW2ldXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjdXJyZW50W2tleXNba2V5cy5sZW5ndGggLSAxXV07XG4gICAgfVxuXG4gICAgc3RhdGljIHN0cmlwSHRtbChodG1sKSB7XG4gICAgICAgIGlmICghaHRtbCkgcmV0dXJuICcnO1xuXG4gICAgICAgIGNvbnN0IHRlbXAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgdGVtcC5pbm5lckhUTUwgPSBodG1sO1xuXG4gICAgICAgIHJldHVybiB0ZW1wLnRleHRDb250ZW50XG4gICAgICAgICAgICAucmVwbGFjZSgvXFxzKy9nLCAnICcpXG4gICAgICAgICAgICAudHJpbSgpO1xuICAgIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUMsSUFBQUEsVUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0QsSUFBQUMsTUFBQSxHQUFBRixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUUsbUJBQUEsR0FBQUgsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFHLFdBQUEsR0FBQUosc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFJLFVBQUEsR0FBQUwsc0JBQUEsQ0FBQUMsT0FBQTtBQUEwQyxJQUFBSyxNQUFBO0FBQUEsU0FBQU4sdUJBQUFPLENBQUEsV0FBQUEsQ0FBQSxJQUFBQSxDQUFBLENBQUFDLFVBQUEsR0FBQUQsQ0FBQSxLQUFBRSxPQUFBLEVBQUFGLENBQUE7QUFBQSxTQUFBRyxRQUFBSCxDQUFBLEVBQUFJLENBQUEsUUFBQUMsQ0FBQSxHQUFBQyxNQUFBLENBQUFDLElBQUEsQ0FBQVAsQ0FBQSxPQUFBTSxNQUFBLENBQUFFLHFCQUFBLFFBQUFDLENBQUEsR0FBQUgsTUFBQSxDQUFBRSxxQkFBQSxDQUFBUixDQUFBLEdBQUFJLENBQUEsS0FBQUssQ0FBQSxHQUFBQSxDQUFBLENBQUFDLE1BQUEsV0FBQU4sQ0FBQSxXQUFBRSxNQUFBLENBQUFLLHdCQUFBLENBQUFYLENBQUEsRUFBQUksQ0FBQSxFQUFBUSxVQUFBLE9BQUFQLENBQUEsQ0FBQVEsSUFBQSxDQUFBQyxLQUFBLENBQUFULENBQUEsRUFBQUksQ0FBQSxZQUFBSixDQUFBO0FBQUEsU0FBQVUsY0FBQWYsQ0FBQSxhQUFBSSxDQUFBLE1BQUFBLENBQUEsR0FBQVksU0FBQSxDQUFBQyxNQUFBLEVBQUFiLENBQUEsVUFBQUMsQ0FBQSxXQUFBVyxTQUFBLENBQUFaLENBQUEsSUFBQVksU0FBQSxDQUFBWixDQUFBLFFBQUFBLENBQUEsT0FBQUQsT0FBQSxDQUFBRyxNQUFBLENBQUFELENBQUEsT0FBQWEsT0FBQSxXQUFBZCxDQUFBLElBQUFlLGVBQUEsQ0FBQW5CLENBQUEsRUFBQUksQ0FBQSxFQUFBQyxDQUFBLENBQUFELENBQUEsU0FBQUUsTUFBQSxDQUFBYyx5QkFBQSxHQUFBZCxNQUFBLENBQUFlLGdCQUFBLENBQUFyQixDQUFBLEVBQUFNLE1BQUEsQ0FBQWMseUJBQUEsQ0FBQWYsQ0FBQSxLQUFBRixPQUFBLENBQUFHLE1BQUEsQ0FBQUQsQ0FBQSxHQUFBYSxPQUFBLFdBQUFkLENBQUEsSUFBQUUsTUFBQSxDQUFBZ0IsY0FBQSxDQUFBdEIsQ0FBQSxFQUFBSSxDQUFBLEVBQUFFLE1BQUEsQ0FBQUssd0JBQUEsQ0FBQU4sQ0FBQSxFQUFBRCxDQUFBLGlCQUFBSixDQUFBO0FBQUEsU0FBQW1CLGdCQUFBbkIsQ0FBQSxFQUFBSSxDQUFBLEVBQUFDLENBQUEsWUFBQUQsQ0FBQSxHQUFBbUIsY0FBQSxDQUFBbkIsQ0FBQSxNQUFBSixDQUFBLEdBQUFNLE1BQUEsQ0FBQWdCLGNBQUEsQ0FBQXRCLENBQUEsRUFBQUksQ0FBQSxJQUFBb0IsS0FBQSxFQUFBbkIsQ0FBQSxFQUFBTyxVQUFBLE1BQUFhLFlBQUEsTUFBQUMsUUFBQSxVQUFBMUIsQ0FBQSxDQUFBSSxDQUFBLElBQUFDLENBQUEsRUFBQUwsQ0FBQTtBQUFBLFNBQUF1QixlQUFBbEIsQ0FBQSxRQUFBc0IsQ0FBQSxHQUFBQyxZQUFBLENBQUF2QixDQUFBLHVDQUFBc0IsQ0FBQSxHQUFBQSxDQUFBLEdBQUFBLENBQUE7QUFBQSxTQUFBQyxhQUFBdkIsQ0FBQSxFQUFBRCxDQUFBLDJCQUFBQyxDQUFBLEtBQUFBLENBQUEsU0FBQUEsQ0FBQSxNQUFBTCxDQUFBLEdBQUFLLENBQUEsQ0FBQXdCLE1BQUEsQ0FBQUMsV0FBQSxrQkFBQTlCLENBQUEsUUFBQTJCLENBQUEsR0FBQTNCLENBQUEsQ0FBQStCLElBQUEsQ0FBQTFCLENBQUEsRUFBQUQsQ0FBQSx1Q0FBQXVCLENBQUEsU0FBQUEsQ0FBQSxZQUFBSyxTQUFBLHlFQUFBNUIsQ0FBQSxHQUFBNkIsTUFBQSxHQUFBQyxNQUFBLEVBQUE3QixDQUFBO0FBRTFDLE1BQU04QixNQUFNLEdBQUcsQ0FDWCxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQzFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFDMUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUMxQyxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQzFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFDMUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLENBQ2xDO0FBRWMsTUFBTUMsS0FBSyxDQUFDO0VBQ3ZCQyxXQUFXQSxDQUFBLEVBQUc7SUFBQWxCLGVBQUEsc0JBK1JBLENBQUNtQixPQUFPLEVBQUVDLE9BQU8sRUFBRUMsSUFBSSxLQUFLO01BQ3RDLElBQUlKLEtBQUssQ0FBQ0ssTUFBTSxDQUFDRixPQUFPLENBQUMsRUFBRTtRQUN2QkEsT0FBTyxHQUFHLEVBQUU7TUFDaEI7TUFFQSxJQUFJRyxXQUFXLEdBQUdGLElBQUksS0FBSyxPQUFPLEdBQUcsUUFBUSxHQUFJSixLQUFLLENBQUNLLE1BQU0sQ0FBQ0QsSUFBSSxDQUFDLEdBQUcsU0FBUyxHQUFHQSxJQUFLO01BQ3ZGRixPQUFPLENBQUNLLFFBQVEsQ0FBQztRQUFFSixPQUFPLEVBQUVBLE9BQU87UUFBRUssWUFBWSxFQUFFRjtNQUFZLENBQUMsQ0FBQztJQUNyRSxDQUFDO0VBclNEO0VBSUEsT0FBT0QsTUFBTUEsQ0FBQ2pCLEtBQUssRUFBRTtJQUNqQixPQUFPQSxLQUFLLEtBQUssSUFBSSxJQUFJLE9BQU9BLEtBQUssS0FBSyxXQUFXO0VBQ3pEO0VBRUEsT0FBT3FCLGdCQUFnQkEsQ0FBQ3JCLEtBQUssRUFBRXNCLFFBQVEsRUFBRTtJQUNyQyxJQUFJdEIsS0FBSyxJQUFJLElBQUksRUFBRSxPQUFPc0IsUUFBUTtJQUNsQztJQUNBLElBQUksT0FBT3RCLEtBQUssS0FBSyxRQUFRLElBQUlBLEtBQUssQ0FBQ3VCLElBQUksQ0FBQyxDQUFDLEVBQUUsT0FBT3ZCLEtBQUssQ0FBQ3VCLElBQUksQ0FBQyxDQUFDO0lBQ2xFLElBQUksT0FBT3ZCLEtBQUssS0FBSyxRQUFRLElBQUlVLE1BQU0sQ0FBQ2MsUUFBUSxDQUFDeEIsS0FBSyxDQUFDLEVBQUUsVUFBQXlCLE1BQUEsQ0FBVXpCLEtBQUs7SUFDeEUsT0FBT3NCLFFBQVE7RUFDbkI7RUFFQSxPQUFPSSxXQUFXQSxDQUFDQyxJQUFJLEVBQUU7SUFDckIsTUFBTUMsS0FBSyxHQUFHRCxJQUFJLENBQUNFLEtBQUssQ0FBQyxHQUFHLENBQUM7SUFDN0IsSUFBSUMsUUFBUSxHQUFHLEVBQUU7SUFDakIsS0FBSyxJQUFJM0IsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHeUIsS0FBSyxDQUFDbkMsTUFBTSxFQUFFVSxDQUFDLEVBQUUsRUFBRTtNQUNuQyxJQUFJeUIsS0FBSyxDQUFDekIsQ0FBQyxDQUFDLENBQUNWLE1BQU0sR0FBRyxDQUFDLElBQUltQyxLQUFLLENBQUN6QixDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7UUFDeEMyQixRQUFRLElBQUlGLEtBQUssQ0FBQ3pCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUMzQjtJQUNKO0lBQ0EsT0FBTzJCLFFBQVE7RUFDbkI7RUFFQSxPQUFPQyxXQUFXQSxDQUFDQyxNQUFNLEVBQUVDLEtBQUssRUFBRTtJQUM5QixJQUFJLENBQUNyQixLQUFLLENBQUNLLE1BQU0sQ0FBQ2UsTUFBTSxDQUFDLEVBQUU7TUFDdkIsS0FBSyxJQUFJN0IsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHNkIsTUFBTSxDQUFDdkMsTUFBTSxFQUFFVSxDQUFDLEVBQUUsRUFBRTtRQUNwQyxJQUFJSCxLQUFLLEdBQUdnQyxNQUFNLENBQUM3QixDQUFDLENBQUM7UUFDckI4QixLQUFLLENBQUNqQyxLQUFLLENBQUMyQixJQUFJLENBQUMsR0FBRzNCLEtBQUssQ0FBQ0EsS0FBSztNQUNuQztJQUNKO0VBQ0o7RUFRQSxPQUFPa0MsVUFBVUEsQ0FBQ0MsS0FBSyxFQUFFO0lBQ3JCLElBQUlDLE1BQU0sR0FBRyxFQUFFO0lBRWYsS0FBSSxJQUFJakMsQ0FBQyxHQUFDLENBQUMsRUFBQ0EsQ0FBQyxHQUFDZ0MsS0FBSyxDQUFDMUMsTUFBTSxFQUFDVSxDQUFDLEVBQUUsRUFBRTtNQUM1QixJQUFJa0MsSUFBSSxHQUFHRixLQUFLLENBQUNoQyxDQUFDLENBQUMsQ0FBQ29CLElBQUksQ0FBQyxDQUFDO01BQzFCLElBQUcsQ0FBQ2MsSUFBSSxDQUFDQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQ0QsSUFBSSxDQUFDQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDM0NELElBQUksSUFBSSxHQUFHO01BQ2Y7TUFFQUEsSUFBSSxJQUFJLElBQUk7TUFDWkQsTUFBTSxJQUFJQyxJQUFJO0lBQ2xCO0lBRUEsT0FBT0QsTUFBTTtFQUNqQjtFQUVBLE9BQU9HLEtBQUtBLENBQUNDLFlBQVksRUFBRTtJQUN2QixNQUFNQyxJQUFJLEdBQUdDLElBQUksQ0FBQ0MsR0FBRyxDQUFDLENBQUM7SUFDdkIsSUFBSUMsV0FBVyxHQUFHLElBQUk7SUFDdEIsR0FBRztNQUNDQSxXQUFXLEdBQUdGLElBQUksQ0FBQ0MsR0FBRyxDQUFDLENBQUM7SUFDNUIsQ0FBQyxRQUFRQyxXQUFXLEdBQUdILElBQUksR0FBR0QsWUFBWTtFQUM5QztFQUVBLE9BQU9LLFdBQVdBLENBQUNDLE1BQU0sRUFBRUMsYUFBYSxFQUFnQjtJQUFBLElBQWRDLEtBQUssR0FBQXhELFNBQUEsQ0FBQUMsTUFBQSxRQUFBRCxTQUFBLFFBQUF5RCxTQUFBLEdBQUF6RCxTQUFBLE1BQUcsSUFBSTtJQUNsRCxJQUFHLENBQUMsSUFBSSxDQUFDeUIsTUFBTSxDQUFDNkIsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM3QixNQUFNLENBQUM2QixNQUFNLENBQUNJLEVBQUUsQ0FBQyxFQUFFO01BQ2hELElBQUlDLFVBQVUsR0FBR0MsSUFBSSxDQUFDQyxTQUFTLENBQUNQLE1BQU0sQ0FBQztNQUN2QyxJQUFJUSxPQUFPLEdBQUdILFVBQVUsQ0FBQ0csT0FBTyxDQUFDLFVBQVUsRUFBRSxJQUFJLEdBQUdSLE1BQU0sQ0FBQ0ksRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUMvREksT0FBTyxDQUFDLFVBQVUsRUFBRSxJQUFJLEdBQUdQLGFBQWEsR0FBRyxHQUFHLENBQUM7TUFFcEQsSUFBR0MsS0FBSyxLQUFLLElBQUksRUFBRTtRQUNmTSxPQUFPLEdBQUdBLE9BQU8sQ0FBQ0EsT0FBTyxDQUFDLFFBQVEsTUFBQTdCLE1BQUEsQ0FBTXVCLEtBQUssTUFBRyxDQUFDO01BQ3JEO01BRUEsT0FBT0ksSUFBSSxDQUFDRyxLQUFLLENBQUNELE9BQU8sQ0FBQztJQUM5QjtJQUVBLE9BQU9SLE1BQU07RUFDakI7RUFFQSxPQUFPVSxlQUFlQSxDQUFDTixFQUFFLEVBQUVPLE1BQU0sRUFBRTtJQUMvQixJQUFJLENBQUM3QyxLQUFLLENBQUM4QyxhQUFhLENBQUNELE1BQU0sQ0FBQyxFQUFFO01BQzlCLElBQUlFLE1BQU0sR0FBRy9DLEtBQUssQ0FBQ2dELFNBQVMsQ0FBQ0gsTUFBTSxFQUFFLFVBQVUsQ0FBQztNQUNoRCxLQUFLLElBQUl0RCxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUd3RCxNQUFNLENBQUNsRSxNQUFNLEVBQUVVLENBQUMsRUFBRSxFQUFFO1FBQ3BDLElBQUl3RCxNQUFNLENBQUN4RCxDQUFDLENBQUMsQ0FBQytDLEVBQUUsS0FBS0EsRUFBRSxFQUFFO1VBQ3JCLE9BQU9TLE1BQU0sQ0FBQ3hELENBQUMsQ0FBQyxDQUFDMEQsUUFBUTtRQUM3QjtNQUNKO0lBQ0o7SUFFQSxPQUFPLEtBQUs7RUFDaEI7RUFFQSxPQUFPSCxhQUFhQSxDQUFDSSxHQUFHLEVBQUU7SUFDdEIsT0FBTyxPQUFPQSxHQUFHLEtBQUssV0FBVyxJQUFJQSxHQUFHLEtBQUssSUFBSSxJQUFJQSxHQUFHLENBQUN2QyxJQUFJLENBQUMsQ0FBQyxDQUFDOUIsTUFBTSxLQUFLLENBQUM7RUFDaEY7RUFFQSxPQUFPbUUsU0FBU0EsQ0FBQ0gsTUFBTSxFQUFFTSxTQUFTLEVBQUU7SUFDaEMsSUFBSUMsV0FBVyxHQUFHLEVBQUU7SUFDcEIsSUFBSUMsSUFBSSxHQUFHQyxRQUFRLENBQUNDLGNBQWMsQ0FBQ1YsTUFBTSxDQUFDO0lBQzFDLElBQUksQ0FBQzdDLEtBQUssQ0FBQ0ssTUFBTSxDQUFDZ0QsSUFBSSxDQUFDLEVBQUU7TUFDckIsSUFBSUcsU0FBUyxHQUFHSCxJQUFJLENBQUNJLHNCQUFzQixDQUFDTixTQUFTLENBQUM7TUFDdEQsS0FBSyxJQUFJNUQsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHaUUsU0FBUyxDQUFDM0UsTUFBTSxFQUFFVSxDQUFDLEVBQUUsRUFBRTtRQUN2QyxJQUFJbUUsTUFBTSxHQUFHRixTQUFTLENBQUNqRSxDQUFDLENBQUMsQ0FBQ29FLG9CQUFvQixDQUFDLE9BQU8sQ0FBQztRQUN2RCxLQUFLLElBQUlDLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBR0YsTUFBTSxDQUFDN0UsTUFBTSxFQUFFK0UsQ0FBQyxFQUFFLEVBQUU7VUFDcENSLFdBQVcsQ0FBQzNFLElBQUksQ0FBQ2lGLE1BQU0sQ0FBQ0UsQ0FBQyxDQUFDLENBQUM7UUFDL0I7TUFDSjtJQUNKO0lBRUEsT0FBT1IsV0FBVztFQUN0QjtFQUVBLE9BQU9TLGFBQWFBLENBQUN2QixFQUFFLEVBQUVXLFFBQVEsRUFBRTdCLE1BQU0sRUFBRTBDLFlBQVksRUFBRUMsU0FBUyxFQUFFO0lBQ2hFLElBQUk1RCxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUNFLE1BQU0sQ0FBQzBELFNBQVMsQ0FBQyxHQUFHQSxTQUFTLENBQUNDLFlBQVksR0FBRyxJQUFJO0lBQ3JFLElBQUlDLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQzVELE1BQU0sQ0FBQzBELFNBQVMsQ0FBQyxHQUFHQSxTQUFTLENBQUNFLEtBQUssR0FBRyxJQUFJO0lBRTVELElBQUlDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDZkEsTUFBTSxDQUFDQyxLQUFLLEdBQUcsSUFBSTtJQUNuQkQsTUFBTSxDQUFDL0QsT0FBTyxHQUFHLEVBQUU7SUFFbkIsSUFBSWYsS0FBSztJQUNULElBQUksQ0FBQyxJQUFJLENBQUNpQixNQUFNLENBQUN5RCxZQUFZLENBQUMsRUFBRTtNQUM1QjFFLEtBQUssR0FBRzBFLFlBQVk7SUFDeEIsQ0FBQyxNQUFNO01BQ0gxRSxLQUFLLEdBQUdvRCxJQUFJLENBQUNHLEtBQUssQ0FBQ0gsSUFBSSxDQUFDQyxTQUFTLENBQUNyQixNQUFNLENBQUMsQ0FBQyxDQUFDa0IsRUFBRSxDQUFDO0lBQ2xEO0lBRUEsSUFBSThCLFNBQVMsR0FBRyxLQUFLO0lBRXJCLElBQUluQixRQUFRLEtBQUtqRCxLQUFLLENBQUNLLE1BQU0sQ0FBQ2pCLEtBQUssQ0FBQyxJQUFJWSxLQUFLLENBQUM4QyxhQUFhLENBQUMxRCxLQUFLLENBQUNpRixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtNQUM1RUgsTUFBTSxDQUFDL0QsT0FBTyxHQUFHLENBQUNILEtBQUssQ0FBQ0ssTUFBTSxDQUFDRixPQUFPLENBQUMsR0FBR0EsT0FBTyxHQUFHLHdCQUF3QjtNQUM1RWlFLFNBQVMsR0FBRyxJQUFJO0lBQ3BCLENBQUMsTUFBTTtNQUNIRixNQUFNLENBQUMvRCxPQUFPLEdBQUcsRUFBRTtJQUN2QjtJQUVBLElBQUksQ0FBQ2lFLFNBQVMsSUFBSSxDQUFDcEUsS0FBSyxDQUFDSyxNQUFNLENBQUM0RCxLQUFLLENBQUMsSUFBSSxDQUFDakUsS0FBSyxDQUFDSyxNQUFNLENBQUNqQixLQUFLLENBQUMsRUFBRTtNQUM1RGdGLFNBQVMsR0FBR3BFLEtBQUssQ0FBQ0ssTUFBTSxDQUFDakIsS0FBSyxDQUFDaUYsUUFBUSxDQUFDLENBQUMsQ0FBQ0MsS0FBSyxDQUFDTCxLQUFLLENBQUMsQ0FBQztNQUN2RCxJQUFJRyxTQUFTLEVBQUU7UUFDWEYsTUFBTSxDQUFDL0QsT0FBTyxHQUFHLENBQUNILEtBQUssQ0FBQ0ssTUFBTSxDQUFDRixPQUFPLENBQUMsR0FBR0EsT0FBTyxHQUFHLHVCQUF1QjtNQUMvRTtJQUNKO0lBRUErRCxNQUFNLENBQUNDLEtBQUssR0FBRyxDQUFDQyxTQUFTO0lBQ3pCLE9BQU9GLE1BQU07RUFDakI7RUFFQSxPQUFPSyxxQkFBcUJBLENBQUNDLEtBQUssRUFBRUMsU0FBUyxFQUFFQyxZQUFZLEVBQUU7SUFDekQsSUFBRyxJQUFJLENBQUNyRSxNQUFNLENBQUNtRSxLQUFLLENBQUNHLFVBQVUsQ0FBQyxFQUFFO01BQzlCLE9BQU9ELFlBQVk7SUFDdkI7SUFFQSxPQUFPLElBQUksQ0FBQ3JFLE1BQU0sQ0FBQ21FLEtBQUssQ0FBQ0csVUFBVSxDQUFDRixTQUFTLENBQUMsQ0FBQyxHQUFHQyxZQUFZLEdBQUdGLEtBQUssQ0FBQ0csVUFBVSxDQUFDRixTQUFTLENBQUM7RUFDaEc7RUFFQSxPQUFPRywwQkFBMEJBLENBQUNKLEtBQUssRUFBRUMsU0FBUyxFQUFFQyxZQUFZLEVBQUU7SUFDOUQsSUFBRyxJQUFJLENBQUNyRSxNQUFNLENBQUNtRSxLQUFLLENBQUNHLFVBQVUsQ0FBQyxJQUFJLElBQUksQ0FBQ3RFLE1BQU0sQ0FBQ21FLEtBQUssQ0FBQ0csVUFBVSxDQUFDRSxLQUFLLENBQUMsRUFBRTtNQUNyRSxPQUFPSCxZQUFZO0lBQ3ZCO0lBRUEsT0FBTyxJQUFJLENBQUNyRSxNQUFNLENBQUNtRSxLQUFLLENBQUNHLFVBQVUsQ0FBQ0UsS0FBSyxDQUFDSixTQUFTLENBQUMsQ0FBQyxHQUFHQyxZQUFZLEdBQUdGLEtBQUssQ0FBQ0csVUFBVSxDQUFDRSxLQUFLLENBQUNKLFNBQVMsQ0FBQztFQUM1RztFQUVBLE9BQU9LLGdCQUFnQkEsQ0FBQ0MsV0FBVyxFQUFFQyxpQkFBaUIsRUFBRUMsdUJBQXVCLEVBQUVDLEtBQUssRUFBRTtJQUNwRixJQUFJQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0lBQ2hCQSxPQUFPLENBQUNDLFFBQVEsR0FBR0osaUJBQWlCO0lBQ3BDRyxPQUFPLENBQUNKLFdBQVcsR0FBR0EsV0FBVztJQUNqQ0ksT0FBTyxDQUFDRSxnQkFBZ0IsR0FBR0osdUJBQXVCO0lBQ2xERSxPQUFPLENBQUNELEtBQUssR0FBRyxPQUFPQSxLQUFLLEtBQUssV0FBVyxJQUFJQSxLQUFLLEtBQUssSUFBSSxJQUFJQSxLQUFLO0lBRXZFLE9BQU8xQyxJQUFJLENBQUNDLFNBQVMsQ0FBQzBDLE9BQU8sQ0FBQztFQUNsQztFQW9DQSxPQUFPRyxZQUFZQSxDQUFDWCxVQUFVLEVBQUU1QixNQUFNLEVBQUU7SUFDcEMsSUFBSXdDLFNBQVMsR0FBRyxDQUFDLENBQUM7SUFDbEIsSUFBSUMsVUFBVSxHQUFHLENBQUN4RixLQUFLLENBQUNLLE1BQU0sQ0FBQ3NFLFVBQVUsQ0FBQyxJQUFJLENBQUMzRSxLQUFLLENBQUNLLE1BQU0sQ0FBQ3NFLFVBQVUsQ0FBQ2MsYUFBYSxDQUFDLEdBQUdkLFVBQVUsQ0FBQ2MsYUFBYSxHQUFHLENBQUM7SUFDcEhGLFNBQVMsQ0FBQ0csWUFBWSxHQUFHRixVQUFVO0lBQ25DRCxTQUFTLENBQUNJLElBQUksR0FBRyxFQUFFO0lBQ25CLElBQUlDLE9BQU8sR0FBRyxJQUFJLENBQUNDLFNBQVMsQ0FBQyxDQUFDO0lBRTlCLEtBQUssSUFBSXRHLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBR3dELE1BQU0sQ0FBQ2xFLE1BQU0sRUFBRVUsQ0FBQyxFQUFFLEVBQUU7TUFDcEMsSUFBSWlGLEtBQUssR0FBR3pCLE1BQU0sQ0FBQ3hELENBQUMsQ0FBQztNQUNyQixJQUFJdUcsT0FBTyxHQUFHLElBQUksQ0FBQ0MsZUFBZSxDQUFDdkIsS0FBSyxDQUFDO01BRXpDLElBQUksQ0FBQyxJQUFJLENBQUN3QixzQkFBc0IsQ0FBQ0osT0FBTyxFQUFFRSxPQUFPLEVBQUVOLFVBQVUsQ0FBQyxFQUFFO1FBQzVELElBQUksQ0FBQ1Msa0JBQWtCLENBQUNMLE9BQU8sRUFBRUosVUFBVSxDQUFDO1FBQzVDSSxPQUFPLEdBQUcsSUFBSSxDQUFDQyxTQUFTLENBQUMsQ0FBQztNQUM5QjtNQUVBLElBQUlELE9BQU8sQ0FBQzdDLE1BQU0sQ0FBQ2xFLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDN0IwRyxTQUFTLENBQUNJLElBQUksQ0FBQ2xILElBQUksQ0FBQ21ILE9BQU8sQ0FBQztNQUNoQztNQUVBQSxPQUFPLENBQUM3QyxNQUFNLENBQUN0RSxJQUFJLENBQUMrRixLQUFLLENBQUM7TUFDMUJvQixPQUFPLENBQUNNLFNBQVMsSUFBSUosT0FBTztJQUNoQztJQUVBLE9BQU9QLFNBQVM7RUFDcEI7RUFFQSxPQUFPWSx5QkFBeUJBLENBQUNDLFVBQVUsRUFBRTlELEVBQUUsRUFBRW9DLFlBQVksRUFBRTtJQUMzRCxJQUFJO01BQ0EsSUFBSTBCLFVBQVUsS0FBSyxPQUFPLElBQUlBLFVBQVUsS0FBSyxLQUFLLEVBQUU7UUFDaEQsT0FBTyxLQUFLO01BQ2hCLENBQUMsTUFBTSxJQUFJQSxVQUFVLEtBQUssTUFBTSxJQUFJQSxVQUFVLEtBQUssSUFBSSxFQUFFO1FBQ3JELE9BQU8sSUFBSTtNQUNmLENBQUMsTUFBTSxJQUFJLENBQUNwRyxLQUFLLENBQUNLLE1BQU0sQ0FBQytGLFVBQVUsQ0FBQyxFQUFFO1FBQ2xDLE9BQU9DLGtCQUFTLENBQUNDLGFBQWEsSUFBQXpGLE1BQUEsQ0FBSXlCLEVBQUUsb0JBQWlCOEQsVUFBVSxDQUFDO01BQ3BFO01BRUEsT0FBTyxDQUFDLElBQUksQ0FBQy9GLE1BQU0sQ0FBQ3FFLFlBQVksQ0FBQyxHQUFHQSxZQUFZLEdBQUcsS0FBSztJQUM1RCxDQUFDLENBQUMsT0FBTzlHLENBQUMsRUFBRTtNQUNSMkksT0FBTyxDQUFDQyxLQUFLLENBQUMseUNBQXlDLEdBQUdKLFVBQVUsR0FBRyxVQUFVLEdBQUc5RCxFQUFFLENBQUM7TUFDdkYsTUFBTTFFLENBQUM7SUFDWDtFQUNKO0VBRUEsT0FBTzZJLGtCQUFrQkEsQ0FBQ0MsbUJBQW1CLEVBQUVDLFFBQVEsRUFBYTtJQUNoRSxJQUFJM0csS0FBSyxDQUFDSyxNQUFNLENBQUNxRyxtQkFBbUIsQ0FBQyxJQUFJMUcsS0FBSyxDQUFDSyxNQUFNLENBQUNxRyxtQkFBbUIsQ0FBQ0UsU0FBUyxDQUFDLEVBQUU7TUFDbEYsT0FBTyxDQUFDNUcsS0FBSyxDQUFDSyxNQUFNLENBQUNzRyxRQUFRLENBQUMsR0FBR0EsUUFBUSxHQUFHLFFBQVEsR0FBRyxLQUFLO0lBQ2hFO0lBRUEsSUFBSUUsS0FBSyxHQUFHLEVBQUU7SUFBQyxTQUFBQyxJQUFBLEdBQUFsSSxTQUFBLENBQUFDLE1BQUEsRUFMeUNrRSxNQUFNLE9BQUFnRSxLQUFBLENBQUFELElBQUEsT0FBQUEsSUFBQSxXQUFBRSxJQUFBLE1BQUFBLElBQUEsR0FBQUYsSUFBQSxFQUFBRSxJQUFBO01BQU5qRSxNQUFNLENBQUFpRSxJQUFBLFFBQUFwSSxTQUFBLENBQUFvSSxJQUFBO0lBQUE7SUFNOUQsS0FBSyxJQUFJekgsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHd0QsTUFBTSxDQUFDbEUsTUFBTSxFQUFFVSxDQUFDLEVBQUUsRUFBRTtNQUNwQyxJQUFJLENBQUNTLEtBQUssQ0FBQ0ssTUFBTSxDQUFDMEMsTUFBTSxDQUFDeEQsQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUMxQnNILEtBQUssSUFBSTlELE1BQU0sQ0FBQ3hELENBQUMsQ0FBQyxDQUFDb0IsSUFBSSxDQUFDLENBQUM7UUFDekJrRyxLQUFLLElBQUksR0FBRztNQUNoQjtJQUNKO0lBRUFBLEtBQUssR0FBR0EsS0FBSyxDQUFDbEcsSUFBSSxDQUFDLENBQUM7SUFDcEIsSUFBSXNHLE1BQU0sR0FBR2pILEtBQUssQ0FBQ0ssTUFBTSxDQUFDc0csUUFBUSxDQUFDLEdBQUcsRUFBRSxHQUFHLEtBQUs7SUFDaEQsT0FBTyxDQUFDM0csS0FBSyxDQUFDSyxNQUFNLENBQUNzRyxRQUFRLENBQUMsR0FBRyxFQUFFLEdBQUdBLFFBQVEsS0FBS0UsS0FBSyxDQUFDaEksTUFBTSxHQUFHLENBQUMsR0FBSW9JLE1BQU0sR0FBR0osS0FBSyxHQUFJLEVBQUUsQ0FBQztFQUNoRztFQUVBLE9BQU9LLGNBQWNBLENBQUNDLEtBQUssRUFBRTtJQUN6QixJQUFJQyxPQUFPLEdBQUc5RCxRQUFRLENBQUNHLHNCQUFzQixDQUFDLFFBQVEsQ0FBQztJQUN2RCxLQUFLLElBQUlsRSxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUc2SCxPQUFPLENBQUN2SSxNQUFNLEVBQUVVLENBQUMsRUFBRSxFQUFFO01BQ3JDNkgsT0FBTyxDQUFDN0gsQ0FBQyxDQUFDLENBQUNzRixLQUFLLENBQUNzQyxLQUFLLEdBQUdBLEtBQUs7SUFDbEM7RUFDSjtFQUVBLE9BQU9FLFNBQVNBLENBQUNDLElBQUksRUFBRTtJQUNuQixJQUFJLENBQUN0SCxLQUFLLENBQUNLLE1BQU0sQ0FBQ2lILElBQUksQ0FBQyxFQUFFO01BQ3JCLElBQUlDLE1BQU0sR0FBR2pFLFFBQVEsQ0FBQ0MsY0FBYyxDQUFDLGNBQWMsQ0FBQztNQUNwRGdFLE1BQU0sQ0FBQ0MsU0FBUyxHQUFHRixJQUFJO0lBQzNCO0VBQ0o7RUFXQUcsUUFBUUEsQ0FBQ3ZILE9BQU8sRUFBRXdILE9BQU8sRUFBRUMsR0FBRyxFQUFFO0lBQzVCLElBQUksQ0FBQ0YsUUFBUSxDQUFDdkgsT0FBTyxFQUFFd0gsT0FBTyxFQUFFQyxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUM7RUFDMUQ7RUFFQUYsUUFBUUEsQ0FBQ3ZILE9BQU8sRUFBRXdILE9BQU8sRUFBRUMsR0FBRyxFQUFFQyxlQUFlLEVBQUVDLGFBQWEsRUFBRTtJQUM1RCxJQUFJLENBQUNKLFFBQVEsQ0FBQ3ZILE9BQU8sRUFBRXdILE9BQU8sRUFBRUMsR0FBRyxFQUFFQyxlQUFlLEVBQUVDLGFBQWEsRUFBRSxJQUFJLENBQUM7RUFDOUU7RUFFQSxPQUFPQyxVQUFVQSxDQUFDakcsSUFBSSxFQUFFa0csVUFBVSxFQUFFQyxXQUFXLEVBQUVDLFNBQVMsRUFBRTtJQUN4RCxJQUFJQyxJQUFJLEdBQUdyRyxJQUFJLENBQUNzRyxXQUFXLENBQUMsQ0FBQyxHQUFHSixVQUFVO0lBQzFDLElBQUlLLEdBQUcsR0FBR3ZHLElBQUksQ0FBQ3dHLE9BQU8sQ0FBQyxDQUFDLEdBQUdKLFNBQVM7SUFDcEMsSUFBSUssS0FBSyxHQUFHekcsSUFBSSxDQUFDMEcsUUFBUSxDQUFDLENBQUMsR0FBR1AsV0FBVztJQUV6QyxPQUFPLElBQUlsRyxJQUFJLENBQUNvRyxJQUFJLEVBQUVJLEtBQUssRUFBRUYsR0FBRyxDQUFDO0VBQ3JDO0VBRUFJLFdBQVdBLENBQUN0SSxPQUFPLEVBQUV3SCxPQUFPLEVBQUVlLE9BQU8sRUFBRVYsVUFBVSxFQUFFQyxXQUFXLEVBQUVDLFNBQVMsRUFBRVMsZ0JBQWdCLEVBQUVDLFdBQVcsRUFBRTtJQUN0RyxJQUFJQyxTQUFTLEdBQUcxSSxPQUFPLENBQUMySSxLQUFLLENBQUNGLFdBQVcsQ0FBQztJQUMxQyxJQUFJRyxRQUFRLEdBQUdGLFNBQVM7SUFDeEIsSUFBSTVJLEtBQUssQ0FBQ0ssTUFBTSxDQUFDdUksU0FBUyxDQUFDLElBQUlBLFNBQVMsQ0FBQ0csT0FBTyxDQUFDLENBQUMsS0FBS04sT0FBTyxDQUFDTSxPQUFPLENBQUMsQ0FBQyxFQUFFO01BQ3RFN0ksT0FBTyxDQUFDSyxRQUFRLENBQUE1QixhQUFBLENBQUFBLGFBQUEsS0FBTXVCLE9BQU8sQ0FBQzJJLEtBQUs7UUFBRSxDQUFDRixXQUFXLEdBQUdGO01BQU8sSUFBSSxNQUFNO1FBQ2pFLElBQUksQ0FBQ3pJLEtBQUssQ0FBQ0ssTUFBTSxDQUFDeUksUUFBUSxDQUFDLElBQUksQ0FBQzlJLEtBQUssQ0FBQ0ssTUFBTSxDQUFDSCxPQUFPLENBQUMySSxLQUFLLENBQUN2RyxFQUFFLENBQUMsRUFBRTtVQUM1RCxJQUFJMEcsWUFBWSxHQUFHaEosS0FBSyxDQUFDOEgsVUFBVSxDQUFDVyxPQUFPLEVBQUVWLFVBQVUsRUFBRUMsV0FBVyxFQUFFQyxTQUFTLENBQUM7VUFDaEZQLE9BQU8sQ0FBQ3VCLE9BQU8sQ0FBQ0MsUUFBUSxDQUFDUixnQkFBZ0IsRUFBRU0sWUFBWSxDQUFDO1FBQzVELENBQUMsTUFDSSxJQUFJaEosS0FBSyxDQUFDSyxNQUFNLENBQUNILE9BQU8sQ0FBQzJJLEtBQUssQ0FBQ3ZHLEVBQUUsQ0FBQyxFQUFFO1VBQ3JDLElBQUkwRyxZQUFZLEdBQUdoSixLQUFLLENBQUM4SCxVQUFVLENBQUNXLE9BQU8sRUFBRVYsVUFBVSxFQUFFQyxXQUFXLEVBQUVDLFNBQVMsQ0FBQztVQUNoRlAsT0FBTyxDQUFDdUIsT0FBTyxDQUFDQyxRQUFRLENBQUNSLGdCQUFnQixFQUFFTSxZQUFZLENBQUM7UUFDNUQ7TUFDSixDQUFDLENBQUM7SUFDTjtFQUNKO0VBRUEsT0FBT0csT0FBT0EsQ0FBQ0MsSUFBSSxFQUFFO0lBQ2pCO0lBQ0EsSUFBSUMsSUFBSSxHQUFHRCxJQUFJLENBQUMvRSxRQUFRLENBQUMsQ0FBQyxDQUFDQyxLQUFLLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxDQUFDLENBQUM7O0lBRS9EO0lBQ0EsT0FBTytFLElBQUksQ0FBQ3BJLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQ3FJLEdBQUcsQ0FBQyxVQUFTQyxHQUFHLEVBQUU7TUFDckM7TUFDQSxPQUFPQSxHQUFHLENBQUM3RyxPQUFPLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDL0IsSUFBSSxDQUFDLENBQUM7SUFDL0MsQ0FBQyxDQUFDLENBQUNyQyxNQUFNLENBQUMsVUFBU2lMLEdBQUcsRUFBRTtNQUNwQjtNQUNBLE9BQU9BLEdBQUc7SUFDZCxDQUFDLENBQUM7RUFDTjtFQXdDQSxPQUFPQyxZQUFZQSxDQUFDQyxNQUFNLEVBQUVDLE1BQU0sRUFBRTtJQUNoQyxJQUFHLENBQUNBLE1BQU0sRUFBRTtNQUNSLE9BQU9ELE1BQU07SUFDakI7SUFFQSxJQUFJRSxVQUFVLEdBQUd6TCxNQUFNLENBQUMwTCxtQkFBbUIsQ0FBQ0gsTUFBTSxDQUFDO0lBQ25ELElBQUl2RixNQUFNLEdBQUcxQixJQUFJLENBQUNHLEtBQUssQ0FBQ0gsSUFBSSxDQUFDQyxTQUFTLENBQUNpSCxNQUFNLENBQUMsQ0FBQztJQUMvQyxLQUFLLE1BQU1HLFFBQVEsSUFBSUYsVUFBVSxFQUFFO01BQy9CekYsTUFBTSxDQUFDMkYsUUFBUSxDQUFDLEdBQUdDLDJCQUFrQixDQUFDQyxZQUFZLENBQUNOLE1BQU0sQ0FBQ0ksUUFBUSxDQUFDLENBQUMsR0FDaEU3SixLQUFLLENBQUNtRyx5QkFBeUIsQ0FBQ3NELE1BQU0sQ0FBQ0ksUUFBUSxDQUFDLEVBQUVBLFFBQVEsQ0FBQyxHQUFHSixNQUFNLENBQUNJLFFBQVEsQ0FBQztJQUN0RjtJQUVBLE9BQU8zRixNQUFNO0VBQ2pCO0VBNENBLE9BQU84RixjQUFjQSxDQUFDakosSUFBSSxFQUFFO0lBQ3hCQSxJQUFJLEdBQUdBLElBQUksQ0FBQ2tKLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBRXhCLElBQUlDLElBQUksR0FBRyxDQUFDO0lBQ1osS0FBSyxJQUFJM0ssQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHd0IsSUFBSSxDQUFDbEMsTUFBTSxFQUFFVSxDQUFDLEVBQUUsRUFBRTtNQUNsQzJLLElBQUksR0FBRyxFQUFFLEdBQUdBLElBQUksR0FBR25KLElBQUksQ0FBQ29KLFVBQVUsQ0FBQzVLLENBQUMsQ0FBQztJQUN6QztJQUNBLElBQUk2QyxLQUFLLEdBQUdnSSxJQUFJLENBQUNDLEdBQUcsQ0FBQ0gsSUFBSSxHQUFHbkssTUFBTSxDQUFDbEIsTUFBTSxDQUFDO0lBQzFDLE9BQU9rQixNQUFNLENBQUNxQyxLQUFLLENBQUM7RUFDeEI7RUFFQSxPQUFPa0ksY0FBY0EsQ0FBQ0MsY0FBYyxFQUFFO0lBQ2xDLE1BQU0xSSxJQUFJLEdBQUcsSUFBSUMsSUFBSSxDQUFDeUksY0FBYyxDQUFDO0lBRXJDLE1BQU1DLFVBQVUsR0FBRyxDQUNmLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFDMUIsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUMxQixLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQzdCO0lBRUQsTUFBTUMsVUFBVSxHQUFHNUksSUFBSSxDQUFDMEcsUUFBUSxDQUFDLENBQUM7SUFDbEMsTUFBTUwsSUFBSSxHQUFHckcsSUFBSSxDQUFDc0csV0FBVyxDQUFDLENBQUM7SUFFL0IsT0FBT3RHLElBQUksQ0FBQ3dHLE9BQU8sQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHbUMsVUFBVSxDQUFDQyxVQUFVLENBQUMsR0FBRyxHQUFHLEdBQUd2QyxJQUFJLEdBQUcsS0FBSyxHQUFHckcsSUFBSSxDQUFDNkksUUFBUSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUc3SSxJQUFJLENBQUM4SSxVQUFVLENBQUMsQ0FBQztFQUN6SDtFQUVBLE9BQU9DLG9CQUFvQkEsQ0FBQ0MsR0FBRyxFQUFFQyxJQUFJLEVBQUUxTCxLQUFLLEVBQUU7SUFDMUMsTUFBTWpCLElBQUksR0FBRzJNLElBQUksQ0FBQzdKLEtBQUssQ0FBQyxHQUFHLENBQUM7SUFDNUIsSUFBSWdJLE9BQU8sR0FBRzRCLEdBQUc7SUFFakIsS0FBSyxJQUFJdEwsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHcEIsSUFBSSxDQUFDVSxNQUFNLEdBQUcsQ0FBQyxFQUFFVSxDQUFDLEVBQUUsRUFBRTtNQUN0QyxJQUFJLENBQUMwSixPQUFPLENBQUM5SyxJQUFJLENBQUNvQixDQUFDLENBQUMsQ0FBQyxFQUFFO1FBQ25CMEosT0FBTyxDQUFDOUssSUFBSSxDQUFDb0IsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7TUFDekIsQ0FBQyxNQUFNO1FBQ0gsSUFBRyxPQUFPMEosT0FBTyxDQUFDOUssSUFBSSxDQUFDb0IsQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRLEVBQUU7VUFDckMsTUFBTSxJQUFJd0wsS0FBSyxDQUFDLDRDQUE0QyxHQUFHRCxJQUFJLEdBQUcsT0FBTyxHQUFHM00sSUFBSSxDQUFDb0IsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQ2xHO01BQ0o7TUFFQTBKLE9BQU8sR0FBR0EsT0FBTyxDQUFDOUssSUFBSSxDQUFDb0IsQ0FBQyxDQUFDLENBQUM7SUFDOUI7SUFFQTBKLE9BQU8sQ0FBQzlLLElBQUksQ0FBQ0EsSUFBSSxDQUFDVSxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBR08sS0FBSztFQUMxQztFQUVBLE9BQU80TCxrQkFBa0JBLENBQUNILEdBQUcsRUFBRUMsSUFBSSxFQUFFO0lBQ2pDLE1BQU0zTSxJQUFJLEdBQUcyTSxJQUFJLENBQUM3SixLQUFLLENBQUMsR0FBRyxDQUFDO0lBQzVCLElBQUlnSSxPQUFPLEdBQUc0QixHQUFHO0lBRWpCLEtBQUssSUFBSXRMLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBR3BCLElBQUksQ0FBQ1UsTUFBTSxHQUFHLENBQUMsRUFBRVUsQ0FBQyxFQUFFLEVBQUU7TUFDdEMsSUFBSSxDQUFDMEosT0FBTyxDQUFDOUssSUFBSSxDQUFDb0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxPQUFPMEosT0FBTyxDQUFDOUssSUFBSSxDQUFDb0IsQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRLEVBQUU7UUFDM0Q7TUFDSjtNQUVBMEosT0FBTyxHQUFHQSxPQUFPLENBQUM5SyxJQUFJLENBQUNvQixDQUFDLENBQUMsQ0FBQztJQUM5QjtJQUVBLE9BQU8wSixPQUFPLENBQUM5SyxJQUFJLENBQUNBLElBQUksQ0FBQ1UsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQ3pDO0VBRUEsT0FBT29NLFNBQVNBLENBQUNDLElBQUksRUFBRTtJQUNuQixJQUFJLENBQUNBLElBQUksRUFBRSxPQUFPLEVBQUU7SUFFcEIsTUFBTUMsSUFBSSxHQUFHN0gsUUFBUSxDQUFDOEgsYUFBYSxDQUFDLEtBQUssQ0FBQztJQUMxQ0QsSUFBSSxDQUFDM0QsU0FBUyxHQUFHMEQsSUFBSTtJQUVyQixPQUFPQyxJQUFJLENBQUNFLFdBQVcsQ0FDbEIzSSxPQUFPLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUNwQi9CLElBQUksQ0FBQyxDQUFDO0VBQ2Y7QUFDSjtBQUFDMkssT0FBQSxDQUFBeE4sT0FBQSxHQUFBa0MsS0FBQTtBQUFBckMsTUFBQSxHQTdmb0JxQyxLQUFLO0FBQUFqQixlQUFBLENBQUxpQixLQUFLLDBCQUlRLHVFQUF1RTtBQUFBakIsZUFBQSxDQUpwRmlCLEtBQUssZ0JBdUNEdUwsQ0FBQyxJQUFLO0VBQ3ZCLElBQUksT0FBT0EsQ0FBQyxLQUFLLFFBQVEsRUFBRSxPQUFPLEVBQUU7RUFDcEMsT0FBT0EsQ0FBQyxDQUFDQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUNDLFdBQVcsQ0FBQyxDQUFDLEdBQUdGLENBQUMsQ0FBQ0csS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNqRCxDQUFDO0FBQUEzTSxlQUFBLENBMUNnQmlCLEtBQUsscUJBa0xJd0UsS0FBSyxJQUFLO0VBQ2hDLE9BQU8sQ0FBQ3hFLE1BQUssQ0FBQ0ssTUFBTSxDQUFDbUUsS0FBSyxDQUFDRyxVQUFVLENBQUMsSUFBSSxDQUFDM0UsTUFBSyxDQUFDSyxNQUFNLENBQUNtRSxLQUFLLENBQUNHLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUNoRmdILFFBQVEsQ0FBQyxPQUFPbkgsS0FBSyxDQUFDRyxVQUFVLENBQUNtQixPQUFPLEtBQUssUUFBUSxHQUNqRE8sa0JBQVMsQ0FBQ0MsYUFBYSxDQUFDLFlBQVksR0FBRzlCLEtBQUssQ0FBQ2xDLEVBQUUsRUFBRWtDLEtBQUssQ0FBQ0csVUFBVSxDQUFDbUIsT0FBTyxDQUFDLEdBQzFFdEIsS0FBSyxDQUFDRyxVQUFVLENBQUNtQixPQUFPLENBQUMsR0FBRyxDQUFDO0FBQ3pDLENBQUM7QUFBQS9HLGVBQUEsQ0F2TGdCaUIsS0FBSyxVQXlMUFosS0FBSyxJQUFLO0VBQ3JCLE9BQU8wSywyQkFBa0IsQ0FBQ0MsWUFBWSxDQUFDM0ssS0FBSyxDQUFDLEdBQ3pDaUgsa0JBQVMsQ0FBQ0MsYUFBYSxDQUFDLFdBQVcsR0FBRzhELElBQUksQ0FBQ3dCLE1BQU0sQ0FBQyxDQUFDLEVBQUV4TSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxHQUN0RkEsS0FBSztBQUNqQixDQUFDO0FBQUFMLGVBQUEsQ0E3TGdCaUIsS0FBSyxlQStMSCxNQUFNO0VBQ3JCLElBQUk2TCxHQUFHLEdBQUcsQ0FBQyxDQUFDO0VBQ1pBLEdBQUcsQ0FBQzlJLE1BQU0sR0FBRyxFQUFFO0VBQ2Y4SSxHQUFHLENBQUMzRixTQUFTLEdBQUcsQ0FBQztFQUVqQixPQUFPMkYsR0FBRztBQUNkLENBQUM7QUFBQTlNLGVBQUEsQ0FyTWdCaUIsS0FBSyx3QkF1TU0sQ0FBQzZMLEdBQUcsRUFBRUMsR0FBRyxLQUFLO0VBQ3RDLEtBQUssSUFBSXZNLENBQUMsR0FBR3NNLEdBQUcsQ0FBQzNGLFNBQVMsRUFBRTNHLENBQUMsR0FBR3VNLEdBQUcsRUFBRXZNLENBQUMsRUFBRSxFQUFFO0lBQ3RDLElBQUlpRixLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBQ2RBLEtBQUssQ0FBQ3VILFNBQVMsR0FBRyxPQUFPO0lBQ3pCdkgsS0FBSyxDQUFDbEMsRUFBRSxHQUFHLHlCQUF5QixHQUFHL0MsQ0FBQztJQUN4Q3NNLEdBQUcsQ0FBQzlJLE1BQU0sQ0FBQ3RFLElBQUksQ0FBQytGLEtBQUssQ0FBQztFQUMxQjtBQUNKLENBQUM7QUFBQXpGLGVBQUEsQ0E5TWdCaUIsS0FBSyw0QkFnTlUsQ0FBQzZMLEdBQUcsRUFBRS9GLE9BQU8sRUFBRWdHLEdBQUcsS0FBSztFQUNuRCxPQUFPaEcsT0FBTyxJQUFJZ0csR0FBRyxHQUFHRCxHQUFHLENBQUMzRixTQUFTO0FBQ3pDLENBQUM7QUFBQW5ILGVBQUEsQ0FsTmdCaUIsS0FBSywwQkF3VlNvRyxVQUFVLElBQUs7RUFDMUMsSUFBSTBFLElBQUksR0FBRyxDQUFDLENBQUM7RUFFYixJQUFHLENBQUNuTixNQUFBLENBQUswQyxNQUFNLENBQUMrRixVQUFVLENBQUMsRUFBRTtJQUN6QixJQUFJNEYsTUFBTSxHQUFHNUYsVUFBVSxDQUFDbkYsS0FBSyxDQUFDLEdBQUcsQ0FBQztJQUNsQzZKLElBQUksQ0FBQ2pCLFFBQVEsR0FBR21DLE1BQU0sQ0FBQ0EsTUFBTSxDQUFDbk4sTUFBTSxHQUFHLENBQUMsQ0FBQztJQUV6QyxJQUFJb04sWUFBWSxHQUFHN0YsVUFBVSxDQUFDOEYsU0FBUyxDQUFDLENBQUMsRUFBRTlGLFVBQVUsQ0FBQytGLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNuRXJCLElBQUksQ0FBQ3NCLFdBQVcsR0FBRy9GLGtCQUFTLENBQUNDLGFBQWEsSUFBQXpGLE1BQUEsQ0FBSXVKLElBQUksQ0FBQ3dCLE1BQU0sQ0FBQyxDQUFDLDhCQUEyQkssWUFBWSxDQUFDO0lBQ25HLEtBQUssSUFBSTFNLENBQUMsR0FBQyxDQUFDLEVBQUNBLENBQUMsR0FBQ3lNLE1BQU0sQ0FBQ25OLE1BQU0sR0FBRyxDQUFDLEVBQUNVLENBQUMsRUFBRSxFQUFFO01BQ2xDLElBQUk4TSxLQUFLLEdBQUdMLE1BQU0sQ0FBQ3pNLENBQUMsQ0FBQztNQUNyQixJQUFHLENBQUM1QixNQUFBLENBQUswQyxNQUFNLENBQUN5SyxJQUFJLENBQUNzQixXQUFXLENBQUMsRUFBRTtRQUMvQixJQUFJRSxNQUFNLEdBQUd4QixJQUFJLENBQUNzQixXQUFXLENBQUNDLEtBQUssQ0FBQztRQUNwQyxJQUFJLENBQUNyTSxNQUFLLENBQUNLLE1BQU0sQ0FBQ2lNLE1BQU0sQ0FBQyxFQUFFO1VBQ3ZCLElBQUksT0FBT0EsTUFBTSxLQUFLLFVBQVUsRUFBRTtZQUM5QnhCLElBQUksQ0FBQ3NCLFdBQVcsR0FBR0UsTUFBTSxDQUFDLENBQUM7VUFDL0IsQ0FBQyxNQUFNO1lBQ0h4QixJQUFJLENBQUNzQixXQUFXLEdBQUdFLE1BQU07VUFDN0I7UUFDSjtNQUNKLENBQUMsTUFBTTtRQUNIO01BQ0o7SUFDSjtFQUNKO0VBRUEsT0FBT3hCLElBQUk7QUFDZixDQUFDO0FBQUEvTCxlQUFBLENBblhnQmlCLEtBQUssaUJBcVhELENBQUN1TSxZQUFZLEVBQUVySyxNQUFNLEtBQUs7RUFDM0MsSUFBSXNLLFdBQVcsR0FBR3hNLE1BQUssQ0FBQ3VFLHFCQUFxQixDQUFDckMsTUFBTSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUM7RUFDcEUsSUFBR3NLLFdBQVcsRUFBRTtJQUNaLE9BQU83TyxNQUFBLENBQUs2TCxZQUFZLENBQUNnRCxXQUFXLEVBQUVELFlBQVksQ0FBQztFQUN2RDtFQUVBLE9BQU9BLFlBQVk7QUFDdkIsQ0FBQztBQUFBeE4sZUFBQSxDQTVYZ0JpQixLQUFLLHlCQTZZTyxnQkFBT3BDLENBQUMsRUFBRTZPLE1BQU0sRUFBdUI7RUFBQSxJQUFyQkMsU0FBUyxHQUFBOU4sU0FBQSxDQUFBQyxNQUFBLFFBQUFELFNBQUEsUUFBQXlELFNBQUEsR0FBQXpELFNBQUEsTUFBRyxJQUFJO0VBQzNELElBQUkrTixXQUFXO0VBRWYsSUFBRy9PLENBQUMsQ0FBQ2dQLElBQUksRUFBRTtJQUNQLElBQUlDLElBQUksR0FBRyxNQUFNalAsQ0FBQyxDQUFDZ1AsSUFBSSxDQUFDLENBQUM7SUFDekJELFdBQVcsR0FBR0UsSUFBSSxDQUFDMU0sT0FBTztJQUMxQixJQUFHLENBQUN3TSxXQUFXLEVBQUU7TUFDYkEsV0FBVyxHQUFHM00sTUFBSyxDQUFDOE0sb0JBQW9CO0lBQzVDO0VBQ0osQ0FBQyxNQUFNO0lBQ0hILFdBQVcsR0FBRzNNLE1BQUssQ0FBQzhNLG9CQUFvQjtFQUM1QztFQUVBLElBQUkzTSxPQUFPLEdBQUc7SUFDVkcsV0FBVyxFQUFFLE9BQU87SUFDcEJILE9BQU8sRUFBRXdNO0VBQ2IsQ0FBQztFQUVELElBQUlJLEtBQUssR0FBRyxJQUFJQyxjQUFLLENBQUNsRCwyQkFBa0IsRUFBRTJDLE1BQU0sRUFBRXRNLE9BQU8sQ0FBQztFQUMxRDhNLG1CQUFZLENBQUNDLFNBQVMsQ0FBQ0Msa0JBQVMsQ0FBQ0MsZUFBZSxFQUFFTCxLQUFLLENBQUM7RUFFeEQsSUFBR0wsU0FBUyxLQUFLLElBQUksRUFBRTtJQUNuQkssS0FBSyxHQUFHLElBQUlDLGNBQUssQ0FBQ04sU0FBUyxFQUFFRCxNQUFNLEVBQUV0TSxPQUFPLENBQUM7SUFDN0M4TSxtQkFBWSxDQUFDQyxTQUFTLENBQUNDLGtCQUFTLENBQUNDLGVBQWUsRUFBRUwsS0FBSyxDQUFDO0VBQzVEO0FBQ0osQ0FBQztBQUFBaE8sZUFBQSxDQXRhZ0JpQixLQUFLLCtCQXdhYSxVQUFDeU0sTUFBTSxFQUF1QjtFQUFBLElBQXJCQyxTQUFTLEdBQUE5TixTQUFBLENBQUFDLE1BQUEsUUFBQUQsU0FBQSxRQUFBeUQsU0FBQSxHQUFBekQsU0FBQSxNQUFHLElBQUk7RUFDeERvQixNQUFLLENBQUNxTixtQkFBbUIsQ0FBQyxxREFBcUQsRUFBRVosTUFBTSxFQUFFQyxTQUFTLENBQUM7QUFDdkcsQ0FBQztBQUFBM04sZUFBQSxDQTFhZ0JpQixLQUFLLHlCQTRhUXNOLE1BQU0sSUFBSztFQUNyQyxNQUFNQyxZQUFZLEdBQUdDLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDSCxNQUFNLENBQUM7RUFDeEMsTUFBTUksR0FBRyxHQUFHSCxZQUFZLENBQUMxTyxNQUFNO0VBQy9CLE1BQU04TyxLQUFLLEdBQUcsSUFBSUMsVUFBVSxDQUFDRixHQUFHLENBQUM7RUFDakMsS0FBSyxJQUFJbk8sQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHbU8sR0FBRyxFQUFFbk8sQ0FBQyxFQUFFLEVBQUU7SUFDMUJvTyxLQUFLLENBQUNwTyxDQUFDLENBQUMsR0FBR2dPLFlBQVksQ0FBQ3BELFVBQVUsQ0FBQzVLLENBQUMsQ0FBQztFQUN6QztFQUVBLE9BQU9vTyxLQUFLLENBQUNFLE1BQU07QUFDdkIsQ0FBQyIsImlnbm9yZUxpc3QiOltdfQ==
515
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfRHluYW1pY0pTIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfRXZlbnQiLCJfQXBwbGljYXRpb25NYW5hZ2VyIiwiX09ic2VydmFibGUiLCJfRXZlbnRUeXBlIiwiX1V0aWxzIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0Iiwib3duS2V5cyIsInIiLCJ0IiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm8iLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwiX3RvUHJvcGVydHlLZXkiLCJ2YWx1ZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwiaSIsIl90b1ByaW1pdGl2ZSIsIlN5bWJvbCIsInRvUHJpbWl0aXZlIiwiY2FsbCIsIlR5cGVFcnJvciIsIlN0cmluZyIsIk51bWJlciIsImNvbG9ycyIsIlV0aWxzIiwiY29uc3RydWN0b3IiLCJ2aWV3UmVmIiwibWVzc2FnZSIsInR5cGUiLCJpc051bGwiLCJtZXNzYWdlVHlwZSIsInNldFN0YXRlIiwibWVzc2FnZVN0eWxlIiwibm9ybWFsaXplQ3NzU2l6ZSIsImZhbGxiYWNrIiwidHJpbSIsImlzRmluaXRlIiwiY29uY2F0IiwiZ2V0SW5pdGlhbHMiLCJuYW1lIiwicGFydHMiLCJzcGxpdCIsImluaXRpYWxzIiwidXBkYXRlTW9kZWwiLCJ2YWx1ZXMiLCJtb2RlbCIsImpvaW5TY3JpcHQiLCJsaW5lcyIsInNjcmlwdCIsImxpbmUiLCJlbmRzV2l0aCIsInNsZWVwIiwibWlsbGlzZWNvbmRzIiwiZGF0ZSIsIkRhdGUiLCJub3ciLCJjdXJyZW50RGF0ZSIsInBhcnNlQ29uZmlnIiwiY29uZmlnIiwiY3VycmVudFZpZXdJZCIsImluZGV4IiwidW5kZWZpbmVkIiwiaWQiLCJjb25maWdKc29uIiwiSlNPTiIsInN0cmluZ2lmeSIsInJlcGxhY2UiLCJwYXJzZSIsImlzRmllbGRSZXF1aXJlZCIsImZvcm1JZCIsImlzU3RyaW5nRW1wdHkiLCJmaWVsZHMiLCJnZXRGaWVsZHMiLCJyZXF1aXJlZCIsInZhbCIsImNsYXNzTmFtZSIsImlucHV0RmllbGRzIiwiZm9ybSIsImRvY3VtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJpbnB1dERpdnMiLCJnZXRFbGVtZW50c0J5Q2xhc3NOYW1lIiwiaW5wdXRzIiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJqIiwidmFsaWRhdGVGaWVsZCIsImN1cnJlbnRWYWx1ZSIsInZhbGlkYXRvciIsImVycm9yTWVzc2FnZSIsInJlZ2V4IiwicmVzdWx0IiwidmFsaWQiLCJoYXNFcnJvcnMiLCJ0b1N0cmluZyIsIm1hdGNoIiwiZ2V0Q29tcG9uZW50QXR0cmlidXRlIiwiZmllbGQiLCJhdHRyaWJ1dGUiLCJkZWZhdWx0VmFsdWUiLCJhdHRyaWJ1dGVzIiwiZ2V0Q29tcG9uZW50U3R5bGVBdHRyaWJ1dGUiLCJzdHlsZSIsImRvR2V0UmVxdWVzdEpzb24iLCJjdXJyZW50UGFnZSIsImN1cnJldFJvd3NQZXJQYWdlIiwiY3VycmVudFNlYXJjaFBhcmFtZXRlcnMiLCJwYWdlZCIsInJlcXVlc3QiLCJwYWdlU2l6ZSIsInNlYXJjaFBhcmFtZXRlcnMiLCJnZXRGaWVsZEdyaWQiLCJmaWVsZEdyaWQiLCJtYXhDb2xzcGFuIiwibGF5b3V0Q29sdW1ucyIsIm1heENvbFBlclJvdyIsInJvd3MiLCJjdXJyUm93IiwiY3JlYXRlUm93IiwiY29sc3BhbiIsImdldEZpZWxkQ29sc3BhbiIsInJvd0hhc1NwYWNlRm9yTmV3RmllbGQiLCJmaWxsUm93V2l0aFNwYWNlcnMiLCJ1c2VkU2xvdHMiLCJldmFsdWF0ZUJvb2xlYW5FeHByZXNzaW9uIiwiZXhwcmVzc2lvbiIsImR5bmFtaWNKUyIsImV4ZWN1dGVTY3JpcHQiLCJjb25zb2xlIiwiZXJyb3IiLCJnZXRFbnRpdHlWaWV3VGl0bGUiLCJxdWVyeVBhcmFtZXRlclN0YXRlIiwidmlld05hbWUiLCJzZWxlY3Rpb24iLCJwcm9wcyIsIl9sZW4iLCJBcnJheSIsIl9rZXkiLCJwcmVmaXgiLCJzZXRMZWdlbmRDb2xvciIsImNvbG9yIiwibGVnZW5kcyIsInNldExlZ2VuZCIsInRleHQiLCJsZWdlbmQiLCJpbm5lckhUTUwiLCJzYXZlRm9ybSIsImZvcm1SZWYiLCJ1cmwiLCJzdWNjZXNzQ2FsbGJhY2siLCJlcnJvckNhbGxiYWNrIiwib2Zmc2V0RGF0ZSIsInllYXJPZmZzZXQiLCJtb250aE9mZnNldCIsImRheU9mZnNldCIsInllYXIiLCJnZXRGdWxsWWVhciIsImRheSIsImdldERhdGUiLCJtb250aCIsImdldE1vbnRoIiwiYXV0b1NldERhdGUiLCJuZXdEYXRlIiwiYXV0b0ZpbGxEYXRlTmFtZSIsInJlZkRhdGVOYW1lIiwic3RhdGVEYXRlIiwic3RhdGUiLCJ0ZW1wRGF0ZSIsImdldFRpbWUiLCJhdXRvRmlsbERhdGUiLCJjdXJyZW50Iiwic2V0VmFsdWUiLCJnZXRBcmdzIiwiZnVuYyIsImFyZ3MiLCJtYXAiLCJhcmciLCJtZXJnZU9iamVjdHMiLCJzb3VyY2UiLCJ0YXJnZXQiLCJwcm9wZXJ0aWVzIiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsInByb3BlcnR5IiwiYXBwbGljYXRpb25NYW5hZ2VyIiwiaXNFeHByZXNzaW9uIiwiZ2V0QXZhdGFyQ29sb3IiLCJzdWJzdHIiLCJoYXNoIiwiY2hhckNvZGVBdCIsIk1hdGgiLCJhYnMiLCJmb3JtYXREYXRlVGltZSIsImRhdGVUaW1lU3RyaW5nIiwibW9udGhOYW1lcyIsIm1vbnRoSW5kZXgiLCJnZXRIb3VycyIsImdldE1pbnV0ZXMiLCJ1cGRhdGVOZXN0ZWRQcm9wZXJ0eSIsIm9iaiIsInBhdGgiLCJFcnJvciIsInJlYWROZXN0ZWRQcm9wZXJ0eSIsIm1heWJlRGVjb2RlV2lyZSIsImRhdGEiLCJiNjQiLCJfY2R1aV96IiwidiIsImhlcnJpbmdzIiwiU2V0IiwiZW50cmllcyIsIl9yZWYiLCJrIiwiaGFzIiwic29ydCIsIl9yZWYyIiwiX3JlZjMiLCJhIiwiYiIsIl9yZWY0Iiwiam9pbiIsImJpbmFyeVN0cmluZyIsImF0b2IiLCJieXRlcyIsIlVpbnQ4QXJyYXkiLCJzdHJlYW0iLCJCbG9iIiwicGlwZVRocm91Z2giLCJEZWNvbXByZXNzaW9uU3RyZWFtIiwiUmVzcG9uc2UiLCJzdHJpcEh0bWwiLCJodG1sIiwidGVtcCIsImNyZWF0ZUVsZW1lbnQiLCJ0ZXh0Q29udGVudCIsImV4cG9ydHMiLCJzIiwiY2hhckF0IiwidG9VcHBlckNhc2UiLCJzbGljZSIsInBhcnNlSW50IiwicmFuZG9tIiwicm93IiwibWF4IiwiZmllbGRUeXBlIiwidG9rZW5zIiwidm9FeHByZXNzaW9uIiwic3Vic3RyaW5nIiwiaW5kZXhPZiIsInZhbHVlT2JqZWN0IiwidG9rZW4iLCJnZXR0ZXIiLCJkZWZhdWx0U3R5bGUiLCJjb25maWdTdHlsZSIsInZpZXdJZCIsImNvbXBvbmVudCIsIm1lc3NhZ2VUZXh0IiwianNvbiIsIlNZU1RFTV9FUlJPUl9NRVNTQUdFIiwiZXZlbnQiLCJFdmVudCIsImV2ZW50TWFuYWdlciIsImZpcmVFdmVudCIsIkV2ZW50VHlwZSIsIk1FU1NBR0VfQVJSSVZFRCIsInB1Ymxpc2hFcnJvck1lc3NhZ2UiLCJiYXNlNjQiLCJ3aW5kb3ciLCJsZW4iLCJidWZmZXIiXSwic291cmNlcyI6WyIuLi9zcmMvbGliL1V0aWxzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIu+7v2ltcG9ydCBkeW5hbWljSlMgZnJvbSBcIi4vRHluYW1pY0pTXCI7XG5pbXBvcnQgRXZlbnQgZnJvbSBcIi4vZXZlbnQvRXZlbnRcIjtcbmltcG9ydCBhcHBsaWNhdGlvbk1hbmFnZXIgZnJvbSBcIi4vQXBwbGljYXRpb25NYW5hZ2VyXCI7XG5pbXBvcnQgZXZlbnRNYW5hZ2VyIGZyb20gXCIuL2V2ZW50L09ic2VydmFibGVcIjtcbmltcG9ydCBFdmVudFR5cGUgZnJvbSBcIi4vZXZlbnQvRXZlbnRUeXBlXCI7XG5cbmNvbnN0IGNvbG9ycyA9IFtcbiAgICAnI0Y0NDMzNicsICcjZTkxZTYzJywgJyM5YzI3YjAnLCAnIzY3M2FiNycsXG4gICAgJyNmZjk4MDAnLCAnI2ZmNTcyMicsICcjNzk1NTQ4JywgJyM2MDdkOGInLFxuICAgICcjM2Y1MWI1JywgJyMyMTk2RjMnLCAnIzAwYmNkNCcsICcjMDA5Njg4JyxcbiAgICAnIzIxOTZGMycsICcjMzJjNzg3JywgJyMwMEJDRDQnLCAnI2ZmNTY1MicsXG4gICAgJyNmZmMxMDcnLCAnI2ZmODVhZicsICcjRkY5ODAwJywgJyMzOWJiYjAnLFxuICAgICcjNENBRjUwJywgJyNmZmViM2InLCAnI2ZmYzEwNycsXG5dO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBVdGlscyB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgfVxuXG4gICAgc3RhdGljIFNZU1RFTV9FUlJPUl9NRVNTQUdFID0gXCJBIHN5c3RlbSBlcnJvciBoYXMgb2NjdXJyZWQuIFBsZWFzZSBjb250YWN0IHlvdXIgc3lzdGVtIGFkbWluaXN0cmF0b3JcIjtcblxuICAgIHN0YXRpYyBpc051bGwodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlID09PSBudWxsIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCc7XG4gICAgfVxuXG4gICAgc3RhdGljIG5vcm1hbGl6ZUNzc1NpemUodmFsdWUsIGZhbGxiYWNrKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gZmFsbGJhY2s7XG4gICAgICAgIC8vIGFsbG93IFwiNzJweFwiLCBcIjVyZW1cIiwgZXRjLlxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICYmIHZhbHVlLnRyaW0oKSkgcmV0dXJuIHZhbHVlLnRyaW0oKTtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIiAmJiBOdW1iZXIuaXNGaW5pdGUodmFsdWUpKSByZXR1cm4gYCR7dmFsdWV9cHhgO1xuICAgICAgICByZXR1cm4gZmFsbGJhY2s7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldEluaXRpYWxzKG5hbWUpIHtcbiAgICAgICAgY29uc3QgcGFydHMgPSBuYW1lLnNwbGl0KCcgJyk7XG4gICAgICAgIGxldCBpbml0aWFscyA9ICcnO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhcnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAocGFydHNbaV0ubGVuZ3RoID4gMCAmJiBwYXJ0c1tpXSAhPT0gJycpIHtcbiAgICAgICAgICAgICAgICBpbml0aWFscyArPSBwYXJ0c1tpXVswXVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbml0aWFsc1xuICAgIH1cblxuICAgIHN0YXRpYyB1cGRhdGVNb2RlbCh2YWx1ZXMsIG1vZGVsKSB7XG4gICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHZhbHVlcykpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gdmFsdWVzW2ldO1xuICAgICAgICAgICAgICAgIG1vZGVsW3ZhbHVlLm5hbWVdID0gdmFsdWUudmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIHN0YXRpYyBjYXBpdGFsaXplID0gKHMpID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiBzICE9PSAnc3RyaW5nJykgcmV0dXJuICcnO1xuICAgICAgICByZXR1cm4gcy5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHMuc2xpY2UoMSlcbiAgICB9O1xuXG4gICAgc3RhdGljIGpvaW5TY3JpcHQobGluZXMpIHtcbiAgICAgICAgbGV0IHNjcmlwdCA9ICcnO1xuXG4gICAgICAgIGZvcihsZXQgaT0wO2k8bGluZXMubGVuZ3RoO2krKykge1xuICAgICAgICAgICAgbGV0IGxpbmUgPSBsaW5lc1tpXS50cmltKCk7XG4gICAgICAgICAgICBpZighbGluZS5lbmRzV2l0aCgnOycpICYmICFsaW5lLmVuZHNXaXRoKCc6JykpIHtcbiAgICAgICAgICAgICAgICBsaW5lICs9ICc7J1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsaW5lICs9ICdcXG4nO1xuICAgICAgICAgICAgc2NyaXB0ICs9IGxpbmU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc2NyaXB0O1xuICAgIH1cblxuICAgIHN0YXRpYyBzbGVlcChtaWxsaXNlY29uZHMpIHtcbiAgICAgICAgY29uc3QgZGF0ZSA9IERhdGUubm93KCk7XG4gICAgICAgIGxldCBjdXJyZW50RGF0ZSA9IG51bGw7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIGN1cnJlbnREYXRlID0gRGF0ZS5ub3coKTtcbiAgICAgICAgfSB3aGlsZSAoY3VycmVudERhdGUgLSBkYXRlIDwgbWlsbGlzZWNvbmRzKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgcGFyc2VDb25maWcoY29uZmlnLCBjdXJyZW50Vmlld0lkLCBpbmRleCA9IG51bGwpIHtcbiAgICAgICAgaWYoIXRoaXMuaXNOdWxsKGNvbmZpZykgJiYgIXRoaXMuaXNOdWxsKGNvbmZpZy5pZCkpIHtcbiAgICAgICAgICAgIGxldCBjb25maWdKc29uID0gSlNPTi5zdHJpbmdpZnkoY29uZmlnKTtcbiAgICAgICAgICAgIGxldCByZXBsYWNlID0gY29uZmlnSnNvbi5yZXBsYWNlKC8je3RoaXN9L2csICcjeycgKyBjb25maWcuaWQgKyAnfScpXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoLyN7dmlld30vZywgJyN7JyArIGN1cnJlbnRWaWV3SWQgKyAnfScpO1xuXG4gICAgICAgICAgICBpZihpbmRleCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJlcGxhY2UgPSByZXBsYWNlLnJlcGxhY2UoL1xcWyNpXS9nLCBgWyR7aW5kZXh9XWApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShyZXBsYWNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb25maWc7XG4gICAgfVxuXG4gICAgc3RhdGljIGlzRmllbGRSZXF1aXJlZChpZCwgZm9ybUlkKSB7XG4gICAgICAgIGlmICghVXRpbHMuaXNTdHJpbmdFbXB0eShmb3JtSWQpKSB7XG4gICAgICAgICAgICBsZXQgZmllbGRzID0gVXRpbHMuZ2V0RmllbGRzKGZvcm1JZCwgJ3ZhbGlkYXRlJyk7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZpZWxkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChmaWVsZHNbaV0uaWQgPT09IGlkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmaWVsZHNbaV0ucmVxdWlyZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHN0YXRpYyBpc1N0cmluZ0VtcHR5KHZhbCkge1xuICAgICAgICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ3VuZGVmaW5lZCcgfHwgdmFsID09PSBudWxsIHx8IHZhbC50cmltKCkubGVuZ3RoID09PSAwO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXRGaWVsZHMoZm9ybUlkLCBjbGFzc05hbWUpIHtcbiAgICAgICAgbGV0IGlucHV0RmllbGRzID0gW107XG4gICAgICAgIGxldCBmb3JtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZm9ybUlkKTtcbiAgICAgICAgaWYgKCFVdGlscy5pc051bGwoZm9ybSkpIHtcbiAgICAgICAgICAgIGxldCBpbnB1dERpdnMgPSBmb3JtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoY2xhc3NOYW1lKTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5wdXREaXZzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IGlucHV0cyA9IGlucHV0RGl2c1tpXS5nZXRFbGVtZW50c0J5VGFnTmFtZShcImlucHV0XCIpO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgaW5wdXRzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlucHV0RmllbGRzLnB1c2goaW5wdXRzW2pdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaW5wdXRGaWVsZHM7XG4gICAgfVxuXG4gICAgc3RhdGljIHZhbGlkYXRlRmllbGQoaWQsIHJlcXVpcmVkLCB2YWx1ZXMsIGN1cnJlbnRWYWx1ZSwgdmFsaWRhdG9yKSB7XG4gICAgICAgIGxldCBtZXNzYWdlID0gIXRoaXMuaXNOdWxsKHZhbGlkYXRvcikgPyB2YWxpZGF0b3IuZXJyb3JNZXNzYWdlIDogbnVsbDtcbiAgICAgICAgbGV0IHJlZ2V4ID0gIXRoaXMuaXNOdWxsKHZhbGlkYXRvcikgPyB2YWxpZGF0b3IucmVnZXggOiBudWxsO1xuXG4gICAgICAgIGxldCByZXN1bHQgPSB7fTtcbiAgICAgICAgcmVzdWx0LnZhbGlkID0gdHJ1ZTtcbiAgICAgICAgcmVzdWx0Lm1lc3NhZ2UgPSBcIlwiO1xuXG4gICAgICAgIGxldCB2YWx1ZTtcbiAgICAgICAgaWYgKCF0aGlzLmlzTnVsbChjdXJyZW50VmFsdWUpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IGN1cnJlbnRWYWx1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhbHVlID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh2YWx1ZXMpKVtpZF07XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgaGFzRXJyb3JzID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKHJlcXVpcmVkICYmIChVdGlscy5pc051bGwodmFsdWUpIHx8IFV0aWxzLmlzU3RyaW5nRW1wdHkodmFsdWUudG9TdHJpbmcoKSkpKSB7XG4gICAgICAgICAgICByZXN1bHQubWVzc2FnZSA9ICFVdGlscy5pc051bGwobWVzc2FnZSkgPyBtZXNzYWdlIDogXCJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkXCI7XG4gICAgICAgICAgICBoYXNFcnJvcnMgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0Lm1lc3NhZ2UgPSBcIlwiO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFoYXNFcnJvcnMgJiYgIVV0aWxzLmlzTnVsbChyZWdleCkgJiYgIVV0aWxzLmlzTnVsbCh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGhhc0Vycm9ycyA9IFV0aWxzLmlzTnVsbCh2YWx1ZS50b1N0cmluZygpLm1hdGNoKHJlZ2V4KSk7XG4gICAgICAgICAgICBpZiAoaGFzRXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0Lm1lc3NhZ2UgPSAhVXRpbHMuaXNOdWxsKG1lc3NhZ2UpID8gbWVzc2FnZSA6IFwiVGhpcyBmaWVsZCBpcyBpbnZhbGlkXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXN1bHQudmFsaWQgPSAhaGFzRXJyb3JzO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXRDb21wb25lbnRBdHRyaWJ1dGUoZmllbGQsIGF0dHJpYnV0ZSwgZGVmYXVsdFZhbHVlKSB7XG4gICAgICAgIGlmKHRoaXMuaXNOdWxsKGZpZWxkLmF0dHJpYnV0ZXMpKSB7XG4gICAgICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaXNOdWxsKGZpZWxkLmF0dHJpYnV0ZXNbYXR0cmlidXRlXSkgPyBkZWZhdWx0VmFsdWUgOiBmaWVsZC5hdHRyaWJ1dGVzW2F0dHJpYnV0ZV07XG4gICAgfVxuXG4gICAgc3RhdGljIGdldENvbXBvbmVudFN0eWxlQXR0cmlidXRlKGZpZWxkLCBhdHRyaWJ1dGUsIGRlZmF1bHRWYWx1ZSkge1xuICAgICAgICBpZih0aGlzLmlzTnVsbChmaWVsZC5hdHRyaWJ1dGVzKSB8fCB0aGlzLmlzTnVsbChmaWVsZC5hdHRyaWJ1dGVzLnN0eWxlKSkge1xuICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmlzTnVsbChmaWVsZC5hdHRyaWJ1dGVzLnN0eWxlW2F0dHJpYnV0ZV0pID8gZGVmYXVsdFZhbHVlIDogZmllbGQuYXR0cmlidXRlcy5zdHlsZVthdHRyaWJ1dGVdO1xuICAgIH1cblxuICAgIHN0YXRpYyBkb0dldFJlcXVlc3RKc29uKGN1cnJlbnRQYWdlLCBjdXJyZXRSb3dzUGVyUGFnZSwgY3VycmVudFNlYXJjaFBhcmFtZXRlcnMsIHBhZ2VkKSB7XG4gICAgICAgIHZhciByZXF1ZXN0ID0ge307XG4gICAgICAgIHJlcXVlc3QucGFnZVNpemUgPSBjdXJyZXRSb3dzUGVyUGFnZTtcbiAgICAgICAgcmVxdWVzdC5jdXJyZW50UGFnZSA9IGN1cnJlbnRQYWdlO1xuICAgICAgICByZXF1ZXN0LnNlYXJjaFBhcmFtZXRlcnMgPSBjdXJyZW50U2VhcmNoUGFyYW1ldGVycztcbiAgICAgICAgcmVxdWVzdC5wYWdlZCA9IHR5cGVvZiBwYWdlZCA9PT0gJ3VuZGVmaW5lZCcgfHwgcGFnZWQgPT09IG51bGwgfHwgcGFnZWQ7XG5cbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHJlcXVlc3QpO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXRGaWVsZENvbHNwYW4gPSAoZmllbGQpID0+IHtcbiAgICAgICAgcmV0dXJuICFVdGlscy5pc051bGwoZmllbGQuYXR0cmlidXRlcykgJiYgIVV0aWxzLmlzTnVsbChmaWVsZC5hdHRyaWJ1dGVzWydjb2xzcGFuJ10pID9cbiAgICAgICAgICAgIHBhcnNlSW50KHR5cGVvZiBmaWVsZC5hdHRyaWJ1dGVzLmNvbHNwYW4gPT09ICdzdHJpbmcnID9cbiAgICAgICAgICAgICAgICBkeW5hbWljSlMuZXhlY3V0ZVNjcmlwdChcIl9fY29sc3Bhbl9cIiArIGZpZWxkLmlkLCBmaWVsZC5hdHRyaWJ1dGVzLmNvbHNwYW4pIDpcbiAgICAgICAgICAgICAgICBmaWVsZC5hdHRyaWJ1dGVzLmNvbHNwYW4pIDogMTtcbiAgICB9O1xuXG4gICAgc3RhdGljIHByb3AgPSAodmFsdWUpID0+IHtcbiAgICAgICAgcmV0dXJuIGFwcGxpY2F0aW9uTWFuYWdlci5pc0V4cHJlc3Npb24odmFsdWUpID9cbiAgICAgICAgICAgIGR5bmFtaWNKUy5leGVjdXRlU2NyaXB0KFwicmVhZFByb3BfXCIgKyBNYXRoLnJhbmRvbSgpLCB2YWx1ZSwgbnVsbCwgdHJ1ZSwgbnVsbCwgbnVsbCwgZmFsc2UpIDpcbiAgICAgICAgICAgICAgICB2YWx1ZTtcbiAgICB9O1xuXG4gICAgc3RhdGljIGNyZWF0ZVJvdyA9ICgpID0+IHtcbiAgICAgICAgbGV0IHJvdyA9IHt9O1xuICAgICAgICByb3cuZmllbGRzID0gW107XG4gICAgICAgIHJvdy51c2VkU2xvdHMgPSAwO1xuXG4gICAgICAgIHJldHVybiByb3c7XG4gICAgfTtcblxuICAgIHN0YXRpYyBmaWxsUm93V2l0aFNwYWNlcnMgPSAocm93LCBtYXgpID0+IHtcbiAgICAgICAgZm9yIChsZXQgaSA9IHJvdy51c2VkU2xvdHM7IGkgPCBtYXg7IGkrKykge1xuICAgICAgICAgICAgbGV0IGZpZWxkID0ge307XG4gICAgICAgICAgICBmaWVsZC5maWVsZFR5cGUgPSAnTEFCRUwnO1xuICAgICAgICAgICAgZmllbGQuaWQgPSAnc3lzdGVtX2NvbF9zcGFuX3NwYWNlcl8nICsgaTtcbiAgICAgICAgICAgIHJvdy5maWVsZHMucHVzaChmaWVsZCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgc3RhdGljIHJvd0hhc1NwYWNlRm9yTmV3RmllbGQgPSAocm93LCBjb2xzcGFuLCBtYXgpID0+IHtcbiAgICAgICAgcmV0dXJuIGNvbHNwYW4gPD0gbWF4IC0gcm93LnVzZWRTbG90cztcbiAgICB9O1xuXG4gICAgc3RhdGljIGdldEZpZWxkR3JpZChhdHRyaWJ1dGVzLCBmaWVsZHMpIHtcbiAgICAgICAgbGV0IGZpZWxkR3JpZCA9IHt9O1xuICAgICAgICBsZXQgbWF4Q29sc3BhbiA9ICFVdGlscy5pc051bGwoYXR0cmlidXRlcykgJiYgIVV0aWxzLmlzTnVsbChhdHRyaWJ1dGVzLmxheW91dENvbHVtbnMpID8gYXR0cmlidXRlcy5sYXlvdXRDb2x1bW5zIDogMTtcbiAgICAgICAgZmllbGRHcmlkLm1heENvbFBlclJvdyA9IG1heENvbHNwYW47XG4gICAgICAgIGZpZWxkR3JpZC5yb3dzID0gW107XG4gICAgICAgIGxldCBjdXJyUm93ID0gdGhpcy5jcmVhdGVSb3coKTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpZWxkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbGV0IGZpZWxkID0gZmllbGRzW2ldO1xuICAgICAgICAgICAgbGV0IGNvbHNwYW4gPSB0aGlzLmdldEZpZWxkQ29sc3BhbihmaWVsZCk7XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5yb3dIYXNTcGFjZUZvck5ld0ZpZWxkKGN1cnJSb3csIGNvbHNwYW4sIG1heENvbHNwYW4pKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5maWxsUm93V2l0aFNwYWNlcnMoY3VyclJvdywgbWF4Q29sc3Bhbik7XG4gICAgICAgICAgICAgICAgY3VyclJvdyA9IHRoaXMuY3JlYXRlUm93KCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjdXJyUm93LmZpZWxkcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICBmaWVsZEdyaWQucm93cy5wdXNoKGN1cnJSb3cpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjdXJyUm93LmZpZWxkcy5wdXNoKGZpZWxkKTtcbiAgICAgICAgICAgIGN1cnJSb3cudXNlZFNsb3RzICs9IGNvbHNwYW47XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmllbGRHcmlkO1xuICAgIH1cblxuICAgIHN0YXRpYyBldmFsdWF0ZUJvb2xlYW5FeHByZXNzaW9uKGV4cHJlc3Npb24sIGlkLCBkZWZhdWx0VmFsdWUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChleHByZXNzaW9uID09PSBcImZhbHNlXCIgfHwgZXhwcmVzc2lvbiA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGV4cHJlc3Npb24gPT09IFwidHJ1ZVwiIHx8IGV4cHJlc3Npb24gPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIVV0aWxzLmlzTnVsbChleHByZXNzaW9uKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBkeW5hbWljSlMuZXhlY3V0ZVNjcmlwdChgJHtpZH1VdGlsc0Jvb2xFdmFsYCwgZXhwcmVzc2lvbik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiAhdGhpcy5pc051bGwoZGVmYXVsdFZhbHVlKSA/IGRlZmF1bHRWYWx1ZSA6IGZhbHNlO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgZXZhbHVhdGlvbiBhIGJvb2xlYW4gZXhwcmVzc2lvbiBbXCIgKyBleHByZXNzaW9uICsgXCJdIGZvciA6IFwiICsgaWQpO1xuICAgICAgICAgICAgdGhyb3coZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0RW50aXR5Vmlld1RpdGxlKHF1ZXJ5UGFyYW1ldGVyU3RhdGUsIHZpZXdOYW1lLCAuLi5maWVsZHMpIHtcbiAgICAgICAgaWYgKFV0aWxzLmlzTnVsbChxdWVyeVBhcmFtZXRlclN0YXRlKSB8fCBVdGlscy5pc051bGwocXVlcnlQYXJhbWV0ZXJTdGF0ZS5zZWxlY3Rpb24pKSB7XG4gICAgICAgICAgICByZXR1cm4gIVV0aWxzLmlzTnVsbCh2aWV3TmFtZSkgPyB2aWV3TmFtZSArIFwiID4gQWRkXCIgOiBcIkFkZFwiO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHByb3BzID0gXCJcIjtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaWVsZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKGZpZWxkc1tpXSkpIHtcbiAgICAgICAgICAgICAgICBwcm9wcyArPSBmaWVsZHNbaV0udHJpbSgpO1xuICAgICAgICAgICAgICAgIHByb3BzICs9IFwiIFwiO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcHJvcHMgPSBwcm9wcy50cmltKCk7XG4gICAgICAgIGxldCBwcmVmaXggPSBVdGlscy5pc051bGwodmlld05hbWUpID8gXCJcIiA6IFwiID4gXCI7XG4gICAgICAgIHJldHVybiAoVXRpbHMuaXNOdWxsKHZpZXdOYW1lKSA/IFwiXCIgOiB2aWV3TmFtZSkgKyAocHJvcHMubGVuZ3RoID4gMCA/IChwcmVmaXggKyBwcm9wcykgOiBcIlwiKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgc2V0TGVnZW5kQ29sb3IoY29sb3IpIHtcbiAgICAgICAgbGV0IGxlZ2VuZHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwibGVnZW5kXCIpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlZ2VuZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGxlZ2VuZHNbaV0uc3R5bGUuY29sb3IgPSBjb2xvcjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBzZXRMZWdlbmQodGV4dCkge1xuICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbCh0ZXh0KSkge1xuICAgICAgICAgICAgbGV0IGxlZ2VuZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiZ2xvYmFsTGVnZW5kXCIpO1xuICAgICAgICAgICAgbGVnZW5kLmlubmVySFRNTCA9IHRleHQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzaG93TWVzc2FnZSA9ICh2aWV3UmVmLCBtZXNzYWdlLCB0eXBlKSA9PiB7XG4gICAgICAgIGlmIChVdGlscy5pc051bGwobWVzc2FnZSkpIHtcbiAgICAgICAgICAgIG1lc3NhZ2UgPSBcIlwiO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IG1lc3NhZ2VUeXBlID0gdHlwZSA9PT0gXCJFUlJPUlwiID8gXCJkYW5nZXJcIiA6IChVdGlscy5pc051bGwodHlwZSkgPyBcIm1lc3NhZ2VcIiA6IHR5cGUpO1xuICAgICAgICB2aWV3UmVmLnNldFN0YXRlKHsgbWVzc2FnZTogbWVzc2FnZSwgbWVzc2FnZVN0eWxlOiBtZXNzYWdlVHlwZSB9KTtcbiAgICB9O1xuXG4gICAgc2F2ZUZvcm0odmlld1JlZiwgZm9ybVJlZiwgdXJsKSB7XG4gICAgICAgIHRoaXMuc2F2ZUZvcm0odmlld1JlZiwgZm9ybVJlZiwgdXJsLCBudWxsLCBudWxsLCBudWxsKTtcbiAgICB9XG5cbiAgICBzYXZlRm9ybSh2aWV3UmVmLCBmb3JtUmVmLCB1cmwsIHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjaykge1xuICAgICAgICB0aGlzLnNhdmVGb3JtKHZpZXdSZWYsIGZvcm1SZWYsIHVybCwgc3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNhbGxiYWNrLCBudWxsKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgb2Zmc2V0RGF0ZShkYXRlLCB5ZWFyT2Zmc2V0LCBtb250aE9mZnNldCwgZGF5T2Zmc2V0KSB7XG4gICAgICAgIGxldCB5ZWFyID0gZGF0ZS5nZXRGdWxsWWVhcigpICsgeWVhck9mZnNldDtcbiAgICAgICAgbGV0IGRheSA9IGRhdGUuZ2V0RGF0ZSgpICsgZGF5T2Zmc2V0O1xuICAgICAgICBsZXQgbW9udGggPSBkYXRlLmdldE1vbnRoKCkgKyBtb250aE9mZnNldDtcblxuICAgICAgICByZXR1cm4gbmV3IERhdGUoeWVhciwgbW9udGgsIGRheSk7XG4gICAgfVxuXG4gICAgYXV0b1NldERhdGUodmlld1JlZiwgZm9ybVJlZiwgbmV3RGF0ZSwgeWVhck9mZnNldCwgbW9udGhPZmZzZXQsIGRheU9mZnNldCwgYXV0b0ZpbGxEYXRlTmFtZSwgcmVmRGF0ZU5hbWUpIHtcbiAgICAgICAgbGV0IHN0YXRlRGF0ZSA9IHZpZXdSZWYuc3RhdGVbcmVmRGF0ZU5hbWVdO1xuICAgICAgICBsZXQgdGVtcERhdGUgPSBzdGF0ZURhdGU7XG4gICAgICAgIGlmIChVdGlscy5pc051bGwoc3RhdGVEYXRlKSB8fCBzdGF0ZURhdGUuZ2V0VGltZSgpICE9PSBuZXdEYXRlLmdldFRpbWUoKSkge1xuICAgICAgICAgICAgdmlld1JlZi5zZXRTdGF0ZSh7IC4uLnZpZXdSZWYuc3RhdGUsIFtyZWZEYXRlTmFtZV06IG5ld0RhdGUgfSwgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHRlbXBEYXRlKSAmJiAhVXRpbHMuaXNOdWxsKHZpZXdSZWYuc3RhdGUuaWQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBhdXRvRmlsbERhdGUgPSBVdGlscy5vZmZzZXREYXRlKG5ld0RhdGUsIHllYXJPZmZzZXQsIG1vbnRoT2Zmc2V0LCBkYXlPZmZzZXQpO1xuICAgICAgICAgICAgICAgICAgICBmb3JtUmVmLmN1cnJlbnQuc2V0VmFsdWUoYXV0b0ZpbGxEYXRlTmFtZSwgYXV0b0ZpbGxEYXRlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoVXRpbHMuaXNOdWxsKHZpZXdSZWYuc3RhdGUuaWQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBhdXRvRmlsbERhdGUgPSBVdGlscy5vZmZzZXREYXRlKG5ld0RhdGUsIHllYXJPZmZzZXQsIG1vbnRoT2Zmc2V0LCBkYXlPZmZzZXQpO1xuICAgICAgICAgICAgICAgICAgICBmb3JtUmVmLmN1cnJlbnQuc2V0VmFsdWUoYXV0b0ZpbGxEYXRlTmFtZSwgYXV0b0ZpbGxEYXRlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBnZXRBcmdzKGZ1bmMpIHtcbiAgICAgICAgLy8gRmlyc3QgbWF0Y2ggZXZlcnl0aGluZyBpbnNpZGUgdGhlIGZ1bmN0aW9uIGFyZ3VtZW50IHBhcmVucy5cbiAgICAgICAgdmFyIGFyZ3MgPSBmdW5jLnRvU3RyaW5nKCkubWF0Y2goL2Z1bmN0aW9uXFxzLio/XFwoKFteKV0qKVxcKS8pWzFdO1xuXG4gICAgICAgIC8vIFNwbGl0IHRoZSBhcmd1bWVudHMgc3RyaW5nIGludG8gYW4gYXJyYXkgY29tbWEgZGVsaW1pdGVkLlxuICAgICAgICByZXR1cm4gYXJncy5zcGxpdCgnLCcpLm1hcChmdW5jdGlvbihhcmcpIHtcbiAgICAgICAgICAgIC8vIEVuc3VyZSBubyBpbmxpbmUgY29tbWVudHMgYXJlIHBhcnNlZCBhbmQgdHJpbSB0aGUgd2hpdGVzcGFjZS5cbiAgICAgICAgICAgIHJldHVybiBhcmcucmVwbGFjZSgvXFwvXFwqLipcXCpcXC8vLCAnJykudHJpbSgpO1xuICAgICAgICB9KS5maWx0ZXIoZnVuY3Rpb24oYXJnKSB7XG4gICAgICAgICAgICAvLyBFbnN1cmUgbm8gdW5kZWZpbmVkIHZhbHVlcyBhcmUgYWRkZWQuXG4gICAgICAgICAgICByZXR1cm4gYXJnO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0UHJvcGVydHlDaGFpblBhdGggPSAoZXhwcmVzc2lvbikgPT4ge1xuICAgICAgICBsZXQgcGF0aCA9IHt9O1xuXG4gICAgICAgIGlmKCF0aGlzLmlzTnVsbChleHByZXNzaW9uKSkge1xuICAgICAgICAgICAgbGV0IHRva2VucyA9IGV4cHJlc3Npb24uc3BsaXQoJy4nKTtcbiAgICAgICAgICAgIHBhdGgucHJvcGVydHkgPSB0b2tlbnNbdG9rZW5zLmxlbmd0aCAtIDFdO1xuXG4gICAgICAgICAgICBsZXQgdm9FeHByZXNzaW9uID0gZXhwcmVzc2lvbi5zdWJzdHJpbmcoMCwgZXhwcmVzc2lvbi5pbmRleE9mKCcuJykpO1xuICAgICAgICAgICAgcGF0aC52YWx1ZU9iamVjdCA9IGR5bmFtaWNKUy5leGVjdXRlU2NyaXB0KGAke01hdGgucmFuZG9tKCl9X1Byb3BlcnR5Q2hhaW5VdGlsc0V2YWxgLCB2b0V4cHJlc3Npb24pO1xuICAgICAgICAgICAgZm9yIChsZXQgaT0xO2k8dG9rZW5zLmxlbmd0aCAtIDE7aSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IHRva2VuID0gdG9rZW5zW2ldO1xuICAgICAgICAgICAgICAgIGlmKCF0aGlzLmlzTnVsbChwYXRoLnZhbHVlT2JqZWN0KSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZ2V0dGVyID0gcGF0aC52YWx1ZU9iamVjdFt0b2tlbl07XG4gICAgICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKGdldHRlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZ2V0dGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aC52YWx1ZU9iamVjdCA9IGdldHRlcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoLnZhbHVlT2JqZWN0ID0gZ2V0dGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHBhdGg7XG4gICAgfTtcblxuICAgIHN0YXRpYyBtZXJnZVN0eWxlcyA9IChkZWZhdWx0U3R5bGUsIGNvbmZpZykgPT4ge1xuICAgICAgICBsZXQgY29uZmlnU3R5bGUgPSBVdGlscy5nZXRDb21wb25lbnRBdHRyaWJ1dGUoY29uZmlnLCAnc3R5bGUnLCBudWxsKTtcbiAgICAgICAgaWYoY29uZmlnU3R5bGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1lcmdlT2JqZWN0cyhjb25maWdTdHlsZSwgZGVmYXVsdFN0eWxlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkZWZhdWx0U3R5bGU7XG4gICAgfTtcblxuICAgIHN0YXRpYyBtZXJnZU9iamVjdHMoc291cmNlLCB0YXJnZXQpIHtcbiAgICAgICAgaWYoIXRhcmdldCkge1xuICAgICAgICAgICAgcmV0dXJuIHNvdXJjZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBwcm9wZXJ0aWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoc291cmNlKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGFyZ2V0KSk7XG4gICAgICAgIGZvciAoY29uc3QgcHJvcGVydHkgb2YgcHJvcGVydGllcykge1xuICAgICAgICAgICAgcmVzdWx0W3Byb3BlcnR5XSA9IGFwcGxpY2F0aW9uTWFuYWdlci5pc0V4cHJlc3Npb24oc291cmNlW3Byb3BlcnR5XSkgP1xuICAgICAgICAgICAgICAgIFV0aWxzLmV2YWx1YXRlQm9vbGVhbkV4cHJlc3Npb24oc291cmNlW3Byb3BlcnR5XSwgcHJvcGVydHkpIDogc291cmNlW3Byb3BlcnR5XTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgc3RhdGljIHB1Ymxpc2hFcnJvck1lc3NhZ2UgPSBhc3luYyAoZSwgdmlld0lkLCBjb21wb25lbnQgPSBudWxsKSA9PiB7XG4gICAgICAgIGxldCBtZXNzYWdlVGV4dDtcblxuICAgICAgICBpZihlLmpzb24pIHtcbiAgICAgICAgICAgIGxldCBkYXRhID0gYXdhaXQgZS5qc29uKCk7XG4gICAgICAgICAgICBtZXNzYWdlVGV4dCA9IGRhdGEubWVzc2FnZTtcbiAgICAgICAgICAgIGlmKCFtZXNzYWdlVGV4dCkge1xuICAgICAgICAgICAgICAgIG1lc3NhZ2VUZXh0ID0gVXRpbHMuU1lTVEVNX0VSUk9SX01FU1NBR0U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtZXNzYWdlVGV4dCA9IFV0aWxzLlNZU1RFTV9FUlJPUl9NRVNTQUdFO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IG1lc3NhZ2UgPSB7XG4gICAgICAgICAgICBtZXNzYWdlVHlwZTogJ0VSUk9SJyxcbiAgICAgICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2VUZXh0XG4gICAgICAgIH07XG5cbiAgICAgICAgbGV0IGV2ZW50ID0gbmV3IEV2ZW50KGFwcGxpY2F0aW9uTWFuYWdlciwgdmlld0lkLCBtZXNzYWdlKTtcbiAgICAgICAgZXZlbnRNYW5hZ2VyLmZpcmVFdmVudChFdmVudFR5cGUuTUVTU0FHRV9BUlJJVkVELCBldmVudCk7XG5cbiAgICAgICAgaWYoY29tcG9uZW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgICBldmVudCA9IG5ldyBFdmVudChjb21wb25lbnQsIHZpZXdJZCwgbWVzc2FnZSk7XG4gICAgICAgICAgICBldmVudE1hbmFnZXIuZmlyZUV2ZW50KEV2ZW50VHlwZS5NRVNTQUdFX0FSUklWRUQsIGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBwdWJsaXNoU3lzdGVtRXJyb3JNZXNzYWdlID0gKHZpZXdJZCwgY29tcG9uZW50ID0gbnVsbCkgPT4ge1xuICAgICAgICBVdGlscy5wdWJsaXNoRXJyb3JNZXNzYWdlKCdBIHN5c3RlbSBlcnJvciBoYXMgb2NjdXJyZWQuIFBsZWFzZSB0cnkgYWdhaW4gbGF0ZXInLCB2aWV3SWQsIGNvbXBvbmVudCk7XG4gICAgfVxuXG4gICAgc3RhdGljIGJhc2U2NFRvQXJyYXlCdWZmZXIgPSAoYmFzZTY0KSA9PiB7XG4gICAgICAgIGNvbnN0IGJpbmFyeVN0cmluZyA9IHdpbmRvdy5hdG9iKGJhc2U2NCk7XG4gICAgICAgIGNvbnN0IGxlbiA9IGJpbmFyeVN0cmluZy5sZW5ndGg7XG4gICAgICAgIGNvbnN0IGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkobGVuKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgYnl0ZXNbaV0gPSBiaW5hcnlTdHJpbmcuY2hhckNvZGVBdChpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBieXRlcy5idWZmZXI7XG4gICAgfTtcblxuICAgIHN0YXRpYyBnZXRBdmF0YXJDb2xvcihuYW1lKSB7XG4gICAgICAgIG5hbWUgPSBuYW1lLnN1YnN0cigwLCA2KTtcblxuICAgICAgICBsZXQgaGFzaCA9IDA7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmFtZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaGFzaCA9IDMxICogaGFzaCArIG5hbWUuY2hhckNvZGVBdChpKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgaW5kZXggPSBNYXRoLmFicyhoYXNoICUgY29sb3JzLmxlbmd0aCk7XG4gICAgICAgIHJldHVybiBjb2xvcnNbaW5kZXhdO1xuICAgIH1cblxuICAgIHN0YXRpYyBmb3JtYXREYXRlVGltZShkYXRlVGltZVN0cmluZykge1xuICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoZGF0ZVRpbWVTdHJpbmcpO1xuXG4gICAgICAgIGNvbnN0IG1vbnRoTmFtZXMgPSBbXG4gICAgICAgICAgICBcIkphblwiLCBcIkZlYlwiLCBcIk1hclwiLCBcIkFwclwiLFxuICAgICAgICAgICAgXCJNYXlcIiwgXCJKdW5cIiwgXCJKdWxcIiwgXCJBdWdcIixcbiAgICAgICAgICAgIFwiU2VwXCIsIFwiT2N0XCIsIFwiTm92XCIsIFwiRGVjXCJcbiAgICAgICAgXTtcblxuICAgICAgICBjb25zdCBtb250aEluZGV4ID0gZGF0ZS5nZXRNb250aCgpO1xuICAgICAgICBjb25zdCB5ZWFyID0gZGF0ZS5nZXRGdWxsWWVhcigpO1xuXG4gICAgICAgIHJldHVybiBkYXRlLmdldERhdGUoKSArICcgJyArIG1vbnRoTmFtZXNbbW9udGhJbmRleF0gKyAnICcgKyB5ZWFyICsgJyAtICcgKyBkYXRlLmdldEhvdXJzKCkgKyAnOicgKyBkYXRlLmdldE1pbnV0ZXMoKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgdXBkYXRlTmVzdGVkUHJvcGVydHkob2JqLCBwYXRoLCB2YWx1ZSkge1xuICAgICAgICBjb25zdCBrZXlzID0gcGF0aC5zcGxpdCgnLicpO1xuICAgICAgICBsZXQgY3VycmVudCA9IG9iajtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoIWN1cnJlbnRba2V5c1tpXV0pIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50W2tleXNbaV1dID0ge307XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmKHR5cGVvZiBjdXJyZW50W2tleXNbaV1dICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHByb3BlcnR5IHZhbHVlIGluIHByb3BlcnR5IGNoYWluIFtcIiArIHBhdGggKyBcIl0gLSBbXCIgKyBrZXlzW2ldICsgXCJdXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY3VycmVudCA9IGN1cnJlbnRba2V5c1tpXV07XG4gICAgICAgIH1cblxuICAgICAgICBjdXJyZW50W2tleXNba2V5cy5sZW5ndGggLSAxXV0gPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBzdGF0aWMgcmVhZE5lc3RlZFByb3BlcnR5KG9iaiwgcGF0aCkge1xuICAgICAgICBjb25zdCBrZXlzID0gcGF0aC5zcGxpdCgnLicpO1xuICAgICAgICBsZXQgY3VycmVudCA9IG9iajtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoIWN1cnJlbnRba2V5c1tpXV0gfHwgdHlwZW9mIGN1cnJlbnRba2V5c1tpXV0gIT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50W2tleXNbaV1dO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGN1cnJlbnRba2V5c1trZXlzLmxlbmd0aCAtIDFdXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZWNvZGUgYSBDRFVJIHdpcmUtY29tcHJlc3NlZCBhc3NldCByZXNwb25zZSBpZiBpdCBpcyB3cmFwcGVkLCBvclxuICAgICAqIHBhc3MgdGhlIHZhbHVlIHRocm91Z2ggdW5jaGFuZ2VkIG90aGVyd2lzZS4gUGFpcnMgd2l0aCBvdWktc2VydmVyJ3NcbiAgICAgKiB3aXJlQ29tcHJlc3Npb24udHMuXG4gICAgICpcbiAgICAgKiA8cD5UaHJlZSB3cmFwcGVyIHNoYXBlcyBhcmUgYWNjZXB0ZWQgKG5ld2VzdCBmaXJzdCk6XG4gICAgICogPHVsPlxuICAgICAqICAgPGxpPjxiPlJhbmRvbWlzZWQgY2h1bmtlZCAoY3VycmVudCk6PC9iPlxuICAgICAqICAgICAgIHtAY29kZSB7IHYsIHIsICZsdDtyYW5kMSZndDssICZsdDtyYW5kMiZndDssICZsdDtyYW5kMyZndDsgfX0g4oCUXG4gICAgICogICAgICAgdiAvIHIgYXJlIHJlZC1oZXJyaW5nIG1ldGFkYXRhOyB0aGUgb3RoZXIgc3RyaW5nLXZhbHVlZFxuICAgICAqICAgICAgIGtleXMgYXJlIGJhc2U2NCBjaHVua3MuIFNvcnQgdGhlIGNodW5rIEtFWVMgYWxwaGFiZXRpY2FsbHksXG4gICAgICogICAgICAgY29uY2F0ZW5hdGUgdGhlIHZhbHVlcywgYmFzZTY0LWRlY29kZSwgZ3VuemlwLCBKU09OLnBhcnNlLjwvbGk+XG4gICAgICogICA8bGk+PGI+Rml4ZWQgY2h1bmtlZCAoZWFybGllcik6PC9iPiB7QGNvZGUgeyB2LCByLCBhLCBiLCBjIH19IOKAlFxuICAgICAqICAgICAgIHNhbWUgYWxnb3JpdGhtOyB0aGUgY2h1bmsga2V5cyBoYXBwZW4gdG8gYmUgdGhlIGxpdGVyYWxzXG4gICAgICogICAgICAgYS9iL2MuIFRoZSBhbHBoYWJldGljYWwtc29ydCBhcHByb2FjaCBoYW5kbGVzIHRoaXMgc2hhcGVcbiAgICAgKiAgICAgICB0b28gd2l0aG91dCBhIHNwZWNpYWwgY2FzZS48L2xpPlxuICAgICAqICAgPGxpPjxiPlNpbmdsZSBibG9iIChlYXJsaWVzdCk6PC9iPiB7QGNvZGUgeyBfY2R1aV96OiBcIiZsdDtibG9iJmd0O1wiIH19XG4gICAgICogICAgICAg4oCUIGtlcHQgc28gaW4tZmxpZ2h0IGNsaWVudHMgZG9uJ3QgYnJlYWsgZHVyaW5nIGEgcGFydGlhbFxuICAgICAqICAgICAgIGRlcGxveS48L2xpPlxuICAgICAqIDwvdWw+XG4gICAgICpcbiAgICAgKiA8cD5EZXRlY3Rpb24gc2lnbmF0dXJlOiB0aGUgd3JhcHBlciBoYXMgQk9USCB7QGNvZGUgdn0gYW5kXG4gICAgICoge0Bjb2RlIHJ9IGFzIHN0cmluZyBmaWVsZHMsIEFORCBhdCBsZWFzdCBvbmUgb3RoZXIgc3RyaW5nLXZhbHVlZFxuICAgICAqIGtleS4gQ0RVSSB2aWV3cyB1c2Uge0Bjb2RlIHZlcnNpb259IChub3Qge0Bjb2RlIHZ9KSBhbmQgZG9uJ3QgdXNlXG4gICAgICogYSB0b3AtbGV2ZWwge0Bjb2RlIHJ9LCBzbyB0aGUgc2lnbmF0dXJlIGlzIGNvbGxpc2lvbi1mcmVlIGFnYWluc3RcbiAgICAgKiByYXcgYXNzZXQgSlNPTiBpbiBkZXYgbW9kZS5cbiAgICAgKlxuICAgICAqIDxwPlVzZXMgdGhlIGJyb3dzZXItbmF0aXZlIERlY29tcHJlc3Npb25TdHJlYW0g4oCUIENocm9tZSA4MCssXG4gICAgICogRmlyZWZveCAxMTMrLCBTYWZhcmkgMTYuNCsuIE5vIG5ldyBKUyBidW5kbGUgZGVwcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7YW55fSBkYXRhIOKAlCBUaGUgYXNzZXQgcGF5bG9hZCBvciBhIHdyYXBwZXIuXG4gICAgICogQHJldHVybnMge1Byb21pc2U8YW55Pn0g4oCUIFRoZSBhc3NldCBwYXlsb2FkIChkZWNvZGVkIGlmIHdyYXBwZWQpLlxuICAgICAqL1xuICAgIHN0YXRpYyBhc3luYyBtYXliZURlY29kZVdpcmUoZGF0YSkge1xuICAgICAgICBpZiAoIWRhdGEgfHwgdHlwZW9mIGRhdGEgIT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBiNjQ7XG4gICAgICAgIGlmICh0eXBlb2YgZGF0YS5fY2R1aV96ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgLy8gTGVnYWN5IHNpbmdsZS1ibG9iIHNoYXBlLlxuICAgICAgICAgICAgYjY0ID0gZGF0YS5fY2R1aV96O1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBkYXRhLnYgPT09ICdzdHJpbmcnICYmIHR5cGVvZiBkYXRhLnIgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAvLyBDaHVua2VkIHNoYXBlIChmaXhlZCBvciByYW5kb21pc2VkKS4gU29ydCBhbGwgbm9uLWhlcnJpbmdcbiAgICAgICAgICAgIC8vIHN0cmluZy12YWx1ZWQga2V5cyBhbHBoYWJldGljYWxseTsgY29uY2F0ZW5hdGUgdGhlaXIgdmFsdWVzLlxuICAgICAgICAgICAgLy8gVGhlIHNlcnZlciBzb3J0cyBpdHMgcmFuZG9tIGtleXMgYmVmb3JlIGFzc2lnbmluZyBjaHVua3MsXG4gICAgICAgICAgICAvLyBzbyBhbHBoYWJldGljYWwgcmVhc3NlbWJseSBoZXJlIGlzIGd1YXJhbnRlZWQgdG8gbWF0Y2guXG4gICAgICAgICAgICBjb25zdCBoZXJyaW5ncyA9IG5ldyBTZXQoWyd2JywgJ3InXSk7XG4gICAgICAgICAgICBjb25zdCBlbnRyaWVzID0gT2JqZWN0LmVudHJpZXMoZGF0YSlcbiAgICAgICAgICAgICAgICAuZmlsdGVyKChbaywgdmFsXSkgPT4gdHlwZW9mIHZhbCA9PT0gJ3N0cmluZycgJiYgIWhlcnJpbmdzLmhhcyhrKSk7XG4gICAgICAgICAgICBpZiAoZW50cmllcy5sZW5ndGggPCAxKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbnRyaWVzLnNvcnQoKFthXSwgW2JdKSA9PiAoYSA8IGIgPyAtMSA6IGEgPiBiID8gMSA6IDApKTtcbiAgICAgICAgICAgIGI2NCA9IGVudHJpZXMubWFwKChbLCB2YWxdKSA9PiB2YWwpLmpvaW4oJycpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgIH1cblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgYmluYXJ5U3RyaW5nID0gYXRvYihiNjQpO1xuICAgICAgICAgICAgY29uc3QgYnl0ZXMgPSBuZXcgVWludDhBcnJheShiaW5hcnlTdHJpbmcubGVuZ3RoKTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYmluYXJ5U3RyaW5nLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgYnl0ZXNbaV0gPSBiaW5hcnlTdHJpbmcuY2hhckNvZGVBdChpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHN0cmVhbSA9IG5ldyBCbG9iKFtieXRlc10pLnN0cmVhbSgpLnBpcGVUaHJvdWdoKG5ldyBEZWNvbXByZXNzaW9uU3RyZWFtKCdnemlwJykpO1xuICAgICAgICAgICAgY29uc3QgdGV4dCA9IGF3YWl0IG5ldyBSZXNwb25zZShzdHJlYW0pLnRleHQoKTtcbiAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKHRleHQpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdbVXRpbHMubWF5YmVEZWNvZGVXaXJlXSBmYWlsZWQgdG8gZGVjb2RlIHdpcmUgcGF5bG9hZCDigJQgcmV0dXJuaW5nIHJhdyBibG9iJywgZSk7XG4gICAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBzdHJpcEh0bWwoaHRtbCkge1xuICAgICAgICBpZiAoIWh0bWwpIHJldHVybiAnJztcblxuICAgICAgICBjb25zdCB0ZW1wID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIHRlbXAuaW5uZXJIVE1MID0gaHRtbDtcblxuICAgICAgICByZXR1cm4gdGVtcC50ZXh0Q29udGVudFxuICAgICAgICAgICAgLnJlcGxhY2UoL1xccysvZywgJyAnKVxuICAgICAgICAgICAgLnRyaW0oKTtcbiAgICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFDLElBQUFBLFVBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNELElBQUFDLE1BQUEsR0FBQUYsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFFLG1CQUFBLEdBQUFILHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRyxXQUFBLEdBQUFKLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBSSxVQUFBLEdBQUFMLHNCQUFBLENBQUFDLE9BQUE7QUFBMEMsSUFBQUssTUFBQTtBQUFBLFNBQUFOLHVCQUFBTyxDQUFBLFdBQUFBLENBQUEsSUFBQUEsQ0FBQSxDQUFBQyxVQUFBLEdBQUFELENBQUEsS0FBQUUsT0FBQSxFQUFBRixDQUFBO0FBQUEsU0FBQUcsUUFBQUgsQ0FBQSxFQUFBSSxDQUFBLFFBQUFDLENBQUEsR0FBQUMsTUFBQSxDQUFBQyxJQUFBLENBQUFQLENBQUEsT0FBQU0sTUFBQSxDQUFBRSxxQkFBQSxRQUFBQyxDQUFBLEdBQUFILE1BQUEsQ0FBQUUscUJBQUEsQ0FBQVIsQ0FBQSxHQUFBSSxDQUFBLEtBQUFLLENBQUEsR0FBQUEsQ0FBQSxDQUFBQyxNQUFBLFdBQUFOLENBQUEsV0FBQUUsTUFBQSxDQUFBSyx3QkFBQSxDQUFB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
@@ -106,9 +106,28 @@ const AlertBar = /*#__PURE__*/_react.default.memo(props => {
106
106
  };
107
107
  const strictStyle = {
108
108
  padding: "0 32px",
109
- maxHeight: "64px"
109
+ height: "auto"
110
110
  };
111
111
  const containerStyle = placement === "strict" ? strictStyle : overlayStyle;
112
+
113
+ // Strict placement sits inline with surrounding content (e.g. inside a
114
+ // stepper-title-bar layout above a card) and must grow to fit a long
115
+ // message — otherwise users see "We're unable to verify your CSD..."
116
+ // truncated at the first ellipsis. Overlay placement floats and stays
117
+ // single-line so it doesn't push page layout around.
118
+ const messageStyle = placement === "strict" ? {
119
+ color: 'rgba(255,255,255,0.9)',
120
+ whiteSpace: 'normal',
121
+ wordBreak: 'break-word',
122
+ margin: 0
123
+ } : {
124
+ color: 'rgba(255,255,255,0.9)',
125
+ overflow: 'hidden',
126
+ textOverflow: 'ellipsis',
127
+ whiteSpace: 'nowrap',
128
+ maxWidth: 'calc(100% - 32px)',
129
+ margin: 0
130
+ };
112
131
  return !_Utils.default.isNull(props.config) ? /*#__PURE__*/_react.default.createElement("div", {
113
132
  style: _Utils.default.mergeStyles(containerStyle, props.config)
114
133
  }, message && /*#__PURE__*/_react.default.createElement(_Alert.default, {
@@ -123,15 +142,8 @@ const AlertBar = /*#__PURE__*/_react.default.memo(props => {
123
142
  }
124
143
  }, /*#__PURE__*/_react.default.createElement("p", {
125
144
  title: message,
126
- style: {
127
- color: 'rgba(255,255,255,0.9)',
128
- overflow: 'hidden',
129
- textOverflow: 'ellipsis',
130
- whiteSpace: 'nowrap',
131
- maxWidth: 'calc(100% - 32px)',
132
- margin: 0
133
- }
145
+ style: messageStyle
134
146
  }, message))) : null;
135
147
  });
136
148
  var _default = exports.default = AlertBar;
137
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9VdGlscyIsIl9BbGVydCIsIl9FdmVudFR5cGUiLCJfT2JzZXJ2YWJsZSIsImUiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsIkFsZXJ0QmFyIiwiUmVhY3QiLCJtZW1vIiwicHJvcHMiLCJfcHJvcHMkY29uZmlnIiwibWVzc2FnZSIsInNldE1lc3NhZ2UiLCJ1c2VTdGF0ZSIsImNvbmZpZyIsInZhcmlhbnQiLCJzZXRWYXJpYW50IiwidmlzaWJsZSIsInNldFZpc2libGUiLCJwbGFjZW1lbnQiLCJhdHRyaWJ1dGVzIiwidXNlRWZmZWN0IiwiaGFuZGxlIiwiYXBpIiwicGFyc2VkQ29uZmlnIiwiVXRpbHMiLCJwYXJzZUNvbmZpZyIsInZpZXdJZCIsImV2ZW50SGFuZGxpbmdDb25maWciLCJpc051bGwiLCJkZWZhdWx0QWN0aW9uIiwiYWN0aW9uVHlwZSIsInNjcmlwdCIsImxpbmVzIiwiY29uY2F0IiwiaWQiLCJzdWJzY3JpcHRpb25zIiwicHVibGlzaGVyIiwiZXZlbnRUeXBlIiwiRXZlbnRUeXBlIiwiTUVTU0FHRV9BUlJJVkVEIiwiYWN0aW9ucyIsInN1YnNjcmlwdGlvbiIsImxlbmd0aCIsImV2ZW50TWFuYWdlciIsImFkZFN1YnNjcmlwdGlvbnMiLCJjbGVhckNvbXBvbmVudEV2ZW50TGlzdGVuZXJzIiwiZnJhbWUiLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJjYW5jZWxBbmltYXRpb25GcmFtZSIsInRpbWVvdXQiLCJ0aW1lciIsInNldFRpbWVvdXQiLCJjbG9zZUFsZXJ0IiwiY2xlYXJUaW1lb3V0IiwiZ2V0Q2hpbGRyZW4iLCJvdmVybGF5U3R5bGUiLCJwb3NpdGlvbiIsInRvcCIsImxlZnQiLCJ0cmFuc2Zvcm0iLCJ3aWR0aCIsIm1heFdpZHRoIiwiekluZGV4IiwicG9pbnRlckV2ZW50cyIsInN0cmljdFN0eWxlIiwicGFkZGluZyIsIm1heEhlaWdodCIsImNvbnRhaW5lclN0eWxlIiwiY3JlYXRlRWxlbWVudCIsInN0eWxlIiwibWVyZ2VTdHlsZXMiLCJjbGFzc05hbWUiLCJvbkNsb3NlIiwiZGlzbWlzc2libGUiLCJib3hTaGFkb3ciLCJ0aXRsZSIsImNvbG9yIiwib3ZlcmZsb3ciLCJ0ZXh0T3ZlcmZsb3ciLCJ3aGl0ZVNwYWNlIiwibWFyZ2luIiwiX2RlZmF1bHQiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL0FsZXJ0QmFyLmpzeCJdLCJzb3VyY2VzQ29udGVudCI6WyLvu79pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFV0aWxzIGZyb20gJy4uL1V0aWxzJztcbmltcG9ydCBBbGVydCBmcm9tICdyZWFjdC1ib290c3RyYXAvQWxlcnQnO1xuaW1wb3J0IEV2ZW50VHlwZSBmcm9tICcuLi9ldmVudC9FdmVudFR5cGUnO1xuaW1wb3J0IGV2ZW50TWFuYWdlciBmcm9tICcuLi9ldmVudC9PYnNlcnZhYmxlJztcbmltcG9ydCAnLi9BbGVydEJhci5jc3MnO1xuXG5jb25zdCBBbGVydEJhciA9IFJlYWN0Lm1lbW8oKHByb3BzKSA9PiB7XG5cbiAgICBjb25zdCBbbWVzc2FnZSwgc2V0TWVzc2FnZV0gPSBSZWFjdC51c2VTdGF0ZShwcm9wcy5jb25maWcubWVzc2FnZSk7XG4gICAgY29uc3QgW3ZhcmlhbnQsIHNldFZhcmlhbnRdID0gUmVhY3QudXNlU3RhdGUocHJvcHMuY29uZmlnLnZhcmlhbnQgfHwgJ2luZm8nKTtcbiAgICBjb25zdCBbdmlzaWJsZSwgc2V0VmlzaWJsZV0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG5cbiAgICBjb25zdCBwbGFjZW1lbnQgPSBwcm9wcy5jb25maWc/LmF0dHJpYnV0ZXM/LnBsYWNlbWVudCB8fCBcIm92ZXJsYXlcIjtcblxuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIHByb3BzLmhhbmRsZS5hcGkgPSBhcGkoKTtcblxuICAgICAgICBsZXQgcGFyc2VkQ29uZmlnID0gVXRpbHMucGFyc2VDb25maWcocHJvcHMuY29uZmlnLCBwcm9wcy52aWV3SWQpO1xuICAgICAgICBsZXQgZXZlbnRIYW5kbGluZ0NvbmZpZyA9IFV0aWxzLmlzTnVsbChwYXJzZWRDb25maWcuZXZlbnRIYW5kbGluZ0NvbmZpZykgPyB7fSA6IHBhcnNlZENvbmZpZy5ldmVudEhhbmRsaW5nQ29uZmlnO1xuXG4gICAgICAgIGxldCBkZWZhdWx0QWN0aW9uID0ge1xuICAgICAgICAgICAgYWN0aW9uVHlwZTogJ3NjcmlwdCcsXG4gICAgICAgICAgICBzY3JpcHQ6IHtcbiAgICAgICAgICAgICAgICBsaW5lczogW1xuICAgICAgICAgICAgICAgICAgICBgaWYoJyR7cHJvcHMudmlld0lkfScgPT09ICRldmVudC52aWV3SWQpIHtgLFxuICAgICAgICAgICAgICAgICAgICBgICAgQCN7JHtwcm9wcy5jb25maWcuaWR9fS5tZXNzYWdlID0gJGV2ZW50LmRhdGEubWVzc2FnZWAsXG4gICAgICAgICAgICAgICAgICAgIGAgICBAI3ske3Byb3BzLmNvbmZpZy5pZH19LnZhcmlhbnQgPSAkZXZlbnQuZGF0YS5tZXNzYWdlVHlwZSA9PT0gJ0VSUk9SJyA/ICdkYW5nZXInIDogJGV2ZW50LmRhdGEubWVzc2FnZVR5cGUgPT09ICdXQVJOJyA/ICd3YXJuaW5nJyA6ICRldmVudC5kYXRhLm1lc3NhZ2VUeXBlID09PSAnU1VDQ0VTUycgPyAnc3VjY2VzcycgOiAnaW5mbydgLFxuICAgICAgICAgICAgICAgICAgICBgfWBcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKFV0aWxzLmlzTnVsbChldmVudEhhbmRsaW5nQ29uZmlnLnN1YnNjcmlwdGlvbnMpKSB7XG4gICAgICAgICAgICBldmVudEhhbmRsaW5nQ29uZmlnLnN1YnNjcmlwdGlvbnMgPSBbe1xuICAgICAgICAgICAgICAgIHB1Ymxpc2hlcjogJ2FwcGxpY2F0aW9uTWFuYWdlcicsXG4gICAgICAgICAgICAgICAgZXZlbnRUeXBlOiBFdmVudFR5cGUuTUVTU0FHRV9BUlJJVkVELFxuICAgICAgICAgICAgICAgIGFjdGlvbnM6IFtkZWZhdWx0QWN0aW9uXVxuICAgICAgICAgICAgfV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHN1YnNjcmlwdGlvbiBvZiBldmVudEhhbmRsaW5nQ29uZmlnLnN1YnNjcmlwdGlvbnMpIHtcbiAgICAgICAgICAgICAgICBpZiAoVXRpbHMuaXNOdWxsKHN1YnNjcmlwdGlvbi5hY3Rpb25zKSB8fCBzdWJzY3JpcHRpb24uYWN0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaXB0aW9uLmFjdGlvbnMgPSBbZGVmYXVsdEFjdGlvbl07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZXZlbnRNYW5hZ2VyLmFkZFN1YnNjcmlwdGlvbnMoZXZlbnRIYW5kbGluZ0NvbmZpZywgcHJvcHMuaGFuZGxlLCBwcm9wcy52aWV3SWQpO1xuXG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICBldmVudE1hbmFnZXIuY2xlYXJDb21wb25lbnRFdmVudExpc3RlbmVycyhwcm9wcy5oYW5kbGUpO1xuICAgICAgICB9O1xuXG4gICAgfSwgW10pO1xuXG4gICAgLypcbiAgICAgICBTaG93IGFuaW1hdGlvbiB3aGVuIG1lc3NhZ2UgYXJyaXZlc1xuICAgICAgIChoaWRkZW4gZmlyc3QsIHRoZW4gdmlzaWJsZSBuZXh0IGZyYW1lKVxuICAgICovXG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKG1lc3NhZ2UpIHtcbiAgICAgICAgICAgIHNldFZpc2libGUoZmFsc2UpO1xuXG4gICAgICAgICAgICBjb25zdCBmcmFtZSA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgc2V0VmlzaWJsZSh0cnVlKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gKCkgPT4gY2FuY2VsQW5pbWF0aW9uRnJhbWUoZnJhbWUpO1xuICAgICAgICB9XG4gICAgfSwgW21lc3NhZ2VdKTtcblxuICAgIC8qXG4gICAgICAgQXV0byBjbG9zZSBub24tZXJyb3IgbWVzc2FnZXNcbiAgICAqL1xuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG5cbiAgICAgICAgaWYgKCFtZXNzYWdlKSByZXR1cm47XG4gICAgICAgIGlmICh2YXJpYW50ID09PSBcImRhbmdlclwiKSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgdGltZW91dCA9IHZhcmlhbnQgPT09IFwid2FybmluZ1wiID8gNjAwMCA6IDMwMDA7XG5cbiAgICAgICAgY29uc3QgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGNsb3NlQWxlcnQoKTtcbiAgICAgICAgfSwgdGltZW91dCk7XG5cbiAgICAgICAgcmV0dXJuICgpID0+IGNsZWFyVGltZW91dCh0aW1lcik7XG5cbiAgICB9LCBbbWVzc2FnZSwgdmFyaWFudF0pO1xuXG4gICAgY29uc3QgY2xvc2VBbGVydCA9ICgpID0+IHtcbiAgICAgICAgc2V0VmlzaWJsZShmYWxzZSk7XG5cbiAgICAgICAgLy8gYWxsb3cgZmFkZS1vdXQgYW5pbWF0aW9uIHRvIGNvbXBsZXRlXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgc2V0TWVzc2FnZShudWxsKTtcbiAgICAgICAgfSwgMjUwKTtcbiAgICB9O1xuXG4gICAgY29uc3QgYXBpID0gKCkgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZ2V0IGlkKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwcm9wcy5jb25maWcuaWQ7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2V0IG1lc3NhZ2UobWVzc2FnZSkge1xuICAgICAgICAgICAgICAgIHNldE1lc3NhZ2UobWVzc2FnZSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2V0IHZhcmlhbnQodmFyaWFudCkge1xuICAgICAgICAgICAgICAgIHNldFZhcmlhbnQodmFyaWFudCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZ2V0Q2hpbGRyZW46ICgpID0+IFtdXG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IG92ZXJsYXlTdHlsZSA9IHtcbiAgICAgICAgcG9zaXRpb246IFwiYWJzb2x1dGVcIixcbiAgICAgICAgdG9wOiBcImNhbGModmFyKC0tdmlldy1oZWFkZXItaCkgKyAyNHB4KVwiLFxuICAgICAgICBsZWZ0OiBcIjUwJVwiLFxuICAgICAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlWCgtNTAlKVwiLFxuICAgICAgICB3aWR0aDogXCJjYWxjKDEwMCUgLSAxMjhweClcIixcbiAgICAgICAgbWF4V2lkdGg6IFwiNjBkdndcIixcbiAgICAgICAgekluZGV4OiAxMDUwLFxuICAgICAgICBwb2ludGVyRXZlbnRzOiBcIm5vbmVcIlxuICAgIH07XG5cbiAgICBjb25zdCBzdHJpY3RTdHlsZSA9IHtcbiAgICAgICAgcGFkZGluZzogXCIwIDMycHhcIixcbiAgICAgICAgbWF4SGVpZ2h0OiBcIjY0cHhcIlxuICAgIH07XG5cbiAgICBjb25zdCBjb250YWluZXJTdHlsZSA9IHBsYWNlbWVudCA9PT0gXCJzdHJpY3RcIlxuICAgICAgICA/IHN0cmljdFN0eWxlXG4gICAgICAgIDogb3ZlcmxheVN0eWxlO1xuXG4gICAgcmV0dXJuIChcbiAgICAgICAgIVV0aWxzLmlzTnVsbChwcm9wcy5jb25maWcpID9cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9e1V0aWxzLm1lcmdlU3R5bGVzKGNvbnRhaW5lclN0eWxlLCBwcm9wcy5jb25maWcpfT5cblxuICAgICAgICAgICAgICAgIHttZXNzYWdlICYmIChcbiAgICAgICAgICAgICAgICAgICAgPEFsZXJ0XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2BhbGVydC1mYWRlICR7dmlzaWJsZSA/IFwiYWxlcnQtc2hvd1wiIDogXCJhbGVydC1oaWRlXCJ9YH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9e3ZhcmlhbnR9XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsb3NlPXtjbG9zZUFsZXJ0fVxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzbWlzc2libGVcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludGVyRXZlbnRzOiAnYXV0bycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm94U2hhZG93OiAnMCA2cHggMTZweCByZ2JhKDAsMCwwLDAuMTgpJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT17bWVzc2FnZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogJ3JnYmEoMjU1LDI1NSwyNTUsMC45KScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dE92ZXJmbG93OiAnZWxsaXBzaXMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGl0ZVNwYWNlOiAnbm93cmFwJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4V2lkdGg6ICdjYWxjKDEwMCUgLSAzMnB4KScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge21lc3NhZ2V9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgIDwvQWxlcnQ+XG4gICAgICAgICAgICAgICAgKX1cblxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA6IG51bGxcbiAgICApO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IEFsZXJ0QmFyOyJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUMsSUFBQUEsTUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0QsSUFBQUMsTUFBQSxHQUFBRixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUUsTUFBQSxHQUFBSCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUcsVUFBQSxHQUFBSixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUksV0FBQSxHQUFBTCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0FBLE9BQUE7QUFBd0IsU0FBQUQsdUJBQUFNLENBQUEsV0FBQUEsQ0FBQSxJQUFBQSxDQUFBLENBQUFDLFVBQUEsR0FBQUQsQ0FBQSxLQUFBRSxPQUFBLEVBQUFGLENBQUE7QUFFeEIsTUFBTUcsUUFBUSxnQkFBR0MsY0FBSyxDQUFDQyxJQUFJLENBQUVDLEtBQUssSUFBSztFQUFBLElBQUFDLGFBQUE7RUFFbkMsTUFBTSxDQUFDQyxPQUFPLEVBQUVDLFVBQVUsQ0FBQyxHQUFHTCxjQUFLLENBQUNNLFFBQVEsQ0FBQ0osS0FBSyxDQUFDSyxNQUFNLENBQUNILE9BQU8sQ0FBQztFQUNsRSxNQUFNLENBQUNJLE9BQU8sRUFBRUMsVUFBVSxDQUFDLEdBQUdULGNBQUssQ0FBQ00sUUFBUSxDQUFDSixLQUFLLENBQUNLLE1BQU0sQ0FBQ0MsT0FBTyxJQUFJLE1BQU0sQ0FBQztFQUM1RSxNQUFNLENBQUNFLE9BQU8sRUFBRUMsVUFBVSxDQUFDLEdB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
149
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9VdGlscyIsIl9BbGVydCIsIl9FdmVudFR5cGUiLCJfT2JzZXJ2YWJsZSIsImUiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsIkFsZXJ0QmFyIiwiUmVhY3QiLCJtZW1vIiwicHJvcHMiLCJfcHJvcHMkY29uZmlnIiwibWVzc2FnZSIsInNldE1lc3NhZ2UiLCJ1c2VTdGF0ZSIsImNvbmZpZyIsInZhcmlhbnQiLCJzZXRWYXJpYW50IiwidmlzaWJsZSIsInNldFZpc2libGUiLCJwbGFjZW1lbnQiLCJhdHRyaWJ1dGVzIiwidXNlRWZmZWN0IiwiaGFuZGxlIiwiYXBpIiwicGFyc2VkQ29uZmlnIiwiVXRpbHMiLCJwYXJzZUNvbmZpZyIsInZpZXdJZCIsImV2ZW50SGFuZGxpbmdDb25maWciLCJpc051bGwiLCJkZWZhdWx0QWN0aW9uIiwiYWN0aW9uVHlwZSIsInNjcmlwdCIsImxpbmVzIiwiY29uY2F0IiwiaWQiLCJzdWJzY3JpcHRpb25zIiwicHVibGlzaGVyIiwiZXZlbnRUeXBlIiwiRXZlbnRUeXBlIiwiTUVTU0FHRV9BUlJJVkVEIiwiYWN0aW9ucyIsInN1YnNjcmlwdGlvbiIsImxlbmd0aCIsImV2ZW50TWFuYWdlciIsImFkZFN1YnNjcmlwdGlvbnMiLCJjbGVhckNvbXBvbmVudEV2ZW50TGlzdGVuZXJzIiwiZnJhbWUiLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJjYW5jZWxBbmltYXRpb25GcmFtZSIsInRpbWVvdXQiLCJ0aW1lciIsInNldFRpbWVvdXQiLCJjbG9zZUFsZXJ0IiwiY2xlYXJUaW1lb3V0IiwiZ2V0Q2hpbGRyZW4iLCJvdmVybGF5U3R5bGUiLCJwb3NpdGlvbiIsInRvcCIsImxlZnQiLCJ0cmFuc2Zvcm0iLCJ3aWR0aCIsIm1heFdpZHRoIiwiekluZGV4IiwicG9pbnRlckV2ZW50cyIsInN0cmljdFN0eWxlIiwicGFkZGluZyIsImhlaWdodCIsImNvbnRhaW5lclN0eWxlIiwibWVzc2FnZVN0eWxlIiwiY29sb3IiLCJ3aGl0ZVNwYWNlIiwid29yZEJyZWFrIiwibWFyZ2luIiwib3ZlcmZsb3ciLCJ0ZXh0T3ZlcmZsb3ciLCJjcmVhdGVFbGVtZW50Iiwic3R5bGUiLCJtZXJnZVN0eWxlcyIsImNsYXNzTmFtZSIsIm9uQ2xvc2UiLCJkaXNtaXNzaWJsZSIsImJveFNoYWRvdyIsInRpdGxlIiwiX2RlZmF1bHQiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL0FsZXJ0QmFyLmpzeCJdLCJzb3VyY2VzQ29udGVudCI6WyLvu79pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFV0aWxzIGZyb20gJy4uL1V0aWxzJztcbmltcG9ydCBBbGVydCBmcm9tICdyZWFjdC1ib290c3RyYXAvQWxlcnQnO1xuaW1wb3J0IEV2ZW50VHlwZSBmcm9tICcuLi9ldmVudC9FdmVudFR5cGUnO1xuaW1wb3J0IGV2ZW50TWFuYWdlciBmcm9tICcuLi9ldmVudC9PYnNlcnZhYmxlJztcbmltcG9ydCAnLi9BbGVydEJhci5jc3MnO1xuXG5jb25zdCBBbGVydEJhciA9IFJlYWN0Lm1lbW8oKHByb3BzKSA9PiB7XG5cbiAgICBjb25zdCBbbWVzc2FnZSwgc2V0TWVzc2FnZV0gPSBSZWFjdC51c2VTdGF0ZShwcm9wcy5jb25maWcubWVzc2FnZSk7XG4gICAgY29uc3QgW3ZhcmlhbnQsIHNldFZhcmlhbnRdID0gUmVhY3QudXNlU3RhdGUocHJvcHMuY29uZmlnLnZhcmlhbnQgfHwgJ2luZm8nKTtcbiAgICBjb25zdCBbdmlzaWJsZSwgc2V0VmlzaWJsZV0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG5cbiAgICBjb25zdCBwbGFjZW1lbnQgPSBwcm9wcy5jb25maWc/LmF0dHJpYnV0ZXM/LnBsYWNlbWVudCB8fCBcIm92ZXJsYXlcIjtcblxuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIHByb3BzLmhhbmRsZS5hcGkgPSBhcGkoKTtcblxuICAgICAgICBsZXQgcGFyc2VkQ29uZmlnID0gVXRpbHMucGFyc2VDb25maWcocHJvcHMuY29uZmlnLCBwcm9wcy52aWV3SWQpO1xuICAgICAgICBsZXQgZXZlbnRIYW5kbGluZ0NvbmZpZyA9IFV0aWxzLmlzTnVsbChwYXJzZWRDb25maWcuZXZlbnRIYW5kbGluZ0NvbmZpZykgPyB7fSA6IHBhcnNlZENvbmZpZy5ldmVudEhhbmRsaW5nQ29uZmlnO1xuXG4gICAgICAgIGxldCBkZWZhdWx0QWN0aW9uID0ge1xuICAgICAgICAgICAgYWN0aW9uVHlwZTogJ3NjcmlwdCcsXG4gICAgICAgICAgICBzY3JpcHQ6IHtcbiAgICAgICAgICAgICAgICBsaW5lczogW1xuICAgICAgICAgICAgICAgICAgICBgaWYoJyR7cHJvcHMudmlld0lkfScgPT09ICRldmVudC52aWV3SWQpIHtgLFxuICAgICAgICAgICAgICAgICAgICBgICAgQCN7JHtwcm9wcy5jb25maWcuaWR9fS5tZXNzYWdlID0gJGV2ZW50LmRhdGEubWVzc2FnZWAsXG4gICAgICAgICAgICAgICAgICAgIGAgICBAI3ske3Byb3BzLmNvbmZpZy5pZH19LnZhcmlhbnQgPSAkZXZlbnQuZGF0YS5tZXNzYWdlVHlwZSA9PT0gJ0VSUk9SJyA/ICdkYW5nZXInIDogJGV2ZW50LmRhdGEubWVzc2FnZVR5cGUgPT09ICdXQVJOJyA/ICd3YXJuaW5nJyA6ICRldmVudC5kYXRhLm1lc3NhZ2VUeXBlID09PSAnU1VDQ0VTUycgPyAnc3VjY2VzcycgOiAnaW5mbydgLFxuICAgICAgICAgICAgICAgICAgICBgfWBcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKFV0aWxzLmlzTnVsbChldmVudEhhbmRsaW5nQ29uZmlnLnN1YnNjcmlwdGlvbnMpKSB7XG4gICAgICAgICAgICBldmVudEhhbmRsaW5nQ29uZmlnLnN1YnNjcmlwdGlvbnMgPSBbe1xuICAgICAgICAgICAgICAgIHB1Ymxpc2hlcjogJ2FwcGxpY2F0aW9uTWFuYWdlcicsXG4gICAgICAgICAgICAgICAgZXZlbnRUeXBlOiBFdmVudFR5cGUuTUVTU0FHRV9BUlJJVkVELFxuICAgICAgICAgICAgICAgIGFjdGlvbnM6IFtkZWZhdWx0QWN0aW9uXVxuICAgICAgICAgICAgfV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHN1YnNjcmlwdGlvbiBvZiBldmVudEhhbmRsaW5nQ29uZmlnLnN1YnNjcmlwdGlvbnMpIHtcbiAgICAgICAgICAgICAgICBpZiAoVXRpbHMuaXNOdWxsKHN1YnNjcmlwdGlvbi5hY3Rpb25zKSB8fCBzdWJzY3JpcHRpb24uYWN0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaXB0aW9uLmFjdGlvbnMgPSBbZGVmYXVsdEFjdGlvbl07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZXZlbnRNYW5hZ2VyLmFkZFN1YnNjcmlwdGlvbnMoZXZlbnRIYW5kbGluZ0NvbmZpZywgcHJvcHMuaGFuZGxlLCBwcm9wcy52aWV3SWQpO1xuXG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICBldmVudE1hbmFnZXIuY2xlYXJDb21wb25lbnRFdmVudExpc3RlbmVycyhwcm9wcy5oYW5kbGUpO1xuICAgICAgICB9O1xuXG4gICAgfSwgW10pO1xuXG4gICAgLypcbiAgICAgICBTaG93IGFuaW1hdGlvbiB3aGVuIG1lc3NhZ2UgYXJyaXZlc1xuICAgICAgIChoaWRkZW4gZmlyc3QsIHRoZW4gdmlzaWJsZSBuZXh0IGZyYW1lKVxuICAgICovXG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKG1lc3NhZ2UpIHtcbiAgICAgICAgICAgIHNldFZpc2libGUoZmFsc2UpO1xuXG4gICAgICAgICAgICBjb25zdCBmcmFtZSA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgc2V0VmlzaWJsZSh0cnVlKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gKCkgPT4gY2FuY2VsQW5pbWF0aW9uRnJhbWUoZnJhbWUpO1xuICAgICAgICB9XG4gICAgfSwgW21lc3NhZ2VdKTtcblxuICAgIC8qXG4gICAgICAgQXV0byBjbG9zZSBub24tZXJyb3IgbWVzc2FnZXNcbiAgICAqL1xuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG5cbiAgICAgICAgaWYgKCFtZXNzYWdlKSByZXR1cm47XG4gICAgICAgIGlmICh2YXJpYW50ID09PSBcImRhbmdlclwiKSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgdGltZW91dCA9IHZhcmlhbnQgPT09IFwid2FybmluZ1wiID8gNjAwMCA6IDMwMDA7XG5cbiAgICAgICAgY29uc3QgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGNsb3NlQWxlcnQoKTtcbiAgICAgICAgfSwgdGltZW91dCk7XG5cbiAgICAgICAgcmV0dXJuICgpID0+IGNsZWFyVGltZW91dCh0aW1lcik7XG5cbiAgICB9LCBbbWVzc2FnZSwgdmFyaWFudF0pO1xuXG4gICAgY29uc3QgY2xvc2VBbGVydCA9ICgpID0+IHtcbiAgICAgICAgc2V0VmlzaWJsZShmYWxzZSk7XG5cbiAgICAgICAgLy8gYWxsb3cgZmFkZS1vdXQgYW5pbWF0aW9uIHRvIGNvbXBsZXRlXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgc2V0TWVzc2FnZShudWxsKTtcbiAgICAgICAgfSwgMjUwKTtcbiAgICB9O1xuXG4gICAgY29uc3QgYXBpID0gKCkgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZ2V0IGlkKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwcm9wcy5jb25maWcuaWQ7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2V0IG1lc3NhZ2UobWVzc2FnZSkge1xuICAgICAgICAgICAgICAgIHNldE1lc3NhZ2UobWVzc2FnZSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2V0IHZhcmlhbnQodmFyaWFudCkge1xuICAgICAgICAgICAgICAgIHNldFZhcmlhbnQodmFyaWFudCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZ2V0Q2hpbGRyZW46ICgpID0+IFtdXG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IG92ZXJsYXlTdHlsZSA9IHtcbiAgICAgICAgcG9zaXRpb246IFwiYWJzb2x1dGVcIixcbiAgICAgICAgdG9wOiBcImNhbGModmFyKC0tdmlldy1oZWFkZXItaCkgKyAyNHB4KVwiLFxuICAgICAgICBsZWZ0OiBcIjUwJVwiLFxuICAgICAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlWCgtNTAlKVwiLFxuICAgICAgICB3aWR0aDogXCJjYWxjKDEwMCUgLSAxMjhweClcIixcbiAgICAgICAgbWF4V2lkdGg6IFwiNjBkdndcIixcbiAgICAgICAgekluZGV4OiAxMDUwLFxuICAgICAgICBwb2ludGVyRXZlbnRzOiBcIm5vbmVcIlxuICAgIH07XG5cbiAgICBjb25zdCBzdHJpY3RTdHlsZSA9IHtcbiAgICAgICAgcGFkZGluZzogXCIwIDMycHhcIixcbiAgICAgICAgaGVpZ2h0OiBcImF1dG9cIlxuICAgIH07XG5cbiAgICBjb25zdCBjb250YWluZXJTdHlsZSA9IHBsYWNlbWVudCA9PT0gXCJzdHJpY3RcIlxuICAgICAgICA/IHN0cmljdFN0eWxlXG4gICAgICAgIDogb3ZlcmxheVN0eWxlO1xuXG4gICAgLy8gU3RyaWN0IHBsYWNlbWVudCBzaXRzIGlubGluZSB3aXRoIHN1cnJvdW5kaW5nIGNvbnRlbnQgKGUuZy4gaW5zaWRlIGFcbiAgICAvLyBzdGVwcGVyLXRpdGxlLWJhciBsYXlvdXQgYWJvdmUgYSBjYXJkKSBhbmQgbXVzdCBncm93IHRvIGZpdCBhIGxvbmdcbiAgICAvLyBtZXNzYWdlIOKAlCBvdGhlcndpc2UgdXNlcnMgc2VlIFwiV2UncmUgdW5hYmxlIHRvIHZlcmlmeSB5b3VyIENTRC4uLlwiXG4gICAgLy8gdHJ1bmNhdGVkIGF0IHRoZSBmaXJzdCBlbGxpcHNpcy4gT3ZlcmxheSBwbGFjZW1lbnQgZmxvYXRzIGFuZCBzdGF5c1xuICAgIC8vIHNpbmdsZS1saW5lIHNvIGl0IGRvZXNuJ3QgcHVzaCBwYWdlIGxheW91dCBhcm91bmQuXG4gICAgY29uc3QgbWVzc2FnZVN0eWxlID0gcGxhY2VtZW50ID09PSBcInN0cmljdFwiXG4gICAgICAgID8ge1xuICAgICAgICAgICAgY29sb3I6ICdyZ2JhKDI1NSwyNTUsMjU1LDAuOSknLFxuICAgICAgICAgICAgd2hpdGVTcGFjZTogJ25vcm1hbCcsXG4gICAgICAgICAgICB3b3JkQnJlYWs6ICdicmVhay13b3JkJyxcbiAgICAgICAgICAgIG1hcmdpbjogMFxuICAgICAgICB9XG4gICAgICAgIDoge1xuICAgICAgICAgICAgY29sb3I6ICdyZ2JhKDI1NSwyNTUsMjU1LDAuOSknLFxuICAgICAgICAgICAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICAgICAgICAgICAgdGV4dE92ZXJmbG93OiAnZWxsaXBzaXMnLFxuICAgICAgICAgICAgd2hpdGVTcGFjZTogJ25vd3JhcCcsXG4gICAgICAgICAgICBtYXhXaWR0aDogJ2NhbGMoMTAwJSAtIDMycHgpJyxcbiAgICAgICAgICAgIG1hcmdpbjogMFxuICAgICAgICB9O1xuXG4gICAgcmV0dXJuIChcbiAgICAgICAgIVV0aWxzLmlzTnVsbChwcm9wcy5jb25maWcpID9cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9e1V0aWxzLm1lcmdlU3R5bGVzKGNvbnRhaW5lclN0eWxlLCBwcm9wcy5jb25maWcpfT5cblxuICAgICAgICAgICAgICAgIHttZXNzYWdlICYmIChcbiAgICAgICAgICAgICAgICAgICAgPEFsZXJ0XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2BhbGVydC1mYWRlICR7dmlzaWJsZSA/IFwiYWxlcnQtc2hvd1wiIDogXCJhbGVydC1oaWRlXCJ9YH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9e3ZhcmlhbnR9XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsb3NlPXtjbG9zZUFsZXJ0fVxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzbWlzc2libGVcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludGVyRXZlbnRzOiAnYXV0bycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm94U2hhZG93OiAnMCA2cHggMTZweCByZ2JhKDAsMCwwLDAuMTgpJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT17bWVzc2FnZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17bWVzc2FnZVN0eWxlfVxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHttZXNzYWdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgICA8L0FsZXJ0PlxuICAgICAgICAgICAgICAgICl9XG5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgOiBudWxsXG4gICAgKTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBBbGVydEJhcjsiXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFDLElBQUFBLE1BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNELElBQUFDLE1BQUEsR0FBQUYsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFFLE1BQUEsR0FBQUgsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElB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