hy-virtual-tree 1.1.12 → 1.1.13
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/CHANGELOG.md +8 -0
- package/dist/index.css +18 -0
- package/dist/index.js +19 -4
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
package/dist/index.css
CHANGED
|
@@ -207,6 +207,9 @@
|
|
|
207
207
|
|
|
208
208
|
.hy-tree {
|
|
209
209
|
--hy-color-primary: #2df2ff;
|
|
210
|
+
--hy-color-danger: #f56c6c;
|
|
211
|
+
--hy-color-success: #2ce898;
|
|
212
|
+
--hy-color-gradient: linear-gradient(270deg, #27acff 0%, #2ddbf4 100%);
|
|
210
213
|
}
|
|
211
214
|
.hy-tree > div {
|
|
212
215
|
padding: 0 10px;
|
|
@@ -302,3 +305,18 @@
|
|
|
302
305
|
.hy-tree .disabled {
|
|
303
306
|
cursor: disabled;
|
|
304
307
|
}
|
|
308
|
+
.hy-tree .hy-text-success {
|
|
309
|
+
font-weight: bold;
|
|
310
|
+
color: var(--hy-color-success);
|
|
311
|
+
}
|
|
312
|
+
.hy-tree .hy-text-danger {
|
|
313
|
+
font-weight: bold;
|
|
314
|
+
color: var(--hy-color-danger);
|
|
315
|
+
}
|
|
316
|
+
.hy-tree .hy-text-gradient {
|
|
317
|
+
font-weight: bold;
|
|
318
|
+
color: #ffffff;
|
|
319
|
+
background: var(--hy-color-gradient);
|
|
320
|
+
-webkit-background-clip: text;
|
|
321
|
+
-webkit-text-fill-color: transparent;
|
|
322
|
+
}
|
package/dist/index.js
CHANGED
|
@@ -417,7 +417,8 @@ const useConfig = (config) => {
|
|
|
417
417
|
showCount: false,
|
|
418
418
|
total: 'total',
|
|
419
419
|
count: 'count',
|
|
420
|
-
showStatus: false
|
|
420
|
+
showStatus: false,
|
|
421
|
+
clearEmptyBusiness: false
|
|
421
422
|
}, config.props);
|
|
422
423
|
let rowSelection = Object.assign({
|
|
423
424
|
type: 'checkbox',
|
|
@@ -452,6 +453,7 @@ const useConfig = (config) => {
|
|
|
452
453
|
disabled: 'disabled',
|
|
453
454
|
showStatus: false,
|
|
454
455
|
showCount: (data) => data.dataType !== 3,
|
|
456
|
+
clearEmptyBusiness: false,
|
|
455
457
|
...(config.props || {}),
|
|
456
458
|
value: 'onlyId',
|
|
457
459
|
label: 'label',
|
|
@@ -475,6 +477,7 @@ const useConfig = (config) => {
|
|
|
475
477
|
disabled: 'disabled',
|
|
476
478
|
showStatus: false,
|
|
477
479
|
showCount: false,
|
|
480
|
+
clearEmptyBusiness: false,
|
|
478
481
|
...(config.props || {}),
|
|
479
482
|
value: 'onlyId',
|
|
480
483
|
label: 'label',
|
|
@@ -490,6 +493,7 @@ const useConfig = (config) => {
|
|
|
490
493
|
disabled: 'disabled',
|
|
491
494
|
showStatus: false,
|
|
492
495
|
showCount: (data) => data.dataType !== 5,
|
|
496
|
+
clearEmptyBusiness: false,
|
|
493
497
|
...(config.props || {}),
|
|
494
498
|
value: 'onlyId',
|
|
495
499
|
label: 'label',
|
|
@@ -505,6 +509,7 @@ const useConfig = (config) => {
|
|
|
505
509
|
disabled: 'disabled',
|
|
506
510
|
showStatus: false,
|
|
507
511
|
showCount: false,
|
|
512
|
+
clearEmptyBusiness: false,
|
|
508
513
|
...(config.props || {}),
|
|
509
514
|
value: 'onlyId',
|
|
510
515
|
label: 'label',
|
|
@@ -1211,7 +1216,16 @@ const useStatus = (config, data, node) => {
|
|
|
1211
1216
|
if (['device', 'groupDevice'].includes(`${business}`)) {
|
|
1212
1217
|
if (data.dataType !== 3)
|
|
1213
1218
|
return;
|
|
1214
|
-
el.
|
|
1219
|
+
el.classList.add('hy-tree-node__status');
|
|
1220
|
+
if (data.deviceStatus === 1) {
|
|
1221
|
+
el.classList.add('hy-text-success');
|
|
1222
|
+
}
|
|
1223
|
+
else if (data.deviceStatus === 7) {
|
|
1224
|
+
el.classList.add('hy-text-danger');
|
|
1225
|
+
}
|
|
1226
|
+
else if (data.deviceStatus !== 0) {
|
|
1227
|
+
el.classList.add('hy-text-gradient');
|
|
1228
|
+
}
|
|
1215
1229
|
el.innerHTML = statusTextList[data.deviceStatus];
|
|
1216
1230
|
return el;
|
|
1217
1231
|
}
|
|
@@ -1271,7 +1285,7 @@ function createBase64WorkerFactory(base64, sourcemapArg, enableUnicodeArg) {
|
|
|
1271
1285
|
};
|
|
1272
1286
|
}
|
|
1273
1287
|
|
|
1274
|
-
var WorkerFactory$1 = /*#__PURE__*/createBase64WorkerFactory('Lyogcm9sbHVwLXBsdWdpbi13ZWItd29ya2VyLWxvYWRlciAqLwooZnVuY3Rpb24gKCkgewogICd1c2Ugc3RyaWN0JzsKCiAgLyoqIOeUn+aIkOmFjee9rumhuSAqLwogIC8qKiDnlJ/miJDlpITnkIblh73mlbAgKi8KICBjb25zdCB1c2VIYW5kbGVGdW4gPSAoY29uZmlnKSA9PiB7CiAgICAgIGNvbnN0IHsgYnVzaW5lc3MgfSA9IGNvbmZpZzsKICAgICAgY29uc3QgcHJvcHMgPSB7IC4uLmNvbmZpZy5wcm9wcyB9OwogICAgICBsZXQgeyBjb3VudEZpbHRlciwgdG90YWxGaWx0ZXIgfSA9IHByb3BzOwogICAgICAvKiog6I635Y+Wa2V55YC8ICovCiAgICAgIGZ1bmN0aW9uIGdldEtleShub2RlKSB7CiAgICAgICAgICBpZiAoIW5vZGUpCiAgICAgICAgICAgICAgcmV0dXJuICcnOwogICAgICAgICAgcmV0dXJuIG5vZGVbcHJvcHMudmFsdWVdOwogICAgICB9CiAgICAgIC8qKiDojrflj5ZsYWJlbOWAvCAqLwogICAgICBmdW5jdGlvbiBnZXRMYWJlbChub2RlKSB7CiAgICAgICAgICBpZiAoIW5vZGUpCiAgICAgICAgICAgICAgcmV0dXJuICcnOwogICAgICAgICAgcmV0dXJuIG5vZGVbcHJvcHMubGFiZWxdOwogICAgICB9CiAgICAgIC8qKiDojrflj5ZjaGlsZHJlbuWAvCAqLwogICAgICBmdW5jdGlvbiBnZXRDaGlsZHJlbihub2RlKSB7CiAgICAgICAgICBpZiAoIW5vZGUpCiAgICAgICAgICAgICAgcmV0dXJuIFtdOwogICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBub2RlW3Byb3BzLmNoaWxkcmVuXTsKICAgICAgICAgIHJldHVybiBjaGlsZHJlbiA/IFsuLi5jaGlsZHJlbl0gOiBbXTsKICAgICAgfQogICAgICAvKiog6I635Y+WY291bnTlgLwgKi8KICAgICAgZnVuY3Rpb24gZ2V0Q291bnQobm9kZSkgewogICAgICAgICAgaWYgKCFub2RlKQogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIHJldHVybiBub2RlW3Byb3BzLmNvdW50XTsKICAgICAgfQogICAgICAvKiog6I635Y+WdG90YWzlgLwgKi8KICAgICAgZnVuY3Rpb24gZ2V0VG90YWwobm9kZSkgewogICAgICAgICAgaWYgKCFub2RlKQogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIHJldHVybiBub2RlW3Byb3BzLnRvdGFsXTsKICAgICAgfQogICAgICBpZiAoWydkZXZpY2UnLCAnZ3JvdXBEZXZpY2UnXS5pbmNsdWRlcyhgJHtidXNpbmVzc31gKSkgewogICAgICAgICAgY291bnRGaWx0ZXIgPSAoZGF0YSkgPT4gewogICAgICAgICAgICAgIHJldHVybiBkYXRhLmRhdGFUeXBlID09PSAzICYmIGRhdGEub25saW5lU3RhdGUgPT09IDE7CiAgICAgICAgICB9OwogICAgICAgICAgdG90YWxGaWx0ZXIgPSAoZGF0YSkgPT4gewogICAgICAgICAgICAgIHJldHVybiBkYXRhLmRhdGFUeXBlID09PSAzOwogICAgICAgICAgfTsKICAgICAgfQogICAgICBlbHNlIGlmIChidXNpbmVzcyA9PT0gJ3VzZXInKSB7CiAgICAgICAgICBjb3VudEZpbHRlciA9IHRvdGFsRmlsdGVyID0gKGRhdGEpID0+IHsKICAgICAgICAgICAgICByZXR1cm4gZGF0YS5kYXRhVHlwZSA9PT0gNTsKICAgICAgICAgIH07CiAgICAgIH0KICAgICAgZWxzZSBpZiAoYnVzaW5lc3MgPT09ICdjcycpIHsKICAgICAgICAgIGNvdW50RmlsdGVyID0gdG90YWxGaWx0ZXIgPSAoZGF0YSkgPT4gewogICAgICAgICAgICAgIHJldHVybiBkYXRhLmRhdGFUeXBlID09PSA4OwogICAgICAgICAgfTsKICAgICAgfQogICAgICByZXR1cm4gewogICAgICAgICAgZ2V0S2V5LAogICAgICAgICAgZ2V0TGFiZWwsCiAgICAgICAgICBnZXRDaGlsZHJlbiwKICAgICAgICAgIGdldENvdW50LAogICAgICAgICAgZ2V0VG90YWwsCiAgICAgICAgICBjb3VudEZpbHRlciwKICAgICAgICAgIHRvdGFsRmlsdGVyLAogICAgICAgICAgLy8g6K6+572u6K6+5aSH54q25oCBCiAgICAgICAgICBzZXREZXZpY2VTdGF0dXM6IChkYXRhKSA9PiB7CiAgICAgICAgICAgICAgaWYgKGRhdGEub25saW5lU3RhdGUgPT09IDEpIHsKICAgICAgICAgICAgICAgICAgLy8g55uR5o6n5LitCiAgICAgICAgICAgICAgICAgIGlmIChkYXRhLm1vbml0b3IgPT09IDEgfHwgZGF0YS5iZU1vbml0b3IgPT09IDEpIHsKICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAyOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIC8vIOmAmuivneS4rQogICAgICAgICAgICAgICAgICBpZiAoZGF0YS52aWRlb0NhbGwgPT09IDEpIHsKICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAzOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIC8vIOW9leWDj+S4rQogICAgICAgICAgICAgICAgICBpZiAoZGF0YS52aWRlb1JlY29yZGluZyA9PT0gMSkgewogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDQ7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgLy8g5b2V6Z+z5LitCiAgICAgICAgICAgICAgICAgIGlmIChkYXRhLmF1ZGlvUmVjb3JkaW5nID09PSAxKSB7CiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gNTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAvLyDlub/mkq3kuK0KICAgICAgICAgICAgICAgICAgaWYgKGRhdGEuYnJvYWRjYXN0ID09PSAxKSB7CiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gNjsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAvLyBTT1MKICAgICAgICAgICAgICAgICAgaWYgKGRhdGEuc29zID09PSAxKSB7CiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gNzsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAvLyDlnKjnur8KICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIC8vIOemu+e6vwogICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgfQogICAgICB9OwogIH07CgogIGNvbnN0IGlzU3RyaW5nID0gKGUpID0+IHR5cGVvZiBlID09PSAnc3RyaW5nJzsKICBjb25zdCBpc051bWJlciA9IChlKSA9PiB0eXBlb2YgZSA9PT0gJ251bWJlcic7CiAgY29uc3QgaXNBcnJheSA9IChlKSA9PiBBcnJheS5pc0FycmF5KGUpOwoKICAvLyDlpITnkIZmaWx0ZXJDb25maWcKICBmdW5jdGlvbiBoYW5kbGVGaWx0ZXJDb25maWcoZmlsdGVyQ29uZmlnKSB7CiAgICAgIHJldHVybiAoZmlsdGVyQ29uZmlnIHx8IFtdKS5maWx0ZXIoKGl0ZW0pID0+IHsKICAgICAgICAgIHJldHVybiAoaXNTdHJpbmcoaXRlbS5wcm9wKSAmJgogICAgICAgICAgICAgIChpc1N0cmluZyhpdGVtLnZhbHVlKSB8fAogICAgICAgICAgICAgICAgICBpc051bWJlcihpdGVtLnZhbHVlKSB8fAogICAgICAgICAgICAgICAgICAoaXNBcnJheShpdGVtLnZhbHVlKSAmJiBpdGVtLmNvbmRpdGlvbiA9PT0gJ2JldHdlZW4nKSkgJiYKICAgICAgICAgICAgICAvXihlcXxuZXxpbnxub3RJbnxiZXR3ZWVufGd0fGx0fGdlfGxlKSQvLnRlc3QoaXRlbS5jb25kaXRpb24pKTsKICAgICAgfSk7CiAgfQogIC8vIOagoemqjGZpbHRlckNvbmZpZwogIGZ1bmN0aW9uIHVzZUZpbHRlckNvbmZpZyhkYXRhLCBmaWx0ZXJMaXN0KSB7CiAgICAgIGlmICghZmlsdGVyTGlzdCB8fCAhZmlsdGVyTGlzdC5sZW5ndGgpCiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgcmV0dXJuIGZpbHRlckxpc3QuZXZlcnkoKHsgcHJvcCwgdmFsdWUsIGNvbmRpdGlvbiB9KSA9PiB7CiAgICAgICAgICBjb25zdCB0YXJnZXQgPSBkYXRhW3Byb3BdOwogICAgICAgICAgc3dpdGNoIChjb25kaXRpb24pIHsKICAgICAgICAgICAgICBjYXNlICdlcSc6CiAgICAgICAgICAgICAgICAgIHJldHVybiB0YXJnZXQgPT09IHZhbHVlOwogICAgICAgICAgICAgIGNhc2UgJ25lJzoKICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldCAhPT0gdmFsdWU7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHsKICAgICAgICAgICAgICBpZiAoY29uZGl0aW9uID09PSAnYmV0d2VlbicpIHsKICAgICAgICAgICAgICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aAogICAgICAgICAgICAgICAgICAgICAgPyB0YXJnZXQgPj0gdmFsdWVbMF0gJiYgdGFyZ2V0IDw9IHZhbHVlWzFdCiAgICAgICAgICAgICAgICAgICAgICA6IGZhbHNlOwogICAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGlmIChpc051bWJlcih0YXJnZXQpKSB7CiAgICAgICAgICAgICAgaWYgKCFpc051bWJlcih2YWx1ZSkpCiAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICBzd2l0Y2ggKGNvbmRpdGlvbikgewogICAgICAgICAgICAgICAgICBjYXNlICdndCc6CiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0ID4gdmFsdWU7CiAgICAgICAgICAgICAgICAgIGNhc2UgJ2x0JzoKICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0YXJnZXQgPCB2YWx1ZTsKICAgICAgICAgICAgICAgICAgY2FzZSAnZ2UnOgogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldCA+PSB2YWx1ZTsKICAgICAgICAgICAgICAgICAgY2FzZSAnbGUnOgogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldCA8PSB2YWx1ZTsKICAgICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBlbHNlIGlmIChpc1N0cmluZyh0YXJnZXQpKSB7CiAgICAgICAgICAgICAgY29uc3QgaXNJbiA9IHRhcmdldC5pbmNsdWRlcyhgJHt2YWx1ZX1gKTsKICAgICAgICAgICAgICBzd2l0Y2ggKGNvbmRpdGlvbikgewogICAgICAgICAgICAgICAgICBjYXNlICdpbic6CiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXNJbjsKICAgICAgICAgICAgICAgICAgY2FzZSAnbm90SW4nOgogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFpc0luOwogICAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfSk7CiAgfQoKICBzZWxmLm9ubWVzc2FnZSA9IGFzeW5jIChldmVudCkgPT4gewogICAgICBjb25zdCB7IGRhdGEsIGNvbmZpZyB9ID0gZXZlbnQuZGF0YTsKICAgICAgY29uc3QgZ2VuZXJhdGVUcmVlID0gZ2VuZXJhdGVNYXBbY29uZmlnLmJ1c2luZXNzXTsKICAgICAgaWYgKCFnZW5lcmF0ZVRyZWUpIHsKICAgICAgICAgIHNlbGYuY2xvc2UoKTsKICAgICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBjb25zdCB0cmVlID0gZ2VuZXJhdGVUcmVlKGRhdGEsIGNvbmZpZyk7CiAgICAgIHNlbGYucG9zdE1lc3NhZ2UodHJlZSk7CiAgfTsKICAvLyDorr7lpIfmoJHnu5PmnoQKICBmdW5jdGlvbiBnZW5lcmF0ZURldmljZVRyZWUoZGF0YSwgY29uZmlnKSB7CiAgICAgIGNvbnN0IHsgZXhwYW5kZWRLZXlTZXQgfSA9IGNvbmZpZzsKICAgICAgY29uc3QgeyBnZXRLZXksIGdldExhYmVsLCBnZXRDaGlsZHJlbiwgY291bnRGaWx0ZXIsIHRvdGFsRmlsdGVyLCBzZXREZXZpY2VTdGF0dXMgfSA9IHVzZUhhbmRsZUZ1bihjb25maWcpOwogICAgICBjb25zdCBmaWx0ZXJMaXN0ID0gaGFuZGxlRmlsdGVyQ29uZmlnKGNvbmZpZy5idXNpbmVzc0NvbmZpZz8uZmlsdGVyQ29uZmlnKTsKICAgICAgLyoqIOiuvuWkh+agkSAqLwogICAgICBmdW5jdGlvbiBjcmVhdGVEZXZpY2VUcmVlKGRhdGEpIHsKICAgICAgICAgIGxldCBtYXhMZXZlbCA9IDE7CiAgICAgICAgICBjb25zdCB0cmVlTm9kZU1hcCA9IG5ldyBNYXAoKTsKICAgICAgICAgIGNvbnN0IGxldmVsVHJlZU5vZGVNYXAgPSBuZXcgTWFwKCk7CiAgICAgICAgICBjb25zdCBkZXZpY2VNYXAgPSBuZXcgTWFwKCk7CiAgICAgICAgICBjb25zdCB0cmF2ZXJzZSA9IChub2RlcywgbGV2ZWwgPSAxLCBwYXJlbnQgPSB1bmRlZmluZWQpID0+IHsKICAgICAgICAgICAgICBjb25zdCBzaWJsaW5ncyA9IFtdOwogICAgICAgICAgICAgIGxldCBjb3VudCA9IDA7CiAgICAgICAgICAgICAgbGV0IHRvdGFsID0gMDsKICAgICAgICAgICAgICBmb3IgKGxldCByYXdOb2RlIG9mIG5vZGVzKSB7CiAgICAgICAgICAgICAgICAgIC8vIOS4muWKoemAu+i+kQogICAgICAgICAgICAgICAgICBsZXQgY2hpbGRyZW4gPSBnZXRDaGlsZHJlbihyYXdOb2RlKTsKICAgICAgICAgICAgICAgICAgaWYgKHJhd05vZGUuZGF0YVR5cGUgIT09IDMpIHsKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRldmljZUxpc3QgPSBbW10sIFtdXTsKICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuID0gY2hpbGRyZW4gPyBjaGlsZHJlbiA6IFtdOwogICAgICAgICAgICAgICAgICAgICAgaWYgKHJhd05vZGUuZGV2aWNlTGlzdCkgewogICAgICAgICAgICAgICAgICAgICAgICAgIHJhd05vZGUuZGV2aWNlTGlzdC5mb3JFYWNoKCh2KSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLnYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmx5SWQ6IHJhd05vZGUuaWQgKyAnJyArIHYuZGV2aWNlSWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogdi5kZXZOYW1lIHx8IHYuZGV2aWNlSWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhVHlwZTogMywgLy8g5Luj6KGo6K6+5aSHCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZpY2VTdGF0dXM6IHNldERldmljZVN0YXR1cyh2KSAvLyDorr7lpIfnirbmgIEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVzZUZpbHRlckNvbmZpZyh0YXJnZXQsIGZpbHRlckxpc3QpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFyZ2V0LmRldmljZVN0YXR1cyA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZUxpc3RbMV0ucHVzaCh0YXJnZXQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlTGlzdFswXS5wdXNoKHRhcmdldCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbiA9IFsuLi5jaGlsZHJlbiwgLi4uZGV2aWNlTGlzdFswXSwgLi4uZGV2aWNlTGlzdFsxXV07CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICByYXdOb2RlID0gewogICAgICAgICAgICAgICAgICAgICAgICAgIC4uLnJhd05vZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgb25seUlkOiByYXdOb2RlLmlkLAogICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAxLCAvLyDpg6jpl6gKICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogcmF3Tm9kZS5vcmdOYW1lIHx8IHJhd05vZGUuY29tcGFueU5hbWUKICAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgLy8g6YCa55So6YC76L6RCiAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZ2V0S2V5KHJhd05vZGUpOwogICAgICAgICAgICAgICAgICBjb25zdCBub2RlID0gewogICAgICAgICAgICAgICAgICAgICAgbGV2ZWwsCiAgICAgICAgICAgICAgICAgICAgICBrZXk6IHZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgZGF0YTogcmF3Tm9kZQogICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICBub2RlLmxhYmVsID0gZ2V0TGFiZWwocmF3Tm9kZSk7CiAgICAgICAgICAgICAgICAgIG5vZGUucGFyZW50ID0gcGFyZW50OwogICAgICAgICAgICAgICAgICBub2RlLmlzTGVhZiA9ICFjaGlsZHJlbiB8fCBjaGlsZHJlbi5sZW5ndGggPT09IDA7CiAgICAgICAgICAgICAgICAgIG5vZGUuZXhwYW5kZWQgPSBleHBhbmRlZEtleVNldC5oYXModmFsdWUpOwogICAgICAgICAgICAgICAgICBpZiAoY2hpbGRyZW4gJiYgY2hpbGRyZW4ubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGxpc3QsIGNvdW50OiBjaGlsZENvdW50LCB0b3RhbDogY2hpbGRUb3RhbCB9ID0gdHJhdmVyc2UoY2hpbGRyZW4sIGxldmVsICsgMSwgbm9kZSk7CiAgICAgICAgICAgICAgICAgICAgICBub2RlLmNoaWxkcmVuID0gbGlzdDsKICAgICAgICAgICAgICAgICAgICAgIG5vZGUuY291bnQgPSBjaGlsZENvdW50IDsKICAgICAgICAgICAgICAgICAgICAgIG5vZGUudG90YWwgPSBjaGlsZFRvdGFsIDsKICAgICAgICAgICAgICAgICAgICAgIGNvdW50ICs9IGNoaWxkQ291bnQ7CiAgICAgICAgICAgICAgICAgICAgICB0b3RhbCArPSBjaGlsZFRvdGFsOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgbm9kZS5jb3VudCA9IDA7CiAgICAgICAgICAgICAgICAgICAgICBub2RlLnRvdGFsID0gMDsKICAgICAgICAgICAgICAgICAgICAgIC8vIOe7n+iuoQogICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50ICs9IGNvdW50RmlsdGVyKHJhd05vZGUpID8gMSA6IDA7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgdG90YWwgKz0gdG90YWxGaWx0ZXIocmF3Tm9kZSkgPyAxIDogMDsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBzaWJsaW5ncy5wdXNoKG5vZGUpOwogICAgICAgICAgICAgICAgICB0cmVlTm9kZU1hcC5zZXQodmFsdWUsIG5vZGUpOwogICAgICAgICAgICAgICAgICBpZiAoIWxldmVsVHJlZU5vZGVNYXAuaGFzKGxldmVsKSkgewogICAgICAgICAgICAgICAgICAgICAgbGV2ZWxUcmVlTm9kZU1hcC5zZXQobGV2ZWwsIFtdKTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpZiAobGV2ZWxUcmVlTm9kZU1hcC5oYXMobGV2ZWwpKSB7CiAgICAgICAgICAgICAgICAgICAgICBsZXZlbFRyZWVOb2RlTWFwLmdldChsZXZlbCkucHVzaChub2RlKTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAvLyDorr7lpIcKICAgICAgICAgICAgICAgICAgaWYgKHJhd05vZGUuZGF0YVR5cGUgPT09IDMpIHsKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgZGV2aWNlSWQgfSA9IG5vZGUuZGF0YTsKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRldmljZUluZm8gPSBkZXZpY2VNYXAuZ2V0KGRldmljZUlkKSB8fCBbXTsKICAgICAgICAgICAgICAgICAgICAgIGRldmljZUluZm8ucHVzaChub2RlKTsKICAgICAgICAgICAgICAgICAgICAgIGRldmljZU1hcC5zZXQoZGV2aWNlSWQsIGRldmljZUluZm8pOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmIChsZXZlbCA+IG1heExldmVsKSB7CiAgICAgICAgICAgICAgICAgIG1heExldmVsID0gbGV2ZWw7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHJldHVybiB7IGxpc3Q6IHNpYmxpbmdzLCBjb3VudCwgdG90YWwgfTsKICAgICAgICAgIH07CiAgICAgICAgICBjb25zdCB7IGxpc3QgfSA9IHRyYXZlcnNlKGRhdGEgfHwgW10pOwogICAgICAgICAgY29uc3QgdHJlZU5vZGVzID0gbGlzdDsKICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgdHJlZU5vZGVNYXAsCiAgICAgICAgICAgICAgZGV2aWNlTWFwLAogICAgICAgICAgICAgIGxldmVsVHJlZU5vZGVNYXAsCiAgICAgICAgICAgICAgbWF4TGV2ZWwsCiAgICAgICAgICAgICAgdHJlZU5vZGVzCiAgICAgICAgICB9OwogICAgICB9CiAgICAgIHJldHVybiBjcmVhdGVEZXZpY2VUcmVlKGRhdGEpOwogIH0KICAvLyDnvqTnu4Torr7lpIfmoJHnu5PmnoQKICBmdW5jdGlvbiBnZW5lcmF0ZUdyb3VwRGV2aWNlVHJlZShkYXRhLCBjb25maWcpIHsKICAgICAgY29uc3QgeyBleHBhbmRlZEtleVNldCB9ID0gY29uZmlnOwogICAgICBjb25zdCB7IGdldEtleSwgZ2V0TGFiZWwsIGdldENoaWxkcmVuLCBjb3VudEZpbHRlciwgdG90YWxGaWx0ZXIsIHNldERldmljZVN0YXR1cyB9ID0gdXNlSGFuZGxlRnVuKGNvbmZpZyk7CiAgICAgIGNvbnN0IGZpbHRlckxpc3QgPSBoYW5kbGVGaWx0ZXJDb25maWcoY29uZmlnLmJ1c2luZXNzQ29uZmlnPy5maWx0ZXJDb25maWcpOwogICAgICAvKiog576k57uE6K6+5aSH5qCRICovCiAgICAgIGZ1bmN0aW9uIGNyZWF0ZURldmljZVRyZWUoZGF0YSkgewogICAgICAgICAgbGV0IG1heExldmVsID0gMTsKICAgICAgICAgIGNvbnN0IHRyZWVOb2RlTWFwID0gbmV3IE1hcCgpOwogICAgICAgICAgY29uc3QgbGV2ZWxUcmVlTm9kZU1hcCA9IG5ldyBNYXAoKTsKICAgICAgICAgIGNvbnN0IGRldmljZU1hcCA9IG5ldyBNYXAoKTsKICAgICAgICAgIGNvbnN0IHRyYXZlcnNlID0gKG5vZGVzLCBsZXZlbCA9IDEsIHBhcmVudCA9IHVuZGVmaW5lZCkgPT4gewogICAgICAgICAgICAgIGNvbnN0IHNpYmxpbmdzID0gW107CiAgICAgICAgICAgICAgbGV0IGNvdW50ID0gMDsKICAgICAgICAgICAgICBsZXQgdG90YWwgPSAwOwogICAgICAgICAgICAgIGZvciAobGV0IHJhd05vZGUgb2Ygbm9kZXMpIHsKICAgICAgICAgICAgICAgICAgLy8g5Lia5Yqh6YC76L6RCiAgICAgICAgICAgICAgICAgIGxldCBjaGlsZHJlbiA9IGdldENoaWxkcmVuKHJhd05vZGUpOwogICAgICAgICAgICAgICAgICAvLyDnvqTnu4QKICAgICAgICAgICAgICAgICAgaWYgKHJhd05vZGUuY2hpbGRyZW4/Lmxlbmd0aCB8fAogICAgICAgICAgICAgICAgICAgICAgcmF3Tm9kZS5ncm91cExpc3Q/Lmxlbmd0aCB8fAogICAgICAgICAgICAgICAgICAgICAgIVszLCA0XS5pbmNsdWRlcyhyYXdOb2RlLmRhdGFUeXBlKSkgewogICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ3JvdXBMaXN0ID0gW107CiAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbiA9IGNoaWxkcmVuID8gY2hpbGRyZW4gOiBbXTsKICAgICAgICAgICAgICAgICAgICAgIGlmIChyYXdOb2RlLmdyb3VwTGlzdD8ubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3Tm9kZS5ncm91cExpc3QuZm9yRWFjaCgodikgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXQgPSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi52LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25seUlkOiByYXdOb2RlLmlkICsgJycgKyB2LmlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHYuZ3JvdXBOYW1lIHx8IHYuaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhVHlwZTogNCAvLyDku6PooajnvqTnu4QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBMaXN0LnB1c2godGFyZ2V0KTsKICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbiA9IFsuLi5jaGlsZHJlbiwgLi4uZ3JvdXBMaXN0XTsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIHJhd05vZGUgPSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ucmF3Tm9kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICBvbmx5SWQ6IHJhd05vZGUuaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGU6IDEsIC8vIOmDqOmXqAogICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiByYXdOb2RlLm9yZ05hbWUgfHwgcmF3Tm9kZS5jb21wYW55TmFtZQogICAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAvLyDorr7lpIcKICAgICAgICAgICAgICAgICAgaWYgKHJhd05vZGUuZGV2aWNlTGlzdD8ubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkZXZpY2VMaXN0ID0gW1tdLCBbXV07CiAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbiA9IGNoaWxkcmVuID8gY2hpbGRyZW4gOiBbXTsKICAgICAgICAgICAgICAgICAgICAgIHJhd05vZGUuZGV2aWNlTGlzdC5mb3JFYWNoKCh2KSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi52LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmx5SWQ6IHJhd05vZGUuaWQgKyAnJyArIHYuZGV2aWNlSWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiB2LmRldk5hbWUgfHwgdi5kZXZpY2VJZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGU6IDMsIC8vIOS7o+ihqOiuvuWkhwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZpY2VTdGF0dXM6IHNldERldmljZVN0YXR1cyh2KSAvLyDorr7lpIfnirbmgIEKICAgICAgICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1c2VGaWx0ZXJDb25maWcodGFyZ2V0LCBmaWx0ZXJMaXN0KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFyZ2V0LmRldmljZVN0YXR1cyA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlTGlzdFsxXS5wdXNoKHRhcmdldCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZpY2VMaXN0WzBdLnB1c2godGFyZ2V0KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4gPSBbLi4uY2hpbGRyZW4sIC4uLmRldmljZUxpc3RbMF0sIC4uLmRldmljZUxpc3RbMV1dOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIC8vIOi/h+a7pOayoeacieiuvuWkh+eahOmDqOmXqOWSjOe+pOe7hCDmraXpqqTkuIAKICAgICAgICAgICAgICAgICAgaWYgKCFjaGlsZHJlbiB8fCBjaGlsZHJlbi5sZW5ndGggPT09IDAgJiYgcmF3Tm9kZS5kYXRhVHlwZSAhPT0gMykgewogICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgLy8g6YCa55So6YC76L6RCiAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZ2V0S2V5KHJhd05vZGUpOwogICAgICAgICAgICAgICAgICBjb25zdCBub2RlID0gewogICAgICAgICAgICAgICAgICAgICAgbGV2ZWwsCiAgICAgICAgICAgICAgICAgICAgICBrZXk6IHZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgZGF0YTogcmF3Tm9kZQogICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICBub2RlLmxhYmVsID0gZ2V0TGFiZWwocmF3Tm9kZSk7CiAgICAgICAgICAgICAgICAgIG5vZGUucGFyZW50ID0gcGFyZW50OwogICAgICAgICAgICAgICAgICBub2RlLmlzTGVhZiA9ICFjaGlsZHJlbiB8fCBjaGlsZHJlbi5sZW5ndGggPT09IDA7CiAgICAgICAgICAgICAgICAgIG5vZGUuZXhwYW5kZWQgPSBleHBhbmRlZEtleVNldC5oYXModmFsdWUpOwogICAgICAgICAgICAgICAgICBpZiAoY2hpbGRyZW4gJiYgY2hpbGRyZW4ubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGxpc3QsIGNvdW50OiBjaGlsZENvdW50LCB0b3RhbDogY2hpbGRUb3RhbCB9ID0gdHJhdmVyc2UoY2hpbGRyZW4sIGxldmVsICsgMSwgbm9kZSk7CiAgICAgICAgICAgICAgICAgICAgICAvLyDov4fmu6TmsqHmnInorr7lpIfnmoTpg6jpl6jlkoznvqTnu4Qg5q2l6aqk5LqMCiAgICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGRUb3RhbCA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgbm9kZS5jaGlsZHJlbiA9IGxpc3Q7CiAgICAgICAgICAgICAgICAgICAgICBub2RlLmNvdW50ID0gY2hpbGRDb3VudCA7CiAgICAgICAgICAgICAgICAgICAgICBub2RlLnRvdGFsID0gY2hpbGRUb3RhbCA7CiAgICAgICAgICAgICAgICAgICAgICBjb3VudCArPSBjaGlsZENvdW50OwogICAgICAgICAgICAgICAgICAgICAgdG90YWwgKz0gY2hpbGRUb3RhbDsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBlbHNlIGlmIChyYXdOb2RlLmRhdGFUeXBlICE9PSAzKSB7CiAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgIG5vZGUuY291bnQgPSAwOwogICAgICAgICAgICAgICAgICAgICAgbm9kZS50b3RhbCA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAvLyDnu5/orqEKICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCArPSBjb3VudEZpbHRlcihyYXdOb2RlKSA/IDEgOiAwOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsICs9IHRvdGFsRmlsdGVyKHJhd05vZGUpID8gMSA6IDA7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgc2libGluZ3MucHVzaChub2RlKTsKICAgICAgICAgICAgICAgICAgdHJlZU5vZGVNYXAuc2V0KHZhbHVlLCBub2RlKTsKICAgICAgICAgICAgICAgICAgaWYgKCFsZXZlbFRyZWVOb2RlTWFwLmhhcyhsZXZlbCkpIHsKICAgICAgICAgICAgICAgICAgICAgIGxldmVsVHJlZU5vZGVNYXAuc2V0KGxldmVsLCBbXSk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaWYgKGxldmVsVHJlZU5vZGVNYXAuaGFzKGxldmVsKSkgewogICAgICAgICAgICAgICAgICAgICAgbGV2ZWxUcmVlTm9kZU1hcC5nZXQobGV2ZWwpLnB1c2gobm9kZSk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgLy8g6K6+5aSHCiAgICAgICAgICAgICAgICAgIGlmIChyYXdOb2RlLmRhdGFUeXBlID09PSAzKSB7CiAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGRldmljZUlkIH0gPSBub2RlLmRhdGE7CiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkZXZpY2VJbmZvID0gZGV2aWNlTWFwLmdldChkZXZpY2VJZCkgfHwgW107CiAgICAgICAgICAgICAgICAgICAgICBkZXZpY2VJbmZvLnB1c2gobm9kZSk7CiAgICAgICAgICAgICAgICAgICAgICBkZXZpY2VNYXAuc2V0KGRldmljZUlkLCBkZXZpY2VJbmZvKTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAobGV2ZWwgPiBtYXhMZXZlbCkgewogICAgICAgICAgICAgICAgICBtYXhMZXZlbCA9IGxldmVsOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICByZXR1cm4geyBsaXN0OiBzaWJsaW5ncywgY291bnQsIHRvdGFsIH07CiAgICAgICAgICB9OwogICAgICAgICAgY29uc3QgeyBsaXN0IH0gPSB0cmF2ZXJzZShkYXRhIHx8IFtdKTsKICAgICAgICAgIGNvbnN0IHRyZWVOb2RlcyA9IGxpc3Q7CiAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgIHRyZWVOb2RlTWFwLAogICAgICAgICAgICAgIGRldmljZU1hcCwKICAgICAgICAgICAgICBsZXZlbFRyZWVOb2RlTWFwLAogICAgICAgICAgICAgIG1heExldmVsLAogICAgICAgICAgICAgIHRyZWVOb2RlcwogICAgICAgICAgfTsKICAgICAgfQogICAgICByZXR1cm4gY3JlYXRlRGV2aWNlVHJlZShkYXRhKTsKICB9CiAgLy8g576k57uE5qCR57uT5p6ECiAgZnVuY3Rpb24gZ2VuZXJhdGVHcm91cFRyZWUoZGF0YSwgY29uZmlnKSB7CiAgICAgIGNvbnN0IHsgZXhwYW5kZWRLZXlTZXQgfSA9IGNvbmZpZzsKICAgICAgY29uc3QgeyBnZXRLZXksIGdldExhYmVsLCBnZXRDaGlsZHJlbn0gPSB1c2VIYW5kbGVGdW4oY29uZmlnKTsKICAgICAgLyoqIOe+pOe7hOagkSAqLwogICAgICBmdW5jdGlvbiBjcmVhdGVHcm91cFRyZWUoZGF0YSkgewogICAgICAgICAgbGV0IG1heExldmVsID0gMTsKICAgICAgICAgIGNvbnN0IHRyZWVOb2RlTWFwID0gbmV3IE1hcCgpOwogICAgICAgICAgY29uc3QgbGV2ZWxUcmVlTm9kZU1hcCA9IG5ldyBNYXAoKTsKICAgICAgICAgIGNvbnN0IHRyYXZlcnNlID0gKG5vZGVzLCBsZXZlbCA9IDEsIHBhcmVudCA9IHVuZGVmaW5lZCkgPT4gewogICAgICAgICAgICAgIGNvbnN0IHNpYmxpbmdzID0gW107CiAgICAgICAgICAgICAgbGV0IGNvdW50ID0gMDsKICAgICAgICAgICAgICBsZXQgdG90YWwgPSAwOwogICAgICAgICAgICAgIGZvciAobGV0IHJhd05vZGUgb2Ygbm9kZXMpIHsKICAgICAgICAgICAgICAgICAgLy8g5Lia5Yqh6YC76L6RCiAgICAgICAgICAgICAgICAgIGxldCBjaGlsZHJlbiA9IGdldENoaWxkcmVuKHJhd05vZGUpOwogICAgICAgICAgICAgICAgICAvLyDnvqTnu4QKICAgICAgICAgICAgICAgICAgaWYgKHJhd05vZGUuY2hpbGRyZW4/Lmxlbmd0aCB8fAogICAgICAgICAgICAgICAgICAgICAgcmF3Tm9kZS5ncm91cExpc3Q/Lmxlbmd0aCB8fAogICAgICAgICAgICAgICAgICAgICAgIVszLCA0XS5pbmNsdWRlcyhyYXdOb2RlLmRhdGFUeXBlKSkgewogICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ3JvdXBMaXN0ID0gW107CiAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbiA9IGNoaWxkcmVuID8gY2hpbGRyZW4gOiBbXTsKICAgICAgICAgICAgICAgICAgICAgIGlmIChyYXdOb2RlLmdyb3VwTGlzdD8ubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3Tm9kZS5ncm91cExpc3QuZm9yRWFjaCgodikgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXQgPSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi52LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25seUlkOiByYXdOb2RlLmlkICsgJycgKyB2LmlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHYuZ3JvdXBOYW1lIHx8IHYuaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhVHlwZTogNCAvLyDku6PooajnvqTnu4QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBMaXN0LnB1c2godGFyZ2V0KTsKICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbiA9IFsuLi5jaGlsZHJlbiwgLi4uZ3JvdXBMaXN0XTsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIHJhd05vZGUgPSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ucmF3Tm9kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICBvbmx5SWQ6IHJhd05vZGUuaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGU6IDEsIC8vIOmDqOmXqAogICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiByYXdOb2RlLm9yZ05hbWUgfHwgcmF3Tm9kZS5jb21wYW55TmFtZQogICAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAvLyDorr7lpIcKICAgICAgICAgICAgICAgICAgaWYgKHJhd05vZGUuZGV2aWNlTGlzdD8ubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgICBjb3VudCA9IHJhd05vZGUuZGV2aWNlTGlzdC5yZWR1Y2UoKHZhbHVlLCB2KSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlICsgKHYub25saW5lU3RhdGUgPT09IDEgPyAxIDogMCk7CiAgICAgICAgICAgICAgICAgICAgICB9LCBjb3VudCk7CiAgICAgICAgICAgICAgICAgICAgICB0b3RhbCArPSByYXdOb2RlLmRldmljZUxpc3QubGVuZ3RoIHx8IDA7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgLy8g5aSE55CG6YC76L6RCiAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZ2V0S2V5KHJhd05vZGUpOwogICAgICAgICAgICAgICAgICBjb25zdCBub2RlID0gewogICAgICAgICAgICAgICAgICAgICAgbGV2ZWwsCiAgICAgICAgICAgICAgICAgICAgICBrZXk6IHZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgZGF0YTogcmF3Tm9kZQogICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICBub2RlLmxhYmVsID0gZ2V0TGFiZWwocmF3Tm9kZSk7CiAgICAgICAgICAgICAgICAgIG5vZGUucGFyZW50ID0gcGFyZW50OwogICAgICAgICAgICAgICAgICBub2RlLmlzTGVhZiA9ICFjaGlsZHJlbiB8fCBjaGlsZHJlbi5sZW5ndGggPT09IDA7CiAgICAgICAgICAgICAgICAgIG5vZGUuZXhwYW5kZWQgPSBleHBhbmRlZEtleVNldC5oYXModmFsdWUpOwogICAgICAgICAgICAgICAgICBpZiAoY2hpbGRyZW4gJiYgY2hpbGRyZW4ubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGxpc3QsIGNvdW50OiBjaGlsZENvdW50LCB0b3RhbDogY2hpbGRUb3RhbCB9ID0gdHJhdmVyc2UoY2hpbGRyZW4sIGxldmVsICsgMSwgbm9kZSk7CiAgICAgICAgICAgICAgICAgICAgICAvLyDov4fmu6TmsqHmnInorr7lpIfnmoTpg6jpl6jlkoznvqTnu4Qg5q2l6aqk5LqMCiAgICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGRUb3RhbCA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgbm9kZS5jaGlsZHJlbiA9IGxpc3Q7CiAgICAgICAgICAgICAgICAgICAgICBub2RlLmNvdW50ID0gY2hpbGRDb3VudCA7CiAgICAgICAgICAgICAgICAgICAgICBub2RlLnRvdGFsID0gY2hpbGRUb3RhbCA7CiAgICAgICAgICAgICAgICAgICAgICBjb3VudCArPSBjaGlsZENvdW50OwogICAgICAgICAgICAgICAgICAgICAgdG90YWwgKz0gY2hpbGRUb3RhbDsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBlbHNlIGlmIChyYXdOb2RlLmRhdGFUeXBlICE9PSAzKSB7CiAgICAgICAgICAgICAgICAgICAgICBpZiAodG90YWwgPT09IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuY291bnQgPSBjb3VudDsKICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLnRvdGFsID0gdG90YWw7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgc2libGluZ3MucHVzaChub2RlKTsKICAgICAgICAgICAgICAgICAgdHJlZU5vZGVNYXAuc2V0KHZhbHVlLCBub2RlKTsKICAgICAgICAgICAgICAgICAgaWYgKCFsZXZlbFRyZWVOb2RlTWFwLmhhcyhsZXZlbCkpIHsKICAgICAgICAgICAgICAgICAgICAgIGxldmVsVHJlZU5vZGVNYXAuc2V0KGxldmVsLCBbXSk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaWYgKGxldmVsVHJlZU5vZGVNYXAuaGFzKGxldmVsKSkgewogICAgICAgICAgICAgICAgICAgICAgbGV2ZWxUcmVlTm9kZU1hcC5nZXQobGV2ZWwpLnB1c2gobm9kZSk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKGxldmVsID4gbWF4TGV2ZWwpIHsKICAgICAgICAgICAgICAgICAgbWF4TGV2ZWwgPSBsZXZlbDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgcmV0dXJuIHsgbGlzdDogc2libGluZ3MsIGNvdW50LCB0b3RhbCB9OwogICAgICAgICAgfTsKICAgICAgICAgIGNvbnN0IHsgbGlzdCB9ID0gdHJhdmVyc2UoZGF0YSB8fCBbXSk7CiAgICAgICAgICBjb25zdCB0cmVlTm9kZXMgPSBsaXN0OwogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICB0cmVlTm9kZU1hcCwKICAgICAgICAgICAgICBsZXZlbFRyZWVOb2RlTWFwLAogICAgICAgICAgICAgIG1heExldmVsLAogICAgICAgICAgICAgIHRyZWVOb2RlcwogICAgICAgICAgfTsKICAgICAgfQogICAgICByZXR1cm4gY3JlYXRlR3JvdXBUcmVlKGRhdGEpOwogIH0KICAvLyDnlKjmiLfmoJHnu5PmnoQKICBmdW5jdGlvbiBnZW5lcmF0ZVVzZXJUcmVlKGRhdGEsIGNvbmZpZykgewogICAgICBjb25zdCB7IGV4cGFuZGVkS2V5U2V0IH0gPSBjb25maWc7CiAgICAgIGNvbnN0IHsgZ2V0S2V5LCBnZXRMYWJlbCwgZ2V0Q2hpbGRyZW4sIGNvdW50RmlsdGVyLCB0b3RhbEZpbHRlciB9ID0gdXNlSGFuZGxlRnVuKGNvbmZpZyk7CiAgICAgIGNvbnN0IGZpbHRlckxpc3QgPSBoYW5kbGVGaWx0ZXJDb25maWcoY29uZmlnLmJ1c2luZXNzQ29uZmlnPy5maWx0ZXJDb25maWcpOwogICAgICAvKiog55So5oi35qCRICovCiAgICAgIGZ1bmN0aW9uIGNyZWF0ZVVzZXJUcmVlKGRhdGEpIHsKICAgICAgICAgIGxldCBtYXhMZXZlbCA9IDE7CiAgICAgICAgICBjb25zdCB0cmVlTm9kZU1hcCA9IG5ldyBNYXAoKTsKICAgICAgICAgIGNvbnN0IGxldmVsVHJlZU5vZGVNYXAgPSBuZXcgTWFwKCk7CiAgICAgICAgICBjb25zdCB1c2VyTWFwID0gbmV3IE1hcCgpOwogICAgICAgICAgY29uc3QgdHJhdmVyc2UgPSAobm9kZXMsIGxldmVsID0gMSwgcGFyZW50ID0gdW5kZWZpbmVkKSA9PiB7CiAgICAgICAgICAgICAgY29uc3Qgc2libGluZ3MgPSBbXTsKICAgICAgICAgICAgICBsZXQgY291bnQgPSAwOwogICAgICAgICAgICAgIGxldCB0b3RhbCA9IDA7CiAgICAgICAgICAgICAgZm9yIChsZXQgcmF3Tm9kZSBvZiBub2RlcykgewogICAgICAgICAgICAgICAgICAvLyDkuJrliqHpgLvovpEKICAgICAgICAgICAgICAgICAgbGV0IGNoaWxkcmVuID0gZ2V0Q2hpbGRyZW4ocmF3Tm9kZSk7CiAgICAgICAgICAgICAgICAgIGlmIChyYXdOb2RlLmRhdGFUeXBlICE9PSA1KSB7CiAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbiA9IGNoaWxkcmVuID8gY2hpbGRyZW4gOiBbXTsKICAgICAgICAgICAgICAgICAgICAgIGlmIChyYXdOb2RlLmRldmljZVVzZXJMaXN0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3Tm9kZS5kZXZpY2VVc2VyTGlzdC5mb3JFYWNoKCh2KSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLnYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmx5SWQ6IHJhd05vZGUuaWQgKyAnJyArIHYuaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogdi5uYW1lIHx8IHYuaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhVHlwZTogNSwgLy8g5Luj6KGo55So5oi3CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1c2VGaWx0ZXJDb25maWcodGFyZ2V0LCBmaWx0ZXJMaXN0KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4ucHVzaCh0YXJnZXQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICByYXdOb2RlID0gewogICAgICAgICAgICAgICAgICAgICAgICAgIC4uLnJhd05vZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgb25seUlkOiByYXdOb2RlLmlkLAogICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAxLCAvLyDpg6jpl6gKICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogcmF3Tm9kZS5vcmdOYW1lIHx8IHJhd05vZGUuY29tcGFueU5hbWUKICAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgLy8g6L+H5ruk5rKh5pyJ55So5oi355qE6YOo6ZeoIOatpemqpOS4gAogICAgICAgICAgICAgICAgICBpZiAoIWNoaWxkcmVuIHx8IGNoaWxkcmVuLmxlbmd0aCA9PT0gMCAmJiByYXdOb2RlLmRhdGFUeXBlICE9PSA1KSB7CiAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAvLyDpgJrnlKjpgLvovpEKICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBnZXRLZXkocmF3Tm9kZSk7CiAgICAgICAgICAgICAgICAgIGNvbnN0IG5vZGUgPSB7CiAgICAgICAgICAgICAgICAgICAgICBsZXZlbCwKICAgICAgICAgICAgICAgICAgICAgIGtleTogdmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICBkYXRhOiByYXdOb2RlCiAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgIG5vZGUubGFiZWwgPSBnZXRMYWJlbChyYXdOb2RlKTsKICAgICAgICAgICAgICAgICAgbm9kZS5wYXJlbnQgPSBwYXJlbnQ7CiAgICAgICAgICAgICAgICAgIG5vZGUuaXNMZWFmID0gIWNoaWxkcmVuIHx8IGNoaWxkcmVuLmxlbmd0aCA9PT0gMDsKICAgICAgICAgICAgICAgICAgbm9kZS5leHBhbmRlZCA9IGV4cGFuZGVkS2V5U2V0Lmhhcyh2YWx1ZSk7CiAgICAgICAgICAgICAgICAgIGlmIChjaGlsZHJlbiAmJiBjaGlsZHJlbi5sZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgbGlzdCwgY291bnQ6IGNoaWxkQ291bnQsIHRvdGFsOiBjaGlsZFRvdGFsIH0gPSB0cmF2ZXJzZShjaGlsZHJlbiwgbGV2ZWwgKyAxLCBub2RlKTsKICAgICAgICAgICAgICAgICAgICAgIC8vIOi/h+a7pOayoeacieeUqOaIt+eahOmDqOmXqCDmraXpqqTkuowKICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZFRvdGFsID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBub2RlLmNoaWxkcmVuID0gbGlzdDsKICAgICAgICAgICAgICAgICAgICAgIG5vZGUuY291bnQgPSBjaGlsZENvdW50IDsKICAgICAgICAgICAgICAgICAgICAgIG5vZGUudG90YWwgPSBjaGlsZFRvdGFsIDsKICAgICAgICAgICAgICAgICAgICAgIGNvdW50ICs9IGNoaWxkQ291bnQ7CiAgICAgICAgICAgICAgICAgICAgICB0b3RhbCArPSBjaGlsZFRvdGFsOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgbm9kZS5jb3VudCA9IDA7CiAgICAgICAgICAgICAgICAgICAgICBub2RlLnRvdGFsID0gMDsKICAgICAgICAgICAgICAgICAgICAgIC8vIOe7n+iuoQogICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50ICs9IGNvdW50RmlsdGVyKHJhd05vZGUpID8gMSA6IDA7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgdG90YWwgKz0gdG90YWxGaWx0ZXIocmF3Tm9kZSkgPyAxIDogMDsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBzaWJsaW5ncy5wdXNoKG5vZGUpOwogICAgICAgICAgICAgICAgICB0cmVlTm9kZU1hcC5zZXQodmFsdWUsIG5vZGUpOwogICAgICAgICAgICAgICAgICBpZiAoIWxldmVsVHJlZU5vZGVNYXAuaGFzKGxldmVsKSkgewogICAgICAgICAgICAgICAgICAgICAgbGV2ZWxUcmVlTm9kZU1hcC5zZXQobGV2ZWwsIFtdKTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpZiAobGV2ZWxUcmVlTm9kZU1hcC5oYXMobGV2ZWwpKSB7CiAgICAgICAgICAgICAgICAgICAgICBsZXZlbFRyZWVOb2RlTWFwLmdldChsZXZlbCkucHVzaChub2RlKTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAvLyDnlKjmiLcKICAgICAgICAgICAgICAgICAgaWYgKHJhd05vZGUuZGF0YVR5cGUgPT09IDUpIHsKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgaWQgfSA9IG5vZGUuZGF0YTsKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVzZXJMaXN0ID0gdXNlck1hcC5nZXQoaWQpIHx8IFtdOwogICAgICAgICAgICAgICAgICAgICAgdXNlckxpc3QucHVzaChub2RlKTsKICAgICAgICAgICAgICAgICAgICAgIHVzZXJNYXAuc2V0KGlkLCB1c2VyTGlzdCk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKGxldmVsID4gbWF4TGV2ZWwpIHsKICAgICAgICAgICAgICAgICAgbWF4TGV2ZWwgPSBsZXZlbDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgcmV0dXJuIHsgbGlzdDogc2libGluZ3MsIGNvdW50LCB0b3RhbCB9OwogICAgICAgICAgfTsKICAgICAgICAgIGNvbnN0IHsgbGlzdCB9ID0gdHJhdmVyc2UoZGF0YSB8fCBbXSk7CiAgICAgICAgICBjb25zdCB0cmVlTm9kZXMgPSBsaXN0OwogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICB0cmVlTm9kZU1hcCwKICAgICAgICAgICAgICB1c2VyTWFwLAogICAgICAgICAgICAgIGxldmVsVHJlZU5vZGVNYXAsCiAgICAgICAgICAgICAgbWF4TGV2ZWwsCiAgICAgICAgICAgICAgdHJlZU5vZGVzCiAgICAgICAgICB9OwogICAgICB9CiAgICAgIHJldHVybiBjcmVhdGVVc2VyVHJlZShkYXRhKTsKICB9CiAgLy8g6YeH6ZuG56uZ5qCR57uT5p6ECiAgZnVuY3Rpb24gZ2VuZXJhdGVDc1RyZWUoZGF0YSwgY29uZmlnKSB7CiAgICAgIGNvbnN0IHsgZXhwYW5kZWRLZXlTZXQgfSA9IGNvbmZpZzsKICAgICAgY29uc3QgeyBnZXRLZXksIGdldExhYmVsLCBnZXRDaGlsZHJlbiwgY291bnRGaWx0ZXIsIHRvdGFsRmlsdGVyIH0gPSB1c2VIYW5kbGVGdW4oY29uZmlnKTsKICAgICAgY29uc3QgZmlsdGVyTGlzdCA9IGhhbmRsZUZpbHRlckNvbmZpZyhjb25maWcuYnVzaW5lc3NDb25maWc/LmZpbHRlckNvbmZpZyk7CiAgICAgIC8qKiDph4fpm4bnq5nmoJEgKi8KICAgICAgZnVuY3Rpb24gY3JlYXRlQ3NUcmVlKGRhdGEpIHsKICAgICAgICAgIGxldCBtYXhMZXZlbCA9IDE7CiAgICAgICAgICBjb25zdCB0cmVlTm9kZU1hcCA9IG5ldyBNYXAoKTsKICAgICAgICAgIGNvbnN0IGxldmVsVHJlZU5vZGVNYXAgPSBuZXcgTWFwKCk7CiAgICAgICAgICBjb25zdCBjc01hcCA9IG5ldyBNYXAoKTsKICAgICAgICAgIGNvbnN0IHRyYXZlcnNlID0gKG5vZGVzLCBsZXZlbCA9IDEsIHBhcmVudCA9IHVuZGVmaW5lZCkgPT4gewogICAgICAgICAgICAgIGNvbnN0IHNpYmxpbmdzID0gW107CiAgICAgICAgICAgICAgbGV0IGNvdW50ID0gMDsKICAgICAgICAgICAgICBsZXQgdG90YWwgPSAwOwogICAgICAgICAgICAgIGZvciAobGV0IHJhd05vZGUgb2Ygbm9kZXMpIHsKICAgICAgICAgICAgICAgICAgLy8g5Lia5Yqh6YC76L6RCiAgICAgICAgICAgICAgICAgIGxldCBjaGlsZHJlbiA9IGdldENoaWxkcmVuKHJhd05vZGUpOwogICAgICAgICAgICAgICAgICBpZiAocmF3Tm9kZS5kYXRhVHlwZSAhPT0gOCkgewogICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4gPSBjaGlsZHJlbiA/IGNoaWxkcmVuIDogW107CiAgICAgICAgICAgICAgICAgICAgICBpZiAocmF3Tm9kZS5jc0xpc3QpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICByYXdOb2RlLmNzTGlzdC5mb3JFYWNoKCh2KSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLnYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmx5SWQ6IHJhd05vZGUuaWQgKyAnJyArIHYuaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogdi5zbmFtZSB8fCB2LnNjb2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGU6IDgsIC8vIOS7o+ihqOmHh+mbhuermQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodXNlRmlsdGVyQ29uZmlnKHRhcmdldCwgZmlsdGVyTGlzdCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuLnB1c2godGFyZ2V0KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgcmF3Tm9kZSA9IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5yYXdOb2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuLAogICAgICAgICAgICAgICAgICAgICAgICAgIG9ubHlJZDogcmF3Tm9kZS5pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhVHlwZTogMSwgLy8g6YOo6ZeoCiAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHJhd05vZGUub3JnTmFtZSB8fCByYXdOb2RlLmNvbXBhbnlOYW1lCiAgICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIC8vIOi/h+a7pOayoeaciemHh+mbhuWZqOeahOmDqOmXqCDmraXpqqTkuIAKICAgICAgICAgICAgICAgICAgaWYgKCFjaGlsZHJlbiB8fCBjaGlsZHJlbi5sZW5ndGggPT09IDAgJiYgcmF3Tm9kZS5kYXRhVHlwZSAhPT0gOCkgewogICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgLy8g6YCa55So6YC76L6RCiAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZ2V0S2V5KHJhd05vZGUpOwogICAgICAgICAgICAgICAgICBjb25zdCBub2RlID0gewogICAgICAgICAgICAgICAgICAgICAgbGV2ZWwsCiAgICAgICAgICAgICAgICAgICAgICBrZXk6IHZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgZGF0YTogcmF3Tm9kZQogICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICBub2RlLmxhYmVsID0gZ2V0TGFiZWwocmF3Tm9kZSk7CiAgICAgICAgICAgICAgICAgIG5vZGUucGFyZW50ID0gcGFyZW50OwogICAgICAgICAgICAgICAgICBub2RlLmlzTGVhZiA9ICFjaGlsZHJlbiB8fCBjaGlsZHJlbi5sZW5ndGggPT09IDA7CiAgICAgICAgICAgICAgICAgIG5vZGUuZXhwYW5kZWQgPSBleHBhbmRlZEtleVNldC5oYXModmFsdWUpOwogICAgICAgICAgICAgICAgICBpZiAoY2hpbGRyZW4gJiYgY2hpbGRyZW4ubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGxpc3QsIGNvdW50OiBjaGlsZENvdW50LCB0b3RhbDogY2hpbGRUb3RhbCB9ID0gdHJhdmVyc2UoY2hpbGRyZW4sIGxldmVsICsgMSwgbm9kZSk7CiAgICAgICAgICAgICAgICAgICAgICAvLyDov4fmu6TmsqHmnInph4fpm4blmajnmoTpg6jpl6gg5q2l6aqk5LqMCiAgICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGRUb3RhbCA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgbm9kZS5jaGlsZHJlbiA9IGxpc3Q7CiAgICAgICAgICAgICAgICAgICAgICBub2RlLmNvdW50ID0gY2hpbGRDb3VudCA7CiAgICAgICAgICAgICAgICAgICAgICBub2RlLnRvdGFsID0gY2hpbGRUb3RhbCA7CiAgICAgICAgICAgICAgICAgICAgICBjb3VudCArPSBjaGlsZENvdW50OwogICAgICAgICAgICAgICAgICAgICAgdG90YWwgKz0gY2hpbGRUb3RhbDsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgIG5vZGUuY291bnQgPSAwOwogICAgICAgICAgICAgICAgICAgICAgbm9kZS50b3RhbCA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAvLyDnu5/orqEKICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCArPSBjb3VudEZpbHRlcihyYXdOb2RlKSA/IDEgOiAwOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsICs9IHRvdGFsRmlsdGVyKHJhd05vZGUpID8gMSA6IDA7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgc2libGluZ3MucHVzaChub2RlKTsKICAgICAgICAgICAgICAgICAgdHJlZU5vZGVNYXAuc2V0KHZhbHVlLCBub2RlKTsKICAgICAgICAgICAgICAgICAgaWYgKCFsZXZlbFRyZWVOb2RlTWFwLmhhcyhsZXZlbCkpIHsKICAgICAgICAgICAgICAgICAgICAgIGxldmVsVHJlZU5vZGVNYXAuc2V0KGxldmVsLCBbXSk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaWYgKGxldmVsVHJlZU5vZGVNYXAuaGFzKGxldmVsKSkgewogICAgICAgICAgICAgICAgICAgICAgbGV2ZWxUcmVlTm9kZU1hcC5nZXQobGV2ZWwpLnB1c2gobm9kZSk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgLy8g6YeH6ZuG56uZCiAgICAgICAgICAgICAgICAgIGlmIChyYXdOb2RlLmRhdGFUeXBlID09PSA4KSB7CiAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGlkIH0gPSBub2RlLmRhdGE7CiAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1c2VyTGlzdCA9IGNzTWFwLmdldChpZCkgfHwgW107CiAgICAgICAgICAgICAgICAgICAgICB1c2VyTGlzdC5wdXNoKG5vZGUpOwogICAgICAgICAgICAgICAgICAgICAgY3NNYXAuc2V0KGlkLCB1c2VyTGlzdCk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKGxldmVsID4gbWF4TGV2ZWwpIHsKICAgICAgICAgICAgICAgICAgbWF4TGV2ZWwgPSBsZXZlbDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgcmV0dXJuIHsgbGlzdDogc2libGluZ3MsIGNvdW50LCB0b3RhbCB9OwogICAgICAgICAgfTsKICAgICAgICAgIGNvbnN0IHsgbGlzdCB9ID0gdHJhdmVyc2UoZGF0YSB8fCBbXSk7CiAgICAgICAgICBjb25zdCB0cmVlTm9kZXMgPSBsaXN0OwogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICB0cmVlTm9kZU1hcCwKICAgICAgICAgICAgICBjc01hcCwKICAgICAgICAgICAgICBsZXZlbFRyZWVOb2RlTWFwLAogICAgICAgICAgICAgIG1heExldmVsLAogICAgICAgICAgICAgIHRyZWVOb2RlcwogICAgICAgICAgfTsKICAgICAgfQogICAgICByZXR1cm4gY3JlYXRlQ3NUcmVlKGRhdGEpOwogIH0KICBjb25zdCBnZW5lcmF0ZU1hcCA9IHsKICAgICAgLy8g6K6+5aSH5qCRCiAgICAgIGRldmljZTogZ2VuZXJhdGVEZXZpY2VUcmVlLAogICAgICAvLyDnvqTnu4Torr7lpIfmoJEKICAgICAgZ3JvdXBEZXZpY2U6IGdlbmVyYXRlR3JvdXBEZXZpY2VUcmVlLAogICAgICAvLyDnvqTnu4TmoJEKICAgICAgZ3JvdXA6IGdlbmVyYXRlR3JvdXBUcmVlLAogICAgICAvLyDnlKjmiLfmoJEKICAgICAgdXNlcjogZ2VuZXJhdGVVc2VyVHJlZSwKICAgICAgLy8g6YeH6ZuG56uZCiAgICAgIGNzOiBnZW5lcmF0ZUNzVHJlZQogIH07Cgp9KSgpOwovLyMgc291cmNlTWFwcGluZ1VSTD1nZW5lcmF0ZVRyZWUuanMubWFwCgo=');
|
|
1288
|
+
var WorkerFactory$1 = /*#__PURE__*/createBase64WorkerFactory('Lyogcm9sbHVwLXBsdWdpbi13ZWItd29ya2VyLWxvYWRlciAqLwooZnVuY3Rpb24gKCkgewogICd1c2Ugc3RyaWN0JzsKCiAgLyoqIOeUn+aIkOmFjee9rumhuSAqLwogIC8qKiDnlJ/miJDlpITnkIblh73mlbAgKi8KICBjb25zdCB1c2VIYW5kbGVGdW4gPSAoY29uZmlnKSA9PiB7CiAgICAgIGNvbnN0IHsgYnVzaW5lc3MgfSA9IGNvbmZpZzsKICAgICAgY29uc3QgcHJvcHMgPSB7IC4uLmNvbmZpZy5wcm9wcyB9OwogICAgICBsZXQgeyBjb3VudEZpbHRlciwgdG90YWxGaWx0ZXIgfSA9IHByb3BzOwogICAgICAvKiog6I635Y+Wa2V55YC8ICovCiAgICAgIGZ1bmN0aW9uIGdldEtleShub2RlKSB7CiAgICAgICAgICBpZiAoIW5vZGUpCiAgICAgICAgICAgICAgcmV0dXJuICcnOwogICAgICAgICAgcmV0dXJuIG5vZGVbcHJvcHMudmFsdWVdOwogICAgICB9CiAgICAgIC8qKiDojrflj5ZsYWJlbOWAvCAqLwogICAgICBmdW5jdGlvbiBnZXRMYWJlbChub2RlKSB7CiAgICAgICAgICBpZiAoIW5vZGUpCiAgICAgICAgICAgICAgcmV0dXJuICcnOwogICAgICAgICAgcmV0dXJuIG5vZGVbcHJvcHMubGFiZWxdOwogICAgICB9CiAgICAgIC8qKiDojrflj5ZjaGlsZHJlbuWAvCAqLwogICAgICBmdW5jdGlvbiBnZXRDaGlsZHJlbihub2RlKSB7CiAgICAgICAgICBpZiAoIW5vZGUpCiAgICAgICAgICAgICAgcmV0dXJuIFtdOwogICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBub2RlW3Byb3BzLmNoaWxkcmVuXTsKICAgICAgICAgIHJldHVybiBjaGlsZHJlbiA/IFsuLi5jaGlsZHJlbl0gOiBbXTsKICAgICAgfQogICAgICAvKiog6I635Y+WY291bnTlgLwgKi8KICAgICAgZnVuY3Rpb24gZ2V0Q291bnQobm9kZSkgewogICAgICAgICAgaWYgKCFub2RlKQogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIHJldHVybiBub2RlW3Byb3BzLmNvdW50XTsKICAgICAgfQogICAgICAvKiog6I635Y+WdG90YWzlgLwgKi8KICAgICAgZnVuY3Rpb24gZ2V0VG90YWwobm9kZSkgewogICAgICAgICAgaWYgKCFub2RlKQogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIHJldHVybiBub2RlW3Byb3BzLnRvdGFsXTsKICAgICAgfQogICAgICBpZiAoWydkZXZpY2UnLCAnZ3JvdXBEZXZpY2UnXS5pbmNsdWRlcyhgJHtidXNpbmVzc31gKSkgewogICAgICAgICAgY291bnRGaWx0ZXIgPSAoZGF0YSkgPT4gewogICAgICAgICAgICAgIHJldHVybiBkYXRhLmRhdGFUeXBlID09PSAzICYmIGRhdGEub25saW5lU3RhdGUgPT09IDE7CiAgICAgICAgICB9OwogICAgICAgICAgdG90YWxGaWx0ZXIgPSAoZGF0YSkgPT4gewogICAgICAgICAgICAgIHJldHVybiBkYXRhLmRhdGFUeXBlID09PSAzOwogICAgICAgICAgfTsKICAgICAgfQogICAgICBlbHNlIGlmIChidXNpbmVzcyA9PT0gJ3VzZXInKSB7CiAgICAgICAgICBjb3VudEZpbHRlciA9IHRvdGFsRmlsdGVyID0gKGRhdGEpID0+IHsKICAgICAgICAgICAgICByZXR1cm4gZGF0YS5kYXRhVHlwZSA9PT0gNTsKICAgICAgICAgIH07CiAgICAgIH0KICAgICAgZWxzZSBpZiAoYnVzaW5lc3MgPT09ICdjcycpIHsKICAgICAgICAgIGNvdW50RmlsdGVyID0gdG90YWxGaWx0ZXIgPSAoZGF0YSkgPT4gewogICAgICAgICAgICAgIHJldHVybiBkYXRhLmRhdGFUeXBlID09PSA4OwogICAgICAgICAgfTsKICAgICAgfQogICAgICByZXR1cm4gewogICAgICAgICAgZ2V0S2V5LAogICAgICAgICAgZ2V0TGFiZWwsCiAgICAgICAgICBnZXRDaGlsZHJlbiwKICAgICAgICAgIGdldENvdW50LAogICAgICAgICAgZ2V0VG90YWwsCiAgICAgICAgICBjb3VudEZpbHRlciwKICAgICAgICAgIHRvdGFsRmlsdGVyLAogICAgICAgICAgLy8g6K6+572u6K6+5aSH54q25oCBCiAgICAgICAgICBzZXREZXZpY2VTdGF0dXM6IChkYXRhKSA9PiB7CiAgICAgICAgICAgICAgaWYgKGRhdGEub25saW5lU3RhdGUgPT09IDEpIHsKICAgICAgICAgICAgICAgICAgLy8g55uR5o6n5LitCiAgICAgICAgICAgICAgICAgIGlmIChkYXRhLm1vbml0b3IgPT09IDEgfHwgZGF0YS5iZU1vbml0b3IgPT09IDEpIHsKICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAyOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIC8vIOmAmuivneS4rQogICAgICAgICAgICAgICAgICBpZiAoZGF0YS52aWRlb0NhbGwgPT09IDEpIHsKICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAzOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIC8vIOW9leWDj+S4rQogICAgICAgICAgICAgICAgICBpZiAoZGF0YS52aWRlb1JlY29yZGluZyA9PT0gMSkgewogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDQ7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgLy8g5b2V6Z+z5LitCiAgICAgICAgICAgICAgICAgIGlmIChkYXRhLmF1ZGlvUmVjb3JkaW5nID09PSAxKSB7CiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gNTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAvLyDlub/mkq3kuK0KICAgICAgICAgICAgICAgICAgaWYgKGRhdGEuYnJvYWRjYXN0ID09PSAxKSB7CiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gNjsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAvLyBTT1MKICAgICAgICAgICAgICAgICAgaWYgKGRhdGEuc29zID09PSAxKSB7CiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gNzsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAvLyDlnKjnur8KICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIC8vIOemu+e6vwogICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgfQogICAgICB9OwogIH07CgogIGNvbnN0IGlzU3RyaW5nID0gKGUpID0+IHR5cGVvZiBlID09PSAnc3RyaW5nJzsKICBjb25zdCBpc051bWJlciA9IChlKSA9PiB0eXBlb2YgZSA9PT0gJ251bWJlcic7CiAgY29uc3QgaXNBcnJheSA9IChlKSA9PiBBcnJheS5pc0FycmF5KGUpOwoKICAvLyDlpITnkIZmaWx0ZXJDb25maWcKICBmdW5jdGlvbiBoYW5kbGVGaWx0ZXJDb25maWcoZmlsdGVyQ29uZmlnKSB7CiAgICAgIHJldHVybiAoZmlsdGVyQ29uZmlnIHx8IFtdKS5maWx0ZXIoKGl0ZW0pID0+IHsKICAgICAgICAgIHJldHVybiAoaXNTdHJpbmcoaXRlbS5wcm9wKSAmJgogICAgICAgICAgICAgIChpc1N0cmluZyhpdGVtLnZhbHVlKSB8fAogICAgICAgICAgICAgICAgICBpc051bWJlcihpdGVtLnZhbHVlKSB8fAogICAgICAgICAgICAgICAgICAoaXNBcnJheShpdGVtLnZhbHVlKSAmJiBpdGVtLmNvbmRpdGlvbiA9PT0gJ2JldHdlZW4nKSkgJiYKICAgICAgICAgICAgICAvXihlcXxuZXxpbnxub3RJbnxiZXR3ZWVufGd0fGx0fGdlfGxlKSQvLnRlc3QoaXRlbS5jb25kaXRpb24pKTsKICAgICAgfSk7CiAgfQogIC8vIOagoemqjGZpbHRlckNvbmZpZwogIGZ1bmN0aW9uIHVzZUZpbHRlckNvbmZpZyhkYXRhLCBmaWx0ZXJMaXN0KSB7CiAgICAgIGlmICghZmlsdGVyTGlzdCB8fCAhZmlsdGVyTGlzdC5sZW5ndGgpCiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgcmV0dXJuIGZpbHRlckxpc3QuZXZlcnkoKHsgcHJvcCwgdmFsdWUsIGNvbmRpdGlvbiB9KSA9PiB7CiAgICAgICAgICBjb25zdCB0YXJnZXQgPSBkYXRhW3Byb3BdOwogICAgICAgICAgc3dpdGNoIChjb25kaXRpb24pIHsKICAgICAgICAgICAgICBjYXNlICdlcSc6CiAgICAgICAgICAgICAgICAgIHJldHVybiB0YXJnZXQgPT09IHZhbHVlOwogICAgICAgICAgICAgIGNhc2UgJ25lJzoKICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldCAhPT0gdmFsdWU7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHsKICAgICAgICAgICAgICBpZiAoY29uZGl0aW9uID09PSAnYmV0d2VlbicpIHsKICAgICAgICAgICAgICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aAogICAgICAgICAgICAgICAgICAgICAgPyB0YXJnZXQgPj0gdmFsdWVbMF0gJiYgdGFyZ2V0IDw9IHZhbHVlWzFdCiAgICAgICAgICAgICAgICAgICAgICA6IGZhbHNlOwogICAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGlmIChpc051bWJlcih0YXJnZXQpKSB7CiAgICAgICAgICAgICAgaWYgKCFpc051bWJlcih2YWx1ZSkpCiAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICBzd2l0Y2ggKGNvbmRpdGlvbikgewogICAgICAgICAgICAgICAgICBjYXNlICdndCc6CiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0ID4gdmFsdWU7CiAgICAgICAgICAgICAgICAgIGNhc2UgJ2x0JzoKICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0YXJnZXQgPCB2YWx1ZTsKICAgICAgICAgICAgICAgICAgY2FzZSAnZ2UnOgogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldCA+PSB2YWx1ZTsKICAgICAgICAgICAgICAgICAgY2FzZSAnbGUnOgogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldCA8PSB2YWx1ZTsKICAgICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBlbHNlIGlmIChpc1N0cmluZyh0YXJnZXQpKSB7CiAgICAgICAgICAgICAgY29uc3QgaXNJbiA9IHRhcmdldC5pbmNsdWRlcyhgJHt2YWx1ZX1gKTsKICAgICAgICAgICAgICBzd2l0Y2ggKGNvbmRpdGlvbikgewogICAgICAgICAgICAgICAgICBjYXNlICdpbic6CiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXNJbjsKICAgICAgICAgICAgICAgICAgY2FzZSAnbm90SW4nOgogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFpc0luOwogICAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfSk7CiAgfQoKICBzZWxmLm9ubWVzc2FnZSA9IGFzeW5jIChldmVudCkgPT4gewogICAgICBjb25zdCB7IGRhdGEsIGNvbmZpZyB9ID0gZXZlbnQuZGF0YTsKICAgICAgY29uc3QgZ2VuZXJhdGVUcmVlID0gZ2VuZXJhdGVNYXBbY29uZmlnLmJ1c2luZXNzXTsKICAgICAgaWYgKCFnZW5lcmF0ZVRyZWUpIHsKICAgICAgICAgIHNlbGYuY2xvc2UoKTsKICAgICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBjb25zdCB0cmVlID0gZ2VuZXJhdGVUcmVlKGRhdGEsIGNvbmZpZyk7CiAgICAgIHNlbGYucG9zdE1lc3NhZ2UodHJlZSk7CiAgfTsKICAvLyDorr7lpIfmoJHnu5PmnoQKICBmdW5jdGlvbiBnZW5lcmF0ZURldmljZVRyZWUoZGF0YSwgY29uZmlnKSB7CiAgICAgIGNvbnN0IHsgZXhwYW5kZWRLZXlTZXQgfSA9IGNvbmZpZzsKICAgICAgY29uc3QgeyBjbGVhckVtcHR5QnVzaW5lc3MgfSA9IGNvbmZpZy5wcm9wczsKICAgICAgY29uc3QgeyBnZXRLZXksIGdldExhYmVsLCBnZXRDaGlsZHJlbiwgY291bnRGaWx0ZXIsIHRvdGFsRmlsdGVyLCBzZXREZXZpY2VTdGF0dXMgfSA9IHVzZUhhbmRsZUZ1bihjb25maWcpOwogICAgICBjb25zdCBmaWx0ZXJMaXN0ID0gaGFuZGxlRmlsdGVyQ29uZmlnKGNvbmZpZy5idXNpbmVzc0NvbmZpZz8uZmlsdGVyQ29uZmlnKTsKICAgICAgLyoqIOiuvuWkh+agkSAqLwogICAgICBmdW5jdGlvbiBjcmVhdGVEZXZpY2VUcmVlKGRhdGEpIHsKICAgICAgICAgIGxldCBtYXhMZXZlbCA9IDE7CiAgICAgICAgICBjb25zdCB0cmVlTm9kZU1hcCA9IG5ldyBNYXAoKTsKICAgICAgICAgIGNvbnN0IGxldmVsVHJlZU5vZGVNYXAgPSBuZXcgTWFwKCk7CiAgICAgICAgICBjb25zdCBkZXZpY2VNYXAgPSBuZXcgTWFwKCk7CiAgICAgICAgICBjb25zdCB0cmF2ZXJzZSA9IChub2RlcywgbGV2ZWwgPSAxLCBwYXJlbnQgPSB1bmRlZmluZWQpID0+IHsKICAgICAgICAgICAgICBjb25zdCBzaWJsaW5ncyA9IFtdOwogICAgICAgICAgICAgIGxldCBjb3VudCA9IDA7CiAgICAgICAgICAgICAgbGV0IHRvdGFsID0gMDsKICAgICAgICAgICAgICBmb3IgKGxldCByYXdOb2RlIG9mIG5vZGVzKSB7CiAgICAgICAgICAgICAgICAgIC8vIOS4muWKoemAu+i+kQogICAgICAgICAgICAgICAgICBsZXQgY2hpbGRyZW4gPSBnZXRDaGlsZHJlbihyYXdOb2RlKTsKICAgICAgICAgICAgICAgICAgaWYgKHJhd05vZGUuZGF0YVR5cGUgIT09IDMpIHsKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRldmljZUxpc3QgPSBbW10sIFtdXTsKICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuID0gY2hpbGRyZW4gPyBjaGlsZHJlbiA6IFtdOwogICAgICAgICAgICAgICAgICAgICAgaWYgKHJhd05vZGUuZGV2aWNlTGlzdCkgewogICAgICAgICAgICAgICAgICAgICAgICAgIHJhd05vZGUuZGV2aWNlTGlzdC5mb3JFYWNoKCh2KSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLnYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmx5SWQ6IHJhd05vZGUuaWQgKyAnJyArIHYuZGV2aWNlSWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogdi5kZXZOYW1lIHx8IHYuZGV2aWNlSWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhVHlwZTogMywgLy8g5Luj6KGo6K6+5aSHCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZpY2VTdGF0dXM6IHNldERldmljZVN0YXR1cyh2KSAvLyDorr7lpIfnirbmgIEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVzZUZpbHRlckNvbmZpZyh0YXJnZXQsIGZpbHRlckxpc3QpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFyZ2V0LmRldmljZVN0YXR1cyA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZUxpc3RbMV0ucHVzaCh0YXJnZXQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlTGlzdFswXS5wdXNoKHRhcmdldCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbiA9IFsuLi5jaGlsZHJlbiwgLi4uZGV2aWNlTGlzdFswXSwgLi4uZGV2aWNlTGlzdFsxXV07CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICByYXdOb2RlID0gewogICAgICAgICAgICAgICAgICAgICAgICAgIC4uLnJhd05vZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgb25seUlkOiByYXdOb2RlLmlkLAogICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAxLCAvLyDpg6jpl6gKICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogcmF3Tm9kZS5vcmdOYW1lIHx8IHJhd05vZGUuY29tcGFueU5hbWUKICAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgLy8g6L+H5ruk5rKh5pyJ6K6+5aSH55qE6YOo6Zeo5ZKM576k57uEIOatpemqpOS4gAogICAgICAgICAgICAgICAgICBpZiAoY2xlYXJFbXB0eUJ1c2luZXNzKSB7CiAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNoaWxkcmVuIHx8IGNoaWxkcmVuLmxlbmd0aCA9PT0gMCAmJiByYXdOb2RlLmRhdGFUeXBlICE9PSAzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgLy8g6YCa55So6YC76L6RCiAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZ2V0S2V5KHJhd05vZGUpOwogICAgICAgICAgICAgICAgICBjb25zdCBub2RlID0gewogICAgICAgICAgICAgICAgICAgICAgbGV2ZWwsCiAgICAgICAgICAgICAgICAgICAgICBrZXk6IHZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgZGF0YTogcmF3Tm9kZQogICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICBub2RlLmxhYmVsID0gZ2V0TGFiZWwocmF3Tm9kZSk7CiAgICAgICAgICAgICAgICAgIG5vZGUucGFyZW50ID0gcGFyZW50OwogICAgICAgICAgICAgICAgICBub2RlLmlzTGVhZiA9ICFjaGlsZHJlbiB8fCBjaGlsZHJlbi5sZW5ndGggPT09IDA7CiAgICAgICAgICAgICAgICAgIG5vZGUuZXhwYW5kZWQgPSBleHBhbmRlZEtleVNldC5oYXModmFsdWUpOwogICAgICAgICAgICAgICAgICBpZiAoY2hpbGRyZW4gJiYgY2hpbGRyZW4ubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGxpc3QsIGNvdW50OiBjaGlsZENvdW50LCB0b3RhbDogY2hpbGRUb3RhbCB9ID0gdHJhdmVyc2UoY2hpbGRyZW4sIGxldmVsICsgMSwgbm9kZSk7CiAgICAgICAgICAgICAgICAgICAgICAvLyDov4fmu6TmsqHmnInnlKjmiLfnmoTpg6jpl6gg5q2l6aqk5LqMCiAgICAgICAgICAgICAgICAgICAgICBpZiAoY2xlYXJFbXB0eUJ1c2luZXNzICYmIGNoaWxkVG90YWwgPT09IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIG5vZGUuY2hpbGRyZW4gPSBsaXN0OwogICAgICAgICAgICAgICAgICAgICAgbm9kZS5jb3VudCA9IGNoaWxkQ291bnQgOwogICAgICAgICAgICAgICAgICAgICAgbm9kZS50b3RhbCA9IGNoaWxkVG90YWwgOwogICAgICAgICAgICAgICAgICAgICAgY291bnQgKz0gY2hpbGRDb3VudDsKICAgICAgICAgICAgICAgICAgICAgIHRvdGFsICs9IGNoaWxkVG90YWw7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICBub2RlLmNvdW50ID0gMDsKICAgICAgICAgICAgICAgICAgICAgIG5vZGUudG90YWwgPSAwOwogICAgICAgICAgICAgICAgICAgICAgLy8g57uf6K6hCiAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQgKz0gY291bnRGaWx0ZXIocmF3Tm9kZSkgPyAxIDogMDsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICB0b3RhbCArPSB0b3RhbEZpbHRlcihyYXdOb2RlKSA/IDEgOiAwOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIHNpYmxpbmdzLnB1c2gobm9kZSk7CiAgICAgICAgICAgICAgICAgIHRyZWVOb2RlTWFwLnNldCh2YWx1ZSwgbm9kZSk7CiAgICAgICAgICAgICAgICAgIGlmICghbGV2ZWxUcmVlTm9kZU1hcC5oYXMobGV2ZWwpKSB7CiAgICAgICAgICAgICAgICAgICAgICBsZXZlbFRyZWVOb2RlTWFwLnNldChsZXZlbCwgW10pOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGlmIChsZXZlbFRyZWVOb2RlTWFwLmhhcyhsZXZlbCkpIHsKICAgICAgICAgICAgICAgICAgICAgIGxldmVsVHJlZU5vZGVNYXAuZ2V0KGxldmVsKS5wdXNoKG5vZGUpOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIC8vIOiuvuWkhwogICAgICAgICAgICAgICAgICBpZiAocmF3Tm9kZS5kYXRhVHlwZSA9PT0gMykgewogICAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBkZXZpY2VJZCB9ID0gbm9kZS5kYXRhOwogICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGV2aWNlSW5mbyA9IGRldmljZU1hcC5nZXQoZGV2aWNlSWQpIHx8IFtdOwogICAgICAgICAgICAgICAgICAgICAgZGV2aWNlSW5mby5wdXNoKG5vZGUpOwogICAgICAgICAgICAgICAgICAgICAgZGV2aWNlTWFwLnNldChkZXZpY2VJZCwgZGV2aWNlSW5mbyk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKGxldmVsID4gbWF4TGV2ZWwpIHsKICAgICAgICAgICAgICAgICAgbWF4TGV2ZWwgPSBsZXZlbDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgcmV0dXJuIHsgbGlzdDogc2libGluZ3MsIGNvdW50LCB0b3RhbCB9OwogICAgICAgICAgfTsKICAgICAgICAgIGNvbnN0IHsgbGlzdCB9ID0gdHJhdmVyc2UoZGF0YSB8fCBbXSk7CiAgICAgICAgICBjb25zdCB0cmVlTm9kZXMgPSBsaXN0OwogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICB0cmVlTm9kZU1hcCwKICAgICAgICAgICAgICBkZXZpY2VNYXAsCiAgICAgICAgICAgICAgbGV2ZWxUcmVlTm9kZU1hcCwKICAgICAgICAgICAgICBtYXhMZXZlbCwKICAgICAgICAgICAgICB0cmVlTm9kZXMKICAgICAgICAgIH07CiAgICAgIH0KICAgICAgcmV0dXJuIGNyZWF0ZURldmljZVRyZWUoZGF0YSk7CiAgfQogIC8vIOe+pOe7hOiuvuWkh+agkee7k+aehAogIGZ1bmN0aW9uIGdlbmVyYXRlR3JvdXBEZXZpY2VUcmVlKGRhdGEsIGNvbmZpZykgewogICAgICBjb25zdCB7IGV4cGFuZGVkS2V5U2V0IH0gPSBjb25maWc7CiAgICAgIGNvbnN0IHsgY2xlYXJFbXB0eUJ1c2luZXNzIH0gPSBjb25maWcucHJvcHM7CiAgICAgIGNvbnN0IHsgZ2V0S2V5LCBnZXRMYWJlbCwgZ2V0Q2hpbGRyZW4sIGNvdW50RmlsdGVyLCB0b3RhbEZpbHRlciwgc2V0RGV2aWNlU3RhdHVzIH0gPSB1c2VIYW5kbGVGdW4oY29uZmlnKTsKICAgICAgY29uc3QgZmlsdGVyTGlzdCA9IGhhbmRsZUZpbHRlckNvbmZpZyhjb25maWcuYnVzaW5lc3NDb25maWc/LmZpbHRlckNvbmZpZyk7CiAgICAgIC8qKiDnvqTnu4Torr7lpIfmoJEgKi8KICAgICAgZnVuY3Rpb24gY3JlYXRlRGV2aWNlVHJlZShkYXRhKSB7CiAgICAgICAgICBsZXQgbWF4TGV2ZWwgPSAxOwogICAgICAgICAgY29uc3QgdHJlZU5vZGVNYXAgPSBuZXcgTWFwKCk7CiAgICAgICAgICBjb25zdCBsZXZlbFRyZWVOb2RlTWFwID0gbmV3IE1hcCgpOwogICAgICAgICAgY29uc3QgZGV2aWNlTWFwID0gbmV3IE1hcCgpOwogICAgICAgICAgY29uc3QgdHJhdmVyc2UgPSAobm9kZXMsIGxldmVsID0gMSwgcGFyZW50ID0gdW5kZWZpbmVkKSA9PiB7CiAgICAgICAgICAgICAgY29uc3Qgc2libGluZ3MgPSBbXTsKICAgICAgICAgICAgICBsZXQgY291bnQgPSAwOwogICAgICAgICAgICAgIGxldCB0b3RhbCA9IDA7CiAgICAgICAgICAgICAgZm9yIChsZXQgcmF3Tm9kZSBvZiBub2RlcykgewogICAgICAgICAgICAgICAgICAvLyDkuJrliqHpgLvovpEKICAgICAgICAgICAgICAgICAgbGV0IGNoaWxkcmVuID0gZ2V0Q2hpbGRyZW4ocmF3Tm9kZSk7CiAgICAgICAgICAgICAgICAgIC8vIOe+pOe7hAogICAgICAgICAgICAgICAgICBpZiAocmF3Tm9kZS5jaGlsZHJlbj8ubGVuZ3RoIHx8CiAgICAgICAgICAgICAgICAgICAgICByYXdOb2RlLmdyb3VwTGlzdD8ubGVuZ3RoIHx8CiAgICAgICAgICAgICAgICAgICAgICAhWzMsIDRdLmluY2x1ZGVzKHJhd05vZGUuZGF0YVR5cGUpKSB7CiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBncm91cExpc3QgPSBbXTsKICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuID0gY2hpbGRyZW4gPyBjaGlsZHJlbiA6IFtdOwogICAgICAgICAgICAgICAgICAgICAgaWYgKHJhd05vZGUuZ3JvdXBMaXN0Py5sZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICByYXdOb2RlLmdyb3VwTGlzdC5mb3JFYWNoKCh2KSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLnYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmx5SWQ6IHJhd05vZGUuaWQgKyAnJyArIHYuaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogdi5ncm91cE5hbWUgfHwgdi5pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlOiA0IC8vIOS7o+ihqOe+pOe7hAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cExpc3QucHVzaCh0YXJnZXQpOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuID0gWy4uLmNoaWxkcmVuLCAuLi5ncm91cExpc3RdOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgcmF3Tm9kZSA9IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5yYXdOb2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuLAogICAgICAgICAgICAgICAgICAgICAgICAgIG9ubHlJZDogcmF3Tm9kZS5pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhVHlwZTogMSwgLy8g6YOo6ZeoCiAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHJhd05vZGUub3JnTmFtZSB8fCByYXdOb2RlLmNvbXBhbnlOYW1lCiAgICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIC8vIOiuvuWkhwogICAgICAgICAgICAgICAgICBpZiAocmF3Tm9kZS5kZXZpY2VMaXN0Py5sZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRldmljZUxpc3QgPSBbW10sIFtdXTsKICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuID0gY2hpbGRyZW4gPyBjaGlsZHJlbiA6IFtdOwogICAgICAgICAgICAgICAgICAgICAgcmF3Tm9kZS5kZXZpY2VMaXN0LmZvckVhY2goKHYpID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXQgPSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLnYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ubHlJZDogcmF3Tm9kZS5pZCArICcnICsgdi5kZXZpY2VJZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHYuZGV2TmFtZSB8fCB2LmRldmljZUlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhVHlwZTogMywgLy8g5Luj6KGo6K6+5aSHCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZVN0YXR1czogc2V0RGV2aWNlU3RhdHVzKHYpIC8vIOiuvuWkh+eKtuaAgQogICAgICAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVzZUZpbHRlckNvbmZpZyh0YXJnZXQsIGZpbHRlckxpc3QpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YXJnZXQuZGV2aWNlU3RhdHVzID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZpY2VMaXN0WzFdLnB1c2godGFyZ2V0KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZUxpc3RbMF0ucHVzaCh0YXJnZXQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbiA9IFsuLi5jaGlsZHJlbiwgLi4uZGV2aWNlTGlzdFswXSwgLi4uZGV2aWNlTGlzdFsxXV07CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgLy8g6L+H5ruk5rKh5pyJ6K6+5aSH55qE6YOo6Zeo5ZKM576k57uEIOatpemqpOS4gAogICAgICAgICAgICAgICAgICBpZiAoY2xlYXJFbXB0eUJ1c2luZXNzKSB7CiAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNoaWxkcmVuIHx8IGNoaWxkcmVuLmxlbmd0aCA9PT0gMCAmJiByYXdOb2RlLmRhdGFUeXBlICE9PSAzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgLy8g6YCa55So6YC76L6RCiAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZ2V0S2V5KHJhd05vZGUpOwogICAgICAgICAgICAgICAgICBjb25zdCBub2RlID0gewogICAgICAgICAgICAgICAgICAgICAgbGV2ZWwsCiAgICAgICAgICAgICAgICAgICAgICBrZXk6IHZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgZGF0YTogcmF3Tm9kZQogICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICBub2RlLmxhYmVsID0gZ2V0TGFiZWwocmF3Tm9kZSk7CiAgICAgICAgICAgICAgICAgIG5vZGUucGFyZW50ID0gcGFyZW50OwogICAgICAgICAgICAgICAgICBub2RlLmlzTGVhZiA9ICFjaGlsZHJlbiB8fCBjaGlsZHJlbi5sZW5ndGggPT09IDA7CiAgICAgICAgICAgICAgICAgIG5vZGUuZXhwYW5kZWQgPSBleHBhbmRlZEtleVNldC5oYXModmFsdWUpOwogICAgICAgICAgICAgICAgICBpZiAoY2hpbGRyZW4gJiYgY2hpbGRyZW4ubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGxpc3QsIGNvdW50OiBjaGlsZENvdW50LCB0b3RhbDogY2hpbGRUb3RhbCB9ID0gdHJhdmVyc2UoY2hpbGRyZW4sIGxldmVsICsgMSwgbm9kZSk7CiAgICAgICAgICAgICAgICAgICAgICAvLyDov4fmu6TmsqHmnInorr7lpIfnmoTpg6jpl6jlkoznvqTnu4Qg5q2l6aqk5LqMCiAgICAgICAgICAgICAgICAgICAgICBpZiAoY2xlYXJFbXB0eUJ1c2luZXNzICYmIGNoaWxkVG90YWwgPT09IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIG5vZGUuY2hpbGRyZW4gPSBsaXN0OwogICAgICAgICAgICAgICAgICAgICAgbm9kZS5jb3VudCA9IGNoaWxkQ291bnQgOwogICAgICAgICAgICAgICAgICAgICAgbm9kZS50b3RhbCA9IGNoaWxkVG90YWwgOwogICAgICAgICAgICAgICAgICAgICAgY291bnQgKz0gY2hpbGRDb3VudDsKICAgICAgICAgICAgICAgICAgICAgIHRvdGFsICs9IGNoaWxkVG90YWw7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgZWxzZSBpZiAocmF3Tm9kZS5kYXRhVHlwZSAhPT0gMykgewogICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICBub2RlLmNvdW50ID0gMDsKICAgICAgICAgICAgICAgICAgICAgIG5vZGUudG90YWwgPSAwOwogICAgICAgICAgICAgICAgICAgICAgLy8g57uf6K6hCiAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQgKz0gY291bnRGaWx0ZXIocmF3Tm9kZSkgPyAxIDogMDsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICB0b3RhbCArPSB0b3RhbEZpbHRlcihyYXdOb2RlKSA/IDEgOiAwOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIHNpYmxpbmdzLnB1c2gobm9kZSk7CiAgICAgICAgICAgICAgICAgIHRyZWVOb2RlTWFwLnNldCh2YWx1ZSwgbm9kZSk7CiAgICAgICAgICAgICAgICAgIGlmICghbGV2ZWxUcmVlTm9kZU1hcC5oYXMobGV2ZWwpKSB7CiAgICAgICAgICAgICAgICAgICAgICBsZXZlbFRyZWVOb2RlTWFwLnNldChsZXZlbCwgW10pOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGlmIChsZXZlbFRyZWVOb2RlTWFwLmhhcyhsZXZlbCkpIHsKICAgICAgICAgICAgICAgICAgICAgIGxldmVsVHJlZU5vZGVNYXAuZ2V0KGxldmVsKS5wdXNoKG5vZGUpOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIC8vIOiuvuWkhwogICAgICAgICAgICAgICAgICBpZiAocmF3Tm9kZS5kYXRhVHlwZSA9PT0gMykgewogICAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBkZXZpY2VJZCB9ID0gbm9kZS5kYXRhOwogICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGV2aWNlSW5mbyA9IGRldmljZU1hcC5nZXQoZGV2aWNlSWQpIHx8IFtdOwogICAgICAgICAgICAgICAgICAgICAgZGV2aWNlSW5mby5wdXNoKG5vZGUpOwogICAgICAgICAgICAgICAgICAgICAgZGV2aWNlTWFwLnNldChkZXZpY2VJZCwgZGV2aWNlSW5mbyk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKGxldmVsID4gbWF4TGV2ZWwpIHsKICAgICAgICAgICAgICAgICAgbWF4TGV2ZWwgPSBsZXZlbDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgcmV0dXJuIHsgbGlzdDogc2libGluZ3MsIGNvdW50LCB0b3RhbCB9OwogICAgICAgICAgfTsKICAgICAgICAgIGNvbnN0IHsgbGlzdCB9ID0gdHJhdmVyc2UoZGF0YSB8fCBbXSk7CiAgICAgICAgICBjb25zdCB0cmVlTm9kZXMgPSBsaXN0OwogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICB0cmVlTm9kZU1hcCwKICAgICAgICAgICAgICBkZXZpY2VNYXAsCiAgICAgICAgICAgICAgbGV2ZWxUcmVlTm9kZU1hcCwKICAgICAgICAgICAgICBtYXhMZXZlbCwKICAgICAgICAgICAgICB0cmVlTm9kZXMKICAgICAgICAgIH07CiAgICAgIH0KICAgICAgcmV0dXJuIGNyZWF0ZURldmljZVRyZWUoZGF0YSk7CiAgfQogIC8vIOe+pOe7hOagkee7k+aehAogIGZ1bmN0aW9uIGdlbmVyYXRlR3JvdXBUcmVlKGRhdGEsIGNvbmZpZykgewogICAgICBjb25zdCB7IGV4cGFuZGVkS2V5U2V0IH0gPSBjb25maWc7CiAgICAgIGNvbnN0IHsgY2xlYXJFbXB0eUJ1c2luZXNzIH0gPSBjb25maWcucHJvcHM7CiAgICAgIGNvbnN0IHsgZ2V0S2V5LCBnZXRMYWJlbCwgZ2V0Q2hpbGRyZW59ID0gdXNlSGFuZGxlRnVuKGNvbmZpZyk7CiAgICAgIC8qKiDnvqTnu4TmoJEgKi8KICAgICAgZnVuY3Rpb24gY3JlYXRlR3JvdXBUcmVlKGRhdGEpIHsKICAgICAgICAgIGxldCBtYXhMZXZlbCA9IDE7CiAgICAgICAgICBjb25zdCB0cmVlTm9kZU1hcCA9IG5ldyBNYXAoKTsKICAgICAgICAgIGNvbnN0IGxldmVsVHJlZU5vZGVNYXAgPSBuZXcgTWFwKCk7CiAgICAgICAgICBjb25zdCB0cmF2ZXJzZSA9IChub2RlcywgbGV2ZWwgPSAxLCBwYXJlbnQgPSB1bmRlZmluZWQpID0+IHsKICAgICAgICAgICAgICBjb25zdCBzaWJsaW5ncyA9IFtdOwogICAgICAgICAgICAgIGxldCBjb3VudCA9IDA7CiAgICAgICAgICAgICAgbGV0IHRvdGFsID0gMDsKICAgICAgICAgICAgICBmb3IgKGxldCByYXdOb2RlIG9mIG5vZGVzKSB7CiAgICAgICAgICAgICAgICAgIC8vIOS4muWKoemAu+i+kQogICAgICAgICAgICAgICAgICBsZXQgY2hpbGRyZW4gPSBnZXRDaGlsZHJlbihyYXdOb2RlKTsKICAgICAgICAgICAgICAgICAgLy8g576k57uECiAgICAgICAgICAgICAgICAgIGlmIChyYXdOb2RlLmNoaWxkcmVuPy5sZW5ndGggfHwKICAgICAgICAgICAgICAgICAgICAgIHJhd05vZGUuZ3JvdXBMaXN0Py5sZW5ndGggfHwKICAgICAgICAgICAgICAgICAgICAgICFbMywgNF0uaW5jbHVkZXMocmF3Tm9kZS5kYXRhVHlwZSkpIHsKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwTGlzdCA9IFtdOwogICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4gPSBjaGlsZHJlbiA/IGNoaWxkcmVuIDogW107CiAgICAgICAgICAgICAgICAgICAgICBpZiAocmF3Tm9kZS5ncm91cExpc3Q/Lmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgICAgICAgIHJhd05vZGUuZ3JvdXBMaXN0LmZvckVhY2goKHYpID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4udiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ubHlJZDogcmF3Tm9kZS5pZCArICcnICsgdi5pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiB2Lmdyb3VwTmFtZSB8fCB2LmlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGU6IDQgLy8g5Luj6KGo576k57uECiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwTGlzdC5wdXNoKHRhcmdldCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4gPSBbLi4uY2hpbGRyZW4sIC4uLmdyb3VwTGlzdF07CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICByYXdOb2RlID0gewogICAgICAgICAgICAgICAgICAgICAgICAgIC4uLnJhd05vZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgb25seUlkOiByYXdOb2RlLmlkLAogICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAxLCAvLyDpg6jpl6gKICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogcmF3Tm9kZS5vcmdOYW1lIHx8IHJhd05vZGUuY29tcGFueU5hbWUKICAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgLy8g6K6+5aSHCiAgICAgICAgICAgICAgICAgIGlmIChyYXdOb2RlLmRldmljZUxpc3Q/Lmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgICAgY291bnQgPSByYXdOb2RlLmRldmljZUxpc3QucmVkdWNlKCh2YWx1ZSwgdikgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZSArICh2Lm9ubGluZVN0YXRlID09PSAxID8gMSA6IDApOwogICAgICAgICAgICAgICAgICAgICAgfSwgY291bnQpOwogICAgICAgICAgICAgICAgICAgICAgdG90YWwgKz0gcmF3Tm9kZS5kZXZpY2VMaXN0Lmxlbmd0aCB8fCAwOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIC8vIOWkhOeQhumAu+i+kQogICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGdldEtleShyYXdOb2RlKTsKICAgICAgICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHsKICAgICAgICAgICAgICAgICAgICAgIGxldmVsLAogICAgICAgICAgICAgICAgICAgICAga2V5OiB2YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHJhd05vZGUKICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgbm9kZS5sYWJlbCA9IGdldExhYmVsKHJhd05vZGUpOwogICAgICAgICAgICAgICAgICBub2RlLnBhcmVudCA9IHBhcmVudDsKICAgICAgICAgICAgICAgICAgbm9kZS5pc0xlYWYgPSAhY2hpbGRyZW4gfHwgY2hpbGRyZW4ubGVuZ3RoID09PSAwOwogICAgICAgICAgICAgICAgICBub2RlLmV4cGFuZGVkID0gZXhwYW5kZWRLZXlTZXQuaGFzKHZhbHVlKTsKICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkcmVuICYmIGNoaWxkcmVuLmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBsaXN0LCBjb3VudDogY2hpbGRDb3VudCwgdG90YWw6IGNoaWxkVG90YWwgfSA9IHRyYXZlcnNlKGNoaWxkcmVuLCBsZXZlbCArIDEsIG5vZGUpOwogICAgICAgICAgICAgICAgICAgICAgLy8g6L+H5ruk5rKh5pyJ6K6+5aSH55qE6YOo6Zeo5ZKM576k57uEIOatpemqpOS6jAogICAgICAgICAgICAgICAgICAgICAgaWYgKGNsZWFyRW1wdHlCdXNpbmVzcyAmJiBjaGlsZFRvdGFsID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBub2RlLmNoaWxkcmVuID0gbGlzdDsKICAgICAgICAgICAgICAgICAgICAgIG5vZGUuY291bnQgPSBjaGlsZENvdW50IDsKICAgICAgICAgICAgICAgICAgICAgIG5vZGUudG90YWwgPSBjaGlsZFRvdGFsIDsKICAgICAgICAgICAgICAgICAgICAgIGNvdW50ICs9IGNoaWxkQ291bnQ7CiAgICAgICAgICAgICAgICAgICAgICB0b3RhbCArPSBjaGlsZFRvdGFsOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJhd05vZGUuZGF0YVR5cGUgIT09IDMpIHsKICAgICAgICAgICAgICAgICAgICAgIGlmICh0b3RhbCA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5jb3VudCA9IGNvdW50OwogICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUudG90YWwgPSB0b3RhbDsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBzaWJsaW5ncy5wdXNoKG5vZGUpOwogICAgICAgICAgICAgICAgICB0cmVlTm9kZU1hcC5zZXQodmFsdWUsIG5vZGUpOwogICAgICAgICAgICAgICAgICBpZiAoIWxldmVsVHJlZU5vZGVNYXAuaGFzKGxldmVsKSkgewogICAgICAgICAgICAgICAgICAgICAgbGV2ZWxUcmVlTm9kZU1hcC5zZXQobGV2ZWwsIFtdKTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpZiAobGV2ZWxUcmVlTm9kZU1hcC5oYXMobGV2ZWwpKSB7CiAgICAgICAgICAgICAgICAgICAgICBsZXZlbFRyZWVOb2RlTWFwLmdldChsZXZlbCkucHVzaChub2RlKTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAobGV2ZWwgPiBtYXhMZXZlbCkgewogICAgICAgICAgICAgICAgICBtYXhMZXZlbCA9IGxldmVsOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICByZXR1cm4geyBsaXN0OiBzaWJsaW5ncywgY291bnQsIHRvdGFsIH07CiAgICAgICAgICB9OwogICAgICAgICAgY29uc3QgeyBsaXN0IH0gPSB0cmF2ZXJzZShkYXRhIHx8IFtdKTsKICAgICAgICAgIGNvbnN0IHRyZWVOb2RlcyA9IGxpc3Q7CiAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgIHRyZWVOb2RlTWFwLAogICAgICAgICAgICAgIGxldmVsVHJlZU5vZGVNYXAsCiAgICAgICAgICAgICAgbWF4TGV2ZWwsCiAgICAgICAgICAgICAgdHJlZU5vZGVzCiAgICAgICAgICB9OwogICAgICB9CiAgICAgIHJldHVybiBjcmVhdGVHcm91cFRyZWUoZGF0YSk7CiAgfQogIC8vIOeUqOaIt+agkee7k+aehAogIGZ1bmN0aW9uIGdlbmVyYXRlVXNlclRyZWUoZGF0YSwgY29uZmlnKSB7CiAgICAgIGNvbnN0IHsgZXhwYW5kZWRLZXlTZXQgfSA9IGNvbmZpZzsKICAgICAgY29uc3QgeyBjbGVhckVtcHR5QnVzaW5lc3MgfSA9IGNvbmZpZy5wcm9wczsKICAgICAgY29uc3QgeyBnZXRLZXksIGdldExhYmVsLCBnZXRDaGlsZHJlbiwgY291bnRGaWx0ZXIsIHRvdGFsRmlsdGVyIH0gPSB1c2VIYW5kbGVGdW4oY29uZmlnKTsKICAgICAgY29uc3QgZmlsdGVyTGlzdCA9IGhhbmRsZUZpbHRlckNvbmZpZyhjb25maWcuYnVzaW5lc3NDb25maWc/LmZpbHRlckNvbmZpZyk7CiAgICAgIC8qKiDnlKjmiLfmoJEgKi8KICAgICAgZnVuY3Rpb24gY3JlYXRlVXNlclRyZWUoZGF0YSkgewogICAgICAgICAgbGV0IG1heExldmVsID0gMTsKICAgICAgICAgIGNvbnN0IHRyZWVOb2RlTWFwID0gbmV3IE1hcCgpOwogICAgICAgICAgY29uc3QgbGV2ZWxUcmVlTm9kZU1hcCA9IG5ldyBNYXAoKTsKICAgICAgICAgIGNvbnN0IHVzZXJNYXAgPSBuZXcgTWFwKCk7CiAgICAgICAgICBjb25zdCB0cmF2ZXJzZSA9IChub2RlcywgbGV2ZWwgPSAxLCBwYXJlbnQgPSB1bmRlZmluZWQpID0+IHsKICAgICAgICAgICAgICBjb25zdCBzaWJsaW5ncyA9IFtdOwogICAgICAgICAgICAgIGxldCBjb3VudCA9IDA7CiAgICAgICAgICAgICAgbGV0IHRvdGFsID0gMDsKICAgICAgICAgICAgICBmb3IgKGxldCByYXdOb2RlIG9mIG5vZGVzKSB7CiAgICAgICAgICAgICAgICAgIC8vIOS4muWKoemAu+i+kQogICAgICAgICAgICAgICAgICBsZXQgY2hpbGRyZW4gPSBnZXRDaGlsZHJlbihyYXdOb2RlKTsKICAgICAgICAgICAgICAgICAgaWYgKHJhd05vZGUuZGF0YVR5cGUgIT09IDUpIHsKICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuID0gY2hpbGRyZW4gPyBjaGlsZHJlbiA6IFtdOwogICAgICAgICAgICAgICAgICAgICAgaWYgKHJhd05vZGUuZGV2aWNlVXNlckxpc3QpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICByYXdOb2RlLmRldmljZVVzZXJMaXN0LmZvckVhY2goKHYpID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4udiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ubHlJZDogcmF3Tm9kZS5pZCArICcnICsgdi5pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiB2Lm5hbWUgfHwgdi5pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlOiA1LCAvLyDku6PooajnlKjmiLcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVzZUZpbHRlckNvbmZpZyh0YXJnZXQsIGZpbHRlckxpc3QpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbi5wdXNoKHRhcmdldCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIHJhd05vZGUgPSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ucmF3Tm9kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICBvbmx5SWQ6IHJhd05vZGUuaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGU6IDEsIC8vIOmDqOmXqAogICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiByYXdOb2RlLm9yZ05hbWUgfHwgcmF3Tm9kZS5jb21wYW55TmFtZQogICAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAvLyDov4fmu6TmsqHmnInnlKjmiLfnmoTpg6jpl6gg5q2l6aqk5LiACiAgICAgICAgICAgICAgICAgIGlmIChjbGVhckVtcHR5QnVzaW5lc3MpIHsKICAgICAgICAgICAgICAgICAgICAgIGlmICghY2hpbGRyZW4gfHwgY2hpbGRyZW4ubGVuZ3RoID09PSAwICYmIHJhd05vZGUuZGF0YVR5cGUgIT09IDUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAvLyDpgJrnlKjpgLvovpEKICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBnZXRLZXkocmF3Tm9kZSk7CiAgICAgICAgICAgICAgICAgIGNvbnN0IG5vZGUgPSB7CiAgICAgICAgICAgICAgICAgICAgICBsZXZlbCwKICAgICAgICAgICAgICAgICAgICAgIGtleTogdmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICBkYXRhOiByYXdOb2RlCiAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgIG5vZGUubGFiZWwgPSBnZXRMYWJlbChyYXdOb2RlKTsKICAgICAgICAgICAgICAgICAgbm9kZS5wYXJlbnQgPSBwYXJlbnQ7CiAgICAgICAgICAgICAgICAgIG5vZGUuaXNMZWFmID0gIWNoaWxkcmVuIHx8IGNoaWxkcmVuLmxlbmd0aCA9PT0gMDsKICAgICAgICAgICAgICAgICAgbm9kZS5leHBhbmRlZCA9IGV4cGFuZGVkS2V5U2V0Lmhhcyh2YWx1ZSk7CiAgICAgICAgICAgICAgICAgIGlmIChjaGlsZHJlbiAmJiBjaGlsZHJlbi5sZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgbGlzdCwgY291bnQ6IGNoaWxkQ291bnQsIHRvdGFsOiBjaGlsZFRvdGFsIH0gPSB0cmF2ZXJzZShjaGlsZHJlbiwgbGV2ZWwgKyAxLCBub2RlKTsKICAgICAgICAgICAgICAgICAgICAgIC8vIOi/h+a7pOayoeacieeUqOaIt+eahOmDqOmXqCDmraXpqqTkuowKICAgICAgICAgICAgICAgICAgICAgIGlmIChjbGVhckVtcHR5QnVzaW5lc3MgJiYgY2hpbGRUb3RhbCA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgbm9kZS5jaGlsZHJlbiA9IGxpc3Q7CiAgICAgICAgICAgICAgICAgICAgICBub2RlLmNvdW50ID0gY2hpbGRDb3VudCA7CiAgICAgICAgICAgICAgICAgICAgICBub2RlLnRvdGFsID0gY2hpbGRUb3RhbCA7CiAgICAgICAgICAgICAgICAgICAgICBjb3VudCArPSBjaGlsZENvdW50OwogICAgICAgICAgICAgICAgICAgICAgdG90YWwgKz0gY2hpbGRUb3RhbDsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgIG5vZGUuY291bnQgPSAwOwogICAgICAgICAgICAgICAgICAgICAgbm9kZS50b3RhbCA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAvLyDnu5/orqEKICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCArPSBjb3VudEZpbHRlcihyYXdOb2RlKSA/IDEgOiAwOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsICs9IHRvdGFsRmlsdGVyKHJhd05vZGUpID8gMSA6IDA7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgc2libGluZ3MucHVzaChub2RlKTsKICAgICAgICAgICAgICAgICAgdHJlZU5vZGVNYXAuc2V0KHZhbHVlLCBub2RlKTsKICAgICAgICAgICAgICAgICAgaWYgKCFsZXZlbFRyZWVOb2RlTWFwLmhhcyhsZXZlbCkpIHsKICAgICAgICAgICAgICAgICAgICAgIGxldmVsVHJlZU5vZGVNYXAuc2V0KGxldmVsLCBbXSk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaWYgKGxldmVsVHJlZU5vZGVNYXAuaGFzKGxldmVsKSkgewogICAgICAgICAgICAgICAgICAgICAgbGV2ZWxUcmVlTm9kZU1hcC5nZXQobGV2ZWwpLnB1c2gobm9kZSk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgLy8g55So5oi3CiAgICAgICAgICAgICAgICAgIGlmIChyYXdOb2RlLmRhdGFUeXBlID09PSA1KSB7CiAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGlkIH0gPSBub2RlLmRhdGE7CiAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1c2VyTGlzdCA9IHVzZXJNYXAuZ2V0KGlkKSB8fCBbXTsKICAgICAgICAgICAgICAgICAgICAgIHVzZXJMaXN0LnB1c2gobm9kZSk7CiAgICAgICAgICAgICAgICAgICAgICB1c2VyTWFwLnNldChpZCwgdXNlckxpc3QpOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmIChsZXZlbCA+IG1heExldmVsKSB7CiAgICAgICAgICAgICAgICAgIG1heExldmVsID0gbGV2ZWw7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHJldHVybiB7IGxpc3Q6IHNpYmxpbmdzLCBjb3VudCwgdG90YWwgfTsKICAgICAgICAgIH07CiAgICAgICAgICBjb25zdCB7IGxpc3QgfSA9IHRyYXZlcnNlKGRhdGEgfHwgW10pOwogICAgICAgICAgY29uc3QgdHJlZU5vZGVzID0gbGlzdDsKICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgdHJlZU5vZGVNYXAsCiAgICAgICAgICAgICAgdXNlck1hcCwKICAgICAgICAgICAgICBsZXZlbFRyZWVOb2RlTWFwLAogICAgICAgICAgICAgIG1heExldmVsLAogICAgICAgICAgICAgIHRyZWVOb2RlcwogICAgICAgICAgfTsKICAgICAgfQogICAgICByZXR1cm4gY3JlYXRlVXNlclRyZWUoZGF0YSk7CiAgfQogIC8vIOmHh+mbhuermeagkee7k+aehAogIGZ1bmN0aW9uIGdlbmVyYXRlQ3NUcmVlKGRhdGEsIGNvbmZpZykgewogICAgICBjb25zdCB7IGV4cGFuZGVkS2V5U2V0IH0gPSBjb25maWc7CiAgICAgIGNvbnN0IHsgY2xlYXJFbXB0eUJ1c2luZXNzIH0gPSBjb25maWcucHJvcHM7CiAgICAgIGNvbnN0IHsgZ2V0S2V5LCBnZXRMYWJlbCwgZ2V0Q2hpbGRyZW4sIGNvdW50RmlsdGVyLCB0b3RhbEZpbHRlciB9ID0gdXNlSGFuZGxlRnVuKGNvbmZpZyk7CiAgICAgIGNvbnN0IGZpbHRlckxpc3QgPSBoYW5kbGVGaWx0ZXJDb25maWcoY29uZmlnLmJ1c2luZXNzQ29uZmlnPy5maWx0ZXJDb25maWcpOwogICAgICAvKiog6YeH6ZuG56uZ5qCRICovCiAgICAgIGZ1bmN0aW9uIGNyZWF0ZUNzVHJlZShkYXRhKSB7CiAgICAgICAgICBsZXQgbWF4TGV2ZWwgPSAxOwogICAgICAgICAgY29uc3QgdHJlZU5vZGVNYXAgPSBuZXcgTWFwKCk7CiAgICAgICAgICBjb25zdCBsZXZlbFRyZWVOb2RlTWFwID0gbmV3IE1hcCgpOwogICAgICAgICAgY29uc3QgY3NNYXAgPSBuZXcgTWFwKCk7CiAgICAgICAgICBjb25zdCB0cmF2ZXJzZSA9IChub2RlcywgbGV2ZWwgPSAxLCBwYXJlbnQgPSB1bmRlZmluZWQpID0+IHsKICAgICAgICAgICAgICBjb25zdCBzaWJsaW5ncyA9IFtdOwogICAgICAgICAgICAgIGxldCBjb3VudCA9IDA7CiAgICAgICAgICAgICAgbGV0IHRvdGFsID0gMDsKICAgICAgICAgICAgICBmb3IgKGxldCByYXdOb2RlIG9mIG5vZGVzKSB7CiAgICAgICAgICAgICAgICAgIC8vIOS4muWKoemAu+i+kQogICAgICAgICAgICAgICAgICBsZXQgY2hpbGRyZW4gPSBnZXRDaGlsZHJlbihyYXdOb2RlKTsKICAgICAgICAgICAgICAgICAgaWYgKHJhd05vZGUuZGF0YVR5cGUgIT09IDgpIHsKICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuID0gY2hpbGRyZW4gPyBjaGlsZHJlbiA6IFtdOwogICAgICAgICAgICAgICAgICAgICAgaWYgKHJhd05vZGUuY3NMaXN0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3Tm9kZS5jc0xpc3QuZm9yRWFjaCgodikgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXQgPSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi52LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25seUlkOiByYXdOb2RlLmlkICsgJycgKyB2LmlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHYuc25hbWUgfHwgdi5zY29kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlOiA4LCAvLyDku6Pooajph4fpm4bnq5kKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVzZUZpbHRlckNvbmZpZyh0YXJnZXQsIGZpbHRlckxpc3QpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbi5wdXNoKHRhcmdldCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIHJhd05vZGUgPSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ucmF3Tm9kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICBvbmx5SWQ6IHJhd05vZGUuaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGU6IDEsIC8vIOmDqOmXqAogICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiByYXdOb2RlLm9yZ05hbWUgfHwgcmF3Tm9kZS5jb21wYW55TmFtZQogICAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAvLyDov4fmu6TmsqHmnInph4fpm4blmajnmoTpg6jpl6gg5q2l6aqk5LiACiAgICAgICAgICAgICAgICAgIGlmIChjbGVhckVtcHR5QnVzaW5lc3MpIHsKICAgICAgICAgICAgICAgICAgICAgIGlmICghY2hpbGRyZW4gfHwgY2hpbGRyZW4ubGVuZ3RoID09PSAwICYmIHJhd05vZGUuZGF0YVR5cGUgIT09IDgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAvLyDpgJrnlKjpgLvovpEKICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBnZXRLZXkocmF3Tm9kZSk7CiAgICAgICAgICAgICAgICAgIGNvbnN0IG5vZGUgPSB7CiAgICAgICAgICAgICAgICAgICAgICBsZXZlbCwKICAgICAgICAgICAgICAgICAgICAgIGtleTogdmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICBkYXRhOiByYXdOb2RlCiAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgIG5vZGUubGFiZWwgPSBnZXRMYWJlbChyYXdOb2RlKTsKICAgICAgICAgICAgICAgICAgbm9kZS5wYXJlbnQgPSBwYXJlbnQ7CiAgICAgICAgICAgICAgICAgIG5vZGUuaXNMZWFmID0gIWNoaWxkcmVuIHx8IGNoaWxkcmVuLmxlbmd0aCA9PT0gMDsKICAgICAgICAgICAgICAgICAgbm9kZS5leHBhbmRlZCA9IGV4cGFuZGVkS2V5U2V0Lmhhcyh2YWx1ZSk7CiAgICAgICAgICAgICAgICAgIGlmIChjaGlsZHJlbiAmJiBjaGlsZHJlbi5sZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgbGlzdCwgY291bnQ6IGNoaWxkQ291bnQsIHRvdGFsOiBjaGlsZFRvdGFsIH0gPSB0cmF2ZXJzZShjaGlsZHJlbiwgbGV2ZWwgKyAxLCBub2RlKTsKICAgICAgICAgICAgICAgICAgICAgIC8vIOi/h+a7pOayoeaciemHh+mbhuWZqOeahOmDqOmXqCDmraXpqqTkuowKICAgICAgICAgICAgICAgICAgICAgIGlmIChjbGVhckVtcHR5QnVzaW5lc3MgJiYgY2hpbGRUb3RhbCA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgbm9kZS5jaGlsZHJlbiA9IGxpc3Q7CiAgICAgICAgICAgICAgICAgICAgICBub2RlLmNvdW50ID0gY2hpbGRDb3VudCA7CiAgICAgICAgICAgICAgICAgICAgICBub2RlLnRvdGFsID0gY2hpbGRUb3RhbCA7CiAgICAgICAgICAgICAgICAgICAgICBjb3VudCArPSBjaGlsZENvdW50OwogICAgICAgICAgICAgICAgICAgICAgdG90YWwgKz0gY2hpbGRUb3RhbDsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgIG5vZGUuY291bnQgPSAwOwogICAgICAgICAgICAgICAgICAgICAgbm9kZS50b3RhbCA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAvLyDnu5/orqEKICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCArPSBjb3VudEZpbHRlcihyYXdOb2RlKSA/IDEgOiAwOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsICs9IHRvdGFsRmlsdGVyKHJhd05vZGUpID8gMSA6IDA7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgc2libGluZ3MucHVzaChub2RlKTsKICAgICAgICAgICAgICAgICAgdHJlZU5vZGVNYXAuc2V0KHZhbHVlLCBub2RlKTsKICAgICAgICAgICAgICAgICAgaWYgKCFsZXZlbFRyZWVOb2RlTWFwLmhhcyhsZXZlbCkpIHsKICAgICAgICAgICAgICAgICAgICAgIGxldmVsVHJlZU5vZGVNYXAuc2V0KGxldmVsLCBbXSk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaWYgKGxldmVsVHJlZU5vZGVNYXAuaGFzKGxldmVsKSkgewogICAgICAgICAgICAgICAgICAgICAgbGV2ZWxUcmVlTm9kZU1hcC5nZXQobGV2ZWwpLnB1c2gobm9kZSk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgLy8g6YeH6ZuG56uZCiAgICAgICAgICAgICAgICAgIGlmIChyYXdOb2RlLmRhdGFUeXBlID09PSA4KSB7CiAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGlkIH0gPSBub2RlLmRhdGE7CiAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1c2VyTGlzdCA9IGNzTWFwLmdldChpZCkgfHwgW107CiAgICAgICAgICAgICAgICAgICAgICB1c2VyTGlzdC5wdXNoKG5vZGUpOwogICAgICAgICAgICAgICAgICAgICAgY3NNYXAuc2V0KGlkLCB1c2VyTGlzdCk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKGxldmVsID4gbWF4TGV2ZWwpIHsKICAgICAgICAgICAgICAgICAgbWF4TGV2ZWwgPSBsZXZlbDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgcmV0dXJuIHsgbGlzdDogc2libGluZ3MsIGNvdW50LCB0b3RhbCB9OwogICAgICAgICAgfTsKICAgICAgICAgIGNvbnN0IHsgbGlzdCB9ID0gdHJhdmVyc2UoZGF0YSB8fCBbXSk7CiAgICAgICAgICBjb25zdCB0cmVlTm9kZXMgPSBsaXN0OwogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICB0cmVlTm9kZU1hcCwKICAgICAgICAgICAgICBjc01hcCwKICAgICAgICAgICAgICBsZXZlbFRyZWVOb2RlTWFwLAogICAgICAgICAgICAgIG1heExldmVsLAogICAgICAgICAgICAgIHRyZWVOb2RlcwogICAgICAgICAgfTsKICAgICAgfQogICAgICByZXR1cm4gY3JlYXRlQ3NUcmVlKGRhdGEpOwogIH0KICBjb25zdCBnZW5lcmF0ZU1hcCA9IHsKICAgICAgLy8g6K6+5aSH5qCRCiAgICAgIGRldmljZTogZ2VuZXJhdGVEZXZpY2VUcmVlLAogICAgICAvLyDnvqTnu4Torr7lpIfmoJEKICAgICAgZ3JvdXBEZXZpY2U6IGdlbmVyYXRlR3JvdXBEZXZpY2VUcmVlLAogICAgICAvLyDnvqTnu4TmoJEKICAgICAgZ3JvdXA6IGdlbmVyYXRlR3JvdXBUcmVlLAogICAgICAvLyDnlKjmiLfmoJEKICAgICAgdXNlcjogZ2VuZXJhdGVVc2VyVHJlZSwKICAgICAgLy8g6YeH6ZuG56uZCiAgICAgIGNzOiBnZW5lcmF0ZUNzVHJlZQogIH07Cgp9KSgpOwovLyMgc291cmNlTWFwcGluZ1VSTD1nZW5lcmF0ZVRyZWUuanMubWFwCgo=');
|
|
1275
1289
|
/* eslint-enable */
|
|
1276
1290
|
|
|
1277
1291
|
var WorkerFactory = /*#__PURE__*/createBase64WorkerFactory('Lyogcm9sbHVwLXBsdWdpbi13ZWItd29ya2VyLWxvYWRlciAqLwooZnVuY3Rpb24gKCkgewogICd1c2Ugc3RyaWN0JzsKCiAgLyoqIOeUn+aIkOmFjee9rumhuSAqLwogIC8qKiDnlJ/miJDlpITnkIblh73mlbAgKi8KICBjb25zdCB1c2VIYW5kbGVGdW4gPSAoY29uZmlnKSA9PiB7CiAgICAgIGNvbnN0IHsgYnVzaW5lc3MgfSA9IGNvbmZpZzsKICAgICAgY29uc3QgcHJvcHMgPSB7IC4uLmNvbmZpZy5wcm9wcyB9OwogICAgICBsZXQgeyBjb3VudEZpbHRlciwgdG90YWxGaWx0ZXIgfSA9IHByb3BzOwogICAgICAvKiog6I635Y+Wa2V55YC8ICovCiAgICAgIGZ1bmN0aW9uIGdldEtleShub2RlKSB7CiAgICAgICAgICBpZiAoIW5vZGUpCiAgICAgICAgICAgICAgcmV0dXJuICcnOwogICAgICAgICAgcmV0dXJuIG5vZGVbcHJvcHMudmFsdWVdOwogICAgICB9CiAgICAgIC8qKiDojrflj5ZsYWJlbOWAvCAqLwogICAgICBmdW5jdGlvbiBnZXRMYWJlbChub2RlKSB7CiAgICAgICAgICBpZiAoIW5vZGUpCiAgICAgICAgICAgICAgcmV0dXJuICcnOwogICAgICAgICAgcmV0dXJuIG5vZGVbcHJvcHMubGFiZWxdOwogICAgICB9CiAgICAgIC8qKiDojrflj5ZjaGlsZHJlbuWAvCAqLwogICAgICBmdW5jdGlvbiBnZXRDaGlsZHJlbihub2RlKSB7CiAgICAgICAgICBpZiAoIW5vZGUpCiAgICAgICAgICAgICAgcmV0dXJuIFtdOwogICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBub2RlW3Byb3BzLmNoaWxkcmVuXTsKICAgICAgICAgIHJldHVybiBjaGlsZHJlbiA/IFsuLi5jaGlsZHJlbl0gOiBbXTsKICAgICAgfQogICAgICAvKiog6I635Y+WY291bnTlgLwgKi8KICAgICAgZnVuY3Rpb24gZ2V0Q291bnQobm9kZSkgewogICAgICAgICAgaWYgKCFub2RlKQogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIHJldHVybiBub2RlW3Byb3BzLmNvdW50XTsKICAgICAgfQogICAgICAvKiog6I635Y+WdG90YWzlgLwgKi8KICAgICAgZnVuY3Rpb24gZ2V0VG90YWwobm9kZSkgewogICAgICAgICAgaWYgKCFub2RlKQogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIHJldHVybiBub2RlW3Byb3BzLnRvdGFsXTsKICAgICAgfQogICAgICBpZiAoWydkZXZpY2UnLCAnZ3JvdXBEZXZpY2UnXS5pbmNsdWRlcyhgJHtidXNpbmVzc31gKSkgewogICAgICAgICAgY291bnRGaWx0ZXIgPSAoZGF0YSkgPT4gewogICAgICAgICAgICAgIHJldHVybiBkYXRhLmRhdGFUeXBlID09PSAzICYmIGRhdGEub25saW5lU3RhdGUgPT09IDE7CiAgICAgICAgICB9OwogICAgICAgICAgdG90YWxGaWx0ZXIgPSAoZGF0YSkgPT4gewogICAgICAgICAgICAgIHJldHVybiBkYXRhLmRhdGFUeXBlID09PSAzOwogICAgICAgICAgfTsKICAgICAgfQogICAgICBlbHNlIGlmIChidXNpbmVzcyA9PT0gJ3VzZXInKSB7CiAgICAgICAgICBjb3VudEZpbHRlciA9IHRvdGFsRmlsdGVyID0gKGRhdGEpID0+IHsKICAgICAgICAgICAgICByZXR1cm4gZGF0YS5kYXRhVHlwZSA9PT0gNTsKICAgICAgICAgIH07CiAgICAgIH0KICAgICAgZWxzZSBpZiAoYnVzaW5lc3MgPT09ICdjcycpIHsKICAgICAgICAgIGNvdW50RmlsdGVyID0gdG90YWxGaWx0ZXIgPSAoZGF0YSkgPT4gewogICAgICAgICAgICAgIHJldHVybiBkYXRhLmRhdGFUeXBlID09PSA4OwogICAgICAgICAgfTsKICAgICAgfQogICAgICByZXR1cm4gewogICAgICAgICAgZ2V0S2V5LAogICAgICAgICAgZ2V0TGFiZWwsCiAgICAgICAgICBnZXRDaGlsZHJlbiwKICAgICAgICAgIGdldENvdW50LAogICAgICAgICAgZ2V0VG90YWwsCiAgICAgICAgICBjb3VudEZpbHRlciwKICAgICAgICAgIHRvdGFsRmlsdGVyLAogICAgICAgICAgLy8g6K6+572u6K6+5aSH54q25oCBCiAgICAgICAgICBzZXREZXZpY2VTdGF0dXM6IChkYXRhKSA9PiB7CiAgICAgICAgICAgICAgaWYgKGRhdGEub25saW5lU3RhdGUgPT09IDEpIHsKICAgICAgICAgICAgICAgICAgLy8g55uR5o6n5LitCiAgICAgICAgICAgICAgICAgIGlmIChkYXRhLm1vbml0b3IgPT09IDEgfHwgZGF0YS5iZU1vbml0b3IgPT09IDEpIHsKICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAyOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIC8vIOmAmuivneS4rQogICAgICAgICAgICAgICAgICBpZiAoZGF0YS52aWRlb0NhbGwgPT09IDEpIHsKICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAzOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIC8vIOW9leWDj+S4rQogICAgICAgICAgICAgICAgICBpZiAoZGF0YS52aWRlb1JlY29yZGluZyA9PT0gMSkgewogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDQ7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgLy8g5b2V6Z+z5LitCiAgICAgICAgICAgICAgICAgIGlmIChkYXRhLmF1ZGlvUmVjb3JkaW5nID09PSAxKSB7CiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gNTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAvLyDlub/mkq3kuK0KICAgICAgICAgICAgICAgICAgaWYgKGRhdGEuYnJvYWRjYXN0ID09PSAxKSB7CiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gNjsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAvLyBTT1MKICAgICAgICAgICAgICAgICAgaWYgKGRhdGEuc29zID09PSAxKSB7CiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gNzsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAvLyDlnKjnur8KICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIC8vIOemu+e6vwogICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgfQogICAgICB9OwogIH07CgogIGNvbnN0IGlzRnVuY3Rpb24gPSAoZSkgPT4gdHlwZW9mIGUgPT09ICdmdW5jdGlvbic7CgogIHNlbGYub25tZXNzYWdlID0gYXN5bmMgKGV2ZW50KSA9PiB7CiAgICAgIGNvbnN0IHsgdHJlZSwgZGF0YSwgY29uZmlnIH0gPSBldmVudC5kYXRhOwogICAgICBjb25zdCB1cGRhdGVUcmVlID0gdXBkYXRlTWFwW2NvbmZpZy5idXNpbmVzc107CiAgICAgIGlmICghdXBkYXRlVHJlZSkgewogICAgICAgICAgc2VsZi5jbG9zZSgpOwogICAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGNvbnN0IHZhbHVlID0gdXBkYXRlVHJlZSh0cmVlLCBkYXRhLCBjb25maWcpOwogICAgICBzZWxmLnBvc3RNZXNzYWdlKHZhbHVlKTsKICB9OwogIC8vIOiuvuWkh+agkQogIGZ1bmN0aW9uIHVwZGF0ZURldmljZVRyZWUodHJlZSwgZGF0YSwgY29uZmlnKSB7CiAgICAgIGNvbnN0IGRldmljZU1hcCA9IHRyZWUuZGV2aWNlTWFwIHx8IG5ldyBNYXAoKTsKICAgICAgY29uc3QgeyBjb3VudEZpbHRlciwgdG90YWxGaWx0ZXIsIHNldERldmljZVN0YXR1cyB9ID0gdXNlSGFuZGxlRnVuKGNvbmZpZyk7CiAgICAgIC8vIOabtOaWsOeItuiKgueCuee7n+iuoQogICAgICBjb25zdCB1cGRhdGVQYXJuZXRDb3VudCA9IChrZXlTZXQpID0+IHsKICAgICAgICAgIGNvbnN0IGlzQ291bnRGaWxlciA9IGNvdW50RmlsdGVyICYmIGlzRnVuY3Rpb24oY291bnRGaWx0ZXIpOwogICAgICAgICAgY29uc3QgaXNUb3RhbEZpbGVyID0gdG90YWxGaWx0ZXIgJiYgaXNGdW5jdGlvbih0b3RhbEZpbHRlcik7CiAgICAgICAgICBjb25zdCBwYXJlbnRLZXlTZXQgPSBuZXcgU2V0KCk7CiAgICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlTZXQpIHsKICAgICAgICAgICAgICBjb25zdCB0YXJnZXQgPSB0cmVlLnRyZWVOb2RlTWFwLmdldChrZXkpOwogICAgICAgICAgICAgIGlmICghdGFyZ2V0KQogICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICBsZXQgY291bnQgPSBpc0NvdW50RmlsZXIgPyAwIDogdGFyZ2V0LmRhdGEuY291bnQ7CiAgICAgICAgICAgICAgbGV0IHRvdGFsID0gaXNUb3RhbEZpbGVyID8gMCA6IHRhcmdldC5kYXRhLnRvdGFsOwogICAgICAgICAgICAgIGNvbnN0IGRldmljZUxpc3QgPSBbW10sIFtdXTsKICAgICAgICAgICAgICBpZiAoaXNDb3VudEZpbGVyIHx8IGlzVG90YWxGaWxlcikgewogICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRhcmdldC5jaGlsZHJlbi5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IHRhcmdldC5jaGlsZHJlbltpXTsKICAgICAgICAgICAgICAgICAgICAgIGNvdW50ID0KICAgICAgICAgICAgICAgICAgICAgICAgICBpc0NvdW50RmlsZXIgJiYgY291bnRGaWx0ZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBjb3VudCArIChpdGVtLmNoaWxkcmVuID8gaXRlbS5jb3VudCA6IGNvdW50RmlsdGVyKGl0ZW0uZGF0YSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY291bnQ7CiAgICAgICAgICAgICAgICAgICAgICB0b3RhbCA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgaXNUb3RhbEZpbGVyICYmIHRvdGFsRmlsdGVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gdG90YWwgKyAoaXRlbS5jaGlsZHJlbiA/IGl0ZW0udG90YWwgOiB0b3RhbEZpbHRlcihpdGVtLmRhdGEpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHRvdGFsOwogICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0uZGF0YS5kZXZpY2VTdGF0dXMgPT09IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZpY2VMaXN0WzFdLnB1c2goaXRlbSk7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZpY2VMaXN0WzBdLnB1c2goaXRlbSk7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgdGFyZ2V0LmNvdW50ID0gY291bnQ7CiAgICAgICAgICAgICAgdGFyZ2V0LnRvdGFsID0gdG90YWw7CiAgICAgICAgICAgICAgdGFyZ2V0LnBhcmVudCAmJiBwYXJlbnRLZXlTZXQuYWRkKHRhcmdldC5wYXJlbnQua2V5KTsKICAgICAgICAgICAgICB0YXJnZXQuY2hpbGRyZW4gPSBbLi4uZGV2aWNlTGlzdFswXSwgLi4uZGV2aWNlTGlzdFsxXV07CiAgICAgICAgICB9CiAgICAgICAgICBwYXJlbnRLZXlTZXQuc2l6ZSAmJiB1cGRhdGVQYXJuZXRDb3VudChwYXJlbnRLZXlTZXQpOwogICAgICB9OwogICAgICBjb25zdCBwYXJlbnRLZXlTZXQgPSBuZXcgU2V0KCk7CiAgICAgIGRhdGEuZm9yRWFjaCgodikgPT4gewogICAgICAgICAgY29uc3QgZGV2aWNlTGlzdCA9IGRldmljZU1hcC5nZXQodi5kZXZpY2VJZCk7CiAgICAgICAgICBpZiAoIWRldmljZUxpc3QubGVuZ3RoKQogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIGRldmljZUxpc3QuZm9yRWFjaCgoZGV2aWNlKSA9PiB7CiAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gdHJlZS50cmVlTm9kZU1hcC5nZXQoZGV2aWNlLmtleSk7CiAgICAgICAgICAgICAgaWYgKCF0YXJnZXQpCiAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICBjb25zdCBsYWJlbCA9IHYuZGV2TmFtZSB8fCB2LmRldmljZUlkOwogICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24odGFyZ2V0LCB7CiAgICAgICAgICAgICAgICAgIGxhYmVsLAogICAgICAgICAgICAgICAgICBkYXRhOiBPYmplY3QuYXNzaWduKHRhcmdldC5kYXRhLCB7CiAgICAgICAgICAgICAgICAgICAgICAuLi52LAogICAgICAgICAgICAgICAgICAgICAgb25seUlkOiB0YXJnZXQua2V5LAogICAgICAgICAgICAgICAgICAgICAgbGFiZWwsCiAgICAgICAgICAgICAgICAgICAgICBkYXRhVHlwZTogdGFyZ2V0LmRhdGEuZGF0YVR5cGUsCiAgICAgICAgICAgICAgICAgICAgICBkZXZpY2VTdGF0dXM6IHNldERldmljZVN0YXR1cyh2KSAvLyDorr7lpIfnirbmgIEKICAgICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICB0YXJnZXQucGFyZW50ICYmIHBhcmVudEtleVNldC5hZGQodGFyZ2V0LnBhcmVudC5rZXkpOwogICAgICAgICAgfSk7CiAgICAgIH0pOwogICAgICB1cGRhdGVQYXJuZXRDb3VudChwYXJlbnRLZXlTZXQpOwogICAgICByZXR1cm4gdHJlZTsKICB9CiAgLy8g55So5oi35qCRCiAgZnVuY3Rpb24gdXBkYXRlVXNlclRyZWUodHJlZSwgZGF0YSwgY29uZmlnKSB7CiAgICAgIGNvbnN0IHVzZXJNYXAgPSB0cmVlLnVzZXJNYXAgfHwgbmV3IE1hcCgpOwogICAgICBkYXRhLmZvckVhY2goKHYpID0+IHsKICAgICAgICAgIGNvbnN0IHVzZXJMaXN0ID0gdXNlck1hcC5nZXQodi5pZCk7CiAgICAgICAgICBpZiAoIXVzZXJMaXN0Lmxlbmd0aCkKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB1c2VyTGlzdC5mb3JFYWNoKChub2RlKSA9PiB7CiAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gdHJlZS50cmVlTm9kZU1hcC5nZXQobm9kZS5rZXkpOwogICAgICAgICAgICAgIGlmICghdGFyZ2V0KQogICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgY29uc3QgbGFiZWwgPSB2Lm5hbWUgfHwgdi5pZDsKICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKHRhcmdldCwgewogICAgICAgICAgICAgICAgICBsYWJlbCwKICAgICAgICAgICAgICAgICAgZGF0YTogT2JqZWN0LmFzc2lnbih0YXJnZXQuZGF0YSwgewogICAgICAgICAgICAgICAgICAgICAgLi4udiwKICAgICAgICAgICAgICAgICAgICAgIG9ubHlJZDogdGFyZ2V0LmtleSwKICAgICAgICAgICAgICAgICAgICAgIGxhYmVsLAogICAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGU6IHRhcmdldC5kYXRhLmRhdGFUeXBlCiAgICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICB9KTsKICAgICAgfSk7CiAgICAgIHJldHVybiB0cmVlOwogIH0KICAvLyDph4fpm4bnq5kKICBmdW5jdGlvbiB1cGRhdGVDc1RyZWUodHJlZSwgZGF0YSwgY29uZmlnKSB7CiAgICAgIGNvbnN0IGNzTWFwID0gdHJlZS5jc01hcCB8fCBuZXcgTWFwKCk7CiAgICAgIGRhdGEuZm9yRWFjaCgodikgPT4gewogICAgICAgICAgY29uc3QgY3NMaXN0ID0gY3NNYXAuZ2V0KHYuaWQpOwogICAgICAgICAgaWYgKCFjc0xpc3QubGVuZ3RoKQogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIGNzTGlzdC5mb3JFYWNoKChub2RlKSA9PiB7CiAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gdHJlZS50cmVlTm9kZU1hcC5nZXQobm9kZS5rZXkpOwogICAgICAgICAgICAgIGlmICghdGFyZ2V0KQogICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgY29uc3QgbGFiZWwgPSB2LnNuYW1lIHx8IHYuc2NvZGU7CiAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbih0YXJnZXQsIHsKICAgICAgICAgICAgICAgICAgbGFiZWwsCiAgICAgICAgICAgICAgICAgIGRhdGE6IE9iamVjdC5hc3NpZ24odGFyZ2V0LmRhdGEsIHsKICAgICAgICAgICAgICAgICAgICAgIC4uLnYsCiAgICAgICAgICAgICAgICAgICAgICBvbmx5SWQ6IHRhcmdldC5rZXksCiAgICAgICAgICAgICAgICAgICAgICBsYWJlbCwKICAgICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlOiB0YXJnZXQuZGF0YS5kYXRhVHlwZQogICAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgIH0pOwogICAgICAgICAgfSk7CiAgICAgIH0pOwogICAgICByZXR1cm4gdHJlZTsKICB9CiAgY29uc3QgdXBkYXRlTWFwID0gewogICAgICAvLyDorr7lpIfmoJEKICAgICAgZGV2aWNlOiB1cGRhdGVEZXZpY2VUcmVlLAogICAgICAvLyDnvqTnu4Torr7lpIfmoJEKICAgICAgZ3JvdXBEZXZpY2U6IHVwZGF0ZURldmljZVRyZWUsCiAgICAgIC8vIOeUqOaIt+agkQogICAgICB1c2VyOiB1cGRhdGVVc2VyVHJlZSwKICAgICAgLy8g6YeH6ZuG56uZCiAgICAgIGNzOiB1cGRhdGVDc1RyZWUKICB9OwoKfSkoKTsKLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXBkYXRlVHJlZS5qcy5tYXAKCg==');
|
|
@@ -1415,7 +1429,8 @@ class VirtualTree {
|
|
|
1415
1429
|
label: this._props.label,
|
|
1416
1430
|
children: this._props.children,
|
|
1417
1431
|
count: this._props.count,
|
|
1418
|
-
total: this._props.total
|
|
1432
|
+
total: this._props.total,
|
|
1433
|
+
clearEmptyBusiness: this._props.clearEmptyBusiness
|
|
1419
1434
|
},
|
|
1420
1435
|
expandedKeySet: this._expandedKeySet,
|
|
1421
1436
|
businessConfig: this._businessConfig
|