@thx/controls 14.2.0 → 15.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -190,7 +190,7 @@ function MaskedDateInputInner(props, ref) {
190
190
  }
191
191
  }), void 0, false, {
192
192
  fileName: _jsxFileName,
193
- lineNumber: 17,
193
+ lineNumber: 23,
194
194
  columnNumber: 3
195
195
  }, this);
196
196
  }
@@ -455,11 +455,10 @@ function LocalTimePicker(props) {
455
455
  showTimeSelectOnly: true,
456
456
  timeIntervals: 15,
457
457
  timeCaption: "Time",
458
- dateFormat: "hh:mm aa" // @ts-ignore
459
- ,
458
+ dateFormat: "hh:mm aa",
460
459
  customInput: /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_8__.jsxDEV)(_MaskedTimeInput__WEBPACK_IMPORTED_MODULE_7__.MaskedTimeInput, _objectSpread({}, inputProps), void 0, false, {
461
460
  fileName: _jsxFileName,
462
- lineNumber: 83,
461
+ lineNumber: 82,
463
462
  columnNumber: 17
464
463
  }, this)
465
464
  }), void 0, false, {
@@ -531,7 +530,7 @@ function MaskedTimeInputInner(props, ref) {
531
530
  }
532
531
  }, rest), void 0, false, {
533
532
  fileName: _jsxFileName,
534
- lineNumber: 16,
533
+ lineNumber: 22,
535
534
  columnNumber: 3
536
535
  }, this);
537
536
  }
@@ -1318,27 +1317,289 @@ __webpack_require__.r(__webpack_exports__);
1318
1317
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
1319
1318
  /* harmony export */ "CreditCardInput": () => (/* binding */ CreditCardInput)
1320
1319
  /* harmony export */ });
1320
+ /* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/slicedToArray */ "@babel/runtime/helpers/slicedToArray");
1321
+ /* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0__);
1322
+ /* harmony import */ var _thx_date__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @thx/date */ "@thx/date");
1323
+ /* harmony import */ var _thx_date__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_thx_date__WEBPACK_IMPORTED_MODULE_1__);
1324
+ /* harmony import */ var debug__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! debug */ "debug");
1325
+ /* harmony import */ var debug__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(debug__WEBPACK_IMPORTED_MODULE_2__);
1326
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ "react");
1327
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__);
1328
+ /* harmony import */ var react_credit_cards__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react-credit-cards */ "react-credit-cards");
1329
+ /* harmony import */ var react_credit_cards__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(react_credit_cards__WEBPACK_IMPORTED_MODULE_4__);
1330
+ /* harmony import */ var react_credit_cards_es_styles_compiled_css__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! react-credit-cards/es/styles-compiled.css */ "react-credit-cards/es/styles-compiled.css");
1331
+ /* harmony import */ var react_credit_cards_es_styles_compiled_css__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(react_credit_cards_es_styles_compiled_css__WEBPACK_IMPORTED_MODULE_5__);
1332
+ /* harmony import */ var semantic_ui_react__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! semantic-ui-react */ "semantic-ui-react");
1333
+ /* harmony import */ var semantic_ui_react__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(semantic_ui_react__WEBPACK_IMPORTED_MODULE_6__);
1334
+ /* harmony import */ var _date_MonthYearPicker__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../date/MonthYearPicker */ "./date/MonthYearPicker/index.ts");
1335
+ /* harmony import */ var _CreditCardNumberInput__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./CreditCardNumberInput */ "./inputs/CreditCardInput/CreditCardNumberInput.tsx");
1336
+ /* harmony import */ var _styles_css__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./styles.css */ "./inputs/CreditCardInput/styles.css");
1337
+ /* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! react/jsx-dev-runtime */ "react/jsx-dev-runtime");
1338
+ /* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_10__);
1339
+
1340
+
1341
+ var _jsxFileName = "/home/mike/dev/thr-addons/packages/controls/src/inputs/CreditCardInput/CreditCardInput.tsx",
1342
+ _s = $RefreshSig$();
1343
+
1344
+
1345
+
1346
+
1347
+
1348
+
1349
+
1350
+
1351
+
1352
+
1353
+
1354
+ var d = debug__WEBPACK_IMPORTED_MODULE_2___default()('thx.controls.inputs.CreditCardInput');
1355
+ function CreditCardInput(props) {
1356
+ _s();
1357
+
1358
+ var onBlur = props.onBlur,
1359
+ disabled = props.disabled,
1360
+ _onChange = props.onChange,
1361
+ value = props.value;
1362
+
1363
+ var _ref = value || {},
1364
+ name = _ref.name,
1365
+ number = _ref.number,
1366
+ cvc = _ref.cvc,
1367
+ expiry = _ref.expiry;
1368
+
1369
+ var _useState = (0,react__WEBPACK_IMPORTED_MODULE_3__.useState)('number'),
1370
+ _useState2 = _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0___default()(_useState, 2),
1371
+ focus = _useState2[0],
1372
+ setFocus = _useState2[1];
1373
+
1374
+ return /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxDEV)(semantic_ui_react__WEBPACK_IMPORTED_MODULE_6__.Grid, {
1375
+ children: [/*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxDEV)(semantic_ui_react__WEBPACK_IMPORTED_MODULE_6__.Grid.Column, {
1376
+ width: 4,
1377
+ children: /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxDEV)(semantic_ui_react__WEBPACK_IMPORTED_MODULE_6__.Form, {
1378
+ children: [/*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxDEV)(semantic_ui_react__WEBPACK_IMPORTED_MODULE_6__.Form.Group, {
1379
+ children: [/*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxDEV)(semantic_ui_react__WEBPACK_IMPORTED_MODULE_6__.Form.Field, {
1380
+ width: 9,
1381
+ children: [/*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxDEV)("label", {
1382
+ children: "Number"
1383
+ }, void 0, false, {
1384
+ fileName: _jsxFileName,
1385
+ lineNumber: 38,
1386
+ columnNumber: 8
1387
+ }, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxDEV)(_CreditCardNumberInput__WEBPACK_IMPORTED_MODULE_8__.CreditCardNumberInput, {
1388
+ onFocus: function onFocus() {
1389
+ return setFocus('number');
1390
+ },
1391
+ onBlur: onBlur,
1392
+ onChange: function onChange(v) {
1393
+ _onChange && _onChange({
1394
+ name: name,
1395
+ number: v,
1396
+ cvc: cvc,
1397
+ expiry: expiry
1398
+ });
1399
+ },
1400
+ disabled: disabled
1401
+ }, void 0, false, {
1402
+ fileName: _jsxFileName,
1403
+ lineNumber: 39,
1404
+ columnNumber: 8
1405
+ }, this)]
1406
+ }, void 0, true, {
1407
+ fileName: _jsxFileName,
1408
+ lineNumber: 37,
1409
+ columnNumber: 7
1410
+ }, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxDEV)(semantic_ui_react__WEBPACK_IMPORTED_MODULE_6__.Form.Field, {
1411
+ width: 4,
1412
+ children: [/*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxDEV)("label", {
1413
+ children: "CVC"
1414
+ }, void 0, false, {
1415
+ fileName: _jsxFileName,
1416
+ lineNumber: 49,
1417
+ columnNumber: 8
1418
+ }, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxDEV)(semantic_ui_react__WEBPACK_IMPORTED_MODULE_6__.Input, {
1419
+ value: cvc || '',
1420
+ onChange: function onChange(ev, v) {
1421
+ _onChange && _onChange({
1422
+ name: name,
1423
+ number: number,
1424
+ cvc: v.value,
1425
+ expiry: expiry
1426
+ });
1427
+ },
1428
+ onFocus: function onFocus() {
1429
+ return setFocus('cvc');
1430
+ },
1431
+ onBlur: function onBlur() {
1432
+ return setFocus('name');
1433
+ },
1434
+ disabled: disabled
1435
+ }, void 0, false, {
1436
+ fileName: _jsxFileName,
1437
+ lineNumber: 50,
1438
+ columnNumber: 8
1439
+ }, this)]
1440
+ }, void 0, true, {
1441
+ fileName: _jsxFileName,
1442
+ lineNumber: 48,
1443
+ columnNumber: 7
1444
+ }, this)]
1445
+ }, void 0, true, {
1446
+ fileName: _jsxFileName,
1447
+ lineNumber: 36,
1448
+ columnNumber: 6
1449
+ }, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxDEV)(semantic_ui_react__WEBPACK_IMPORTED_MODULE_6__.Form.Group, {
1450
+ children: [/*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxDEV)(semantic_ui_react__WEBPACK_IMPORTED_MODULE_6__.Form.Field, {
1451
+ width: 9,
1452
+ children: [/*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxDEV)("label", {
1453
+ children: "Name"
1454
+ }, void 0, false, {
1455
+ fileName: _jsxFileName,
1456
+ lineNumber: 63,
1457
+ columnNumber: 8
1458
+ }, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxDEV)(semantic_ui_react__WEBPACK_IMPORTED_MODULE_6__.Input, {
1459
+ value: name || '',
1460
+ onChange: function onChange(ev, v) {
1461
+ _onChange && _onChange({
1462
+ name: v.value,
1463
+ number: number,
1464
+ cvc: cvc,
1465
+ expiry: expiry
1466
+ });
1467
+ },
1468
+ onFocus: function onFocus() {
1469
+ return setFocus('name');
1470
+ },
1471
+ disabled: disabled,
1472
+ fluid: true
1473
+ }, void 0, false, {
1474
+ fileName: _jsxFileName,
1475
+ lineNumber: 64,
1476
+ columnNumber: 8
1477
+ }, this)]
1478
+ }, void 0, true, {
1479
+ fileName: _jsxFileName,
1480
+ lineNumber: 62,
1481
+ columnNumber: 7
1482
+ }, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxDEV)(semantic_ui_react__WEBPACK_IMPORTED_MODULE_6__.Form.Field, {
1483
+ width: 6,
1484
+ children: [/*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxDEV)("label", {
1485
+ children: "Expiry"
1486
+ }, void 0, false, {
1487
+ fileName: _jsxFileName,
1488
+ lineNumber: 75,
1489
+ columnNumber: 8
1490
+ }, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxDEV)(_date_MonthYearPicker__WEBPACK_IMPORTED_MODULE_7__.MonthYearPicker, {
1491
+ value: expiry,
1492
+ onChange: function onChange(v) {
1493
+ _onChange && _onChange({
1494
+ name: name,
1495
+ number: number,
1496
+ cvc: cvc,
1497
+ expiry: v
1498
+ });
1499
+ },
1500
+ onFocus: function onFocus() {
1501
+ return setFocus('expiry');
1502
+ },
1503
+ disabled: disabled
1504
+ }, void 0, false, {
1505
+ fileName: _jsxFileName,
1506
+ lineNumber: 76,
1507
+ columnNumber: 8
1508
+ }, this)]
1509
+ }, void 0, true, {
1510
+ fileName: _jsxFileName,
1511
+ lineNumber: 74,
1512
+ columnNumber: 7
1513
+ }, this)]
1514
+ }, void 0, true, {
1515
+ fileName: _jsxFileName,
1516
+ lineNumber: 61,
1517
+ columnNumber: 6
1518
+ }, this)]
1519
+ }, void 0, true, {
1520
+ fileName: _jsxFileName,
1521
+ lineNumber: 35,
1522
+ columnNumber: 5
1523
+ }, this)
1524
+ }, void 0, false, {
1525
+ fileName: _jsxFileName,
1526
+ lineNumber: 34,
1527
+ columnNumber: 4
1528
+ }, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxDEV)(semantic_ui_react__WEBPACK_IMPORTED_MODULE_6__.Grid.Column, {
1529
+ width: 12,
1530
+ children: /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxDEV)((react_credit_cards__WEBPACK_IMPORTED_MODULE_4___default()), {
1531
+ cvc: cvc || '',
1532
+ expiry: (0,_thx_date__WEBPACK_IMPORTED_MODULE_1__.formatDate)(expiry, {
1533
+ format: 'MMuu'
1534
+ }) || '',
1535
+ name: name || '',
1536
+ number: number || '',
1537
+ focused: focus,
1538
+ callback: function callback(a, b) {
1539
+ d(a, b);
1540
+ }
1541
+ }, void 0, false, {
1542
+ fileName: _jsxFileName,
1543
+ lineNumber: 89,
1544
+ columnNumber: 5
1545
+ }, this)
1546
+ }, void 0, false, {
1547
+ fileName: _jsxFileName,
1548
+ lineNumber: 88,
1549
+ columnNumber: 4
1550
+ }, this)]
1551
+ }, void 0, true, {
1552
+ fileName: _jsxFileName,
1553
+ lineNumber: 33,
1554
+ columnNumber: 3
1555
+ }, this);
1556
+ }
1557
+
1558
+ _s(CreditCardInput, "4PPyDbPh64qwRUey7hGXkYz4C7U=");
1559
+
1560
+ _c = CreditCardInput;
1561
+
1562
+ var _c;
1563
+
1564
+ $RefreshReg$(_c, "CreditCardInput");
1565
+
1566
+ /***/ }),
1567
+
1568
+ /***/ "./inputs/CreditCardInput/CreditCardNumberInput.tsx":
1569
+ /*!**********************************************************!*\
1570
+ !*** ./inputs/CreditCardInput/CreditCardNumberInput.tsx ***!
1571
+ \**********************************************************/
1572
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1573
+
1574
+ __webpack_require__.r(__webpack_exports__);
1575
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
1576
+ /* harmony export */ "CreditCardNumberInput": () => (/* binding */ CreditCardNumberInput)
1577
+ /* harmony export */ });
1321
1578
  /* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ "@babel/runtime/helpers/defineProperty");
1322
1579
  /* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__);
1323
1580
  /* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/slicedToArray */ "@babel/runtime/helpers/slicedToArray");
1324
1581
  /* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_1__);
1325
1582
  /* harmony import */ var _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/objectWithoutProperties */ "@babel/runtime/helpers/objectWithoutProperties");
1326
1583
  /* harmony import */ var _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_2__);
1327
- /* harmony import */ var _thx_yup_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @thx/yup-types */ "@thx/yup-types");
1328
- /* harmony import */ var _thx_yup_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_thx_yup_types__WEBPACK_IMPORTED_MODULE_3__);
1584
+ /* harmony import */ var credit_card_type__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! credit-card-type */ "credit-card-type");
1585
+ /* harmony import */ var credit_card_type__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(credit_card_type__WEBPACK_IMPORTED_MODULE_3__);
1329
1586
  /* harmony import */ var debug__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! debug */ "debug");
1330
1587
  /* harmony import */ var debug__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(debug__WEBPACK_IMPORTED_MODULE_4__);
1331
- /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! react */ "react");
1332
- /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_5__);
1333
- /* harmony import */ var _MaskedInput__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../MaskedInput */ "./inputs/MaskedInput/index.ts");
1334
- /* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! react/jsx-dev-runtime */ "react/jsx-dev-runtime");
1335
- /* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_7__);
1588
+ /* harmony import */ var luhn__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! luhn */ "luhn");
1589
+ /* harmony import */ var luhn__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(luhn__WEBPACK_IMPORTED_MODULE_5__);
1590
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! react */ "react");
1591
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_6__);
1592
+ /* harmony import */ var semantic_ui_react__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! semantic-ui-react */ "semantic-ui-react");
1593
+ /* harmony import */ var semantic_ui_react__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(semantic_ui_react__WEBPACK_IMPORTED_MODULE_7__);
1594
+ /* harmony import */ var _MaskedInput_useMaskedInput__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../MaskedInput/useMaskedInput */ "./inputs/MaskedInput/useMaskedInput.ts");
1595
+ /* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! react/jsx-dev-runtime */ "react/jsx-dev-runtime");
1596
+ /* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__);
1336
1597
 
1337
1598
 
1338
1599
 
1339
- var _excluded = ["cardType"];
1600
+ var _excluded = ["value", "onChange"];
1340
1601
 
1341
- var _jsxFileName = "/home/mike/dev/thr-addons/packages/controls/src/inputs/CreditCardInput/CreditCardInput.tsx",
1602
+ var _jsxFileName = "/home/mike/dev/thr-addons/packages/controls/src/inputs/CreditCardInput/CreditCardNumberInput.tsx",
1342
1603
  _s = $RefreshSig$();
1343
1604
 
1344
1605
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
@@ -1350,61 +1611,122 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
1350
1611
 
1351
1612
 
1352
1613
 
1353
- var d = debug__WEBPACK_IMPORTED_MODULE_4___default()('thx.controls.inputs.CreditCardInput');
1354
- function CreditCardInput(_ref) {
1614
+
1615
+
1616
+ var d = debug__WEBPACK_IMPORTED_MODULE_4___default()('thx.controls.inputs.CreditCardInput.CreditCardNumberInput');
1617
+
1618
+ function getIcon(type) {
1619
+ switch (type) {
1620
+ case 'visa':
1621
+ return 'cc visa';
1622
+
1623
+ case 'mastercard':
1624
+ return 'cc mastercard';
1625
+
1626
+ case 'american-express':
1627
+ return 'cc amex';
1628
+
1629
+ case 'diners-club':
1630
+ return 'cc diners club';
1631
+
1632
+ case 'jcb':
1633
+ return 'cc jcb';
1634
+
1635
+ default:
1636
+ return 'credit card';
1637
+ }
1638
+ }
1639
+
1640
+ function CreditCardNumberInput(props) {
1355
1641
  _s();
1356
1642
 
1357
- var cardType = _ref.cardType,
1358
- rest = _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_2___default()(_ref, _excluded);
1643
+ var value = props.value,
1644
+ _onChange = props.onChange,
1645
+ rest = _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_2___default()(props, _excluded);
1359
1646
 
1360
- var _useState = (0,react__WEBPACK_IMPORTED_MODULE_5__.useState)(),
1647
+ var _useState = (0,react__WEBPACK_IMPORTED_MODULE_6__.useState)('credit card'),
1361
1648
  _useState2 = _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_1___default()(_useState, 2),
1362
- type = _useState2[0],
1363
- setType = _useState2[1];
1364
-
1365
- (0,react__WEBPACK_IMPORTED_MODULE_5__.useEffect)(function () {
1366
- if (cardType) cardType(type);
1367
- }, [type]);
1368
-
1369
- function validate(valueArray) {
1370
- var cardNumber = valueArray.filter(function (b) {
1371
- return b !== '_' && b !== ' ';
1372
- }).join('');
1373
-
1374
- if (cardNumber[0] === '4') {
1375
- // test using 4111111111111111
1376
- setType(_thx_yup_types__WEBPACK_IMPORTED_MODULE_3__.CreditCardCardNameEnum.Visa);
1377
- } else if (parseInt(cardNumber.substr(0, 2), 10) > 50 && parseInt(cardNumber.substr(0, 2), 10) < 56 || parseInt(cardNumber.substr(0, 2), 10) > 2220 && parseInt(cardNumber.substr(0, 2), 10) < 2721) {
1378
- // test using 5555555555554444 || 2222405343248877
1379
- setType(_thx_yup_types__WEBPACK_IMPORTED_MODULE_3__.CreditCardCardNameEnum.MasterCard);
1649
+ icon = _useState2[0],
1650
+ setIcon = _useState2[1];
1651
+
1652
+ var _useState3 = (0,react__WEBPACK_IMPORTED_MODULE_6__.useState)('black'),
1653
+ _useState4 = _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_1___default()(_useState3, 2),
1654
+ color = _useState4[0],
1655
+ setColor = _useState4[1];
1656
+
1657
+ var checkValidation = (0,react__WEBPACK_IMPORTED_MODULE_6__.useCallback)(function (valueArray) {
1658
+ var num = valueArray.join('').replaceAll(/(_|\s)/g, '');
1659
+ var typ = credit_card_type__WEBPACK_IMPORTED_MODULE_3___default()(num);
1660
+ var isValid = (0,luhn__WEBPACK_IMPORTED_MODULE_5__.validate)(num);
1661
+
1662
+ if (typ.length === 1) {
1663
+ setIcon(getIcon(typ[0].type));
1380
1664
  } else {
1381
- setType(undefined);
1665
+ setIcon('credit card');
1382
1666
  }
1383
1667
 
1384
- return cardNumber.length === 16;
1385
- }
1668
+ if (num.length > 0) {
1669
+ if (isValid) {
1670
+ setColor('green');
1671
+ } else {
1672
+ setColor('red');
1673
+ }
1674
+ } else {
1675
+ setColor('black');
1676
+ }
1386
1677
 
1387
- var creditCardMask = {
1388
- mask: '9999 9999 9999 9999',
1389
- isComplete: validate,
1390
- autoUnmask: true
1391
- };
1392
- return /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxDEV)(_MaskedInput__WEBPACK_IMPORTED_MODULE_6__.MaskedInput, _objectSpread({
1393
- mask: creditCardMask
1394
- }, rest), void 0, false, {
1678
+ return isValid;
1679
+ }, []);
1680
+ var creditCardMask = (0,react__WEBPACK_IMPORTED_MODULE_6__.useMemo)(function () {
1681
+ return {
1682
+ mask: '9999 9999 9999 9999',
1683
+ isComplete: checkValidation,
1684
+ autoUnmask: true
1685
+ };
1686
+ }, [checkValidation]);
1687
+ var cardNumberRef = (0,_MaskedInput_useMaskedInput__WEBPACK_IMPORTED_MODULE_8__.useMaskedInput)({
1688
+ mask: creditCardMask,
1689
+ value: value,
1690
+ onChange: function onChange(v) {
1691
+ var typ = credit_card_type__WEBPACK_IMPORTED_MODULE_3___default()(v || '');
1692
+ d(v, typ); // checkValidation([v || '']);
1693
+
1694
+ _onChange && _onChange(v);
1695
+ }
1696
+ });
1697
+ return /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxDEV)(semantic_ui_react__WEBPACK_IMPORTED_MODULE_7__.Input, _objectSpread(_objectSpread({}, rest), {}, {
1698
+ icon: true,
1699
+ children: [/*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxDEV)("input", {
1700
+ ref: cardNumberRef
1701
+ }, void 0, false, {
1702
+ fileName: _jsxFileName,
1703
+ lineNumber: 84,
1704
+ columnNumber: 4
1705
+ }, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxDEV)(semantic_ui_react__WEBPACK_IMPORTED_MODULE_7__.Icon, {
1706
+ name: icon,
1707
+ color: color,
1708
+ size: "large"
1709
+ }, void 0, false, {
1710
+ fileName: _jsxFileName,
1711
+ lineNumber: 85,
1712
+ columnNumber: 4
1713
+ }, this)]
1714
+ }), void 0, true, {
1395
1715
  fileName: _jsxFileName,
1396
- lineNumber: 43,
1397
- columnNumber: 9
1716
+ lineNumber: 83,
1717
+ columnNumber: 3
1398
1718
  }, this);
1399
1719
  }
1400
1720
 
1401
- _s(CreditCardInput, "eKv1/8l14cC9tI1QmMehq36P4O4=");
1721
+ _s(CreditCardNumberInput, "xrhYVJVzbZz9Azh45XSJ5gFaeho=", false, function () {
1722
+ return [_MaskedInput_useMaskedInput__WEBPACK_IMPORTED_MODULE_8__.useMaskedInput];
1723
+ });
1402
1724
 
1403
- _c = CreditCardInput;
1725
+ _c = CreditCardNumberInput;
1404
1726
 
1405
1727
  var _c;
1406
1728
 
1407
- $RefreshReg$(_c, "CreditCardInput");
1729
+ $RefreshReg$(_c, "CreditCardNumberInput");
1408
1730
 
1409
1731
  /***/ }),
1410
1732
 
@@ -1439,19 +1761,16 @@ __webpack_require__.r(__webpack_exports__);
1439
1761
  /* harmony import */ var _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__);
1440
1762
  /* harmony import */ var debug__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! debug */ "debug");
1441
1763
  /* harmony import */ var debug__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(debug__WEBPACK_IMPORTED_MODULE_2__);
1442
- /* harmony import */ var inputmask__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! inputmask */ "inputmask");
1443
- /* harmony import */ var inputmask__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(inputmask__WEBPACK_IMPORTED_MODULE_3__);
1444
- /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react */ "react");
1445
- /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_4__);
1446
- /* harmony import */ var semantic_ui_react__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! semantic-ui-react */ "semantic-ui-react");
1447
- /* harmony import */ var semantic_ui_react__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(semantic_ui_react__WEBPACK_IMPORTED_MODULE_5__);
1448
- /* harmony import */ var use_deep_compare_effect__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! use-deep-compare-effect */ "use-deep-compare-effect");
1449
- /* harmony import */ var use_deep_compare_effect__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(use_deep_compare_effect__WEBPACK_IMPORTED_MODULE_6__);
1450
- /* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! react/jsx-dev-runtime */ "react/jsx-dev-runtime");
1451
- /* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_7__);
1764
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ "react");
1765
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__);
1766
+ /* harmony import */ var semantic_ui_react__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! semantic-ui-react */ "semantic-ui-react");
1767
+ /* harmony import */ var semantic_ui_react__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(semantic_ui_react__WEBPACK_IMPORTED_MODULE_4__);
1768
+ /* harmony import */ var _useMaskedInput__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./useMaskedInput */ "./inputs/MaskedInput/useMaskedInput.ts");
1769
+ /* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! react/jsx-dev-runtime */ "react/jsx-dev-runtime");
1770
+ /* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_6__);
1452
1771
 
1453
1772
 
1454
- var _excluded = ["name", "value", "onChange", "onBlur", "mask", "disabled"];
1773
+ var _excluded = ["name", "onBlur", "disabled", "onChange", "mask", "value"];
1455
1774
 
1456
1775
  var _jsxFileName = "/home/mike/dev/thr-addons/packages/controls/src/inputs/MaskedInput/MaskedInput.tsx",
1457
1776
  _s = $RefreshSig$();
@@ -1463,88 +1782,45 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
1463
1782
 
1464
1783
 
1465
1784
 
1466
- // @ts-ignore Stuck at 1.4 because 1.5 depends on @types/react which breaks everything
1467
-
1468
1785
 
1469
1786
 
1470
1787
  var d = debug__WEBPACK_IMPORTED_MODULE_2___default()('thx.controls.inputs.MaskedInput');
1471
- /**
1472
- * See source code for detailed prop types or {@link https://github.com/RobinHerbots/jquery.inputmask|here} for more info.
1473
- * @typedef {Object} inputmaskPropTypes
1474
- */
1475
-
1476
1788
  function MaskedInput(props) {
1477
1789
  _s();
1478
1790
 
1479
1791
  var name = props.name,
1480
- value = props.value,
1481
- onChange = props.onChange,
1482
1792
  onBlur = props.onBlur,
1483
- mask = props.mask,
1484
1793
  disabled = props.disabled,
1794
+ onChange = props.onChange,
1795
+ mask = props.mask,
1796
+ value = props.value,
1485
1797
  rest = _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1___default()(props, _excluded);
1486
1798
 
1487
- var inputElement = (0,react__WEBPACK_IMPORTED_MODULE_4__.useRef)(null);
1488
- var maskInstance = (0,react__WEBPACK_IMPORTED_MODULE_4__.useRef)(null);
1489
- use_deep_compare_effect__WEBPACK_IMPORTED_MODULE_6___default()(function () {
1490
- if (!inputElement.current) throw new Error('Could not get input element');
1491
- d('Creating input mask instance');
1492
- maskInstance.current = new (inputmask__WEBPACK_IMPORTED_MODULE_3___default())(_objectSpread(_objectSpread({}, mask), {}, {
1493
- oncomplete: function oncomplete() {
1494
- var _inputElement$current;
1495
-
1496
- if (onChange) onChange((_inputElement$current = inputElement.current) === null || _inputElement$current === void 0 ? void 0 : _inputElement$current.value);
1497
- if (mask !== null && mask !== void 0 && mask.oncomplete) mask.oncomplete();
1498
- },
1499
- oncleared: function oncleared() {
1500
- if (onChange) onChange();
1501
- if (mask !== null && mask !== void 0 && mask.oncleared) mask.oncleared();
1502
- },
1503
- onincomplete: function onincomplete() {
1504
- var _inputElement$current2;
1505
-
1506
- if (onChange) onChange((_inputElement$current2 = inputElement.current) === null || _inputElement$current2 === void 0 ? void 0 : _inputElement$current2.value);
1507
- if (mask !== null && mask !== void 0 && mask.onincomplete) mask.onincomplete();
1508
- }
1509
- }));
1510
- maskInstance.current.mask(inputElement.current);
1511
- return function () {
1512
- if (maskInstance.current) {
1513
- d('Cleaning up input mask instance');
1514
- maskInstance.current.remove();
1515
- maskInstance.current = null;
1516
- }
1517
- };
1518
- }, [mask]); // If we change the value prop we need to sync the DOM value to display the new value
1519
-
1520
- (0,react__WEBPACK_IMPORTED_MODULE_4__.useEffect)(function () {
1521
- var _inputElement$current3;
1522
-
1523
- if (inputElement.current && ((_inputElement$current3 = inputElement.current) === null || _inputElement$current3 === void 0 ? void 0 : _inputElement$current3.value) !== value && value !== undefined) {
1524
- d('Value is changing:', value);
1525
- inputElement.current.value = value;
1526
- }
1527
- }, [value]);
1528
- return /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxDEV)(semantic_ui_react__WEBPACK_IMPORTED_MODULE_5__.Input, _objectSpread(_objectSpread({}, rest), {}, {
1529
- children: /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxDEV)("input", {
1799
+ var inputRef = (0,_useMaskedInput__WEBPACK_IMPORTED_MODULE_5__.useMaskedInput)({
1800
+ mask: mask,
1801
+ value: value,
1802
+ onChange: onChange
1803
+ });
1804
+ return /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxDEV)(semantic_ui_react__WEBPACK_IMPORTED_MODULE_4__.Input, _objectSpread(_objectSpread({}, rest), {}, {
1805
+ children: /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxDEV)("input", {
1530
1806
  disabled: disabled,
1531
1807
  name: name,
1532
- ref: inputElement,
1808
+ ref: inputRef,
1533
1809
  onBlur: onBlur
1534
1810
  }, void 0, false, {
1535
1811
  fileName: _jsxFileName,
1536
- lineNumber: 69,
1812
+ lineNumber: 21,
1537
1813
  columnNumber: 4
1538
1814
  }, this)
1539
1815
  }), void 0, false, {
1540
1816
  fileName: _jsxFileName,
1541
- lineNumber: 68,
1817
+ lineNumber: 20,
1542
1818
  columnNumber: 3
1543
1819
  }, this);
1544
1820
  }
1545
1821
 
1546
- _s(MaskedInput, "0UoGXAt/O9Xpg5c5EGf1oyTQlfo=", false, function () {
1547
- return [(use_deep_compare_effect__WEBPACK_IMPORTED_MODULE_6___default())];
1822
+ _s(MaskedInput, "W3jy9LOlLdoFzuUq4DZpSE4bDLI=", false, function () {
1823
+ return [_useMaskedInput__WEBPACK_IMPORTED_MODULE_5__.useMaskedInput];
1548
1824
  });
1549
1825
 
1550
1826
  _c = MaskedInput;
@@ -1563,10 +1839,104 @@ $RefreshReg$(_c, "MaskedInput");
1563
1839
 
1564
1840
  __webpack_require__.r(__webpack_exports__);
1565
1841
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
1566
- /* harmony export */ "MaskedInput": () => (/* reexport safe */ _MaskedInput__WEBPACK_IMPORTED_MODULE_0__.MaskedInput)
1842
+ /* harmony export */ "MaskedInput": () => (/* reexport safe */ _MaskedInput__WEBPACK_IMPORTED_MODULE_0__.MaskedInput),
1843
+ /* harmony export */ "useMaskedInput": () => (/* reexport safe */ _useMaskedInput__WEBPACK_IMPORTED_MODULE_1__.useMaskedInput)
1567
1844
  /* harmony export */ });
1568
1845
  /* harmony import */ var _MaskedInput__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./MaskedInput */ "./inputs/MaskedInput/MaskedInput.tsx");
1846
+ /* harmony import */ var _useMaskedInput__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./useMaskedInput */ "./inputs/MaskedInput/useMaskedInput.ts");
1847
+
1848
+
1849
+
1850
+ /***/ }),
1851
+
1852
+ /***/ "./inputs/MaskedInput/useMaskedInput.ts":
1853
+ /*!**********************************************!*\
1854
+ !*** ./inputs/MaskedInput/useMaskedInput.ts ***!
1855
+ \**********************************************/
1856
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1857
+
1858
+ __webpack_require__.r(__webpack_exports__);
1859
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
1860
+ /* harmony export */ "useMaskedInput": () => (/* binding */ useMaskedInput)
1861
+ /* harmony export */ });
1862
+ /* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ "@babel/runtime/helpers/defineProperty");
1863
+ /* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__);
1864
+ /* harmony import */ var debug__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! debug */ "debug");
1865
+ /* harmony import */ var debug__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(debug__WEBPACK_IMPORTED_MODULE_1__);
1866
+ /* harmony import */ var inputmask__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! inputmask */ "inputmask");
1867
+ /* harmony import */ var inputmask__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(inputmask__WEBPACK_IMPORTED_MODULE_2__);
1868
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ "react");
1869
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__);
1870
+ /* harmony import */ var use_deep_compare_effect__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! use-deep-compare-effect */ "use-deep-compare-effect");
1871
+ /* harmony import */ var use_deep_compare_effect__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(use_deep_compare_effect__WEBPACK_IMPORTED_MODULE_4__);
1872
+
1873
+
1874
+ var _s = $RefreshSig$();
1875
+
1876
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
1877
+
1878
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
1879
+
1880
+
1881
+
1882
+
1883
+
1884
+ var d = debug__WEBPACK_IMPORTED_MODULE_1___default()('thx.controls.inputs.MaskedInput.useMaskedInput');
1885
+ function useMaskedInput(props) {
1886
+ _s();
1887
+
1888
+ var value = props.value,
1889
+ onChange = props.onChange,
1890
+ onSet = props.onSet,
1891
+ mask = props.mask;
1892
+ var inputElement = (0,react__WEBPACK_IMPORTED_MODULE_3__.useRef)(null);
1893
+ var maskInstance = (0,react__WEBPACK_IMPORTED_MODULE_3__.useRef)(null);
1894
+ use_deep_compare_effect__WEBPACK_IMPORTED_MODULE_4___default()(function () {
1895
+ if (!inputElement.current) throw new Error('Could not get input element');
1896
+ d('Creating input mask instance');
1897
+ maskInstance.current = new (inputmask__WEBPACK_IMPORTED_MODULE_2___default())(_objectSpread(_objectSpread({}, mask), {}, {
1898
+ oncomplete: function oncomplete() {
1899
+ var _inputElement$current;
1900
+
1901
+ if (onChange) onChange((_inputElement$current = inputElement.current) === null || _inputElement$current === void 0 ? void 0 : _inputElement$current.value);
1902
+ if (mask !== null && mask !== void 0 && mask.oncomplete) mask.oncomplete();
1903
+ },
1904
+ oncleared: function oncleared() {
1905
+ if (onChange) onChange();
1906
+ if (mask !== null && mask !== void 0 && mask.oncleared) mask.oncleared();
1907
+ },
1908
+ onincomplete: function onincomplete() {
1909
+ var _inputElement$current2;
1910
+
1911
+ if (onChange) onChange((_inputElement$current2 = inputElement.current) === null || _inputElement$current2 === void 0 ? void 0 : _inputElement$current2.value);
1912
+ if (mask !== null && mask !== void 0 && mask.onincomplete) mask.onincomplete();
1913
+ }
1914
+ }));
1915
+ maskInstance.current.mask(inputElement.current);
1916
+ return function () {
1917
+ if (maskInstance.current) {
1918
+ d('Cleaning up input mask instance');
1919
+ maskInstance.current.remove();
1920
+ maskInstance.current = null;
1921
+ }
1922
+ };
1923
+ }, [mask]); // If we change the value prop we need to sync the DOM value to display the new value
1924
+
1925
+ (0,react__WEBPACK_IMPORTED_MODULE_3__.useEffect)(function () {
1926
+ var _inputElement$current3;
1927
+
1928
+ if (inputElement.current && ((_inputElement$current3 = inputElement.current) === null || _inputElement$current3 === void 0 ? void 0 : _inputElement$current3.value) !== value && value !== undefined) {
1929
+ d('Value is changing:', value);
1930
+ inputElement.current.value = value;
1931
+ onSet && onSet(value);
1932
+ }
1933
+ }, [value]);
1934
+ return inputElement;
1935
+ }
1569
1936
 
1937
+ _s(useMaskedInput, "0UoGXAt/O9Xpg5c5EGf1oyTQlfo=", false, function () {
1938
+ return [(use_deep_compare_effect__WEBPACK_IMPORTED_MODULE_4___default())];
1939
+ });
1570
1940
 
1571
1941
  /***/ }),
1572
1942
 
@@ -1618,7 +1988,7 @@ function PhoneInput(props) {
1618
1988
  mask: mask
1619
1989
  }), void 0, false, {
1620
1990
  fileName: _jsxFileName,
1621
- lineNumber: 19,
1991
+ lineNumber: 20,
1622
1992
  columnNumber: 9
1623
1993
  }, this);
1624
1994
  }
@@ -2349,13 +2719,15 @@ __webpack_require__.r(__webpack_exports__);
2349
2719
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_4__);
2350
2720
  /* harmony import */ var semantic_ui_react__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! semantic-ui-react */ "semantic-ui-react");
2351
2721
  /* harmony import */ var semantic_ui_react__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(semantic_ui_react__WEBPACK_IMPORTED_MODULE_5__);
2352
- /* harmony import */ var _MaskedInput__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../MaskedInput */ "./inputs/MaskedInput/index.ts");
2353
- /* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! react/jsx-dev-runtime */ "react/jsx-dev-runtime");
2354
- /* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_7__);
2722
+ /* harmony import */ var social_insurance_number__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! social-insurance-number */ "social-insurance-number");
2723
+ /* harmony import */ var social_insurance_number__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(social_insurance_number__WEBPACK_IMPORTED_MODULE_6__);
2724
+ /* harmony import */ var _MaskedInput_useMaskedInput__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../MaskedInput/useMaskedInput */ "./inputs/MaskedInput/useMaskedInput.ts");
2725
+ /* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! react/jsx-dev-runtime */ "react/jsx-dev-runtime");
2726
+ /* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_8__);
2355
2727
 
2356
2728
 
2357
2729
 
2358
- var _excluded = ["hasSin", "onChange"];
2730
+ var _excluded = ["value", "onChange"];
2359
2731
 
2360
2732
  var _jsxFileName = "/home/mike/dev/thr-addons/packages/controls/src/inputs/SinInput/SinInput.tsx",
2361
2733
  _s = $RefreshSig$();
@@ -2371,142 +2743,89 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
2371
2743
 
2372
2744
 
2373
2745
  var d = debug__WEBPACK_IMPORTED_MODULE_3___default()('thx.controls.inputs.SinInput');
2374
- // if we click edit the value is set to an empty string.
2375
- // if we click delete the value is set to an empty string.
2376
- // if we click cancel the value is set to undefined.
2377
- // if we change it we set it to the given string.
2378
2746
  function SinInput(props) {
2379
2747
  _s();
2380
2748
 
2381
- var hasSin = props.hasSin,
2749
+ var value = props.value,
2382
2750
  onChange = props.onChange,
2383
2751
  rest = _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_2___default()(props, _excluded);
2384
2752
 
2385
- var _useState = (0,react__WEBPACK_IMPORTED_MODULE_4__.useState)(false),
2753
+ var _useState = (0,react__WEBPACK_IMPORTED_MODULE_4__.useState)('black'),
2386
2754
  _useState2 = _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_1___default()(_useState, 2),
2387
- edit = _useState2[0],
2388
- setEdit = _useState2[1];
2389
-
2390
- var _useState3 = (0,react__WEBPACK_IMPORTED_MODULE_4__.useState)(false),
2391
- _useState4 = _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_1___default()(_useState3, 2),
2392
- doDelete = _useState4[0],
2393
- setDoDelete = _useState4[1];
2755
+ color = _useState2[0],
2756
+ setColor = _useState2[1];
2757
+
2758
+ var checkValidation = (0,react__WEBPACK_IMPORTED_MODULE_4__.useCallback)(function (valueArray) {
2759
+ var num = valueArray.join('').replaceAll(/(_|\s|-)/g, '');
2760
+ var validate = new (social_insurance_number__WEBPACK_IMPORTED_MODULE_6___default())(num);
2761
+
2762
+ if (num.length > 0) {
2763
+ if (validate.isValid()) {
2764
+ setColor('green');
2765
+ } else {
2766
+ setColor('red');
2767
+ }
2768
+ } else {
2769
+ setColor('black');
2770
+ }
2394
2771
 
2395
- function handleChange(val) {
2396
- onChange && onChange(val);
2397
- } // if we have a SIN and we don't want to edit
2772
+ return validate.isValid();
2773
+ }, []);
2774
+ var mask = (0,react__WEBPACK_IMPORTED_MODULE_4__.useMemo)(function () {
2775
+ return {
2776
+ mask: '999-999-999',
2777
+ isComplete: checkValidation,
2778
+ greedy: false,
2779
+ autoUnmask: true
2780
+ };
2781
+ }, [checkValidation]);
2782
+ var cardNumberRef = (0,_MaskedInput_useMaskedInput__WEBPACK_IMPORTED_MODULE_7__.useMaskedInput)({
2783
+ mask: mask,
2784
+ value: value,
2785
+ onChange: function (_onChange) {
2786
+ function onChange(_x) {
2787
+ return _onChange.apply(this, arguments);
2788
+ }
2398
2789
 
2790
+ onChange.toString = function () {
2791
+ return _onChange.toString();
2792
+ };
2399
2793
 
2400
- return hasSin && !edit && !doDelete ? /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_7__.Fragment, {
2401
- children: [/*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxDEV)(semantic_ui_react__WEBPACK_IMPORTED_MODULE_5__.Label, {
2402
- style: {
2403
- width: '100%',
2404
- height: '36px',
2405
- paddingTop: '10px'
2406
- },
2407
- size: "large",
2408
- color: "green",
2409
- children: "SIN is saved"
2410
- }, void 0, false, {
2411
- fileName: _jsxFileName,
2412
- lineNumber: 28,
2413
- columnNumber: 4
2414
- }, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxDEV)(semantic_ui_react__WEBPACK_IMPORTED_MODULE_5__.Popup, {
2415
- content: "edit",
2416
- trigger: /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxDEV)(semantic_ui_react__WEBPACK_IMPORTED_MODULE_5__.Button, {
2417
- type: "button",
2418
- onClick: function onClick() {
2419
- setEdit(true);
2420
- handleChange('');
2421
- },
2422
- color: "orange",
2423
- icon: true,
2424
- children: /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxDEV)(semantic_ui_react__WEBPACK_IMPORTED_MODULE_5__.Icon, {
2425
- name: "edit"
2426
- }, void 0, false, {
2427
- fileName: _jsxFileName,
2428
- lineNumber: 43,
2429
- columnNumber: 7
2430
- }, this)
2431
- }, void 0, false, {
2432
- fileName: _jsxFileName,
2433
- lineNumber: 34,
2434
- columnNumber: 6
2435
- }, this)
2794
+ return onChange;
2795
+ }(function (v) {
2796
+ onChange && onChange(v);
2797
+ }),
2798
+ onSet: function onSet(v) {
2799
+ checkValidation([v || '']);
2800
+ }
2801
+ });
2802
+ return /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_8__.jsxDEV)(semantic_ui_react__WEBPACK_IMPORTED_MODULE_5__.Input, _objectSpread(_objectSpread({}, rest), {}, {
2803
+ icon: true,
2804
+ children: [/*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_8__.jsxDEV)("input", {
2805
+ ref: cardNumberRef
2436
2806
  }, void 0, false, {
2437
2807
  fileName: _jsxFileName,
2438
- lineNumber: 31,
2808
+ lineNumber: 57,
2439
2809
  columnNumber: 4
2440
- }, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxDEV)(semantic_ui_react__WEBPACK_IMPORTED_MODULE_5__.Popup, {
2441
- content: "delete",
2442
- trigger: /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxDEV)(semantic_ui_react__WEBPACK_IMPORTED_MODULE_5__.Button, {
2443
- negative: true,
2444
- type: "button",
2445
- icon: true,
2446
- onClick: function onClick() {
2447
- setDoDelete(true);
2448
- handleChange('');
2449
- },
2450
- children: /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxDEV)(semantic_ui_react__WEBPACK_IMPORTED_MODULE_5__.Icon, {
2451
- name: "trash alternate"
2452
- }, void 0, false, {
2453
- fileName: _jsxFileName,
2454
- lineNumber: 59,
2455
- columnNumber: 7
2456
- }, this)
2457
- }, void 0, false, {
2458
- fileName: _jsxFileName,
2459
- lineNumber: 50,
2460
- columnNumber: 6
2461
- }, this)
2810
+ }, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_8__.jsxDEV)(semantic_ui_react__WEBPACK_IMPORTED_MODULE_5__.Icon, {
2811
+ name: "id badge",
2812
+ color: color,
2813
+ size: "large"
2462
2814
  }, void 0, false, {
2463
2815
  fileName: _jsxFileName,
2464
- lineNumber: 47,
2465
- columnNumber: 4
2466
- }, this)]
2467
- }, void 0, true) :
2468
- /*#__PURE__*/
2469
- // if we dont have a SIN
2470
- (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_7__.Fragment, {
2471
- children: [/*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxDEV)(_MaskedInput__WEBPACK_IMPORTED_MODULE_6__.MaskedInput, _objectSpread(_objectSpread({}, rest), {}, {
2472
- onChange: handleChange,
2473
- mask: {
2474
- mask: '999-999-999',
2475
- greedy: false,
2476
- autoUnmask: true
2477
- }
2478
- }), void 0, false, {
2479
- fileName: _jsxFileName,
2480
- lineNumber: 67,
2816
+ lineNumber: 58,
2481
2817
  columnNumber: 4
2482
- }, this), edit && /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxDEV)(semantic_ui_react__WEBPACK_IMPORTED_MODULE_5__.Button, {
2483
- type: "button",
2484
- onClick: function onClick() {
2485
- setEdit(false);
2486
- handleChange(undefined);
2487
- },
2488
- children: "Cancel"
2489
- }, void 0, false, {
2490
- fileName: _jsxFileName,
2491
- lineNumber: 70,
2492
- columnNumber: 5
2493
- }, this), doDelete && /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxDEV)(semantic_ui_react__WEBPACK_IMPORTED_MODULE_5__.Button, {
2494
- color: "orange",
2495
- type: "button",
2496
- onClick: function onClick() {
2497
- setDoDelete(false);
2498
- handleChange(undefined);
2499
- },
2500
- children: "Undo"
2501
- }, void 0, false, {
2502
- fileName: _jsxFileName,
2503
- lineNumber: 81,
2504
- columnNumber: 5
2505
2818
  }, this)]
2506
- }, void 0, true);
2819
+ }), void 0, true, {
2820
+ fileName: _jsxFileName,
2821
+ lineNumber: 56,
2822
+ columnNumber: 3
2823
+ }, this);
2507
2824
  }
2508
2825
 
2509
- _s(SinInput, "T3DPrOROZ3dfwPKAphxJoO7PrEk=");
2826
+ _s(SinInput, "jWyiZuExrAnOzUol/0RzfJlCPSI=", false, function () {
2827
+ return [_MaskedInput_useMaskedInput__WEBPACK_IMPORTED_MODULE_7__.useMaskedInput];
2828
+ });
2510
2829
 
2511
2830
  _c = SinInput;
2512
2831
 
@@ -3213,21 +3532,24 @@ __webpack_require__.r(__webpack_exports__);
3213
3532
  /* harmony export */ });
3214
3533
  /* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ "@babel/runtime/helpers/defineProperty");
3215
3534
  /* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__);
3216
- /* harmony import */ var _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/objectWithoutProperties */ "@babel/runtime/helpers/objectWithoutProperties");
3217
- /* harmony import */ var _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__);
3218
- /* harmony import */ var _thx_money__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @thx/money */ "@thx/money");
3219
- /* harmony import */ var _thx_money__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_thx_money__WEBPACK_IMPORTED_MODULE_2__);
3220
- /* harmony import */ var debug__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! debug */ "debug");
3221
- /* harmony import */ var debug__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(debug__WEBPACK_IMPORTED_MODULE_3__);
3222
- /* harmony import */ var js_money__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! js-money */ "js-money");
3223
- /* harmony import */ var js_money__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(js_money__WEBPACK_IMPORTED_MODULE_4__);
3224
- /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! react */ "react");
3225
- /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_5__);
3226
- /* harmony import */ var semantic_ui_react__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! semantic-ui-react */ "semantic-ui-react");
3227
- /* harmony import */ var semantic_ui_react__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(semantic_ui_react__WEBPACK_IMPORTED_MODULE_6__);
3228
- /* harmony import */ var _useMoneyInput__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../useMoneyInput */ "./money/useMoneyInput.ts");
3229
- /* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! react/jsx-dev-runtime */ "react/jsx-dev-runtime");
3230
- /* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_8__);
3535
+ /* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/slicedToArray */ "@babel/runtime/helpers/slicedToArray");
3536
+ /* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_1__);
3537
+ /* harmony import */ var _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/objectWithoutProperties */ "@babel/runtime/helpers/objectWithoutProperties");
3538
+ /* harmony import */ var _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_2__);
3539
+ /* harmony import */ var _thx_money__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @thx/money */ "@thx/money");
3540
+ /* harmony import */ var _thx_money__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_thx_money__WEBPACK_IMPORTED_MODULE_3__);
3541
+ /* harmony import */ var debug__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! debug */ "debug");
3542
+ /* harmony import */ var debug__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(debug__WEBPACK_IMPORTED_MODULE_4__);
3543
+ /* harmony import */ var js_money__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! js-money */ "js-money");
3544
+ /* harmony import */ var js_money__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(js_money__WEBPACK_IMPORTED_MODULE_5__);
3545
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! react */ "react");
3546
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_6__);
3547
+ /* harmony import */ var semantic_ui_react__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! semantic-ui-react */ "semantic-ui-react");
3548
+ /* harmony import */ var semantic_ui_react__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(semantic_ui_react__WEBPACK_IMPORTED_MODULE_7__);
3549
+ /* harmony import */ var _useMoneyInput__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../useMoneyInput */ "./money/useMoneyInput.ts");
3550
+ /* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! react/jsx-dev-runtime */ "react/jsx-dev-runtime");
3551
+ /* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__);
3552
+
3231
3553
 
3232
3554
 
3233
3555
  var _excluded = ["name", "onBlur", "prefix", "defaultCurrency", "onChange", "showPrefix", "value", "wholeNumber", "currencies", "locked"];
@@ -3248,7 +3570,7 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
3248
3570
 
3249
3571
 
3250
3572
 
3251
- var d = debug__WEBPACK_IMPORTED_MODULE_3___default()('thx.controls.money.MoneyCurrencyInput');
3573
+ var d = debug__WEBPACK_IMPORTED_MODULE_4___default()('thx.controls.money.MoneyCurrencyInput');
3252
3574
  function MoneyCurrencyInput(props) {
3253
3575
  _s();
3254
3576
 
@@ -3262,17 +3584,7 @@ function MoneyCurrencyInput(props) {
3262
3584
  wholeNumber = props.wholeNumber,
3263
3585
  currencies = props.currencies,
3264
3586
  locked = props.locked,
3265
- rest = _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1___default()(props, _excluded);
3266
-
3267
- var _useMoneyInput = (0,_useMoneyInput__WEBPACK_IMPORTED_MODULE_7__.useMoneyInput)({
3268
- defaultCurrency: defaultCurrency,
3269
- onChange: onChange,
3270
- prefix: prefix,
3271
- showPrefix: showPrefix,
3272
- value: value,
3273
- wholeNumber: wholeNumber
3274
- }),
3275
- inputElement = _useMoneyInput.inputElement;
3587
+ rest = _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_2___default()(props, _excluded);
3276
3588
 
3277
3589
  var options = currencies || [{
3278
3590
  key: 'CAD',
@@ -3283,49 +3595,71 @@ function MoneyCurrencyInput(props) {
3283
3595
  text: 'USD',
3284
3596
  value: 'USD'
3285
3597
  }];
3598
+ var handleChange = (0,react__WEBPACK_IMPORTED_MODULE_6__.useCallback)(function (v) {
3599
+ if (!v) {
3600
+ onChange && onChange((0,_thx_money__WEBPACK_IMPORTED_MODULE_3__.toMoney)(0, defaultCurrency));
3601
+ } else {
3602
+ onChange && onChange(v);
3603
+ }
3604
+ }, [defaultCurrency, onChange]);
3605
+ var val = !(value instanceof (js_money__WEBPACK_IMPORTED_MODULE_5___default())) && value !== undefined ? (0,_thx_money__WEBPACK_IMPORTED_MODULE_3__.toMoney)(value) : value;
3286
3606
 
3287
- function handleDropdownChange(e, val) {
3288
- // @ts-ignore DONT DELETE THE ** IT IS AN OPERATOR MEANING POWER/EXPONENT
3289
- if (val.value && onChange) onChange((0,_thx_money__WEBPACK_IMPORTED_MODULE_2__.toMoney)(value.amount / Math.pow(10, (js_money__WEBPACK_IMPORTED_MODULE_4___default())[value.currency].decimal_digits), (js_money__WEBPACK_IMPORTED_MODULE_4___default())[val.value]));
3290
- }
3291
-
3292
- return /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_8__.jsxDEV)(semantic_ui_react__WEBPACK_IMPORTED_MODULE_6__.Input, _objectSpread(_objectSpread({}, rest), {}, {
3607
+ var _useMoneyInput = (0,_useMoneyInput__WEBPACK_IMPORTED_MODULE_8__.useMoneyInput)({
3608
+ onChange: handleChange,
3609
+ prefix: prefix,
3610
+ showPrefix: showPrefix,
3611
+ value: val,
3612
+ wholeNumber: wholeNumber
3613
+ }),
3614
+ _useMoneyInput2 = _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_1___default()(_useMoneyInput, 1),
3615
+ inputElement = _useMoneyInput2[0];
3616
+
3617
+ var handleDropdownChange = (0,react__WEBPACK_IMPORTED_MODULE_6__.useCallback)(function (e, v) {
3618
+ var newCurrencyCode = v.value;
3619
+ var newMoney = new (js_money__WEBPACK_IMPORTED_MODULE_5___default())((value === null || value === void 0 ? void 0 : value.amount) || 0, newCurrencyCode);
3620
+ d('Change', value, newCurrencyCode, newMoney); // setInputValue(newMoney);
3621
+
3622
+ onChange && onChange(newMoney); // forceUpdate();
3623
+ }, [onChange, value]);
3624
+ var currencyCode = (value === null || value === void 0 ? void 0 : value.currency) || (defaultCurrency === null || defaultCurrency === void 0 ? void 0 : defaultCurrency.code) || 'CAD';
3625
+ d('Render', value, currencyCode);
3626
+ return /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxDEV)(semantic_ui_react__WEBPACK_IMPORTED_MODULE_7__.Input, _objectSpread(_objectSpread({}, rest), {}, {
3293
3627
  labelPosition: "right",
3294
- children: [/*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_8__.jsxDEV)("input", {
3628
+ children: [/*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxDEV)("input", {
3295
3629
  name: name,
3296
3630
  ref: inputElement,
3297
3631
  onBlur: onBlur,
3298
3632
  readOnly: locked
3299
3633
  }, void 0, false, {
3300
3634
  fileName: _jsxFileName,
3301
- lineNumber: 32,
3635
+ lineNumber: 57,
3302
3636
  columnNumber: 4
3303
- }, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_8__.jsxDEV)(semantic_ui_react__WEBPACK_IMPORTED_MODULE_6__.Label, {
3637
+ }, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxDEV)(semantic_ui_react__WEBPACK_IMPORTED_MODULE_7__.Label, {
3304
3638
  basic: true,
3305
- children: /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_8__.jsxDEV)(semantic_ui_react__WEBPACK_IMPORTED_MODULE_6__.Dropdown, {
3639
+ children: /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxDEV)(semantic_ui_react__WEBPACK_IMPORTED_MODULE_7__.Dropdown, {
3306
3640
  disabled: locked,
3307
3641
  options: options,
3308
- value: (value === null || value === void 0 ? void 0 : value.currency) || (defaultCurrency === null || defaultCurrency === void 0 ? void 0 : defaultCurrency.code) || 'CAD',
3642
+ value: currencyCode,
3309
3643
  onChange: handleDropdownChange
3310
3644
  }, void 0, false, {
3311
3645
  fileName: _jsxFileName,
3312
- lineNumber: 34,
3646
+ lineNumber: 59,
3313
3647
  columnNumber: 5
3314
3648
  }, this)
3315
3649
  }, void 0, false, {
3316
3650
  fileName: _jsxFileName,
3317
- lineNumber: 33,
3651
+ lineNumber: 58,
3318
3652
  columnNumber: 4
3319
3653
  }, this)]
3320
3654
  }), void 0, true, {
3321
3655
  fileName: _jsxFileName,
3322
- lineNumber: 31,
3656
+ lineNumber: 56,
3323
3657
  columnNumber: 3
3324
3658
  }, this);
3325
3659
  }
3326
3660
 
3327
- _s(MoneyCurrencyInput, "o5MibMoRdtL3CaWuK+reyyue2HU=", false, function () {
3328
- return [_useMoneyInput__WEBPACK_IMPORTED_MODULE_7__.useMoneyInput];
3661
+ _s(MoneyCurrencyInput, "Fcek2bCp4hfSWAilxJqXOkS1juU=", false, function () {
3662
+ return [_useMoneyInput__WEBPACK_IMPORTED_MODULE_8__.useMoneyInput];
3329
3663
  });
3330
3664
 
3331
3665
  _c = MoneyCurrencyInput;
@@ -3363,17 +3697,24 @@ __webpack_require__.r(__webpack_exports__);
3363
3697
  /* harmony export */ });
3364
3698
  /* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ "@babel/runtime/helpers/defineProperty");
3365
3699
  /* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__);
3366
- /* harmony import */ var _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/objectWithoutProperties */ "@babel/runtime/helpers/objectWithoutProperties");
3367
- /* harmony import */ var _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__);
3368
- /* harmony import */ var debug__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! debug */ "debug");
3369
- /* harmony import */ var debug__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(debug__WEBPACK_IMPORTED_MODULE_2__);
3370
- /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ "react");
3371
- /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__);
3372
- /* harmony import */ var semantic_ui_react__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! semantic-ui-react */ "semantic-ui-react");
3373
- /* harmony import */ var semantic_ui_react__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(semantic_ui_react__WEBPACK_IMPORTED_MODULE_4__);
3374
- /* harmony import */ var _useMoneyInput__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../useMoneyInput */ "./money/useMoneyInput.ts");
3375
- /* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! react/jsx-dev-runtime */ "react/jsx-dev-runtime");
3376
- /* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_6__);
3700
+ /* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/slicedToArray */ "@babel/runtime/helpers/slicedToArray");
3701
+ /* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_1__);
3702
+ /* harmony import */ var _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/objectWithoutProperties */ "@babel/runtime/helpers/objectWithoutProperties");
3703
+ /* harmony import */ var _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_2__);
3704
+ /* harmony import */ var _thx_money__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @thx/money */ "@thx/money");
3705
+ /* harmony import */ var _thx_money__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_thx_money__WEBPACK_IMPORTED_MODULE_3__);
3706
+ /* harmony import */ var debug__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! debug */ "debug");
3707
+ /* harmony import */ var debug__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(debug__WEBPACK_IMPORTED_MODULE_4__);
3708
+ /* harmony import */ var js_money__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! js-money */ "js-money");
3709
+ /* harmony import */ var js_money__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(js_money__WEBPACK_IMPORTED_MODULE_5__);
3710
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! react */ "react");
3711
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_6__);
3712
+ /* harmony import */ var semantic_ui_react__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! semantic-ui-react */ "semantic-ui-react");
3713
+ /* harmony import */ var semantic_ui_react__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(semantic_ui_react__WEBPACK_IMPORTED_MODULE_7__);
3714
+ /* harmony import */ var _useMoneyInput__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../useMoneyInput */ "./money/useMoneyInput.ts");
3715
+ /* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! react/jsx-dev-runtime */ "react/jsx-dev-runtime");
3716
+ /* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__);
3717
+
3377
3718
 
3378
3719
 
3379
3720
  var _excluded = ["name", "onBlur", "locked", "prefix", "defaultCurrency", "onChange", "showPrefix", "value", "wholeNumber"];
@@ -3385,13 +3726,16 @@ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (O
3385
3726
 
3386
3727
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
3387
3728
 
3729
+
3388
3730
  /* eslint-disable jsx-a11y/no-static-element-interactions */
3389
3731
 
3390
3732
 
3391
3733
 
3392
3734
 
3393
3735
 
3394
- var d = debug__WEBPACK_IMPORTED_MODULE_2___default()('thx.controls.money.MoneyInput');
3736
+
3737
+
3738
+ var d = debug__WEBPACK_IMPORTED_MODULE_4___default()('thx.controls.money.MoneyInput');
3395
3739
  function MoneyInput(props) {
3396
3740
  _s();
3397
3741
 
@@ -3404,38 +3748,47 @@ function MoneyInput(props) {
3404
3748
  showPrefix = props.showPrefix,
3405
3749
  value = props.value,
3406
3750
  wholeNumber = props.wholeNumber,
3407
- rest = _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1___default()(props, _excluded);
3751
+ rest = _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_2___default()(props, _excluded);
3752
+
3753
+ var handleChange = (0,react__WEBPACK_IMPORTED_MODULE_6__.useCallback)(function (v) {
3754
+ if (!v) {
3755
+ onChange && onChange((0,_thx_money__WEBPACK_IMPORTED_MODULE_3__.toMoney)(0, defaultCurrency));
3756
+ } else {
3757
+ onChange && onChange(v);
3758
+ }
3759
+ }, [defaultCurrency, onChange]);
3760
+ var val = !(value instanceof (js_money__WEBPACK_IMPORTED_MODULE_5___default())) && value !== undefined ? (0,_thx_money__WEBPACK_IMPORTED_MODULE_3__.toMoney)(value) : value;
3408
3761
 
3409
- var _useMoneyInput = (0,_useMoneyInput__WEBPACK_IMPORTED_MODULE_5__.useMoneyInput)({
3410
- defaultCurrency: defaultCurrency,
3411
- onChange: onChange,
3762
+ var _useMoneyInput = (0,_useMoneyInput__WEBPACK_IMPORTED_MODULE_8__.useMoneyInput)({
3763
+ onChange: handleChange,
3412
3764
  prefix: prefix,
3413
3765
  showPrefix: showPrefix,
3414
- value: value,
3766
+ value: val,
3415
3767
  wholeNumber: wholeNumber
3416
3768
  }),
3417
- inputElement = _useMoneyInput.inputElement;
3769
+ _useMoneyInput2 = _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_1___default()(_useMoneyInput, 1),
3770
+ inputElement = _useMoneyInput2[0];
3418
3771
 
3419
- return /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxDEV)(semantic_ui_react__WEBPACK_IMPORTED_MODULE_4__.Input, _objectSpread(_objectSpread({}, rest), {}, {
3420
- children: /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxDEV)("input", {
3772
+ return /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxDEV)(semantic_ui_react__WEBPACK_IMPORTED_MODULE_7__.Input, _objectSpread(_objectSpread({}, rest), {}, {
3773
+ children: /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxDEV)("input", {
3421
3774
  name: name,
3422
3775
  ref: inputElement,
3423
3776
  onBlur: onBlur,
3424
3777
  readOnly: locked
3425
3778
  }, void 0, false, {
3426
3779
  fileName: _jsxFileName,
3427
- lineNumber: 29,
3780
+ lineNumber: 43,
3428
3781
  columnNumber: 4
3429
3782
  }, this)
3430
3783
  }), void 0, false, {
3431
3784
  fileName: _jsxFileName,
3432
- lineNumber: 28,
3785
+ lineNumber: 42,
3433
3786
  columnNumber: 3
3434
3787
  }, this);
3435
3788
  }
3436
3789
 
3437
- _s(MoneyInput, "o5MibMoRdtL3CaWuK+reyyue2HU=", false, function () {
3438
- return [_useMoneyInput__WEBPACK_IMPORTED_MODULE_5__.useMoneyInput];
3790
+ _s(MoneyInput, "rDHjOMB4aOZuIvLkNHsA4XLdOAc=", false, function () {
3791
+ return [_useMoneyInput__WEBPACK_IMPORTED_MODULE_8__.useMoneyInput];
3439
3792
  });
3440
3793
 
3441
3794
  _c = MoneyInput;
@@ -3494,40 +3847,48 @@ function useMoneyInput(props) {
3494
3847
 
3495
3848
  var value = props.value,
3496
3849
  onChange = props.onChange,
3497
- defaultCurrency = props.defaultCurrency,
3850
+ onSet = props.onSet,
3498
3851
  showPrefix = props.showPrefix,
3499
3852
  prefix = props.prefix,
3500
3853
  wholeNumber = props.wholeNumber;
3501
3854
  var inputElement = (0,react__WEBPACK_IMPORTED_MODULE_4__.useRef)(null);
3502
3855
  var maskInstance = (0,react__WEBPACK_IMPORTED_MODULE_4__.useRef)(null); // set the adjCurrency
3856
+ // let adjCurrency = Money.CAD;
3857
+ // if (value?.currency && Money[value?.currency]) adjCurrency = Money[value?.currency];
3858
+ // if (defaultCurrency) adjCurrency = defaultCurrency;
3503
3859
 
3504
- var adjCurrency = (js_money__WEBPACK_IMPORTED_MODULE_3___default().CAD); // @ts-ignore
3505
-
3506
- if (value !== null && value !== void 0 && value.currency && (js_money__WEBPACK_IMPORTED_MODULE_3___default())[value === null || value === void 0 ? void 0 : value.currency]) adjCurrency = (js_money__WEBPACK_IMPORTED_MODULE_3___default())[value === null || value === void 0 ? void 0 : value.currency];
3507
- if (defaultCurrency) adjCurrency = defaultCurrency;
3860
+ var currencyCode = (value === null || value === void 0 ? void 0 : value.currency) || 'CAD';
3508
3861
  (0,react__WEBPACK_IMPORTED_MODULE_4__.useEffect)(function () {
3509
3862
  if (!inputElement.current) throw new Error('Could not get input element');
3510
3863
  d('Creating input mask instance');
3511
3864
  maskInstance.current = new (inputmask__WEBPACK_IMPORTED_MODULE_2___default())({
3512
3865
  alias: 'numeric',
3513
3866
  groupSeparator: ',',
3514
- digits: wholeNumber ? '0' : _thx_money__WEBPACK_IMPORTED_MODULE_0__.Currencies[adjCurrency.code].decimal_digits.toString(),
3867
+ digits: wholeNumber ? '0' : (js_money__WEBPACK_IMPORTED_MODULE_3___default())[currencyCode].decimal_digits.toString(),
3515
3868
  digitsOptional: false,
3516
- prefix: showPrefix ? prefix || _thx_money__WEBPACK_IMPORTED_MODULE_0__.Currencies[adjCurrency.code].symbol : undefined,
3869
+ prefix: showPrefix ? prefix || (js_money__WEBPACK_IMPORTED_MODULE_3___default())[currencyCode].symbol : undefined,
3517
3870
  placeholder: '0',
3518
3871
  autoUnmask: true,
3519
3872
  oncomplete: function oncomplete() {
3520
- var _inputElement$current;
3873
+ if (onChange) {
3874
+ var _inputElement$current;
3521
3875
 
3522
- if (onChange) onChange((0,_thx_money__WEBPACK_IMPORTED_MODULE_0__.toMoney)((_inputElement$current = inputElement.current) === null || _inputElement$current === void 0 ? void 0 : _inputElement$current.value, adjCurrency));
3876
+ if ((_inputElement$current = inputElement.current) !== null && _inputElement$current !== void 0 && _inputElement$current.value) {
3877
+ var _inputElement$current2;
3878
+
3879
+ onChange((0,_thx_money__WEBPACK_IMPORTED_MODULE_0__.toMoney)((_inputElement$current2 = inputElement.current) === null || _inputElement$current2 === void 0 ? void 0 : _inputElement$current2.value, currencyCode));
3880
+ } else {
3881
+ onChange();
3882
+ }
3883
+ }
3523
3884
  },
3524
3885
  oncleared: function oncleared() {
3525
- if (onChange) onChange((0,_thx_money__WEBPACK_IMPORTED_MODULE_0__.toMoney)(0, adjCurrency));
3886
+ if (onChange) onChange();
3526
3887
  },
3527
3888
  onincomplete: function onincomplete() {
3528
- var _inputElement$current2;
3889
+ var _inputElement$current3;
3529
3890
 
3530
- if (onChange) onChange((0,_thx_money__WEBPACK_IMPORTED_MODULE_0__.toMoney)((_inputElement$current2 = inputElement.current) === null || _inputElement$current2 === void 0 ? void 0 : _inputElement$current2.value, adjCurrency));
3891
+ if (onChange) onChange((0,_thx_money__WEBPACK_IMPORTED_MODULE_0__.toMoney)((_inputElement$current3 = inputElement.current) === null || _inputElement$current3 === void 0 ? void 0 : _inputElement$current3.value, currencyCode));
3531
3892
  }
3532
3893
  });
3533
3894
  maskInstance.current.mask(inputElement.current);
@@ -3538,35 +3899,36 @@ function useMoneyInput(props) {
3538
3899
  maskInstance.current = null;
3539
3900
  }
3540
3901
  };
3541
- }, [adjCurrency, prefix, wholeNumber]); // If we change the value prop we need to sync the DOM value to display the new value
3902
+ }, [currencyCode, prefix, showPrefix, wholeNumber]);
3903
+ var setVal = (0,react__WEBPACK_IMPORTED_MODULE_4__.useCallback)(function (v) {
3904
+ if (inputElement.current) {
3905
+ d('Value is being set:', v);
3906
+
3907
+ if (v) {
3908
+ inputElement.current.value = v.toDecimal().toString();
3909
+ } else {
3910
+ inputElement.current.value = '';
3911
+ }
3912
+
3913
+ onSet && onSet(v);
3914
+ }
3915
+ }, [onSet]); // If we change the value prop we need to sync the DOM value to display the new value
3542
3916
 
3543
3917
  (0,react__WEBPACK_IMPORTED_MODULE_4__.useEffect)(function () {
3544
- var _inputElement$current3;
3918
+ var _inputElement$current4;
3545
3919
 
3546
- var inputValue = (0,_thx_money__WEBPACK_IMPORTED_MODULE_0__.toMoney)((_inputElement$current3 = inputElement.current) === null || _inputElement$current3 === void 0 ? void 0 : _inputElement$current3.value, adjCurrency);
3920
+ var whatCurrentlyIsDisplayed = ((_inputElement$current4 = inputElement.current) === null || _inputElement$current4 === void 0 ? void 0 : _inputElement$current4.value) || ''; // string | undef
3547
3921
 
3548
- if ((value === undefined || value === null) && inputElement.current) {
3549
- inputElement.current.value = '';
3550
- } else if (value instanceof (js_money__WEBPACK_IMPORTED_MODULE_3___default()) && inputElement.current) {
3551
- if (!inputValue.equals(value)) {
3552
- inputElement.current.value = value.toString();
3553
- }
3554
- } else if ((0,_thx_money__WEBPACK_IMPORTED_MODULE_0__.isMoneyObject)(value) && inputElement.current) {
3555
- var valueInMoney = (0,_thx_money__WEBPACK_IMPORTED_MODULE_0__.toMoney)(value);
3922
+ var whatWeAreSetting = value ? value.toString() : ''; // money | undef
3556
3923
 
3557
- if (!inputValue.equals(valueInMoney)) {
3558
- inputElement.current.value = valueInMoney.toString();
3559
- }
3560
- } else {
3561
- throw new Error("Value must be a Money instance or IMoneyObject: ".concat(value, " (").concat(typeof value));
3924
+ if (whatCurrentlyIsDisplayed !== whatWeAreSetting) {
3925
+ setVal(value);
3562
3926
  }
3563
- }, [value, adjCurrency]);
3564
- return {
3565
- inputElement: inputElement
3566
- };
3927
+ }, [setVal, value]);
3928
+ return [inputElement, setVal];
3567
3929
  }
3568
3930
 
3569
- _s(useMoneyInput, "4zjMqMsuhet8LETBdEHvzzd7ki8=");
3931
+ _s(useMoneyInput, "56k+EB9kpodjnKmpNNvxiCUDcZg=");
3570
3932
 
3571
3933
  /***/ }),
3572
3934
 
@@ -4047,6 +4409,60 @@ __webpack_require__.r(__webpack_exports__);
4047
4409
 
4048
4410
 
4049
4411
 
4412
+ var options = {};
4413
+
4414
+ options.styleTagTransform = (_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default());
4415
+ options.setAttributes = (_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default());
4416
+
4417
+ options.insert = _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default().bind(null, "head");
4418
+
4419
+ options.domAPI = (_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default());
4420
+ options.insertStyleElement = (_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default());
4421
+
4422
+ var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_node_modules_css_loader_dist_cjs_js_ruleSet_1_rules_2_use_2_styles_css__WEBPACK_IMPORTED_MODULE_6__["default"], options);
4423
+
4424
+
4425
+
4426
+
4427
+ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_css_loader_dist_cjs_js_ruleSet_1_rules_2_use_2_styles_css__WEBPACK_IMPORTED_MODULE_6__["default"] && _node_modules_css_loader_dist_cjs_js_ruleSet_1_rules_2_use_2_styles_css__WEBPACK_IMPORTED_MODULE_6__["default"].locals ? _node_modules_css_loader_dist_cjs_js_ruleSet_1_rules_2_use_2_styles_css__WEBPACK_IMPORTED_MODULE_6__["default"].locals : undefined);
4428
+
4429
+
4430
+ /***/ }),
4431
+
4432
+ /***/ "./inputs/CreditCardInput/styles.css":
4433
+ /*!*******************************************!*\
4434
+ !*** ./inputs/CreditCardInput/styles.css ***!
4435
+ \*******************************************/
4436
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
4437
+
4438
+ __webpack_require__.r(__webpack_exports__);
4439
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
4440
+ /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
4441
+ /* harmony export */ });
4442
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ "../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js");
4443
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__);
4444
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !../../../node_modules/style-loader/dist/runtime/styleDomAPI.js */ "../node_modules/style-loader/dist/runtime/styleDomAPI.js");
4445
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__);
4446
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../../node_modules/style-loader/dist/runtime/insertBySelector.js */ "../node_modules/style-loader/dist/runtime/insertBySelector.js");
4447
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__);
4448
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js */ "../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js");
4449
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__);
4450
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! !../../../node_modules/style-loader/dist/runtime/insertStyleElement.js */ "../node_modules/style-loader/dist/runtime/insertStyleElement.js");
4451
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__);
4452
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! !../../../node_modules/style-loader/dist/runtime/styleTagTransform.js */ "../node_modules/style-loader/dist/runtime/styleTagTransform.js");
4453
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__);
4454
+ /* harmony import */ var _node_modules_css_loader_dist_cjs_js_ruleSet_1_rules_2_use_2_styles_css__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! !!../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[2].use[2]!./styles.css */ "../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[2].use[2]!./inputs/CreditCardInput/styles.css");
4455
+
4456
+
4457
+
4458
+
4459
+
4460
+
4461
+
4462
+
4463
+
4464
+
4465
+
4050
4466
  var options = {};
4051
4467
 
4052
4468
  options.styleTagTransform = (_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default());
@@ -4092,6 +4508,33 @@ ___CSS_LOADER_EXPORT___.locals = {};
4092
4508
  /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
4093
4509
 
4094
4510
 
4511
+ /***/ }),
4512
+
4513
+ /***/ "../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[2].use[2]!./inputs/CreditCardInput/styles.css":
4514
+ /*!**************************************************************************************************************!*\
4515
+ !*** ../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[2].use[2]!./inputs/CreditCardInput/styles.css ***!
4516
+ \**************************************************************************************************************/
4517
+ /***/ ((module, __webpack_exports__, __webpack_require__) => {
4518
+
4519
+ __webpack_require__.r(__webpack_exports__);
4520
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
4521
+ /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
4522
+ /* harmony export */ });
4523
+ /* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/sourceMaps.js */ "../node_modules/css-loader/dist/runtime/sourceMaps.js");
4524
+ /* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);
4525
+ /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/api.js */ "../node_modules/css-loader/dist/runtime/api.js");
4526
+ /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);
4527
+ // Imports
4528
+
4529
+
4530
+ var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));
4531
+ // Module
4532
+ ___CSS_LOADER_EXPORT___.push([module.id, ".rccs {\n\tmargin: 0 !important;\n}\n", "",{"version":3,"sources":["webpack://./inputs/CreditCardInput/styles.css"],"names":[],"mappings":"AAAA;CACC,oBAAoB;AACrB","sourcesContent":[":global .rccs {\n\tmargin: 0 !important;\n}\n"],"sourceRoot":""}]);
4533
+ // Exports
4534
+ ___CSS_LOADER_EXPORT___.locals = {};
4535
+ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
4536
+
4537
+
4095
4538
  /***/ }),
4096
4539
 
4097
4540
  /***/ "../node_modules/css-loader/dist/runtime/api.js":
@@ -4672,13 +5115,13 @@ module.exports = require("@thx/money");
4672
5115
 
4673
5116
  /***/ }),
4674
5117
 
4675
- /***/ "@thx/yup-types":
4676
- /*!*********************************!*\
4677
- !*** external "@thx/yup-types" ***!
4678
- \*********************************/
5118
+ /***/ "credit-card-type":
5119
+ /*!***********************************!*\
5120
+ !*** external "credit-card-type" ***!
5121
+ \***********************************/
4679
5122
  /***/ ((module) => {
4680
5123
 
4681
- module.exports = require("@thx/yup-types");
5124
+ module.exports = require("credit-card-type");
4682
5125
 
4683
5126
  /***/ }),
4684
5127
 
@@ -4772,6 +5215,16 @@ module.exports = require("lodash/uniq");
4772
5215
 
4773
5216
  /***/ }),
4774
5217
 
5218
+ /***/ "luhn":
5219
+ /*!***********************!*\
5220
+ !*** external "luhn" ***!
5221
+ \***********************/
5222
+ /***/ ((module) => {
5223
+
5224
+ module.exports = require("luhn");
5225
+
5226
+ /***/ }),
5227
+
4775
5228
  /***/ "react":
4776
5229
  /*!************************!*\
4777
5230
  !*** external "react" ***!
@@ -4782,6 +5235,26 @@ module.exports = require("react");
4782
5235
 
4783
5236
  /***/ }),
4784
5237
 
5238
+ /***/ "react-credit-cards":
5239
+ /*!*************************************!*\
5240
+ !*** external "react-credit-cards" ***!
5241
+ \*************************************/
5242
+ /***/ ((module) => {
5243
+
5244
+ module.exports = require("react-credit-cards");
5245
+
5246
+ /***/ }),
5247
+
5248
+ /***/ "react-credit-cards/es/styles-compiled.css":
5249
+ /*!************************************************************!*\
5250
+ !*** external "react-credit-cards/es/styles-compiled.css" ***!
5251
+ \************************************************************/
5252
+ /***/ ((module) => {
5253
+
5254
+ module.exports = require("react-credit-cards/es/styles-compiled.css");
5255
+
5256
+ /***/ }),
5257
+
4785
5258
  /***/ "react-datepicker":
4786
5259
  /*!***********************************!*\
4787
5260
  !*** external "react-datepicker" ***!
@@ -4832,6 +5305,16 @@ module.exports = require("semantic-ui-react");
4832
5305
 
4833
5306
  /***/ }),
4834
5307
 
5308
+ /***/ "social-insurance-number":
5309
+ /*!******************************************!*\
5310
+ !*** external "social-insurance-number" ***!
5311
+ \******************************************/
5312
+ /***/ ((module) => {
5313
+
5314
+ module.exports = require("social-insurance-number");
5315
+
5316
+ /***/ }),
5317
+
4835
5318
  /***/ "use-deep-compare-effect":
4836
5319
  /*!******************************************!*\
4837
5320
  !*** external "use-deep-compare-effect" ***!
@@ -4996,4 +5479,4 @@ __webpack_require__.r(__webpack_exports__);
4996
5479
  module.exports = __webpack_exports__;
4997
5480
  /******/ })()
4998
5481
  ;
4999
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUNBO1VBQ0E7VUFDQTtVQUNBOztVQUVBO1VBQ0E7O1VBRUE7VUFDQTtVQUNBOzs7OztXQ3RCQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0EsaUNBQWlDLFdBQVc7V0FDNUM7V0FDQTs7Ozs7V0NQQTtXQUNBO1dBQ0E7V0FDQTtXQUNBLHlDQUF5Qyx3Q0FBd0M7V0FDakY7V0FDQTtXQUNBOzs7OztXQ1BBOzs7OztXQ0FBO1dBQ0E7V0FDQTtXQUNBLHVEQUF1RCxpQkFBaUI7V0FDeEU7V0FDQSxnREFBZ0QsYUFBYTtXQUM3RDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ05BO0FBRUE7QUFFQTtBQUVBO0FBRUE7QUFFQTtBQUVBO0FBR0E7QUFDQTtBQUdBO0FBQ0E7QUFFQTtBQUVBO0FBRUE7QUFFQTtBQUVBO0FBRUE7QUFHQTtBQUNBO0FBR0E7QUFDQTtBQUVBO0FBR0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9kYXRlL0RhdGVQaWNrZXIvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vZGF0ZS9Mb2NhbERhdGVQaWNrZXIvTG9jYWxEYXRlUGlja2VyLnRzeCIsIndlYnBhY2s6Ly8vLi9kYXRlL0xvY2FsRGF0ZVBpY2tlci9NYXNrZWREYXRlSW5wdXQudHN4Iiwid2VicGFjazovLy8uL2RhdGUvTG9jYWxEYXRlUGlja2VyL2luZGV4LnRzIiwid2VicGFjazovLy8uL2RhdGUvTG9jYWxNb250aFNlbGVjdC9Mb2NhbE1vbnRoU2VsZWN0LnRzeCIsIndlYnBhY2s6Ly8vLi9kYXRlL0xvY2FsTW9udGhTZWxlY3QvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vZGF0ZS9Mb2NhbFRpbWVQaWNrZXIvTG9jYWxUaW1lUGlja2VyLnRzeCIsIndlYnBhY2s6Ly8vLi9kYXRlL0xvY2FsVGltZVBpY2tlci9NYXNrZWRUaW1lSW5wdXQudHN4Iiwid2VicGFjazovLy8uL2RhdGUvTG9jYWxUaW1lUGlja2VyL2luZGV4LnRzIiwid2VicGFjazovLy8uL2RhdGUvTW9udGhEYXlQaWNrZXIvTW9udGhEYXlQaWNrZXIudHN4Iiwid2VicGFjazovLy8uL2RhdGUvTW9udGhEYXlQaWNrZXIvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vZGF0ZS9Nb250aFllYXJQaWNrZXIvTW9udGhZZWFyUGlja2VyLnRzeCIsIndlYnBhY2s6Ly8vLi9kYXRlL01vbnRoWWVhclBpY2tlci9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9kYXRlL1llYXJTZWxlY3QvWWVhclNlbGVjdC50c3giLCJ3ZWJwYWNrOi8vLy4vZGF0ZS9ZZWFyU2VsZWN0L2luZGV4LnRzIiwid2VicGFjazovLy8uL2Zvcm0vVEZvcm0vVEZvcm0udHN4Iiwid2VicGFjazovLy8uL2Zvcm0vVEZvcm0vaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vZm9ybS9URm9ybS91c2VURm9ybS50c3giLCJ3ZWJwYWNrOi8vLy4vaW5wdXRzL0NyZWRpdENhcmRJbnB1dC9DcmVkaXRDYXJkSW5wdXQudHN4Iiwid2VicGFjazovLy8uL2lucHV0cy9DcmVkaXRDYXJkSW5wdXQvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vaW5wdXRzL01hc2tlZElucHV0L01hc2tlZElucHV0LnRzeCIsIndlYnBhY2s6Ly8vLi9pbnB1dHMvTWFza2VkSW5wdXQvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vaW5wdXRzL1Bob25lSW5wdXQvUGhvbmVJbnB1dC50c3giLCJ3ZWJwYWNrOi8vLy4vaW5wdXRzL1Bob25lSW5wdXQvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vaW5wdXRzL1JhZGlvR3JvdXAvUmFkaW9Hcm91cC50c3giLCJ3ZWJwYWNrOi8vLy4vaW5wdXRzL1JhZGlvR3JvdXAvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vaW5wdXRzL1NjcmlwdGVsL1NjcmlwdGVsLnRzeCIsIndlYnBhY2s6Ly8vLi9pbnB1dHMvU2NyaXB0ZWwvU2NyaXB0ZWxDb250ZXh0LnRzIiwid2VicGFjazovLy8uL2lucHV0cy9TY3JpcHRlbC9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9pbnB1dHMvU2NyaXB0ZWwvc2NyaXB0ZWwvZW51bXMudHMiLCJ3ZWJwYWNrOi8vLy4vaW5wdXRzL1NjcmlwdGVsL3NjcmlwdGVsL2luZGV4LnRzIiwid2VicGFjazovLy8uL2lucHV0cy9TY3JpcHRlbC93aXRoU2NyaXB0ZWwudHN4Iiwid2VicGFjazovLy8uL2lucHV0cy9TY3JpcHRlbElucHV0L1NjcmlwdGVsSW5wdXQudHN4Iiwid2VicGFjazovLy8uL2lucHV0cy9TY3JpcHRlbElucHV0L2luZGV4LnRzIiwid2VicGFjazovLy8uL2lucHV0cy9TaW5JbnB1dC9TaW5JbnB1dC50c3giLCJ3ZWJwYWNrOi8vLy4vaW5wdXRzL1NpbklucHV0L2luZGV4LnRzIiwid2VicGFjazovLy8uL2lucHV0cy9UYWJsZUlucHV0L0Ryb3Bkb3duQ2VsbC50c3giLCJ3ZWJwYWNrOi8vLy4vaW5wdXRzL1RhYmxlSW5wdXQvSG92ZXJDZWxsLnRzeCIsIndlYnBhY2s6Ly8vLi9pbnB1dHMvVGFibGVJbnB1dC9Nb25leUNlbGwudHN4Iiwid2VicGFjazovLy8uL2lucHV0cy9UYWJsZUlucHV0L01vbmV5RWRpdENlbGwudHN4Iiwid2VicGFjazovLy8uL2lucHV0cy9UYWJsZUlucHV0L01vbmV5U3VtRm9vdGVyLnRzeCIsIndlYnBhY2s6Ly8vLi9pbnB1dHMvVGFibGVJbnB1dC9TdHJpbmdFZGl0Q2VsbC50c3giLCJ3ZWJwYWNrOi8vLy4vaW5wdXRzL1RhYmxlSW5wdXQvVGFibGVJbnB1dC50c3giLCJ3ZWJwYWNrOi8vLy4vaW5wdXRzL1RhYmxlSW5wdXQvYWRkUm93T25UYWIudHMiLCJ3ZWJwYWNrOi8vLy4vaW5wdXRzL1RhYmxlSW5wdXQvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vbW9uZXkvTW9uZXlDdXJyZW5jeUlucHV0L01vbmV5Q3VycmVuY3lJbnB1dC50c3giLCJ3ZWJwYWNrOi8vLy4vbW9uZXkvTW9uZXlDdXJyZW5jeUlucHV0L2luZGV4LnRzIiwid2VicGFjazovLy8uL21vbmV5L01vbmV5SW5wdXQvTW9uZXlJbnB1dC50c3giLCJ3ZWJwYWNrOi8vLy4vbW9uZXkvTW9uZXlJbnB1dC9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9tb25leS91c2VNb25leUlucHV0LnRzIiwid2VicGFjazovLy8uL3N0ZXAvRm9ybVN0ZXAudHN4Iiwid2VicGFjazovLy8uL3N0ZXAvU3RlcC50c3giLCJ3ZWJwYWNrOi8vLy4vc3RlcC9TdGVwUHJvdmlkZXIudHN4Iiwid2VicGFjazovLy8uL3N0ZXAvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3RlcC9zdGVwQ29udGV4dC50cyIsIndlYnBhY2s6Ly8vLi9zdGVwL3VzZVN0ZXAudHMiLCJ3ZWJwYWNrOi8vLy4vZGF0ZS9EYXRlUGlja2VyL3N0eWxlcy5jc3M/MTNiNyIsIndlYnBhY2s6Ly8vLi9kYXRlL0RhdGVQaWNrZXIvc3R5bGVzLmNzcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL3NvdXJjZU1hcHMuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luamVjdFN0eWxlc0ludG9TdHlsZVRhZy5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5zZXJ0QnlTZWxlY3Rvci5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5zZXJ0U3R5bGVFbGVtZW50LmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zZXRBdHRyaWJ1dGVzV2l0aG91dEF0dHJpYnV0ZXMuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlRG9tQVBJLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zdHlsZVRhZ1RyYW5zZm9ybS5qcyIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgY29tbW9uanMgXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2Fzc2VydFRoaXNJbml0aWFsaXplZFwiIiwid2VicGFjazovLy9leHRlcm5hbCBjb21tb25qcyBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2tcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgY29tbW9uanMgXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzXCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIGNvbW1vbmpzIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9kZWZpbmVQcm9wZXJ0eVwiIiwid2VicGFjazovLy9leHRlcm5hbCBjb21tb25qcyBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZ2V0UHJvdG90eXBlT2ZcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgY29tbW9uanMgXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2luaGVyaXRzXCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIGNvbW1vbmpzIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9vYmplY3RXaXRob3V0UHJvcGVydGllc1wiIiwid2VicGFjazovLy9leHRlcm5hbCBjb21tb25qcyBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvcG9zc2libGVDb25zdHJ1Y3RvclJldHVyblwiIiwid2VicGFjazovLy9leHRlcm5hbCBjb21tb25qcyBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvc2xpY2VkVG9BcnJheVwiIiwid2VicGFjazovLy9leHRlcm5hbCBjb21tb25qcyBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvdG9Db25zdW1hYmxlQXJyYXlcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgY29tbW9uanMgXCJAanMtam9kYS9jb3JlXCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIGNvbW1vbmpzIFwiQHRoeC9kYXRlXCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIGNvbW1vbmpzIFwiQHRoeC9tb25leVwiIiwid2VicGFjazovLy9leHRlcm5hbCBjb21tb25qcyBcIkB0aHgveXVwLXR5cGVzXCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIGNvbW1vbmpzIFwiZGVidWdcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgY29tbW9uanMgXCJldmVudGVtaXR0ZXIzXCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIGNvbW1vbmpzIFwiZmxhdFwiIiwid2VicGFjazovLy9leHRlcm5hbCBjb21tb25qcyBcImZvcm1pa1wiIiwid2VicGFjazovLy9leHRlcm5hbCBjb21tb25qcyBcImlucHV0bWFza1wiIiwid2VicGFjazovLy9leHRlcm5hbCBjb21tb25qcyBcImpzLW1vbmV5XCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIGNvbW1vbmpzIFwibG9kYXNoL2dldFwiIiwid2VicGFjazovLy9leHRlcm5hbCBjb21tb25qcyBcImxvZGFzaC9wcm9wZXJ0eVwiIiwid2VicGFjazovLy9leHRlcm5hbCBjb21tb25qcyBcImxvZGFzaC91bmlxXCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIGNvbW1vbmpzIFwicmVhY3RcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgY29tbW9uanMgXCJyZWFjdC1kYXRlcGlja2VyXCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIGNvbW1vbmpzIFwicmVhY3Qtcm91dGVyLWRvbVwiIiwid2VicGFjazovLy9leHRlcm5hbCBjb21tb25qcyBcInJlYWN0LXRhYmxlXCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIGNvbW1vbmpzIFwicmVhY3QvanN4LWRldi1ydW50aW1lXCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIGNvbW1vbmpzIFwic2VtYW50aWMtdWktcmVhY3RcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgY29tbW9uanMgXCJ1c2UtZGVlcC1jb21wYXJlLWVmZmVjdFwiIiwid2VicGFjazovLy93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly8vd2VicGFjay9ydW50aW1lL2NvbXBhdCBnZXQgZGVmYXVsdCBleHBvcnQiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyIsIndlYnBhY2s6Ly8vd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCIsIndlYnBhY2s6Ly8vd2VicGFjay9ydW50aW1lL21ha2UgbmFtZXNwYWNlIG9iamVjdCIsIndlYnBhY2s6Ly8vLi9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgRGF0ZVBpY2tlciBmcm9tICdyZWFjdC1kYXRlcGlja2VyJztcbmltcG9ydCAnLi9zdHlsZXMuY3NzJztcblxuZXhwb3J0IHtEYXRlUGlja2VyfTtcbiIsImltcG9ydCB0eXBlIHtMb2NhbERhdGV9IGZyb20gJ0Bqcy1qb2RhL2NvcmUnO1xuaW1wb3J0IHt0b0RhdGUsIHRvTG9jYWxEYXRlfSBmcm9tICdAdGh4L2RhdGUnO1xuaW1wb3J0IGRlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgdHlwZSB7UmVhY3REYXRlUGlja2VyUHJvcHN9IGZyb20gJ3JlYWN0LWRhdGVwaWNrZXInO1xuaW1wb3J0IHR5cGUge0lucHV0UHJvcHN9IGZyb20gJ3NlbWFudGljLXVpLXJlYWN0JztcbmltcG9ydCB7RGF0ZVBpY2tlcn0gZnJvbSAnLi4vRGF0ZVBpY2tlci9pbmRleCc7XG5pbXBvcnQge01hc2tlZERhdGVJbnB1dH0gZnJvbSAnLi9NYXNrZWREYXRlSW5wdXQnO1xuXG5jb25zdCBkID0gZGVidWcoJ3RoeC5jb250cm9scy5kYXRlLkxvY2FsRGF0ZVBpY2tlcicpO1xuXG5pbnRlcmZhY2UgSUxvY2FsRGF0ZVBpY2tlciB7XG5cdHZhbHVlPzogTG9jYWxEYXRlIHwgbnVtYmVyIHwgbnVsbDtcblx0b25DaGFuZ2U/OiAodmFsdWU6IExvY2FsRGF0ZSB8IG51bGwpID0+IHZvaWQ7XG5cdG9uQ2hhbmdlUmF3PzogKCkgPT4gdm9pZDtcblx0bWluRGF0ZT86IExvY2FsRGF0ZTtcblx0bWF4RGF0ZT86IExvY2FsRGF0ZTtcbn1cblxudHlwZSBJbnB1dFByb3BzT21pdHRlZCA9IE9taXQ8SW5wdXRQcm9wcywgJ29uQ2hhbmdlJz47XG50eXBlIFJlYWN0RGF0ZVBpY2tlclByb3BzT21pdHRlZCA9IE9taXQ8T21pdDxSZWFjdERhdGVQaWNrZXJQcm9wcywgJ3ZhbHVlJz4sICdvbkNoYW5nZScgfCAnbWluRGF0ZScgfCAnbWF4RGF0ZSc+O1xuZXhwb3J0IHR5cGUgTG9jYWxEYXRlUGlja2VyUHJvcHMgPSBJTG9jYWxEYXRlUGlja2VyICYgSW5wdXRQcm9wc09taXR0ZWQgJiBSZWFjdERhdGVQaWNrZXJQcm9wc09taXR0ZWQ7XG5cbmV4cG9ydCBmdW5jdGlvbiBMb2NhbERhdGVQaWNrZXIocHJvcHM6IExvY2FsRGF0ZVBpY2tlclByb3BzKTogSlNYLkVsZW1lbnQge1xuXHRjb25zdCB7XG5cdFx0bWluRGF0ZSxcblx0XHRtYXhEYXRlLFxuXHRcdHZhbHVlLFxuXHRcdG9uQ2hhbmdlLFxuXHRcdG9uQmx1cixcblx0XHRhcyxcblx0XHRhY3Rpb24sXG5cdFx0YWN0aW9uUG9zaXRpb24sXG5cdFx0Y2xhc3NOYW1lLFxuXHRcdGVycm9yLFxuXHRcdGZsdWlkLFxuXHRcdGZvY3VzLFxuXHRcdGljb24sXG5cdFx0aWNvblBvc2l0aW9uLFxuXHRcdGludmVydGVkLFxuXHRcdGxhYmVsLFxuXHRcdGxhYmVsUG9zaXRpb24sXG5cdFx0bG9hZGluZyxcblx0XHRzaXplLFxuXHRcdHRhYkluZGV4LFxuXHRcdHRyYW5zcGFyZW50LFxuXHRcdC4uLnJlc3Rcblx0fSA9IHByb3BzO1xuXG5cdGNvbnN0IHNlbGVjdGVkID0gdmFsdWUgPyB0b0RhdGUodmFsdWUpIDogbnVsbDtcblxuXHRjb25zdCBpbnB1dFByb3BzID0ge1xuXHRcdGFzLFxuXHRcdGFjdGlvbixcblx0XHRhY3Rpb25Qb3NpdGlvbixcblx0XHRjbGFzc05hbWUsXG5cdFx0ZXJyb3IsXG5cdFx0Zmx1aWQsXG5cdFx0Zm9jdXMsXG5cdFx0aWNvbixcblx0XHRpY29uUG9zaXRpb24sXG5cdFx0aW52ZXJ0ZWQsXG5cdFx0bGFiZWwsXG5cdFx0bGFiZWxQb3NpdGlvbixcblx0XHRsb2FkaW5nLFxuXHRcdHNpemUsXG5cdFx0dGFiSW5kZXgsXG5cdFx0dHJhbnNwYXJlbnQsXG5cdH07XG5cblx0cmV0dXJuIChcblx0XHQ8RGF0ZVBpY2tlclxuXHRcdFx0ey4uLnJlc3R9XG5cdFx0XHRzZWxlY3RlZD17c2VsZWN0ZWR9XG5cdFx0XHRvbkNoYW5nZT17ZGF0ZSA9PiB7XG5cdFx0XHRcdGlmIChvbkNoYW5nZSkgb25DaGFuZ2UoZGF0ZSA/IHRvTG9jYWxEYXRlKGRhdGUpIDogbnVsbCk7XG5cdFx0XHR9fVxuXHRcdFx0b25CbHVyPXtvbkJsdXJ9XG5cdFx0XHRjdXN0b21JbnB1dD17PE1hc2tlZERhdGVJbnB1dCB7Li4uaW5wdXRQcm9wc30gb25CbHVyPXtvbkJsdXJ9IC8+fVxuXHRcdFx0bWluRGF0ZT17bWluRGF0ZSA/IHRvRGF0ZShtaW5EYXRlKSA6IG51bGx9XG5cdFx0XHRtYXhEYXRlPXttYXhEYXRlID8gdG9EYXRlKG1heERhdGUpIDogbnVsbH1cblx0XHQvPlxuXHQpO1xufVxuIiwiaW1wb3J0IGRlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCBSZWFjdCwge2ZvcndhcmRSZWZ9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7TWFza2VkSW5wdXQsIE1hc2tlZElucHV0UHJvcHN9IGZyb20gJy4uLy4uL2lucHV0cy9NYXNrZWRJbnB1dCc7XG5cbmNvbnN0IGQgPSBkZWJ1ZygndGh4LmNvbnRyb2xzLmRhdGUuTG9jYWxEYXRlUGlja2VyLk1hc2tlZERhdGVJbnB1dCcpO1xuXG5leHBvcnQgaW50ZXJmYWNlIE1hc2tlZERhdGVJbnB1dFByb3BzIHtcblx0bmFtZT86IHN0cmluZztcblx0b25DaGFuZ2U/OiAodmFsdWU6IHt0YXJnZXQ6IHt2YWx1ZTogc3RyaW5nfX0pID0+IHZvaWQ7XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycyxAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbmZ1bmN0aW9uIE1hc2tlZERhdGVJbnB1dElubmVyKHByb3BzOiBNYXNrZWREYXRlSW5wdXRQcm9wcyAmIE9taXQ8TWFza2VkSW5wdXRQcm9wcywgJ29uQ2hhbmdlJz4sIHJlZjogYW55KSB7XG5cdGNvbnN0IHtvbkNoYW5nZSwgbmFtZSwgLi4ucmVzdH0gPSBwcm9wcztcblxuXHRyZXR1cm4gKFxuXHRcdDxNYXNrZWRJbnB1dFxuXHRcdFx0ey4uLnJlc3R9XG5cdFx0XHRuYW1lPXtuYW1lfVxuXHRcdFx0bWFzaz17e2FsaWFzOiAnZGF0ZXRpbWUnLCBpbnB1dEZvcm1hdDogJ21tL2RkL3l5eXknfX1cblx0XHRcdG9uQ2hhbmdlPXt2YWx1ZSA9PiB7XG5cdFx0XHRcdGlmIChvbkNoYW5nZSkgb25DaGFuZ2Uoe3RhcmdldDoge3ZhbHVlOiB2YWx1ZSB8fCAnJ319KTtcblx0XHRcdH19XG5cdFx0Lz5cblx0KTtcbn1cblxuZXhwb3J0IGNvbnN0IE1hc2tlZERhdGVJbnB1dCA9IGZvcndhcmRSZWYoTWFza2VkRGF0ZUlucHV0SW5uZXIpO1xuIiwiZXhwb3J0IHtMb2NhbERhdGVQaWNrZXJ9IGZyb20gJy4vTG9jYWxEYXRlUGlja2VyJztcbmV4cG9ydCB0eXBlIHtMb2NhbERhdGVQaWNrZXJQcm9wc30gZnJvbSAnLi9Mb2NhbERhdGVQaWNrZXInO1xuIiwiaW1wb3J0IHtMb2NhbERhdGV9IGZyb20gJ0Bqcy1qb2RhL2NvcmUnO1xuaW1wb3J0IGRlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQge1NlbGVjdCwgU2VsZWN0UHJvcHN9IGZyb20gJ3NlbWFudGljLXVpLXJlYWN0JztcblxuY29uc3QgZCA9IGRlYnVnKCd0aHguY29udHJvbHMuZGF0ZS5Mb2NhbE1vbnRoU2VsZWN0Jyk7XG5cbmNvbnN0IG1vbnRoT3B0aW9ucyA9IFtcblx0e3RleHQ6ICdKYW51YXJ5JywgdmFsdWU6IDEsIGtleTogMX0sXG5cdHt0ZXh0OiAnRmVicnVhcnknLCB2YWx1ZTogMiwga2V5OiAyfSxcblx0e3RleHQ6ICdNYXJjaCcsIHZhbHVlOiAzLCBrZXk6IDN9LFxuXHR7dGV4dDogJ0FwcmlsJywgdmFsdWU6IDQsIGtleTogNH0sXG5cdHt0ZXh0OiAnTWF5JywgdmFsdWU6IDUsIGtleTogNX0sXG5cdHt0ZXh0OiAnSnVuZScsIHZhbHVlOiA2LCBrZXk6IDZ9LFxuXHR7dGV4dDogJ0p1bHknLCB2YWx1ZTogNywga2V5OiA3fSxcblx0e3RleHQ6ICdBdWd1c3QnLCB2YWx1ZTogOCwga2V5OiA4fSxcblx0e3RleHQ6ICdTZXB0ZW1iZXInLCB2YWx1ZTogOSwga2V5OiA5fSxcblx0e3RleHQ6ICdPY3RvYmVyJywgdmFsdWU6IDEwLCBrZXk6IDEwfSxcblx0e3RleHQ6ICdOb3ZlbWJlcicsIHZhbHVlOiAxMSwga2V5OiAxMX0sXG5cdHt0ZXh0OiAnRGVjZW1iZXInLCB2YWx1ZTogMTIsIGtleTogMTJ9LFxuXTtcblxuaW50ZXJmYWNlIElMb2NhbE1vbnRoU2VsZWN0UHJvcHMge1xuXHRvbkNoYW5nZT86ICh2YWx1ZTogTG9jYWxEYXRlIHwgbnVsbCkgPT4gdm9pZDtcblx0dmFsdWU/OiBMb2NhbERhdGUgfCBudWxsO1xuXHR5ZWFyPzogbnVtYmVyO1xuXHRoYW5kbGVCbHVyPzogKGV2ZW50OiBhbnkpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCB0eXBlIExvY2FsTW9udGhTZWxlY3RQcm9wcyA9IElMb2NhbE1vbnRoU2VsZWN0UHJvcHMgJiBPbWl0PFNlbGVjdFByb3BzLCAnb3B0aW9ucyc+O1xuXG5leHBvcnQgZnVuY3Rpb24gTG9jYWxNb250aFNlbGVjdChwcm9wczogTG9jYWxNb250aFNlbGVjdFByb3BzKTogSlNYLkVsZW1lbnQge1xuXHRjb25zdCB7dmFsdWUsIG9uQ2hhbmdlLCB5ZWFyLCBoYW5kbGVCbHVyLCAuLi5yZXN0fSA9IHByb3BzO1xuXG5cdGNvbnN0IHRoZVllYXIgPSB5ZWFyIHx8IExvY2FsRGF0ZS5ub3coKS55ZWFyKCk7XG5cblx0cmV0dXJuIChcblx0XHQ8U2VsZWN0XG5cdFx0XHRwbGFjZWhvbGRlcj1cIlNlbGVjdCBNb250aFwiXG5cdFx0XHRvcHRpb25zPXttb250aE9wdGlvbnN9XG5cdFx0XHR2YWx1ZT17dmFsdWUgPyB2YWx1ZS5tb250aFZhbHVlKCkgOiAnJ31cblx0XHRcdG9uQ2hhbmdlPXsoZXYsIHYpID0+IHtcblx0XHRcdFx0aWYgKG9uQ2hhbmdlKSB7XG5cdFx0XHRcdFx0aWYgKHR5cGVvZiB2LnZhbHVlID09PSAnbnVtYmVyJykge1xuXHRcdFx0XHRcdFx0b25DaGFuZ2UodiA/IExvY2FsRGF0ZS5vZih0aGVZZWFyLCB2LnZhbHVlLCAxKSA6IG51bGwpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRvbkNoYW5nZShudWxsKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH19XG5cdFx0XHRvbkJsdXI9e2hhbmRsZUJsdXJ9XG5cdFx0XHR7Li4ucmVzdH1cblx0XHQvPlxuXHQpO1xufVxuIiwiZXhwb3J0IHtMb2NhbE1vbnRoU2VsZWN0fSBmcm9tICcuL0xvY2FsTW9udGhTZWxlY3QnO1xuZXhwb3J0IHR5cGUge0xvY2FsTW9udGhTZWxlY3RQcm9wc30gZnJvbSAnLi9Mb2NhbE1vbnRoU2VsZWN0JztcbiIsImltcG9ydCB7TG9jYWxUaW1lfSBmcm9tICdAanMtam9kYS9jb3JlJztcbmltcG9ydCB7dG9EYXRlLCB0b0xvY2FsVGltZX0gZnJvbSAnQHRoeC9kYXRlJztcbmltcG9ydCBkZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHR5cGUge1JlYWN0RGF0ZVBpY2tlclByb3BzfSBmcm9tICdyZWFjdC1kYXRlcGlja2VyJztcbmltcG9ydCB0eXBlIHtJbnB1dFByb3BzfSBmcm9tICdzZW1hbnRpYy11aS1yZWFjdCc7XG5pbXBvcnQge0RhdGVQaWNrZXJ9IGZyb20gJy4uL0RhdGVQaWNrZXIvaW5kZXgnO1xuaW1wb3J0IHtNYXNrZWRUaW1lSW5wdXR9IGZyb20gJy4vTWFza2VkVGltZUlucHV0JztcblxuY29uc3QgZCA9IGRlYnVnKCd0aHguY29udHJvbHMuZGF0ZS5Mb2NhbFRpbWVQaWNrZXInKTtcblxuaW50ZXJmYWNlIElMb2NhbFRpbWVQaWNrZXIge1xuXHR2YWx1ZT86IExvY2FsVGltZSB8IG51bWJlciB8IG51bGw7XG5cdG9uQ2hhbmdlPzogKHZhbHVlOiBMb2NhbFRpbWUgfCBudWxsKSA9PiB2b2lkO1xuXHRvbkNoYW5nZVJhdz86ICgpID0+IHZvaWQ7XG59XG5cbnR5cGUgSW5wdXRQcm9wc09taXR0ZWQgPSBPbWl0PElucHV0UHJvcHMsICdvbkNoYW5nZSc+O1xudHlwZSBSZWFjdERhdGVQaWNrZXJQcm9wc09taXR0ZWQgPSBPbWl0PE9taXQ8UmVhY3REYXRlUGlja2VyUHJvcHMsICd2YWx1ZSc+LCAnb25DaGFuZ2UnPjtcbmV4cG9ydCB0eXBlIExvY2FsVGltZVBpY2tlclByb3BzID0gSUxvY2FsVGltZVBpY2tlciAmIElucHV0UHJvcHNPbWl0dGVkICYgUmVhY3REYXRlUGlja2VyUHJvcHNPbWl0dGVkO1xuXG5leHBvcnQgZnVuY3Rpb24gTG9jYWxUaW1lUGlja2VyKHByb3BzOiBMb2NhbFRpbWVQaWNrZXJQcm9wcyk6IEpTWC5FbGVtZW50IHtcblx0Y29uc3Qge1xuXHRcdHZhbHVlLFxuXHRcdG9uQ2hhbmdlLFxuXHRcdGFzLFxuXHRcdGFjdGlvbixcblx0XHRhY3Rpb25Qb3NpdGlvbixcblx0XHRjbGFzc05hbWUsXG5cdFx0ZGlzYWJsZWQsXG5cdFx0ZXJyb3IsXG5cdFx0Zmx1aWQsXG5cdFx0Zm9jdXMsXG5cdFx0aWNvbixcblx0XHRpY29uUG9zaXRpb24sXG5cdFx0aW52ZXJ0ZWQsXG5cdFx0bGFiZWwsXG5cdFx0bGFiZWxQb3NpdGlvbixcblx0XHRsb2FkaW5nLFxuXHRcdHNpemUsXG5cdFx0dGFiSW5kZXgsXG5cdFx0dHJhbnNwYXJlbnQsXG5cdFx0Li4ucmVzdFxuXHR9ID0gcHJvcHM7XG5cblx0bGV0IHNlbGVjdGVkO1xuXHRpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykgc2VsZWN0ZWQgPSB0b0RhdGUoTG9jYWxUaW1lLm9mU2Vjb25kT2ZEYXkodmFsdWUpKTtcblx0ZWxzZSBzZWxlY3RlZCA9IHZhbHVlID8gdG9EYXRlKHZhbHVlKSA6IG51bGw7XG5cblx0Y29uc3QgaW5wdXRQcm9wcyA9IHtcblx0XHRhcyxcblx0XHRhY3Rpb24sXG5cdFx0YWN0aW9uUG9zaXRpb24sXG5cdFx0Y2xhc3NOYW1lLFxuXHRcdGRpc2FibGVkLFxuXHRcdGVycm9yLFxuXHRcdGZsdWlkLFxuXHRcdGZvY3VzLFxuXHRcdGljb24sXG5cdFx0aWNvblBvc2l0aW9uLFxuXHRcdGludmVydGVkLFxuXHRcdGxhYmVsLFxuXHRcdGxhYmVsUG9zaXRpb24sXG5cdFx0bG9hZGluZyxcblx0XHRzaXplLFxuXHRcdHRhYkluZGV4LFxuXHRcdHRyYW5zcGFyZW50LFxuXHR9O1xuXG5cdHJldHVybiAoXG5cdFx0PERhdGVQaWNrZXJcblx0XHRcdHsuLi5yZXN0fVxuXHRcdFx0c2VsZWN0ZWQ9e3NlbGVjdGVkfVxuXHRcdFx0b25DaGFuZ2U9e2RhdGUgPT4ge1xuXHRcdFx0XHRpZiAob25DaGFuZ2UpIG9uQ2hhbmdlKGRhdGUgPyB0b0xvY2FsVGltZShkYXRlKSA6IG51bGwpO1xuXHRcdFx0fX1cblx0XHRcdHNob3dUaW1lU2VsZWN0XG5cdFx0XHRzaG93VGltZVNlbGVjdE9ubHlcblx0XHRcdHRpbWVJbnRlcnZhbHM9ezE1fVxuXHRcdFx0dGltZUNhcHRpb249XCJUaW1lXCJcblx0XHRcdGRhdGVGb3JtYXQ9XCJoaDptbSBhYVwiXG5cdFx0XHQvLyBAdHMtaWdub3JlXG5cdFx0XHRjdXN0b21JbnB1dD17PE1hc2tlZFRpbWVJbnB1dCB7Li4uaW5wdXRQcm9wc30gLz59XG5cdFx0Lz5cblx0KTtcbn1cbiIsImltcG9ydCBkZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5pbXBvcnQgUmVhY3QsIHtmb3J3YXJkUmVmfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQge01hc2tlZElucHV0LCBNYXNrZWRJbnB1dFByb3BzfSBmcm9tICcuLi8uLi9pbnB1dHMvTWFza2VkSW5wdXQnO1xuXG5jb25zdCBkID0gZGVidWcoJ3RoeC5jb250cm9scy5kYXRlLkxvY2FsVGltZVBpY2tlci5NYXNrZWRUaW1lSW5wdXQnKTtcblxuZXhwb3J0IGludGVyZmFjZSBNYXNrZWRUaW1lSW5wdXRQcm9wcyB7XG5cdG9uQ2hhbmdlPzogKHZhbHVlOiB7dGFyZ2V0OiB7dmFsdWU6IHN0cmluZ319KSA9PiB2b2lkO1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMsQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5mdW5jdGlvbiBNYXNrZWRUaW1lSW5wdXRJbm5lcihwcm9wczogTWFza2VkVGltZUlucHV0UHJvcHMgJiBPbWl0PE1hc2tlZElucHV0UHJvcHMsICdvbkNoYW5nZSc+LCByZWY6IGFueSkge1xuXHRjb25zdCB7b25DaGFuZ2UsIC4uLnJlc3R9ID0gcHJvcHM7XG5cblx0cmV0dXJuIChcblx0XHQ8TWFza2VkSW5wdXRcblx0XHRcdG1hc2s9e3thbGlhczogJ2RhdGV0aW1lJywgaW5wdXRGb3JtYXQ6ICdoaDpNTSBUVCd9fVxuXHRcdFx0b25DaGFuZ2U9e3ZhbHVlID0+IHtcblx0XHRcdFx0aWYgKG9uQ2hhbmdlKSBvbkNoYW5nZSh7dGFyZ2V0OiB7dmFsdWU6IHZhbHVlIHx8ICcnfX0pO1xuXHRcdFx0fX1cblx0XHRcdHsuLi5yZXN0fVxuXHRcdC8+XG5cdCk7XG59XG5cbmV4cG9ydCBjb25zdCBNYXNrZWRUaW1lSW5wdXQgPSBmb3J3YXJkUmVmKE1hc2tlZFRpbWVJbnB1dElubmVyKTtcbiIsImV4cG9ydCB7TG9jYWxUaW1lUGlja2VyfSBmcm9tICcuL0xvY2FsVGltZVBpY2tlcic7XG5leHBvcnQgdHlwZSB7TG9jYWxUaW1lUGlja2VyUHJvcHN9IGZyb20gJy4vTG9jYWxUaW1lUGlja2VyJztcbiIsImltcG9ydCB0eXBlIHtMb2NhbERhdGV9IGZyb20gJ0Bqcy1qb2RhL2NvcmUnO1xuaW1wb3J0IHt0b0RhdGUsIHRvTG9jYWxEYXRlfSBmcm9tICdAdGh4L2RhdGUnO1xuaW1wb3J0IGRlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgdHlwZSB7UmVhY3REYXRlUGlja2VyUHJvcHN9IGZyb20gJ3JlYWN0LWRhdGVwaWNrZXInO1xuaW1wb3J0IHtJbnB1dFByb3BzLCBJbnB1dH0gZnJvbSAnc2VtYW50aWMtdWktcmVhY3QnO1xuaW1wb3J0IHtEYXRlUGlja2VyfSBmcm9tICcuLi9EYXRlUGlja2VyL2luZGV4JztcblxuY29uc3QgZCA9IGRlYnVnKCd0aHguY29udHJvbHMuZGF0ZS5Nb250aERheVBpY2tlcicpO1xuXG5jb25zdCBtb250aHMgPSBbJ0phbnVhcnknLCAnRmVicnVhcnknLCAnTWFyY2gnLCAnQXByaWwnLCAnTWF5JywgJ0p1bmUnLCAnSnVseScsICdBdWd1c3QnLCAnU2VwdGVtYmVyJywgJ09jdG9iZXInLCAnTm92ZW1iZXInLCAnRGVjZW1iZXInXTtcblxuaW50ZXJmYWNlIE1vbnRoRGF5SGVhZGVyUHJvcHMge1xuXHRkYXRlOiBEYXRlO1xuXHRjaGFuZ2VZZWFyKHllYXI6IG51bWJlcik6IHZvaWQ7XG5cdGNoYW5nZU1vbnRoKG1vbnRoOiBudW1iZXIpOiB2b2lkO1xuXHRkZWNyZWFzZU1vbnRoKCk6IHZvaWQ7XG5cdGluY3JlYXNlTW9udGgoKTogdm9pZDtcblx0cHJldk1vbnRoQnV0dG9uRGlzYWJsZWQ6IGJvb2xlYW47XG5cdG5leHRNb250aEJ1dHRvbkRpc2FibGVkOiBib29sZWFuO1xuXHRkZWNyZWFzZVllYXIoKTogdm9pZDtcblx0aW5jcmVhc2VZZWFyKCk6IHZvaWQ7XG5cdHByZXZZZWFyQnV0dG9uRGlzYWJsZWQ6IGJvb2xlYW47XG5cdG5leHRZZWFyQnV0dG9uRGlzYWJsZWQ6IGJvb2xlYW47XG59XG5cbmZ1bmN0aW9uIE1vbnRoRGF5SGVhZGVyKHByb3BzOiBNb250aERheUhlYWRlclByb3BzKSB7XG5cdHJldHVybiAoXG5cdFx0PD5cblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwicmVhY3QtZGF0ZXBpY2tlcl9fY3VycmVudC1tb250aFwiPnttb250aHNbcHJvcHMuZGF0ZS5nZXRNb250aCgpXX08L2Rpdj5cblx0XHRcdDxidXR0b25cblx0XHRcdFx0dHlwZT1cImJ1dHRvblwiXG5cdFx0XHRcdGNsYXNzTmFtZT1cInJlYWN0LWRhdGVwaWNrZXJfX25hdmlnYXRpb24gcmVhY3QtZGF0ZXBpY2tlcl9fbmF2aWdhdGlvbi0tcHJldmlvdXNcIlxuXHRcdFx0XHRhcmlhLWxhYmVsPVwiUHJldmlvdXMgTW9udGhcIlxuXHRcdFx0XHRvbkNsaWNrPXtwcm9wcy5kZWNyZWFzZU1vbnRofVxuXHRcdFx0XHRkaXNhYmxlZD17cHJvcHMucHJldk1vbnRoQnV0dG9uRGlzYWJsZWR9XG5cdFx0XHQ+XG5cdFx0XHRcdFByZXZpb3VzIE1vbnRoXG5cdFx0XHQ8L2J1dHRvbj5cblx0XHRcdDxidXR0b25cblx0XHRcdFx0dHlwZT1cImJ1dHRvblwiXG5cdFx0XHRcdGNsYXNzTmFtZT1cInJlYWN0LWRhdGVwaWNrZXJfX25hdmlnYXRpb24gcmVhY3QtZGF0ZXBpY2tlcl9fbmF2aWdhdGlvbi0tbmV4dFwiXG5cdFx0XHRcdGFyaWEtbGFiZWw9XCJOZXh0IE1vbnRoXCJcblx0XHRcdFx0b25DbGljaz17cHJvcHMuaW5jcmVhc2VNb250aH1cblx0XHRcdFx0ZGlzYWJsZWQ9e3Byb3BzLm5leHRNb250aEJ1dHRvbkRpc2FibGVkfVxuXHRcdFx0PlxuXHRcdFx0XHROZXh0IE1vbnRoXG5cdFx0XHQ8L2J1dHRvbj5cblx0XHQ8Lz5cblx0KTtcbn1cblxuaW50ZXJmYWNlIElNb250aERheVBpY2tlclByb3BzIHtcblx0dmFsdWU/OiBMb2NhbERhdGUgfCBudW1iZXIgfCBudWxsO1xuXHRvbkNoYW5nZT86ICh2YWx1ZTogTG9jYWxEYXRlIHwgbnVsbCkgPT4gdm9pZDtcblx0b25DaGFuZ2VSYXc/OiAoKSA9PiB2b2lkO1xufVxuXG50eXBlIElucHV0UHJvcHNPbWl0dGVkID0gT21pdDxJbnB1dFByb3BzLCAnb25DaGFuZ2UnPjtcbnR5cGUgUmVhY3REYXRlUGlja2VyUHJvcHNPbWl0dGVkID0gT21pdDxPbWl0PFJlYWN0RGF0ZVBpY2tlclByb3BzLCAndmFsdWUnPiwgJ29uQ2hhbmdlJz47XG5leHBvcnQgdHlwZSBNb250aERheVBpY2tlclByb3BzID0gSU1vbnRoRGF5UGlja2VyUHJvcHMgJiBJbnB1dFByb3BzT21pdHRlZCAmIFJlYWN0RGF0ZVBpY2tlclByb3BzT21pdHRlZDtcblxuZXhwb3J0IGZ1bmN0aW9uIE1vbnRoRGF5UGlja2VyKHByb3BzOiBNb250aERheVBpY2tlclByb3BzKTogSlNYLkVsZW1lbnQge1xuXHRjb25zdCB7XG5cdFx0dmFsdWUsXG5cdFx0b25DaGFuZ2UsXG5cdFx0YXMsXG5cdFx0YWN0aW9uLFxuXHRcdGFjdGlvblBvc2l0aW9uLFxuXHRcdGNsYXNzTmFtZSxcblx0XHRkaXNhYmxlZCxcblx0XHRlcnJvcixcblx0XHRmbHVpZCxcblx0XHRmb2N1cyxcblx0XHRpY29uLFxuXHRcdGljb25Qb3NpdGlvbixcblx0XHRpbnZlcnRlZCxcblx0XHRsYWJlbCxcblx0XHRsYWJlbFBvc2l0aW9uLFxuXHRcdGxvYWRpbmcsXG5cdFx0c2l6ZSxcblx0XHR0YWJJbmRleCxcblx0XHR0cmFuc3BhcmVudCxcblx0XHQuLi5yZXN0XG5cdH0gPSBwcm9wcztcblxuXHRjb25zdCBzZWxlY3RlZCA9IHZhbHVlID8gdG9EYXRlKHZhbHVlKSA6IG51bGw7XG5cblx0Y29uc3QgaW5wdXRQcm9wcyA9IHtcblx0XHRhcyxcblx0XHRhY3Rpb24sXG5cdFx0YWN0aW9uUG9zaXRpb24sXG5cdFx0Y2xhc3NOYW1lLFxuXHRcdGRpc2FibGVkLFxuXHRcdGVycm9yLFxuXHRcdGZsdWlkLFxuXHRcdGZvY3VzLFxuXHRcdGljb24sXG5cdFx0aWNvblBvc2l0aW9uLFxuXHRcdGludmVydGVkLFxuXHRcdGxhYmVsLFxuXHRcdGxhYmVsUG9zaXRpb24sXG5cdFx0bG9hZGluZyxcblx0XHRzaXplLFxuXHRcdHRhYkluZGV4LFxuXHRcdHRyYW5zcGFyZW50LFxuXHR9O1xuXG5cdHJldHVybiAoXG5cdFx0PERhdGVQaWNrZXJcblx0XHRcdHsuLi5yZXN0fVxuXHRcdFx0c2VsZWN0ZWQ9e3NlbGVjdGVkfVxuXHRcdFx0b25DaGFuZ2U9e2RhdGUgPT4ge1xuXHRcdFx0XHRpZiAob25DaGFuZ2UpIG9uQ2hhbmdlKGRhdGUgPyB0b0xvY2FsRGF0ZShkYXRlKSA6IG51bGwpO1xuXHRcdFx0fX1cblx0XHRcdGN1c3RvbUlucHV0PXs8SW5wdXQgey4uLmlucHV0UHJvcHN9IC8+fVxuXHRcdFx0cmVuZGVyQ3VzdG9tSGVhZGVyPXtNb250aERheUhlYWRlcn1cblx0XHRcdGRhdGVGb3JtYXQ9XCJNTU1NIGRcIlxuXHRcdC8+XG5cdCk7XG59XG4iLCJleHBvcnQge01vbnRoRGF5UGlja2VyfSBmcm9tICcuL01vbnRoRGF5UGlja2VyJztcbmV4cG9ydCB0eXBlIHtNb250aERheVBpY2tlclByb3BzfSBmcm9tICcuL01vbnRoRGF5UGlja2VyJztcbiIsImltcG9ydCB7TG9jYWxEYXRlfSBmcm9tICdAanMtam9kYS9jb3JlJztcbmltcG9ydCB7dG9EYXRlLCB0b0xvY2FsRGF0ZX0gZnJvbSAnQHRoeC9kYXRlJztcbmltcG9ydCBkZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHR5cGUge1JlYWN0RGF0ZVBpY2tlclByb3BzfSBmcm9tICdyZWFjdC1kYXRlcGlja2VyJztcbmltcG9ydCB7SW5wdXRQcm9wcywgSW5wdXR9IGZyb20gJ3NlbWFudGljLXVpLXJlYWN0JztcbmltcG9ydCB7RGF0ZVBpY2tlcn0gZnJvbSAnLi4vRGF0ZVBpY2tlci9pbmRleCc7XG5cbmNvbnN0IGQgPSBkZWJ1ZygndGh4LmNvbnRyb2xzLmRhdGUuTW9udGhZZWFyUGlja2VyJyk7XG5cbmludGVyZmFjZSBJTW9udGhZZWFyUGlja2VyUHJvcHMge1xuXHR2YWx1ZT86IExvY2FsRGF0ZSB8IG51bWJlciB8IHVuZGVmaW5lZDtcblx0b25DaGFuZ2U/OiAodmFsdWU6IExvY2FsRGF0ZSB8IHVuZGVmaW5lZCkgPT4gdm9pZDtcblx0b25DaGFuZ2VSYXc/OiAoKSA9PiB2b2lkO1xuXHRtaW5EYXRlPzogTG9jYWxEYXRlIHwgdW5kZWZpbmVkO1xuXHRtYXhEYXRlPzogTG9jYWxEYXRlIHwgdW5kZWZpbmVkO1xufVxuXG50eXBlIElucHV0UHJvcHNPbWl0dGVkID0gT21pdDxJbnB1dFByb3BzLCAnb25DaGFuZ2UnPjtcbnR5cGUgUmVhY3REYXRlUGlja2VyUHJvcHNPbWl0dGVkID0gT21pdDxPbWl0PFJlYWN0RGF0ZVBpY2tlclByb3BzLCAndmFsdWUnIHwgJ21pbkRhdGUnIHwgJ21heERhdGUnPiwgJ29uQ2hhbmdlJz47XG5leHBvcnQgdHlwZSBNb250aFllYXJQaWNrZXJQcm9wcyA9IElNb250aFllYXJQaWNrZXJQcm9wcyAmIElucHV0UHJvcHNPbWl0dGVkICYgUmVhY3REYXRlUGlja2VyUHJvcHNPbWl0dGVkO1xuXG5leHBvcnQgZnVuY3Rpb24gTW9udGhZZWFyUGlja2VyKHByb3BzOiBNb250aFllYXJQaWNrZXJQcm9wcyk6IEpTWC5FbGVtZW50IHtcblx0Y29uc3Qge1xuXHRcdHZhbHVlLFxuXHRcdG9uQ2hhbmdlLFxuXHRcdGFzLFxuXHRcdGFjdGlvbixcblx0XHRhY3Rpb25Qb3NpdGlvbixcblx0XHRjbGFzc05hbWUsXG5cdFx0ZGlzYWJsZWQsXG5cdFx0ZXJyb3IsXG5cdFx0Zmx1aWQsXG5cdFx0Zm9jdXMsXG5cdFx0aWNvbixcblx0XHRpY29uUG9zaXRpb24sXG5cdFx0aW52ZXJ0ZWQsXG5cdFx0bGFiZWwsXG5cdFx0bGFiZWxQb3NpdGlvbixcblx0XHRsb2FkaW5nLFxuXHRcdHNpemUsXG5cdFx0dGFiSW5kZXgsXG5cdFx0dHJhbnNwYXJlbnQsXG5cdFx0bWluRGF0ZSxcblx0XHRtYXhEYXRlLFxuXHRcdC4uLnJlc3Rcblx0fSA9IHByb3BzO1xuXG5cdGNvbnN0IHNlbGVjdGVkID0gdmFsdWUgPyB0b0RhdGUodmFsdWUpIDogbnVsbDtcblxuXHRjb25zdCBpbnB1dFByb3BzID0ge1xuXHRcdGFzLFxuXHRcdGFjdGlvbixcblx0XHRhY3Rpb25Qb3NpdGlvbixcblx0XHRjbGFzc05hbWUsXG5cdFx0ZGlzYWJsZWQsXG5cdFx0ZXJyb3IsXG5cdFx0Zmx1aWQsXG5cdFx0Zm9jdXMsXG5cdFx0aWNvbixcblx0XHRpY29uUG9zaXRpb24sXG5cdFx0aW52ZXJ0ZWQsXG5cdFx0bGFiZWwsXG5cdFx0bGFiZWxQb3NpdGlvbixcblx0XHRsb2FkaW5nLFxuXHRcdHNpemUsXG5cdFx0dGFiSW5kZXgsXG5cdFx0dHJhbnNwYXJlbnQsXG5cdH07XG5cblx0cmV0dXJuIChcblx0XHQ8RGF0ZVBpY2tlclxuXHRcdFx0ey4uLnJlc3R9XG5cdFx0XHRzZWxlY3RlZD17c2VsZWN0ZWR9XG5cdFx0XHRvbkNoYW5nZT17ZGF0ZSA9PiB7XG5cdFx0XHRcdGlmIChvbkNoYW5nZSkgb25DaGFuZ2UoZGF0ZSA/IHRvTG9jYWxEYXRlKGRhdGUpIDogdW5kZWZpbmVkKTtcblx0XHRcdH19XG5cdFx0XHRjdXN0b21JbnB1dD17PElucHV0IHsuLi5pbnB1dFByb3BzfSAvPn1cblx0XHRcdGRhdGVGb3JtYXQ9XCJNTU1NIHl5eXlcIlxuXHRcdFx0c2hvd01vbnRoWWVhclBpY2tlclxuXHRcdFx0bWluRGF0ZT17dG9EYXRlKG1pbkRhdGU/LndpdGhEYXlPZk1vbnRoKDEpIHx8IExvY2FsRGF0ZS5vZkVwb2NoRGF5KDApKX1cblx0XHRcdG1heERhdGU9e3RvRGF0ZShtYXhEYXRlPy5wbHVzTW9udGhzKDEpLndpdGhEYXlPZk1vbnRoKDEpLm1pbnVzRGF5cygxKSB8fCBMb2NhbERhdGUubm93KCkucGx1c1llYXJzKDIwKSl9XG5cdFx0Lz5cblx0KTtcbn1cbiIsImV4cG9ydCB7TW9udGhZZWFyUGlja2VyfSBmcm9tICcuL01vbnRoWWVhclBpY2tlcic7XG5leHBvcnQgdHlwZSB7TW9udGhZZWFyUGlja2VyUHJvcHN9IGZyb20gJy4vTW9udGhZZWFyUGlja2VyJztcbiIsImltcG9ydCBkZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtJY29uLCBCdXR0b24sIERyb3Bkb3duLCBEcm9wZG93bkl0ZW1Qcm9wcywgU2VnbWVudCwgU2VnbWVudFByb3BzfSBmcm9tICdzZW1hbnRpYy11aS1yZWFjdCc7XG5cbmNvbnN0IGQgPSBkZWJ1ZygndGh4LmNvbnRyb2xzLmRhdGUuWWVhclNlbGVjdCcpO1xuXG5leHBvcnQgaW50ZXJmYWNlIFllYXJTZWxlY3RQcm9wcyB7XG5cdG9uQ2hhbmdlPzogKHZhbHVlOiBudW1iZXIpID0+IHZvaWQ7XG5cdG9uQmx1cj86IChldjogYW55KSA9PiB2b2lkO1xuXHR2YWx1ZTogbnVtYmVyO1xuXHRtaW5ZZWFyPzogbnVtYmVyOyAvLyBEZWZhdWx0cyB0byAxOTcwXG5cdG1heFllYXI/OiBudW1iZXI7IC8vIERlZmF1bHRzIHRvIGN1cnJlbnQgeWVhclxuXHRlcnJvcj86IGJvb2xlYW47IC8vIERlZmF1bHRzIHRvIGZhbHNlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBZZWFyU2VsZWN0KHByb3BzOiBZZWFyU2VsZWN0UHJvcHMgJiBPbWl0PFNlZ21lbnRQcm9wcywgJ29uQ2hhbmdlJz4pIHtcblx0Y29uc3QgdGhpc1llYXIgPSBuZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKCk7XG5cdGNvbnN0IHt2YWx1ZSwgbWluWWVhciA9IDE5NzAsIG1heFllYXIgPSB0aGlzWWVhciwgb25DaGFuZ2UsIG9uQmx1ciwgZXJyb3IsIC4uLnJlc3R9ID0gcHJvcHM7XG5cblx0Y29uc3QgYXZhaWxhYmxlWWVhcnM6IERyb3Bkb3duSXRlbVByb3BzW10gPSBbXTtcblx0Zm9yIChsZXQgaSA9IG1heFllYXI7IGkgPj0gbWluWWVhcjsgaS0tKSB7XG5cdFx0YXZhaWxhYmxlWWVhcnMucHVzaCh7dmFsdWU6IGksIHRleHQ6IGkudG9TdHJpbmcoKSwga2V5OiBpfSk7XG5cdH1cblxuXHRyZXR1cm4gKFxuXHRcdDxTZWdtZW50IGJhc2ljIGNvbXBhY3Qgc3R5bGU9e3twYWRkaW5nOiAwLCBtYXJnaW46IDB9fSB7Li4ucmVzdH0+XG5cdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdGJhc2ljXG5cdFx0XHRcdGljb25cblx0XHRcdFx0dHlwZT1cImJ1dHRvblwiXG5cdFx0XHRcdGNvbG9yPXtlcnJvciA/ICdyZWQnIDogJ2dyZWVuJ31cblx0XHRcdFx0ZGlzYWJsZWQ9e3ZhbHVlIDw9IG1pblllYXJ9XG5cdFx0XHRcdG9uQ2xpY2s9eygpID0+IHtcblx0XHRcdFx0XHRpZiAob25DaGFuZ2UpIG9uQ2hhbmdlKHZhbHVlIC0gMSk7XG5cdFx0XHRcdH19XG5cdFx0XHRcdG9uQmx1cj17b25CbHVyfVxuXHRcdFx0PlxuXHRcdFx0XHQ8SWNvbiBuYW1lPVwiYXJyb3cgbGVmdFwiIC8+XG5cdFx0XHQ8L0J1dHRvbj5cblx0XHRcdDxEcm9wZG93blxuXHRcdFx0XHRpY29uPXs8ZGl2IC8+fVxuXHRcdFx0XHRidXR0b25cblx0XHRcdFx0YmFzaWNcblx0XHRcdFx0c2Nyb2xsaW5nXG5cdFx0XHRcdHZhbHVlPXt2YWx1ZX1cblx0XHRcdFx0b3B0aW9ucz17YXZhaWxhYmxlWWVhcnN9XG5cdFx0XHRcdG9uQ2hhbmdlPXsoZSwgdmFsKSA9PiB7XG5cdFx0XHRcdFx0aWYgKHR5cGVvZiB2YWwudmFsdWUgPT09ICdudW1iZXInICYmIG9uQ2hhbmdlKSBvbkNoYW5nZSh2YWwudmFsdWUpO1xuXHRcdFx0XHR9fVxuXHRcdFx0XHRlcnJvcj17ZXJyb3J9XG5cdFx0XHRcdG9uQmx1cj17b25CbHVyfVxuXHRcdFx0Lz5cblx0XHRcdDxCdXR0b25cblx0XHRcdFx0YmFzaWNcblx0XHRcdFx0aWNvblxuXHRcdFx0XHR0eXBlPVwiYnV0dG9uXCJcblx0XHRcdFx0Y29sb3I9e2Vycm9yID8gJ3JlZCcgOiAnZ3JlZW4nfVxuXHRcdFx0XHRkaXNhYmxlZD17dmFsdWUgPj0gbWF4WWVhcn1cblx0XHRcdFx0b25DbGljaz17KCkgPT4ge1xuXHRcdFx0XHRcdGlmIChvbkNoYW5nZSkgb25DaGFuZ2UodmFsdWUgKyAxKTtcblx0XHRcdFx0fX1cblx0XHRcdFx0b25CbHVyPXtvbkJsdXJ9XG5cdFx0XHRcdHN0eWxlPXt7bWFyZ2luUmlnaHQ6IDB9fVxuXHRcdFx0PlxuXHRcdFx0XHQ8SWNvbiBuYW1lPVwiYXJyb3cgcmlnaHRcIiAvPlxuXHRcdFx0PC9CdXR0b24+XG5cdFx0PC9TZWdtZW50PlxuXHQpO1xufVxuIiwiZXhwb3J0IHtZZWFyU2VsZWN0fSBmcm9tICcuL1llYXJTZWxlY3QnO1xuZXhwb3J0IHR5cGUge1llYXJTZWxlY3RQcm9wc30gZnJvbSAnLi9ZZWFyU2VsZWN0JztcbiIsImltcG9ydCBkZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5pbXBvcnQge0Zvcm1pa1ZhbHVlcywgaXNGdW5jdGlvbiwgRm9ybWlrUHJvdmlkZXIsIGlzRW1wdHlDaGlsZHJlbn0gZnJvbSAnZm9ybWlrJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgdHlwZSB7VEZvcm1Db25maWcsIFRGb3JtUHJvcHN9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHt1c2VURm9ybX0gZnJvbSAnLi91c2VURm9ybSc7XG5cbmNvbnN0IGQgPSBkZWJ1ZygndGh4LmNvbnRyb2xzLmZvcm0uVEZvcm0nKTtcblxuZXhwb3J0IGZ1bmN0aW9uIFRGb3JtPFZhbHVlcyBleHRlbmRzIEZvcm1pa1ZhbHVlcyA9IEZvcm1pa1ZhbHVlcz4ocHJvcHM6IFRGb3JtQ29uZmlnPFZhbHVlcz4pIHtcblx0Y29uc3QgdGJhZyA9IHVzZVRGb3JtPFZhbHVlcz4ocHJvcHMpO1xuXHRjb25zdCB7Y29tcG9uZW50LCByZW5kZXIsIGNoaWxkcmVuLCBpbm5lclJlZn0gPSBwcm9wcztcblxuXHQvLyBUaGlzIGFsbG93cyBmb2xrcyB0byBwYXNzIGEgcmVmIHRvIDxGb3JtaWsgLz5cblx0UmVhY3QudXNlSW1wZXJhdGl2ZUhhbmRsZShpbm5lclJlZiwgKCkgPT4gdGJhZyk7XG5cblx0bGV0IGNoaWxkID0gbnVsbDtcblx0aWYgKGNvbXBvbmVudCkge1xuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHRjaGlsZCA9IFJlYWN0LmNyZWF0ZUVsZW1lbnQoY29tcG9uZW50LCB0YmFnKTtcblx0fSBlbHNlIGlmIChyZW5kZXIpIHtcblx0XHRjaGlsZCA9IHJlbmRlcih0YmFnKTtcblx0fSBlbHNlIGlmIChjaGlsZHJlbikge1xuXHRcdGlmIChpc0Z1bmN0aW9uKGNoaWxkcmVuKSkge1xuXHRcdFx0Y2hpbGQgPSAoY2hpbGRyZW4gYXMgKGJhZzogVEZvcm1Qcm9wczxWYWx1ZXM+KSA9PiBSZWFjdC5SZWFjdE5vZGUpKHRiYWcgYXMgVEZvcm1Qcm9wczxWYWx1ZXM+KTtcblx0XHR9IGVsc2UgaWYgKCFpc0VtcHR5Q2hpbGRyZW4oY2hpbGRyZW4pKSB7XG5cdFx0XHRjaGlsZCA9IFJlYWN0LkNoaWxkcmVuLm9ubHkoY2hpbGRyZW4pO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiA8Rm9ybWlrUHJvdmlkZXIgdmFsdWU9e3RiYWd9PntjaGlsZH08L0Zvcm1pa1Byb3ZpZGVyPjtcbn1cbiIsImV4cG9ydCB7VEZvcm19IGZyb20gJy4vVEZvcm0nO1xuZXhwb3J0IHt1c2VURm9ybX0gZnJvbSAnLi91c2VURm9ybSc7XG5leHBvcnQgdHlwZSB7VEZvcm1Qcm9wc30gZnJvbSAnLi90eXBlcyc7XG4iLCJpbXBvcnQgZmxhdHRlbiBmcm9tICdmbGF0JztcbmltcG9ydCB7Rm9ybWlrVmFsdWVzLCB1c2VGb3JtaWssIEZvcm1pa0Vycm9ycywgRm9ybWlrVG91Y2hlZH0gZnJvbSAnZm9ybWlrJztcbmltcG9ydCBnZXQgZnJvbSAnbG9kYXNoL2dldCc7XG5pbXBvcnQgcHJvcGVydHkgZnJvbSAnbG9kYXNoL3Byb3BlcnR5JztcbmltcG9ydCB1bmlxIGZyb20gJ2xvZGFzaC91bmlxJztcbmltcG9ydCBSZWFjdCwge3VzZUVmZmVjdCwgdXNlU3RhdGV9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7TWVzc2FnZSwgU2VnbWVudH0gZnJvbSAnc2VtYW50aWMtdWktcmVhY3QnO1xuaW1wb3J0IHR5cGUge1RGb3JtQ29uZmlnfSBmcm9tICcuL3R5cGVzJztcblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVRGb3JtPFZhbHVlcyBleHRlbmRzIEZvcm1pa1ZhbHVlcyA9IEZvcm1pa1ZhbHVlcywgSW5pdGlhbFZhbHVlcyA9IGFueT4oY29uZmlnOiBURm9ybUNvbmZpZzxWYWx1ZXMsIEluaXRpYWxWYWx1ZXM+KSB7XG5cdGNvbnN0IHtyZW5kZXIsIGNoaWxkcmVuLCAuLi5yZXN0fSA9IGNvbmZpZztcblx0Ly8gQHRzLWlnbm9yZVxuXHRjb25zdCBmb3JtaWsgPSB1c2VGb3JtaWsocmVzdCk7XG5cblx0dXNlRWZmZWN0KCgpID0+IHtcblx0XHRpZiAoY29uZmlnLm9uVmFsaWRhdGUpIGNvbmZpZy5vblZhbGlkYXRlKGZvcm1pay5pc1ZhbGlkKTtcblx0fSwgW2Zvcm1pay5pc1ZhbGlkLCBjb25maWcub25WYWxpZGF0ZV0pO1xuXG5cdC8vIEdldCBzdWJtaXQgZnVuY3Rpb25cblx0dXNlRWZmZWN0KCgpID0+IHtcblx0XHRpZiAoY29uZmlnLmdldFN1Ym1pdEZuKSBjb25maWcuZ2V0U3VibWl0Rm4oZm9ybWlrLnN1Ym1pdEZvcm0pO1xuXHR9LCBbZm9ybWlrLnN1Ym1pdEZvcm0sIGNvbmZpZy5nZXRTdWJtaXRGbl0pO1xuXG5cdC8vIE9uIGNoYW5nZSBldmVudCAoaWYgdGhpcyBlbmRzIHVwIGNoYW5naW5nIHZhbHVlcyBpdCB3aWxsIGN5Y2xlKVxuXHR1c2VFZmZlY3QoKCkgPT4ge1xuXHRcdGlmIChjb25maWcub25DaGFuZ2UpIGNvbmZpZy5vbkNoYW5nZShmb3JtaWsudmFsdWVzKTtcblx0fSwgW2Zvcm1pay52YWx1ZXNdKTtcblxuXHQvLyBNYXJrIHRoZSBlcnJvciBjbGVhcmVkIGlmIHRoZSBmb3JtIGhhcyBiZWVuIGVkaXRlZCBhZnRlciBhbiBlcnJvclxuXHRjb25zdCBbZXJyb3JDbGVhcmVkLCBzZXRFcnJvckNsZWFyZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuXHR1c2VFZmZlY3QoKCkgPT4ge1xuXHRcdGlmIChjb25maWcuZXJyb3IgJiYgY29uZmlnLmVycm9yLm1lc3NhZ2UgJiYgIWZvcm1pay5pc1N1Ym1pdHRpbmcpIHtcblx0XHRcdHNldEVycm9yQ2xlYXJlZCh0cnVlKTtcblx0XHR9XG5cdH0sIFtmb3JtaWsudmFsdWVzLCBjb25maWcuZXJyb3JdKTtcblxuXHQvLyBGbGF0dGVuIHRoZSB3YXJuaW5ncyAoZm9ybWlrIGVycm9ycykgYW5kIHRvdWNoIG9iamVjdHMuXG5cdGNvbnN0IGZsYXRXYXJuaW5ncyA9IGZsYXR0ZW48Rm9ybWlrRXJyb3JzPFZhbHVlcz4sIHtba2V5OiBzdHJpbmddOiBzdHJpbmd9Pihmb3JtaWsuZXJyb3JzKTtcblx0Y29uc3QgZmxhdFRvdWNoZWQgPSBmbGF0dGVuPEZvcm1pa1RvdWNoZWQ8VmFsdWVzPiwge1trZXk6IHN0cmluZ106IHN0cmluZ30+KGZvcm1pay50b3VjaGVkKTtcblxuXHQvLyBDcmVhdGUgYW4gYXJyYXkgb2Ygc3RyaW5ncyB0aGF0IGFyZSB3YXJuaW5ncyAoZm9ybWlrIGVycm9ycykuIElmIHRoZSBzdWJtaXQgY291bnQgaXMgZ3JlYXRlciB0aGFuIDBcblx0Ly8gdGhlbiBpdCB3aWxsIHNob3cgYWxsIHdhcm5pbmdzLiBPdGhlcndpc2Ugb25seSB0b3VjaGVkIGZpZWxkIHdhcm5pbmdzIHdpbGwgYmUgYWRkZWQgdG8gdGhpcyBhcnJheS5cblx0Y29uc3Qgd2FybmluZ3M6IHN0cmluZ1tdID0gdW5pcShcblx0XHRPYmplY3Qua2V5cyhmbGF0V2FybmluZ3MpLnJlZHVjZTxzdHJpbmdbXT4oKG1lbW8sIHZhbHVlKSA9PiB7XG5cdFx0XHRjb25zdCBpc1RvdWNoZWQgPSBmbGF0VG91Y2hlZFt2YWx1ZV07XG5cdFx0XHRpZiAoaXNUb3VjaGVkIHx8IGZvcm1pay5zdWJtaXRDb3VudCA+IDApIHtcblx0XHRcdFx0cmV0dXJuIFsuLi5tZW1vLCBnZXQoZmxhdFdhcm5pbmdzLCB2YWx1ZSldO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG1lbW87XG5cdFx0fSwgW10pLFxuXHQpO1xuXG5cdC8vIENyZWF0ZSBhbiBhcnJheSBvZiBzdHJpbmdzIHRoYXQgYXJlIGVycm9ycyAoZ3JhcGhxbCBlcnJvcnMpLlxuXHRsZXQgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuXHRsZXQgZXJyb3JIZWFkZXIgPSAnJztcblx0aWYgKGNvbmZpZy5lcnJvciAmJiBjb25maWcuZXJyb3IubWVzc2FnZSkge1xuXHRcdGlmIChjb25maWcuZXJyb3IuZ3JhcGhRTEVycm9ycykge1xuXHRcdFx0ZXJyb3JzID0gY29uZmlnLmVycm9yLmdyYXBoUUxFcnJvcnMucmVkdWNlKChtZW1vLCB2KSA9PiB7XG5cdFx0XHRcdGlmICh2Lm1lc3NhZ2UpIHJldHVybiBbLi4ubWVtbywgdi5tZXNzYWdlXTtcblx0XHRcdFx0cmV0dXJuIG1lbW87XG5cdFx0XHR9LCBbXSBhcyBzdHJpbmdbXSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IGVycm9yTWVzc2FnZSA9IGNvbmZpZy5lcnJvci5tZXNzYWdlLnNsaWNlKGNvbmZpZy5lcnJvci5tZXNzYWdlLmluZGV4T2YoJzogJykgKyAxKTtcblx0XHRcdGVycm9ycy5wdXNoKGVycm9yTWVzc2FnZSk7XG5cdFx0fVxuXHRcdGVycm9ySGVhZGVyID0gY29uZmlnLmVycm9yLm1lc3NhZ2Uuc2xpY2UoMCwgY29uZmlnLmVycm9yLm1lc3NhZ2UuaW5kZXhPZignOiAnKSk7XG5cdH1cblx0ZXJyb3JzID0gdW5pcShlcnJvcnMpO1xuXG5cdC8vIENoZWNrIGlmIHRoZXJlIGFyZSB3YXJuaW5ncyBvciBlcnJvcnNcblx0Y29uc3QgaGFzV2FybmluZ3MgPSAhKGZvcm1pay5pc1ZhbGlkIHx8IHdhcm5pbmdzLmxlbmd0aCA9PT0gMCk7XG5cdGNvbnN0IGhhc0Vycm9ycyA9IGVycm9ycy5sZW5ndGggPiAwO1xuXG5cdC8vIFJlbmRlciB0aGUgd2FybmluZ3Ncblx0ZnVuY3Rpb24gcmVuZGVyV2FybmluZ3MoKSB7XG5cdFx0aWYgKCFoYXNXYXJuaW5ncyAmJiAhaGFzRXJyb3JzKSByZXR1cm4gbnVsbDtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PE1lc3NhZ2Ugd2FybmluZz17aGFzV2FybmluZ3N9IGVycm9yPXtoYXNFcnJvcnMgJiYgIWhhc1dhcm5pbmdzfT5cblx0XHRcdFx0PE1lc3NhZ2UuSGVhZGVyPntoYXNXYXJuaW5ncyA/ICdTb21lIGZpZWxkcyBhcmUgbm90IGNvbXBsZXRlOicgOiBgJHtlcnJvckhlYWRlcn06YH08L01lc3NhZ2UuSGVhZGVyPlxuXHRcdFx0XHR7LyogUHV0IGl0IGluIGEgc2VnbWVudCB0byBtYWtlIHN1cmUgdGhlIGVycm9yTWVzc2FnZSBpc24ndCB0b28gYmlnIHdoZW4gdGhlcmUgYXJlIGEgbG90IG9mIGVycm9ycyAqL31cblx0XHRcdFx0PFNlZ21lbnQgc3R5bGU9e3tvdmVyZmxvdzogJ2F1dG8nLCBtYXhIZWlnaHQ6IDEwMH19PlxuXHRcdFx0XHRcdHsoaGFzV2FybmluZ3MgPyB3YXJuaW5ncyA6IGVycm9ycykubWFwKG1zZyA9PiAoXG5cdFx0XHRcdFx0XHQ8ZGl2IGtleT17bXNnfT57bXNnfTwvZGl2PlxuXHRcdFx0XHRcdCkpfVxuXHRcdFx0XHQ8L1NlZ21lbnQ+XG5cdFx0XHQ8L01lc3NhZ2U+XG5cdFx0KTtcblx0fVxuXG5cdC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZmllbGQgaGFzIGFuIGVycm9yXG5cdGZ1bmN0aW9uIGZpZWxkRXJyb3IoZmllbGROYW1lOiBrZXlvZiBWYWx1ZXMgfCBzdHJpbmcgfCBudW1iZXIpIHtcblx0XHRyZXR1cm4gKCEhcHJvcGVydHkoZmllbGROYW1lKShmb3JtaWsudG91Y2hlZCkgfHwgZm9ybWlrLnN1Ym1pdENvdW50ID4gMCkgJiYgISFwcm9wZXJ0eShmaWVsZE5hbWUpKGZvcm1pay5lcnJvcnMpO1xuXHR9XG5cblx0Ly8gSGFuZGxlcyB0aGUgZm9ybSBzdWJtaXRcblx0ZnVuY3Rpb24gaGFuZGxlU3VibWl0KGU/OiBSZWFjdC5Gb3JtRXZlbnQ8SFRNTEZvcm1FbGVtZW50Pikge1xuXHRcdHNldEVycm9yQ2xlYXJlZChmYWxzZSk7XG5cdFx0Zm9ybWlrLmhhbmRsZVN1Ym1pdChlKTtcblx0fVxuXG5cdHJldHVybiB7XG5cdFx0Li4uZm9ybWlrLFxuXHRcdGhhc0Vycm9yczogaGFzRXJyb3JzICYmICFlcnJvckNsZWFyZWQsXG5cdFx0aGFzV2FybmluZ3MsXG5cdFx0aXNWYWxpZDogIWhhc1dhcm5pbmdzLFxuXHRcdGxvYWRpbmc6IGNvbmZpZy5sb2FkaW5nID8gY29uZmlnLmxvYWRpbmcgOiBmYWxzZSxcblx0XHRzdWJtaXREaXNhYmxlZDogaGFzV2FybmluZ3MgfHwgZm9ybWlrLmlzU3VibWl0dGluZyxcblx0XHRlcnJvck1hcmtlZENsZWFyZWQ6IGVycm9yQ2xlYXJlZCxcblx0XHRmb3JtRXJyb3I6IGhhc0Vycm9ycyAmJiAhaGFzV2FybmluZ3MgJiYgIWVycm9yQ2xlYXJlZCAmJiAhZm9ybWlrLmlzU3VibWl0dGluZywgLy8gQ29udmVuaWVuY2Vcblx0XHRyZW5kZXJXYXJuaW5ncyxcblx0XHRmaWVsZEVycm9yLFxuXHRcdGhhbmRsZVN1Ym1pdCxcblx0fTtcbn1cbiIsImltcG9ydCB7Q3JlZGl0Q2FyZENhcmROYW1lRW51bX0gZnJvbSAnQHRoeC95dXAtdHlwZXMnO1xuaW1wb3J0IGRlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCBSZWFjdCwge3VzZUVmZmVjdCwgdXNlU3RhdGV9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7TWFza2VkSW5wdXQsIE1hc2tlZElucHV0UHJvcHN9IGZyb20gJy4uL01hc2tlZElucHV0JztcblxuY29uc3QgZCA9IGRlYnVnKCd0aHguY29udHJvbHMuaW5wdXRzLkNyZWRpdENhcmRJbnB1dCcpO1xuXG5leHBvcnQgaW50ZXJmYWNlIENyZWRpdENhcmRJbnB1dFR5cGUge1xuXHRjYXJkVHlwZT86IChjYXJkVHlwZTogQ3JlZGl0Q2FyZENhcmROYW1lRW51bSB8IHVuZGVmaW5lZCkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIENyZWRpdENhcmRJbnB1dCh7Y2FyZFR5cGUsIC4uLnJlc3R9OiBDcmVkaXRDYXJkSW5wdXRUeXBlICYgT21pdDxNYXNrZWRJbnB1dFByb3BzLCAnbWFzayc+KSB7XG5cdGNvbnN0IFt0eXBlLCBzZXRUeXBlXSA9IHVzZVN0YXRlPENyZWRpdENhcmRDYXJkTmFtZUVudW0gfCB1bmRlZmluZWQ+KCk7XG5cblx0dXNlRWZmZWN0KCgpID0+IHtcblx0XHRpZiAoY2FyZFR5cGUpIGNhcmRUeXBlKHR5cGUpO1xuXHR9LCBbdHlwZV0pO1xuXG5cdGZ1bmN0aW9uIHZhbGlkYXRlKHZhbHVlQXJyYXk6IHN0cmluZ1tdKSB7XG5cdFx0Y29uc3QgY2FyZE51bWJlciA9IHZhbHVlQXJyYXkuZmlsdGVyKGIgPT4gYiAhPT0gJ18nICYmIGIgIT09ICcgJykuam9pbignJyk7XG5cblx0XHRpZiAoY2FyZE51bWJlclswXSA9PT0gJzQnKSB7XG5cdFx0XHQvLyB0ZXN0IHVzaW5nIDQxMTExMTExMTExMTExMTFcblx0XHRcdHNldFR5cGUoQ3JlZGl0Q2FyZENhcmROYW1lRW51bS5WaXNhKTtcblx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0KHBhcnNlSW50KGNhcmROdW1iZXIuc3Vic3RyKDAsIDIpLCAxMCkgPiA1MCAmJiBwYXJzZUludChjYXJkTnVtYmVyLnN1YnN0cigwLCAyKSwgMTApIDwgNTYpIHx8XG5cdFx0XHQocGFyc2VJbnQoY2FyZE51bWJlci5zdWJzdHIoMCwgMiksIDEwKSA+IDIyMjAgJiYgcGFyc2VJbnQoY2FyZE51bWJlci5zdWJzdHIoMCwgMiksIDEwKSA8IDI3MjEpXG5cdFx0KSB7XG5cdFx0XHQvLyB0ZXN0IHVzaW5nIDU1NTU1NTU1NTU1NTQ0NDQgfHwgMjIyMjQwNTM0MzI0ODg3N1xuXHRcdFx0c2V0VHlwZShDcmVkaXRDYXJkQ2FyZE5hbWVFbnVtLk1hc3RlckNhcmQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzZXRUeXBlKHVuZGVmaW5lZCk7XG5cdFx0fVxuXHRcdHJldHVybiBjYXJkTnVtYmVyLmxlbmd0aCA9PT0gMTY7XG5cdH1cblxuXHRjb25zdCBjcmVkaXRDYXJkTWFzazogTWFza2VkSW5wdXRQcm9wc1snbWFzayddID0ge1xuXHRcdG1hc2s6ICc5OTk5IDk5OTkgOTk5OSA5OTk5Jyxcblx0XHRpc0NvbXBsZXRlOiB2YWxpZGF0ZSxcblx0XHRhdXRvVW5tYXNrOiB0cnVlLFxuXHR9O1xuXG5cdHJldHVybiA8TWFza2VkSW5wdXQgbWFzaz17Y3JlZGl0Q2FyZE1hc2t9IHsuLi5yZXN0fSAvPjtcbn1cbiIsImV4cG9ydCB7Q3JlZGl0Q2FyZElucHV0fSBmcm9tICcuL0NyZWRpdENhcmRJbnB1dCc7XG5leHBvcnQgdHlwZSB7Q3JlZGl0Q2FyZElucHV0VHlwZX0gZnJvbSAnLi9DcmVkaXRDYXJkSW5wdXQnO1xuIiwiaW1wb3J0IGRlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCBJbnB1dG1hc2sgZnJvbSAnaW5wdXRtYXNrJztcbmltcG9ydCBSZWFjdCwge3VzZVJlZiwgdXNlRWZmZWN0fSBmcm9tICdyZWFjdCc7XG5pbXBvcnQge0lucHV0LCBJbnB1dFByb3BzfSBmcm9tICdzZW1hbnRpYy11aS1yZWFjdCc7XG4vLyBAdHMtaWdub3JlIFN0dWNrIGF0IDEuNCBiZWNhdXNlIDEuNSBkZXBlbmRzIG9uIEB0eXBlcy9yZWFjdCB3aGljaCBicmVha3MgZXZlcnl0aGluZ1xuaW1wb3J0IHVzZURlZXBDb21wYXJlRWZmZWN0IGZyb20gJ3VzZS1kZWVwLWNvbXBhcmUtZWZmZWN0JztcblxuY29uc3QgZCA9IGRlYnVnKCd0aHguY29udHJvbHMuaW5wdXRzLk1hc2tlZElucHV0Jyk7XG5cbi8qKlxuICogU2VlIHNvdXJjZSBjb2RlIGZvciBkZXRhaWxlZCBwcm9wIHR5cGVzIG9yIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vUm9iaW5IZXJib3RzL2pxdWVyeS5pbnB1dG1hc2t8aGVyZX0gZm9yIG1vcmUgaW5mby5cbiAqIEB0eXBlZGVmIHtPYmplY3R9IGlucHV0bWFza1Byb3BUeXBlc1xuICovXG5cbmV4cG9ydCBpbnRlcmZhY2UgTWFza2VkSW5wdXRQcm9wcyB7XG5cdG5hbWU/OiBzdHJpbmc7XG5cdHZhbHVlPzogc3RyaW5nO1xuXHRvbkNoYW5nZT86ICh2YWx1ZT86IHN0cmluZykgPT4gdm9pZDtcblx0b25CbHVyPzogKGV2ZW50OiBhbnkpID0+IHZvaWQ7XG5cdG1hc2s/OiBJbnB1dG1hc2suT3B0aW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE1hc2tlZElucHV0KHByb3BzOiBNYXNrZWRJbnB1dFByb3BzICYgT21pdDxJbnB1dFByb3BzLCAnb25DaGFuZ2UnPikge1xuXHRjb25zdCB7bmFtZSwgdmFsdWUsIG9uQ2hhbmdlLCBvbkJsdXIsIG1hc2ssIGRpc2FibGVkLCAuLi5yZXN0fSA9IHByb3BzO1xuXG5cdGNvbnN0IGlucHV0RWxlbWVudCA9IHVzZVJlZjxIVE1MSW5wdXRFbGVtZW50IHwgbnVsbD4obnVsbCk7XG5cdGNvbnN0IG1hc2tJbnN0YW5jZSA9IHVzZVJlZjxJbnB1dG1hc2suSW5zdGFuY2UgfCBudWxsPihudWxsKTtcblxuXHR1c2VEZWVwQ29tcGFyZUVmZmVjdCgoKSA9PiB7XG5cdFx0aWYgKCFpbnB1dEVsZW1lbnQuY3VycmVudCkgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgZ2V0IGlucHV0IGVsZW1lbnQnKTtcblxuXHRcdGQoJ0NyZWF0aW5nIGlucHV0IG1hc2sgaW5zdGFuY2UnKTtcblx0XHRtYXNrSW5zdGFuY2UuY3VycmVudCA9IG5ldyBJbnB1dG1hc2soe1xuXHRcdFx0Li4ubWFzayxcblx0XHRcdG9uY29tcGxldGUoKSB7XG5cdFx0XHRcdGlmIChvbkNoYW5nZSkgb25DaGFuZ2UoaW5wdXRFbGVtZW50LmN1cnJlbnQ/LnZhbHVlKTtcblx0XHRcdFx0aWYgKG1hc2s/Lm9uY29tcGxldGUpIG1hc2sub25jb21wbGV0ZSgpO1xuXHRcdFx0fSxcblx0XHRcdG9uY2xlYXJlZCgpIHtcblx0XHRcdFx0aWYgKG9uQ2hhbmdlKSBvbkNoYW5nZSgpO1xuXHRcdFx0XHRpZiAobWFzaz8ub25jbGVhcmVkKSBtYXNrLm9uY2xlYXJlZCgpO1xuXHRcdFx0fSxcblx0XHRcdG9uaW5jb21wbGV0ZSgpIHtcblx0XHRcdFx0aWYgKG9uQ2hhbmdlKSBvbkNoYW5nZShpbnB1dEVsZW1lbnQuY3VycmVudD8udmFsdWUpO1xuXHRcdFx0XHRpZiAobWFzaz8ub25pbmNvbXBsZXRlKSBtYXNrLm9uaW5jb21wbGV0ZSgpO1xuXHRcdFx0fSxcblx0XHR9KTtcblx0XHRtYXNrSW5zdGFuY2UuY3VycmVudC5tYXNrKGlucHV0RWxlbWVudC5jdXJyZW50KTtcblxuXHRcdHJldHVybiAoKSA9PiB7XG5cdFx0XHRpZiAobWFza0luc3RhbmNlLmN1cnJlbnQpIHtcblx0XHRcdFx0ZCgnQ2xlYW5pbmcgdXAgaW5wdXQgbWFzayBpbnN0YW5jZScpO1xuXHRcdFx0XHRtYXNrSW5zdGFuY2UuY3VycmVudC5yZW1vdmUoKTtcblx0XHRcdFx0bWFza0luc3RhbmNlLmN1cnJlbnQgPSBudWxsO1xuXHRcdFx0fVxuXHRcdH07XG5cdH0sIFttYXNrXSk7XG5cblx0Ly8gSWYgd2UgY2hhbmdlIHRoZSB2YWx1ZSBwcm9wIHdlIG5lZWQgdG8gc3luYyB0aGUgRE9NIHZhbHVlIHRvIGRpc3BsYXkgdGhlIG5ldyB2YWx1ZVxuXHR1c2VFZmZlY3QoKCkgPT4ge1xuXHRcdGlmIChpbnB1dEVsZW1lbnQuY3VycmVudCAmJiBpbnB1dEVsZW1lbnQuY3VycmVudD8udmFsdWUgIT09IHZhbHVlICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGQoJ1ZhbHVlIGlzIGNoYW5naW5nOicsIHZhbHVlKTtcblx0XHRcdGlucHV0RWxlbWVudC5jdXJyZW50LnZhbHVlID0gdmFsdWU7XG5cdFx0fVxuXHR9LCBbdmFsdWVdKTtcblxuXHRyZXR1cm4gKFxuXHRcdDxJbnB1dCB7Li4ucmVzdH0+XG5cdFx0XHQ8aW5wdXQgZGlzYWJsZWQ9e2Rpc2FibGVkfSBuYW1lPXtuYW1lfSByZWY9e2lucHV0RWxlbWVudH0gb25CbHVyPXtvbkJsdXJ9IC8+XG5cdFx0PC9JbnB1dD5cblx0KTtcbn1cbiIsImV4cG9ydCB7TWFza2VkSW5wdXR9IGZyb20gJy4vTWFza2VkSW5wdXQnO1xuZXhwb3J0IHR5cGUge01hc2tlZElucHV0UHJvcHN9IGZyb20gJy4vTWFza2VkSW5wdXQnO1xuIiwiaW1wb3J0IGRlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQge01hc2tlZElucHV0LCBNYXNrZWRJbnB1dFByb3BzfSBmcm9tICcuLi9NYXNrZWRJbnB1dCc7XG5cbmNvbnN0IGQgPSBkZWJ1ZygndGh4LmNvbnRyb2xzLmlucHV0cy5QaG9uZUlucHV0Jyk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGhvbmVJbnB1dFByb3BzIHtcblx0ZXh0ZW5zaW9uPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFBob25lSW5wdXQocHJvcHM6IFBob25lSW5wdXRQcm9wcyAmIE9taXQ8TWFza2VkSW5wdXRQcm9wcywgJ21hc2snPikge1xuXHRjb25zdCB7ZXh0ZW5zaW9uLCAuLi5yZXN0fSA9IHByb3BzO1xuXHRjb25zdCBtYXNrID0ge1xuXHRcdG1hc2s6IGV4dGVuc2lvbiA/ICcoKDk5OSkgOTk5LTk5OTlbIHg5OTk5XSl8KCs5ICg5OTkpIDk5OS05OTk5WyB4OTk5OV0pJyA6ICcoKDk5OSkgOTk5LTk5OTkpfCggKzkgKDk5OSkgOTk5LTk5OTkpJyxcblx0XHRncmVlZHk6IGZhbHNlLFxuXHRcdGF1dG9Vbm1hc2s6IHRydWUsXG5cdH07XG5cblx0cmV0dXJuIDxNYXNrZWRJbnB1dCB7Li4ucmVzdH0gbWFzaz17bWFza30gLz47XG59XG4iLCJleHBvcnQge1Bob25lSW5wdXR9IGZyb20gJy4vUGhvbmVJbnB1dCc7XG5leHBvcnQgdHlwZSB7UGhvbmVJbnB1dFByb3BzfSBmcm9tICcuL1Bob25lSW5wdXQnO1xuIiwiaW1wb3J0IGRlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCBSZWFjdCwge0NoaWxkcmVuLCBjbG9uZUVsZW1lbnR9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7Rm9ybSwgUmFkaW8sIEZvcm1SYWRpbywgRm9ybUdyb3VwUHJvcHN9IGZyb20gJ3NlbWFudGljLXVpLXJlYWN0JztcblxuY29uc3QgZCA9IGRlYnVnKCd0aHguY29udHJvbHMuaW5wdXRzLlJhZGlvR3JvdXAnKTtcblxuZXhwb3J0IGludGVyZmFjZSBSYWRpb0dyb3VwUHJvcHMge1xuXHRjaGlsZHJlbj86IEpTWC5FbGVtZW50W10gfCBKU1guRWxlbWVudDtcblx0b25DaGFuZ2U/OiAodmFsdWU/OiBzdHJpbmcgfCBudW1iZXIpID0+IHZvaWQ7XG5cdHZhbHVlPzogc3RyaW5nIHwgbnVtYmVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gUmFkaW9Hcm91cChwcm9wczogUmFkaW9Hcm91cFByb3BzICYgT21pdDxGb3JtR3JvdXBQcm9wcywgJ2NoaWxkcmVuJz4pIHtcblx0Y29uc3Qge2NoaWxkcmVuLCBvbkNoYW5nZSwgdmFsdWUsIC4uLnJlc3R9ID0gcHJvcHM7XG5cblx0cmV0dXJuIChcblx0XHQ8Rm9ybS5Hcm91cCB7Li4ucmVzdH0+XG5cdFx0XHR7Q2hpbGRyZW4ubWFwKHByb3BzLmNoaWxkcmVuLCBjaGlsZCA9PiB7XG5cdFx0XHRcdGlmIChjaGlsZD8udHlwZSA9PT0gRm9ybVJhZGlvIHx8IGNoaWxkPy50eXBlID09PSBSYWRpbyB8fCBjaGlsZD8udHlwZSA9PT0gRm9ybS5SYWRpbykge1xuXHRcdFx0XHRcdHJldHVybiBjbG9uZUVsZW1lbnQoY2hpbGQsIHtcblx0XHRcdFx0XHRcdG9uQ2hhbmdlOiAoZXY6IGFueSwgYXJnczoge3ZhbHVlPzogc3RyaW5nIHwgbnVtYmVyfSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRpZiAob25DaGFuZ2UpIG9uQ2hhbmdlKGFyZ3MudmFsdWUpO1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGNoZWNrZWQ6IHZhbHVlID09PSBjaGlsZC5wcm9wcy52YWx1ZSxcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gY2hpbGQ7XG5cdFx0XHR9KX1cblx0XHQ8L0Zvcm0uR3JvdXA+XG5cdCk7XG59XG4iLCJleHBvcnQge1JhZGlvR3JvdXB9IGZyb20gJy4vUmFkaW9Hcm91cCc7XG5leHBvcnQgdHlwZSB7UmFkaW9Hcm91cFByb3BzfSBmcm9tICcuL1JhZGlvR3JvdXAnO1xuIiwiaW1wb3J0IGRlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCBSZWFjdCwge3VzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZX0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtTY3JpcHRlbENvbnRleHR9IGZyb20gJy4vU2NyaXB0ZWxDb250ZXh0JztcbmltcG9ydCB7U2NyaXB0ZWxTb2NrZXR9IGZyb20gJy4vc2NyaXB0ZWwnO1xuaW1wb3J0IHR5cGUge1NjcmlwdGVsUGVuU3R5bGV9IGZyb20gJy4vc2NyaXB0ZWwvZW51bXMnO1xuaW1wb3J0IHR5cGUge1JlbmRlcmVkSW1hZ2V9IGZyb20gJy4vc2NyaXB0ZWwvbWVzc2FnZXMnO1xuXG5jb25zdCBkID0gZGVidWcoJ3RoeC5jb250cm9scy5pbnB1dHMuU2NyaXB0ZWwnKTtcblxuZXhwb3J0IGludGVyZmFjZSBTY3JpcHRlbFByb3BzIHtcblx0b21uaXNjcmlwdFVybD86IHN0cmluZzsgLy8gRGVmYXVsdHMgdG8gJ3dzOi8vbG9jYWxob3N0OjgwODAnXG5cdGltYWdlVHlwZT86IHN0cmluZzsgLy8gRGVmYXVsdHMgdG8gJ2ltYWdlL3N2Zyt4bWwnLlxuXHRzY2FsZT86IG51bWJlcjsgLy8gRGVmYXVsdHMgdG8gMVxuXHRjcm9wPzogYm9vbGVhbjsgLy8gRGVmYXVsdHMgdG8gZmFsc2Vcblx0cGVuU3R5bGU/OiBTY3JpcHRlbFBlblN0eWxlOyAvLyBEZWZhdWx0cyB0byAnUGxhaW5QZW5TdHlsZSdcblx0Y2hpbGRyZW46IEpTWC5FbGVtZW50IHwgSlNYLkVsZW1lbnRbXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFNjcmlwdGVsKHtvbW5pc2NyaXB0VXJsLCBpbWFnZVR5cGUsIHNjYWxlLCBjcm9wLCBwZW5TdHlsZSwgY2hpbGRyZW59OiBTY3JpcHRlbFByb3BzKSB7XG5cdGNvbnN0IHNvY2tldCA9IHVzZVJlZjxTY3JpcHRlbFNvY2tldD4oKTtcblx0Y29uc3QgW3JlbmRlciwgc2V0UmVuZGVyXSA9IHVzZVN0YXRlPFJlbmRlcmVkSW1hZ2U+KCk7XG5cdGNvbnN0IFtsb2FkaW5nLCBzZXRMb2FkaW5nXSA9IHVzZVN0YXRlPGJvb2xlYW4+KGZhbHNlKTtcblx0Y29uc3QgW2lzU2lnbmluZywgc2V0SXNTaWduaW5nXSA9IHVzZVN0YXRlPGJvb2xlYW4+KGZhbHNlKTtcblxuXHR1c2VFZmZlY3QoKCkgPT4ge1xuXHRcdHNvY2tldC5jdXJyZW50ID0gbmV3IFNjcmlwdGVsU29ja2V0KHtcblx0XHRcdG9tbmlzY3JpcHRVcmwsXG5cdFx0XHRpbWFnZVR5cGUsXG5cdFx0XHRzY2FsZSxcblx0XHRcdGNyb3AsXG5cdFx0XHRwZW5TdHlsZSxcblx0XHR9KTtcblxuXHRcdHNvY2tldC5jdXJyZW50Lm9uKCdyZW5kZXInLCBtc2cgPT4ge1xuXHRcdFx0c2V0UmVuZGVyKG1zZyk7XG5cdFx0XHRzZXRMb2FkaW5nKGZhbHNlKTtcblx0XHRcdHNldFJlbmRlcih1bmRlZmluZWQpOyAvLyB0b2RvIGxvb2sgYXQgdGhpcyBpbiBmdXR1cmVcblx0XHR9KTtcblx0XHRzb2NrZXQuY3VycmVudC5vbignb2tCdXR0b25Eb3duJywgKCkgPT4ge1xuXHRcdFx0c2V0TG9hZGluZyh0cnVlKTtcblx0XHR9KTtcblx0XHRzb2NrZXQuY3VycmVudC5vbignY2FuY2VsJywgKCkgPT4ge1xuXHRcdFx0c2V0TG9hZGluZyhmYWxzZSk7XG5cdFx0XHRzZXRSZW5kZXIodW5kZWZpbmVkKTtcblx0XHR9KTtcblx0XHRzb2NrZXQuY3VycmVudC5vbigncGVuTW92ZScsICgpID0+IHtcblx0XHRcdHNldElzU2lnbmluZyh0cnVlKTtcblx0XHR9KTtcblx0XHRzb2NrZXQuY3VycmVudC5vbigncGVuVXAnLCAoKSA9PiB7XG5cdFx0XHRzZXRJc1NpZ25pbmcoZmFsc2UpO1xuXHRcdH0pO1xuXG5cdFx0cmV0dXJuICgpID0+IHtcblx0XHRcdGlmIChzb2NrZXQuY3VycmVudCkgc29ja2V0LmN1cnJlbnQuY2xvc2UoKTtcblx0XHR9O1xuXHR9LCBbb21uaXNjcmlwdFVybCwgaW1hZ2VUeXBlLCBzY2FsZSwgY3JvcCwgcGVuU3R5bGVdKTtcblxuXHRyZXR1cm4gPFNjcmlwdGVsQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17e3NvY2tldCwgcmVuZGVySW1hZ2U6IHJlbmRlciwgbG9hZGluZywgaXNTaWduaW5nfX0+e2NoaWxkcmVufTwvU2NyaXB0ZWxDb250ZXh0LlByb3ZpZGVyPjtcbn1cbiIsImltcG9ydCBSZWFjdCwge011dGFibGVSZWZPYmplY3R9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB0eXBlIHtTY3JpcHRlbFNvY2tldH0gZnJvbSAnLi9zY3JpcHRlbCc7XG5pbXBvcnQgdHlwZSB7UmVuZGVyZWRJbWFnZX0gZnJvbSAnLi9zY3JpcHRlbC9tZXNzYWdlcyc7XG5cbmV4cG9ydCBjb25zdCBTY3JpcHRlbENvbnRleHQgPSBSZWFjdC5jcmVhdGVDb250ZXh0PFxuXHR7c29ja2V0OiBNdXRhYmxlUmVmT2JqZWN0PFNjcmlwdGVsU29ja2V0IHwgdW5kZWZpbmVkPjsgcmVuZGVySW1hZ2U6IFJlbmRlcmVkSW1hZ2UgfCB1bmRlZmluZWQ7IGxvYWRpbmc6IGJvb2xlYW47IGlzU2lnbmluZzogYm9vbGVhbn0gfCB1bmRlZmluZWRcbj4odW5kZWZpbmVkKTtcbiIsImV4cG9ydCB7U2NyaXB0ZWx9IGZyb20gJy4vU2NyaXB0ZWwnO1xuZXhwb3J0IHR5cGUge1NjcmlwdGVsUHJvcHN9IGZyb20gJy4vU2NyaXB0ZWwnO1xuZXhwb3J0IHt3aXRoU2NyaXB0ZWx9IGZyb20gJy4vd2l0aFNjcmlwdGVsJztcbmV4cG9ydCB7U2NyaXB0ZWxQZW5TdHlsZSwgU2NyaXB0ZWxNZXNzYWdlQ2xhc3N9IGZyb20gJy4vc2NyaXB0ZWwvZW51bXMnO1xuIiwiZXhwb3J0IGVudW0gU2NyaXB0ZWxQZW5TdHlsZSB7XG5cdFBsYWluID0gJ1BsYWluUGVuU3R5bGUnLFxuXHRDaGlzZWwgPSAnQ2hpc2VsUGVuU3R5bGUnLFxuXHRJbmt3ZWxsID0gJ0lua3dlbGxQZW5TdHlsZScsXG59XG5cbmV4cG9ydCBlbnVtIFNjcmlwdGVsTWVzc2FnZUNsYXNzIHtcblx0Q29ubmVjdGlvbk9wZW4gPSAnQ29ubmVjdGlvbk9wZW4nLFxuXHREZXZpY2VPcGVuUmVxdWVzdCA9ICdEZXZpY2VPcGVuUmVxdWVzdCcsXG5cdERldmljZU9wZW5SZXNwb25zZSA9ICdEZXZpY2VPcGVuUmVzcG9uc2UnLFxuXHRSZW5kZXJlZEltYWdlID0gJ1JlbmRlcmVkSW1hZ2UnLFxuXHRTY3JpcHRlbEV4Y2VwdGlvbiA9ICdTY3JpcHRlbEV4Y2VwdGlvbicsXG5cdEJ1dHRvbkRvd24gPSAnQnV0dG9uRG93bicsXG5cdEJ1dHRvblByZXNzID0gJ0J1dHRvblByZXNzJyxcblx0UGVuTW92ZSA9ICdQZW5Nb3ZlJyxcblx0UGVuVXAgPSAnUGVuVXAnLFxufVxuIiwiLyogZ2xvYmFscyBXZWJTb2NrZXQ6IHRydWUgKi9cbmltcG9ydCBkZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5pbXBvcnQgRXZlbnRFbWl0dGVyIGZyb20gJ2V2ZW50ZW1pdHRlcjMnO1xuaW1wb3J0IHtTY3JpcHRlbE1lc3NhZ2VDbGFzcywgU2NyaXB0ZWxQZW5TdHlsZX0gZnJvbSAnLi9lbnVtcyc7XG5pbXBvcnQgdHlwZSB7Q29ubmVjdGlvbk9wZW4sIERldmljZU9wZW5SZXNwb25zZSwgTWVzc2FnZSwgUmVuZGVyZWRJbWFnZX0gZnJvbSAnLi9tZXNzYWdlcyc7XG5cbmNvbnN0IGQgPSBkZWJ1ZygndGh4LmNvbnRyb2xzLmlucHV0cy5TY3JpcHRlbC5zY3JpcHRlbCcpO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNjcmlwdGVsU29ja2V0QXJncyB7XG5cdG9tbmlzY3JpcHRVcmw/OiBzdHJpbmc7IC8vIERlZmF1bHRzIHRvICd3czovL2xvY2FsaG9zdDo4MDgwJ1xuXHRpbWFnZVR5cGU/OiBzdHJpbmc7IC8vIERlZmF1bHRzIHRvICdpbWFnZS9zdmcreG1sJy5cblx0c2NhbGU/OiBudW1iZXI7IC8vIERlZmF1bHRzIHRvIDFcblx0Y3JvcD86IGJvb2xlYW47IC8vIERlZmF1bHRzIHRvIGZhbHNlXG5cdHBlblN0eWxlPzogU2NyaXB0ZWxQZW5TdHlsZTsgLy8gRGVmYXVsdHMgdG8gJ1BsYWluUGVuU3R5bGUnXG5cdHJlbmRlcj86ICgpID0+IHZvaWQ7XG59XG5cbmZ1bmN0aW9uIHNlcnZlckNvbm5lY3RlZChtc2c6IENvbm5lY3Rpb25PcGVuLCBzb2NrZXQ6IFdlYlNvY2tldCkge1xuXHRkKCdTZXJ2ZXIgY29ubmVjdGVkJyk7XG5cdGlmIChtc2cuc2VydmVySW5mby5kZXZpY2VzLmxlbmd0aCA+IDApIHtcblx0XHQvLyBHcmFiIHRoZSBmaXJzdCBhdmFpbGFibGUgZGV2aWNlXG5cdFx0Y29uc3QgZGV2aWNlID0gbXNnLnNlcnZlckluZm8uZGV2aWNlc1swXTtcblx0XHRzb2NrZXQuc2VuZChcblx0XHRcdEpTT04uc3RyaW5naWZ5KHtcblx0XHRcdFx0X2NsYXNzOiAnRGV2aWNlT3BlblJlcXVlc3QnLFxuXHRcdFx0XHR1dWlkOiBkZXZpY2UudXVpZCxcblx0XHRcdH0pLFxuXHRcdCk7XG5cdH1cbn1cblxuZnVuY3Rpb24gZGV2aWNlQ29ubmVjdGVkKG1zZzogRGV2aWNlT3BlblJlc3BvbnNlLCBzb2NrZXQ6IFdlYlNvY2tldCwgYXJnczogU2NyaXB0ZWxTb2NrZXRBcmdzKSB7XG5cdGQoYERldmljZSBjb25uZWN0ZWQ6ICR7bXNnLmRldmljZS51dWlkfWApO1xuXHRjb25zdCB7aW1hZ2VUeXBlLCBzY2FsZSwgY3JvcCwgcGVuU3R5bGV9ID0gYXJncztcblx0c29ja2V0LnNlbmQoXG5cdFx0SlNPTi5zdHJpbmdpZnkoe1xuXHRcdFx0X2NsYXNzOiAnUmVuZGVyU2V0dGluZ3NVcGRhdGVSZXF1ZXN0Jyxcblx0XHRcdHJlbmRlclNldHRpbmdzOiB7XG5cdFx0XHRcdF9jbGFzczogJ1JlbmRlclNldHRpbmdzJyxcblx0XHRcdFx0dHlwZTogaW1hZ2VUeXBlIHx8ICdpbWFnZS9zdmcreG1sJyxcblx0XHRcdFx0c2NhbGU6IHNjYWxlIHx8IDEsXG5cdFx0XHRcdGNyb3A6IGNyb3AgfHwgZmFsc2UsXG5cdFx0XHRcdHBlblN0eWxlOiBwZW5TdHlsZVxuXHRcdFx0XHRcdD8ge1xuXHRcdFx0XHRcdFx0XHRyZW5kZXJGdW5jdGlvbjogcGVuU3R5bGUsXG5cdFx0XHRcdFx0ICB9XG5cdFx0XHRcdFx0OiB7XG5cdFx0XHRcdFx0XHRcdHJlbmRlckZ1bmN0aW9uOiBTY3JpcHRlbFBlblN0eWxlLlBsYWluLFxuXHRcdFx0XHRcdCAgfSxcblx0XHRcdH0sXG5cdFx0fSksXG5cdCk7XG59XG5cbmZ1bmN0aW9uIHJlbmRlcihtc2c6IFJlbmRlcmVkSW1hZ2UsIGFyZ3M6IFNjcmlwdGVsU29ja2V0QXJncywgZXZlbnRFbWl0dGVyOiBFdmVudEVtaXR0ZXIpIHtcblx0ZChgUmVuZGVyZWQgaW1hZ2U6ICR7bXNnLnR5cGV9ICR7bXNnLndpZHRofXgke21zZy5oZWlnaHR9YCk7XG5cdGV2ZW50RW1pdHRlci5lbWl0KCdyZW5kZXInLCBtc2cpO1xufVxuXG5leHBvcnQgY2xhc3MgU2NyaXB0ZWxTb2NrZXQgZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xuXHRwcml2YXRlIHNvY2tldDogV2ViU29ja2V0O1xuXHRwcml2YXRlIG9wdGlvbnM6IFNjcmlwdGVsU29ja2V0QXJncztcblxuXHRjb25zdHJ1Y3RvcihhcmdzOiBTY3JpcHRlbFNvY2tldEFyZ3MpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy5vcHRpb25zID0gYXJncztcblxuXHRcdHRoaXMuc29ja2V0ID0gbmV3IFdlYlNvY2tldChhcmdzLm9tbmlzY3JpcHRVcmwgfHwgJ3dzOi8vbG9jYWxob3N0OjgwODAnKTtcblxuXHRcdHRoaXMuc29ja2V0Lm9ub3BlbiA9ICgpID0+IHtcblx0XHRcdGQoJ1NvY2tldCBvcGVuJyk7XG5cdFx0fTtcblxuXHRcdHRoaXMuc29ja2V0Lm9uY2xvc2UgPSAoKSA9PiB7XG5cdFx0XHRkKCdTb2NrZXQgY2xvc2VkJyk7XG5cdFx0fTtcblxuXHRcdHRoaXMuc29ja2V0Lm9ubWVzc2FnZSA9IGV2ID0+IHtcblx0XHRcdGNvbnN0IG1zZyA9IEpTT04ucGFyc2UoZXYuZGF0YSkgYXMgTWVzc2FnZTtcblx0XHRcdGlmICghbXNnLl9jbGFzcykgcmV0dXJuOyAvLyBBIG1lc3NhZ2Ugd2l0aCBubyBjbGFzcy5cblxuXHRcdFx0c3dpdGNoIChtc2cuX2NsYXNzKSB7XG5cdFx0XHRcdGNhc2UgU2NyaXB0ZWxNZXNzYWdlQ2xhc3MuQ29ubmVjdGlvbk9wZW46XG5cdFx0XHRcdFx0c2VydmVyQ29ubmVjdGVkKG1zZywgdGhpcy5zb2NrZXQpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFNjcmlwdGVsTWVzc2FnZUNsYXNzLkRldmljZU9wZW5SZXNwb25zZTpcblx0XHRcdFx0XHRkZXZpY2VDb25uZWN0ZWQobXNnLCB0aGlzLnNvY2tldCwgdGhpcy5vcHRpb25zKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBTY3JpcHRlbE1lc3NhZ2VDbGFzcy5SZW5kZXJlZEltYWdlOlxuXHRcdFx0XHRcdHJlbmRlcihtc2csIHRoaXMub3B0aW9ucywgdGhpcyk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgU2NyaXB0ZWxNZXNzYWdlQ2xhc3MuU2NyaXB0ZWxFeGNlcHRpb246XG5cdFx0XHRcdFx0ZChgU2NyaXB0ZWwgRXhjZXB0aW9uIEVycm9yOiAke21zZy5tZXNzYWdlfWApO1xuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgU2NyaXB0ZWxNZXNzYWdlQ2xhc3MuQnV0dG9uUHJlc3M6XG5cdFx0XHRcdFx0aWYgKG1zZy5sYWJlbCA9PT0gJ0NhbmNlbCcpIHRoaXMuZW1pdCgnY2FuY2VsJyk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgU2NyaXB0ZWxNZXNzYWdlQ2xhc3MuQnV0dG9uRG93bjpcblx0XHRcdFx0XHRpZiAobXNnLmxhYmVsID09PSAnT0snKSB0aGlzLmVtaXQoJ29rQnV0dG9uRG93bicpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFNjcmlwdGVsTWVzc2FnZUNsYXNzLlBlbk1vdmU6XG5cdFx0XHRcdFx0dGhpcy5lbWl0KCdwZW5Nb3ZlJyk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgU2NyaXB0ZWxNZXNzYWdlQ2xhc3MuUGVuVXA6XG5cdFx0XHRcdFx0dGhpcy5lbWl0KCdwZW5VcCcpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0fVxuXHRcdH07XG5cdH1cblxuXHRjYWxpYnJhdGUoKSB7XG5cdFx0ZCgnY2FsaWJyYXRlJyk7XG5cdFx0dGhpcy5zb2NrZXQuc2VuZChKU09OLnN0cmluZ2lmeSh7X2NsYXNzOiAnRm9yY2VSZWNhbGlicmF0ZSd9KSk7XG5cdH1cblxuXHRjbG9zZSgpIHtcblx0XHR0aGlzLnNvY2tldC5jbG9zZSgpO1xuXHR9XG59XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtTY3JpcHRlbCwgU2NyaXB0ZWxQcm9wc30gZnJvbSAnLi9TY3JpcHRlbCc7XG5cbi8qKlxuICogQSBIb0MgdGhhdCBwcm92aWRlcyBhIGNvbm5lY3Rpb24gdG8gYSBTY3JpcHRlbCBPbW5pc2NyaXB0IGRldmljZS5cbiAqIFlvdSBjYW4gb25seSBoYXZlIGEgc2luZ2xlIGNvbm5lY3Rpb24gb3BlbiBhdCBhIHRpbWUuXG4gKiBAcGFyYW0gV3JhcHBlZENvbXBvbmVudFxuICogQHJldHVybiB7T2JqZWN0fVxuICovXG5leHBvcnQgZnVuY3Rpb24gd2l0aFNjcmlwdGVsKFdyYXBwZWRDb21wb25lbnQ6IGFueSwgc2NyaXB0ZWxQcm9wczogU2NyaXB0ZWxQcm9wcykge1xuXHRyZXR1cm4gKHByb3BzOiBhbnkpID0+IChcblx0XHQ8U2NyaXB0ZWwgey4uLnNjcmlwdGVsUHJvcHN9PlxuXHRcdFx0PFdyYXBwZWRDb21wb25lbnQgey4uLnByb3BzfSAvPlxuXHRcdDwvU2NyaXB0ZWw+XG5cdCk7XG59XG4iLCJpbXBvcnQgdHlwZSB7U2NyaXB0ZWxTY2hlbWFUeXBlfSBmcm9tICdAdGh4L3l1cC10eXBlcyc7XG5pbXBvcnQgZGVidWcgZnJvbSAnZGVidWcnO1xuaW1wb3J0IFJlYWN0LCB7dXNlQ29udGV4dCwgdXNlRWZmZWN0LCB1c2VTdGF0ZX0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtCdXR0b24sIEltYWdlfSBmcm9tICdzZW1hbnRpYy11aS1yZWFjdCc7XG5pbXBvcnQge1NjcmlwdGVsQ29udGV4dH0gZnJvbSAnLi4vU2NyaXB0ZWwvU2NyaXB0ZWxDb250ZXh0JztcblxuY29uc3QgZCA9IGRlYnVnKCd0aHguY29udHJvbHMuaW5wdXRzLlNjcmlwdGVsSW5wdXQnKTtcblxuZXhwb3J0IGludGVyZmFjZSBTY3JpcHRlbElucHV0UHJvcHMge1xuXHR2YWx1ZT86IFNjcmlwdGVsU2NoZW1hVHlwZTtcblx0b25DaGFuZ2U/OiAodmFsdWU/OiBTY3JpcHRlbFNjaGVtYVR5cGUpID0+IHZvaWQ7XG5cdGJ1dHRvblRleHQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBTY3JpcHRlbElucHV0KHByb3BzOiBTY3JpcHRlbElucHV0UHJvcHMpIHtcblx0Y29uc3Qge3ZhbHVlLCBvbkNoYW5nZSwgYnV0dG9uVGV4dCA9ICdFbnRlciBTaWduYXR1cmUnfSA9IHByb3BzO1xuXHRjb25zdCBjdHggPSB1c2VDb250ZXh0KFNjcmlwdGVsQ29udGV4dCk7XG5cblx0Y29uc3QgW2VudGVyU2lnbmF0dXJlLCBzZXRFbnRlclNpZ25hdHVyZV0gPSB1c2VTdGF0ZShmYWxzZSk7XG5cblx0dXNlRWZmZWN0KCgpID0+IHtcblx0XHRpZiAoZW50ZXJTaWduYXR1cmUpIHtcblx0XHRcdGlmIChvbkNoYW5nZSAmJiBjdHg/LnJlbmRlckltYWdlKSB7XG5cdFx0XHRcdHNldEVudGVyU2lnbmF0dXJlKGZhbHNlKTtcblx0XHRcdFx0aWYgKGN0eC5yZW5kZXJJbWFnZS50eXBlID09PSAnaW1hZ2Uvc3ZnK3htbCcgfHwgY3R4LnJlbmRlckltYWdlLnR5cGUgPT09ICdpbWFnZS9wbmcnKSB7XG5cdFx0XHRcdFx0b25DaGFuZ2Uoe1xuXHRcdFx0XHRcdFx0dHlwZTogY3R4LnJlbmRlckltYWdlLnR5cGUsXG5cdFx0XHRcdFx0XHR3aWR0aDogY3R4LnJlbmRlckltYWdlLndpZHRoLFxuXHRcdFx0XHRcdFx0aGVpZ2h0OiBjdHgucmVuZGVySW1hZ2UuaGVpZ2h0LFxuXHRcdFx0XHRcdFx0dGltZXN0YW1wOiBuZXcgRGF0ZSgpLFxuXHRcdFx0XHRcdFx0ZGF0YTogY3R4LnJlbmRlckltYWdlLmRhdGEsXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChvbkNoYW5nZSAmJiAhY3R4KSB7XG5cdFx0XHRcdG9uQ2hhbmdlKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LCBbY3R4XSk7XG5cblx0aWYgKGVudGVyU2lnbmF0dXJlKSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxkaXY+XG5cdFx0XHRcdDxkaXY+e2N0eD8uaXNTaWduaW5nID8gJ3NpZ25pbmcuLi4nIDogJ0VudGVyIGEgc2lnbmF0dXJlIGFuZCBjbGljayBPSy4nfTwvZGl2PlxuXHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0b25DbGljaz17KCkgPT4ge1xuXHRcdFx0XHRcdFx0c2V0RW50ZXJTaWduYXR1cmUoZmFsc2UpO1xuXHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0Y29sb3I9XCJibGFja1wiXG5cdFx0XHRcdFx0bG9hZGluZz17Y3R4Py5sb2FkaW5nfVxuXHRcdFx0XHRcdGRpc2FibGVkPXtjdHg/LmxvYWRpbmd9XG5cdFx0XHRcdD5cblx0XHRcdFx0XHRDYW5jZWxcblx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHRcdDxCdXR0b24gc2l6ZT1cIm1pbmlcIiBhcz1cImFcIiBiYXNpYyBvbkNsaWNrPXsoKSA9PiBjdHg/LnNvY2tldC5jdXJyZW50Py5jYWxpYnJhdGUoKX0gZGlzYWJsZWQ9e2N0eD8ubG9hZGluZ30+XG5cdFx0XHRcdFx0Q2FsaWJyYXRlXG5cdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0PC9kaXY+XG5cdFx0KTtcblx0fVxuXG5cdGlmICh2YWx1ZSAmJiB2YWx1ZS5kYXRhKSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxkaXY+XG5cdFx0XHRcdDxJbWFnZSBzaXplPVwibWVkaXVtXCIgc3JjPXt2YWx1ZS5kYXRhfSBib3JkZXJlZCAvPlxuXHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0c2l6ZT1cIm1pbmlcIlxuXHRcdFx0XHRcdGNvbXBhY3Rcblx0XHRcdFx0XHRvbkNsaWNrPXsoKSA9PiB7XG5cdFx0XHRcdFx0XHRzZXRFbnRlclNpZ25hdHVyZShmYWxzZSk7XG5cdFx0XHRcdFx0XHRpZiAob25DaGFuZ2UpIG9uQ2hhbmdlKCk7XG5cdFx0XHRcdFx0fX1cblx0XHRcdFx0PlxuXHRcdFx0XHRcdFJlc2V0XG5cdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0PC9kaXY+XG5cdFx0KTtcblx0fVxuXG5cdHJldHVybiA8QnV0dG9uIG9uQ2xpY2s9eygpID0+IHNldEVudGVyU2lnbmF0dXJlKHRydWUpfT57YnV0dG9uVGV4dH08L0J1dHRvbj47XG59XG4iLCJleHBvcnQge1NjcmlwdGVsSW5wdXR9IGZyb20gJy4vU2NyaXB0ZWxJbnB1dCc7XG5leHBvcnQgdHlwZSB7U2NyaXB0ZWxJbnB1dFByb3BzfSBmcm9tICcuL1NjcmlwdGVsSW5wdXQnO1xuIiwiaW1wb3J0IGRlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCBSZWFjdCwge3VzZVN0YXRlfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQge0J1dHRvbiwgSWNvbiwgTGFiZWwsIFBvcHVwfSBmcm9tICdzZW1hbnRpYy11aS1yZWFjdCc7XG5pbXBvcnQge01hc2tlZElucHV0LCBNYXNrZWRJbnB1dFByb3BzfSBmcm9tICcuLi9NYXNrZWRJbnB1dCc7XG5cbmNvbnN0IGQgPSBkZWJ1ZygndGh4LmNvbnRyb2xzLmlucHV0cy5TaW5JbnB1dCcpO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNpbklucHV0UHJvcHMge1xuXHRoYXNTaW46IGJvb2xlYW47XG59XG5cbi8vIGlmIHdlIGNsaWNrIGVkaXQgdGhlIHZhbHVlIGlzIHNldCB0byBhbiBlbXB0eSBzdHJpbmcuXG4vLyBpZiB3ZSBjbGljayBkZWxldGUgdGhlIHZhbHVlIGlzIHNldCB0byBhbiBlbXB0eSBzdHJpbmcuXG4vLyBpZiB3ZSBjbGljayBjYW5jZWwgdGhlIHZhbHVlIGlzIHNldCB0byB1bmRlZmluZWQuXG4vLyBpZiB3ZSBjaGFuZ2UgaXQgd2Ugc2V0IGl0IHRvIHRoZSBnaXZlbiBzdHJpbmcuXG5leHBvcnQgZnVuY3Rpb24gU2luSW5wdXQocHJvcHM6IFNpbklucHV0UHJvcHMgJiBPbWl0PE1hc2tlZElucHV0UHJvcHMsICdtYXNrJyB8ICduYW1lJz4pIHtcblx0Y29uc3Qge2hhc1Npbiwgb25DaGFuZ2UsIC4uLnJlc3R9ID0gcHJvcHM7XG5cdGNvbnN0IFtlZGl0LCBzZXRFZGl0XSA9IHVzZVN0YXRlKGZhbHNlKTtcblx0Y29uc3QgW2RvRGVsZXRlLCBzZXREb0RlbGV0ZV0gPSB1c2VTdGF0ZShmYWxzZSk7XG5cblx0ZnVuY3Rpb24gaGFuZGxlQ2hhbmdlKHZhbD86IHN0cmluZykge1xuXHRcdG9uQ2hhbmdlICYmIG9uQ2hhbmdlKHZhbCk7XG5cdH1cblxuXHQvLyBpZiB3ZSBoYXZlIGEgU0lOIGFuZCB3ZSBkb24ndCB3YW50IHRvIGVkaXRcblx0cmV0dXJuIGhhc1NpbiAmJiAhZWRpdCAmJiAhZG9EZWxldGUgPyAoXG5cdFx0PD5cblx0XHRcdDxMYWJlbCBzdHlsZT17e3dpZHRoOiAnMTAwJScsIGhlaWdodDogJzM2cHgnLCBwYWRkaW5nVG9wOiAnMTBweCd9fSBzaXplPVwibGFyZ2VcIiBjb2xvcj1cImdyZWVuXCI+XG5cdFx0XHRcdFNJTiBpcyBzYXZlZFxuXHRcdFx0PC9MYWJlbD5cblx0XHRcdDxQb3B1cFxuXHRcdFx0XHRjb250ZW50PVwiZWRpdFwiXG5cdFx0XHRcdHRyaWdnZXI9e1xuXHRcdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIlxuXHRcdFx0XHRcdFx0b25DbGljaz17KCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRzZXRFZGl0KHRydWUpO1xuXHRcdFx0XHRcdFx0XHRoYW5kbGVDaGFuZ2UoJycpO1xuXHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdGNvbG9yPVwib3JhbmdlXCJcblx0XHRcdFx0XHRcdGljb25cblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHQ8SWNvbiBuYW1lPVwiZWRpdFwiIC8+XG5cdFx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHRcdH1cblx0XHRcdC8+XG5cdFx0XHQ8UG9wdXBcblx0XHRcdFx0Y29udGVudD1cImRlbGV0ZVwiXG5cdFx0XHRcdHRyaWdnZXI9e1xuXHRcdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRcdG5lZ2F0aXZlXG5cdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCJcblx0XHRcdFx0XHRcdGljb25cblx0XHRcdFx0XHRcdG9uQ2xpY2s9eygpID0+IHtcblx0XHRcdFx0XHRcdFx0c2V0RG9EZWxldGUodHJ1ZSk7XG5cdFx0XHRcdFx0XHRcdGhhbmRsZUNoYW5nZSgnJyk7XG5cdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdDxJY29uIG5hbWU9XCJ0cmFzaCBhbHRlcm5hdGVcIiAvPlxuXHRcdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0XHR9XG5cdFx0XHQvPlxuXHRcdDwvPlxuXHQpIDogKFxuXHRcdC8vIGlmIHdlIGRvbnQgaGF2ZSBhIFNJTlxuXHRcdDw+XG5cdFx0XHQ8TWFza2VkSW5wdXQgey4uLnJlc3R9IG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9IG1hc2s9e3ttYXNrOiAnOTk5LTk5OS05OTknLCBncmVlZHk6IGZhbHNlLCBhdXRvVW5tYXNrOiB0cnVlfX0gLz5cblx0XHRcdHsvKiBpZiB3ZSBhcmUgZWRpdGluZyAqL31cblx0XHRcdHtlZGl0ICYmIChcblx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIlxuXHRcdFx0XHRcdG9uQ2xpY2s9eygpID0+IHtcblx0XHRcdFx0XHRcdHNldEVkaXQoZmFsc2UpO1xuXHRcdFx0XHRcdFx0aGFuZGxlQ2hhbmdlKHVuZGVmaW5lZCk7XG5cdFx0XHRcdFx0fX1cblx0XHRcdFx0PlxuXHRcdFx0XHRcdENhbmNlbFxuXHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdCl9XG5cdFx0XHR7ZG9EZWxldGUgJiYgKFxuXHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0Y29sb3I9XCJvcmFuZ2VcIlxuXHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIlxuXHRcdFx0XHRcdG9uQ2xpY2s9eygpID0+IHtcblx0XHRcdFx0XHRcdHNldERvRGVsZXRlKGZhbHNlKTtcblx0XHRcdFx0XHRcdGhhbmRsZUNoYW5nZSh1bmRlZmluZWQpO1xuXHRcdFx0XHRcdH19XG5cdFx0XHRcdD5cblx0XHRcdFx0XHRVbmRvXG5cdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0KX1cblx0XHQ8Lz5cblx0KTtcbn1cbiIsImV4cG9ydCB7U2luSW5wdXR9IGZyb20gJy4vU2luSW5wdXQnO1xuZXhwb3J0IHR5cGUge1NpbklucHV0UHJvcHN9IGZyb20gJy4vU2luSW5wdXQnO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7RHJvcGRvd259IGZyb20gJ3NlbWFudGljLXVpLXJlYWN0JztcbmltcG9ydCB0eXBlIHtEcm9wZG93blByb3BzfSBmcm9tICdzZW1hbnRpYy11aS1yZWFjdCc7XG5pbXBvcnQgdHlwZSB7VGFibGVDZWxsUHJvcHN9IGZyb20gJy4vVGFibGVJbnB1dCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBEcm9wZG93bkNlbGw8RCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+Pihkcm9wZG93blByb3BzOiBEcm9wZG93blByb3BzKSB7XG5cdHJldHVybiBmdW5jdGlvbiBEcm9wZG93bkNlbGxGbihwcm9wczogVGFibGVDZWxsUHJvcHM8RD4pIHtcblx0XHRjb25zdCB7XG5cdFx0XHR2YWx1ZSxcblx0XHRcdHJvdzoge2luZGV4OiByb3dJbmRleH0sXG5cdFx0XHRjb2x1bW46IHtpZH0sXG5cdFx0XHR1cGRhdGVEYXRhLFxuXHRcdH0gPSBwcm9wcztcblxuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycyxAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0XHRjb25zdCB7dmFsdWU6IHYsIG9uQ2hhbmdlLCAuLi5yZXN0fSA9IGRyb3Bkb3duUHJvcHM7XG5cblx0XHRyZXR1cm4gKFxuXHRcdFx0PERyb3Bkb3duXG5cdFx0XHRcdHsuLi5yZXN0fVxuXHRcdFx0XHR2YWx1ZT17dmFsdWV9XG5cdFx0XHRcdG9uQ2hhbmdlPXsoZXZlbnQsIHZhbCkgPT4ge1xuXHRcdFx0XHRcdHVwZGF0ZURhdGEocm93SW5kZXgsIGlkLCB2YWwudmFsdWUpO1xuXHRcdFx0XHRcdGlmIChvbkNoYW5nZSkgb25DaGFuZ2UoZXZlbnQsIHZhbCk7XG5cdFx0XHRcdH19XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH07XG59XG4iLCJpbXBvcnQgZGVidWcgZnJvbSAnZGVidWcnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB0eXBlIHtDZWxsUHJvcHMsIFJlbmRlcmVyfSBmcm9tICdyZWFjdC10YWJsZSc7XG5cbmNvbnN0IGQgPSBkZWJ1ZygndGh4LmNvbnRyb2xzLmlucHV0cy5UYWJsZUlucHV0LkhvdmVyQ2VsbCcpO1xuXG5pbnRlcmZhY2UgSG92ZXJDZWxsT3B0aW9uczxEIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+IHtcblx0QWN0aW9uOiBSZW5kZXJlcjxDZWxsUHJvcHM8RD4+O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gSG92ZXJDZWxsPEQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4ob3B0aW9uczogSG92ZXJDZWxsT3B0aW9uczxEPikge1xuXHRyZXR1cm4gZnVuY3Rpb24gSG92ZXJDZWxsRm4ocHJvcHM6IENlbGxQcm9wczxEPikge1xuXHRcdGNvbnN0IHtBY3Rpb259ID0gb3B0aW9ucztcblxuXHRcdC8vIEB0cy1leHBlY3QtZXJyb3Jcblx0XHRpZiAocHJvcHMuaG92ZXJSb3cgPT09IHByb3BzLnJvdy5pZCkge1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0PGRpdiBzdHlsZT17e3RleHRBbGlnbjogJ3JpZ2h0J319PlxuXHRcdFx0XHRcdHsvKiBAdHMtZXhwZWN0LWVycm9yICovfVxuXHRcdFx0XHRcdDxBY3Rpb24gey4uLnByb3BzfSAvPlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdCk7XG5cdFx0fVxuXHRcdHJldHVybiBudWxsO1xuXHR9O1xufVxuIiwiaW1wb3J0IHtmb3JtYXRNb25leX0gZnJvbSAnQHRoeC9tb25leSc7XG5pbXBvcnQgdHlwZSBNb25leSBmcm9tICdqcy1tb25leSc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHR5cGUge0NlbGxQcm9wc30gZnJvbSAncmVhY3QtdGFibGUnO1xuXG5pbnRlcmZhY2UgTW9uZXlDZWxsT3B0aW9uczxEIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+IHtcblx0LyoqIElmIHByb3ZpZGVkLCB0aGlzIGZ1bmN0aW9uIHdpbGwgb3ZlcnJpZGUgdGhlIE1vbmV5IHZhbHVlIGRpc3BsYXllZCAqL1xuXHRvdmVycmlkZVZhbHVlPzogKHByb3BzOiBDZWxsUHJvcHM8RCwgTW9uZXk+KSA9PiBNb25leTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE1vbmV5Q2VsbDxEIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KG9wdGlvbnM/OiBNb25leUNlbGxPcHRpb25zPEQ+KSB7XG5cdHJldHVybiBmdW5jdGlvbiBNb25leUNlbGxGbihwcm9wczogQ2VsbFByb3BzPEQsIE1vbmV5Pikge1xuXHRcdHJldHVybiA8ZGl2IHN0eWxlPXt7dGV4dEFsaWduOiAncmlnaHQnfX0+e2Zvcm1hdE1vbmV5KG9wdGlvbnM/Lm92ZXJyaWRlVmFsdWUgPyBvcHRpb25zLm92ZXJyaWRlVmFsdWUocHJvcHMpIDogcHJvcHMudmFsdWUpfTwvZGl2Pjtcblx0fTtcbn1cbiIsImltcG9ydCBkZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5pbXBvcnQgdHlwZSBNb25leSBmcm9tICdqcy1tb25leSc7XG5pbXBvcnQgUmVhY3QsIHt1c2VTdGF0ZX0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtNb25leUlucHV0fSBmcm9tICcuLi8uLi9tb25leS9Nb25leUlucHV0JztcbmltcG9ydCB0eXBlIHtUYWJsZUNlbGxQcm9wc30gZnJvbSAnLi9UYWJsZUlucHV0JztcbmltcG9ydCB0eXBlIHtBZGRSb3dPblRhYklmfSBmcm9tICcuL2FkZFJvd09uVGFiJztcbmltcG9ydCB7YWRkUm93T25UYWJ9IGZyb20gJy4vYWRkUm93T25UYWInO1xuXG5jb25zdCBkID0gZGVidWcoJ3RoeC5jb250cm9scy5pbnB1dHMuVGFibGVJbnB1dC5Nb25leUVkaXRDZWxsJyk7XG5cbmludGVyZmFjZSBNb25leUVkaXRDZWxsT3B0aW9uczxEIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+IHtcblx0LyoqIElmIGZ1bmN0aW9uIGlzIHByZXNlbnQsIGFuZCByZXR1cm5zIHRydWUsIHdpbGwgYWRkIGEgbmV3IHJvdyBpZiB0YWIgaXMgcHJlc3NlZCBvbiB0aGUgbGFzdCByb3cgKi9cblx0YWRkUm93T25UYWJJZj86IEFkZFJvd09uVGFiSWY8RCwgTW9uZXk+O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gTW9uZXlFZGl0Q2VsbDxEIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KG9wdHM/OiBNb25leUVkaXRDZWxsT3B0aW9uczxEPikge1xuXHRyZXR1cm4gZnVuY3Rpb24gTW9uZXlFZGl0Q2VsbEZuKHByb3BzOiBUYWJsZUNlbGxQcm9wczxELCBNb25leT4pIHtcblx0XHRjb25zdCB7XG5cdFx0XHR2YWx1ZTogaW5pdGlhbFZhbHVlLFxuXHRcdFx0cm93OiB7aW5kZXg6IHJvd0luZGV4fSxcblx0XHRcdGNvbHVtbjoge2lkfSxcblx0XHRcdHVwZGF0ZURhdGEsXG5cdFx0fSA9IHByb3BzO1xuXG5cdFx0Y29uc3QgW3ZhbHVlLCBzZXRWYWx1ZV0gPSB1c2VTdGF0ZShpbml0aWFsVmFsdWUpO1xuXG5cdFx0cmV0dXJuIChcblx0XHRcdDxNb25leUlucHV0XG5cdFx0XHRcdGZsdWlkXG5cdFx0XHRcdHRyYW5zcGFyZW50XG5cdFx0XHRcdHZhbHVlPXt2YWx1ZX1cblx0XHRcdFx0b25DaGFuZ2U9e3NldFZhbHVlfVxuXHRcdFx0XHRvbkJsdXI9eygpID0+IHtcblx0XHRcdFx0XHR1cGRhdGVEYXRhKHJvd0luZGV4LCBpZCwgdmFsdWUpO1xuXHRcdFx0XHR9fVxuXHRcdFx0XHRvbktleURvd249eyhldmVudDogS2V5Ym9hcmRFdmVudCkgPT4gYWRkUm93T25UYWIoZXZlbnQsIHZhbHVlLCBwcm9wcywgb3B0cz8uYWRkUm93T25UYWJJZil9XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH07XG59XG4iLCJpbXBvcnQge2Zvcm1hdE1vbmV5LCB0b01vbmV5fSBmcm9tICdAdGh4L21vbmV5JztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgdHlwZSB7SWRUeXBlLCBUYWJsZUluc3RhbmNlfSBmcm9tICdyZWFjdC10YWJsZSc7XG5cbmludGVyZmFjZSBNb25leVN1bUZvb3Rlck9wdGlvbnM8QSBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+PiB7XG5cdGlkOiBJZFR5cGU8QT47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBNb25leVN1bUZvb3RlcjxBIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KG9wdGlvbnM6IE1vbmV5U3VtRm9vdGVyT3B0aW9uczxBPikge1xuXHRjb25zdCB7aWR9ID0gb3B0aW9ucyB8fCB7fTtcblxuXHRyZXR1cm4gKGluZm86IFRhYmxlSW5zdGFuY2U8QT4pID0+IHtcblx0XHRjb25zdCBzdW0gPSBpbmZvLnJvd3MucmVkdWNlKChtZW1vLCByb3cpID0+IG1lbW8uYWRkKHJvdy52YWx1ZXNbaWRdKSwgdG9Nb25leSgpKTtcblx0XHRyZXR1cm4gPGRpdiBzdHlsZT17e3RleHRBbGlnbjogJ3JpZ2h0J319Pntmb3JtYXRNb25leShzdW0pfTwvZGl2Pjtcblx0fTtcbn1cbiIsImltcG9ydCBkZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5pbXBvcnQgUmVhY3QsIHt1c2VTdGF0ZX0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtJbnB1dCwgSW5wdXRQcm9wc30gZnJvbSAnc2VtYW50aWMtdWktcmVhY3QnO1xuaW1wb3J0IHR5cGUge1RhYmxlQ2VsbFByb3BzfSBmcm9tICcuL1RhYmxlSW5wdXQnO1xuaW1wb3J0IHR5cGUge0FkZFJvd09uVGFiSWZ9IGZyb20gJy4vYWRkUm93T25UYWInO1xuaW1wb3J0IHthZGRSb3dPblRhYn0gZnJvbSAnLi9hZGRSb3dPblRhYic7XG5cbmNvbnN0IGQgPSBkZWJ1ZygndGh4LmNvbnRyb2xzLmlucHV0cy5UYWJsZUlucHV0LlN0cmluZ0VkaXRDZWxsJyk7XG5cbmludGVyZmFjZSBTdHJpbmdFZGl0Q2VsbE9wdGlvbnM8RCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+PiB7XG5cdC8qKiBPdmVycmlkZSBTZW1hbnRpY1VJIElucHV0IHByb3BzICovXG5cdGlucHV0UHJvcHM/OiBJbnB1dFByb3BzO1xuXHQvKiogSWYgZnVuY3Rpb24gaXMgcHJlc2VudCwgYW5kIHJldHVybnMgdHJ1ZSwgd2lsbCBhZGQgYSBuZXcgcm93IGlmIHRhYiBpcyBwcmVzc2VkIG9uIHRoZSBsYXN0IHJvdyAqL1xuXHRhZGRSb3dPblRhYklmPzogQWRkUm93T25UYWJJZjxELCBzdHJpbmc+O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gU3RyaW5nRWRpdENlbGw8RCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+PihvcHRpb25zPzogU3RyaW5nRWRpdENlbGxPcHRpb25zPEQ+KSB7XG5cdGNvbnN0IHtpbnB1dFByb3BzLCBhZGRSb3dPblRhYklmfSA9IG9wdGlvbnMgfHwge307XG5cblx0cmV0dXJuIGZ1bmN0aW9uIFN0cmluZ0VkaXRDZWxsRm4ocHJvcHM6IFRhYmxlQ2VsbFByb3BzPEQsIHN0cmluZz4pIHtcblx0XHRjb25zdCB7XG5cdFx0XHR2YWx1ZTogaW5pdGlhbFZhbHVlLFxuXHRcdFx0cm93OiB7aW5kZXh9LFxuXHRcdFx0Y29sdW1uOiB7aWR9LFxuXHRcdFx0dXBkYXRlRGF0YSxcblx0XHR9ID0gcHJvcHM7XG5cblx0XHRjb25zdCBbdmFsdWUsIHNldFZhbHVlXSA9IHVzZVN0YXRlKGluaXRpYWxWYWx1ZSk7XG5cblx0XHRyZXR1cm4gKFxuXHRcdFx0PElucHV0XG5cdFx0XHRcdGZsdWlkXG5cdFx0XHRcdHRyYW5zcGFyZW50XG5cdFx0XHRcdHsuLi5pbnB1dFByb3BzfVxuXHRcdFx0XHR2YWx1ZT17dmFsdWV9XG5cdFx0XHRcdG9uQ2hhbmdlPXsoZXYsIHYpID0+IHtcblx0XHRcdFx0XHRzZXRWYWx1ZSh2LnZhbHVlKTtcblx0XHRcdFx0fX1cblx0XHRcdFx0b25CbHVyPXsoKSA9PiB7XG5cdFx0XHRcdFx0dXBkYXRlRGF0YShpbmRleCwgaWQsIHZhbHVlKTtcblx0XHRcdFx0fX1cblx0XHRcdFx0b25LZXlEb3duPXsoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IGFkZFJvd09uVGFiKGV2ZW50LCB2YWx1ZSwgcHJvcHMsIGFkZFJvd09uVGFiSWYpfVxuXHRcdFx0Lz5cblx0XHQpO1xuXHR9O1xufVxuIiwiaW1wb3J0IGRlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCB7RmllbGRBcnJheSwgRmllbGRBcnJheVJlbmRlclByb3BzfSBmcm9tICdmb3JtaWsnO1xuLyogZXNsaW50LWRpc2FibGUgcmVhY3QvanN4LWtleSAqL1xuaW1wb3J0IFJlYWN0LCB7dXNlTWVtbywgdXNlU3RhdGV9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7XG5cdENlbGxQcm9wR2V0dGVyLFxuXHRDZWxsUHJvcHMsXG5cdENvbHVtbixcblx0Rm9vdGVyR3JvdXBQcm9wR2V0dGVyLFxuXHRGb290ZXJQcm9wR2V0dGVyLFxuXHRIZWFkZXJHcm91cFByb3BHZXR0ZXIsXG5cdEhlYWRlclByb3BHZXR0ZXIsXG5cdFJvd1Byb3BHZXR0ZXIsXG5cdFRhYmxlQm9keVByb3BHZXR0ZXIsXG5cdHVzZVRhYmxlLFxufSBmcm9tICdyZWFjdC10YWJsZSc7XG5pbXBvcnQge1RhYmxlLCBUYWJsZVByb3BzfSBmcm9tICdzZW1hbnRpYy11aS1yZWFjdCc7XG5cbmNvbnN0IGQgPSBkZWJ1ZygndGh4LmNvbnRyb2xzLmlucHV0cy5UYWJsZUlucHV0Jyk7XG5cbnR5cGUgRGVmYXVsdFRhYmxlVHlwZSA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG5pbnRlcmZhY2UgVGFibGVJbnB1dFByb3BzPEEgZXh0ZW5kcyBEZWZhdWx0VGFibGVUeXBlPiB7XG5cdG5hbWU6IHN0cmluZztcblx0dmFsdWVzOiBBW107XG5cdGNvbHVtbnM6IENvbHVtbjxBPltdO1xuXHRzZXRGaWVsZFZhbHVlOiAoZmllbGQ6IHN0cmluZywgdmFsdWU6IGFueSwgc2hvdWxkVmFsaWRhdGU/OiBib29sZWFuIHwgdW5kZWZpbmVkKSA9PiB2b2lkO1xuXHRjcmVhdGVSb3c6ICgpID0+IEE7XG5cdHRhYmxlUHJvcHM/OiBUYWJsZVByb3BzO1xuXHRoZWFkZXJSb3dQcm9wcz86IEhlYWRlckdyb3VwUHJvcEdldHRlcjxBPjtcblx0aGVhZGVyQ2VsbFByb3BzPzogSGVhZGVyUHJvcEdldHRlcjxBPjtcblx0Zm9vdGVyUm93UHJvcHM/OiBGb290ZXJHcm91cFByb3BHZXR0ZXI8QT47XG5cdGZvb3RlckNlbGxQcm9wcz86IEZvb3RlclByb3BHZXR0ZXI8QT47XG5cdGJvZHlQcm9wcz86IFRhYmxlQm9keVByb3BHZXR0ZXI8QT47XG5cdHJvd1Byb3BzPzogUm93UHJvcEdldHRlcjxBPjtcblx0Y2VsbFByb3BzPzogQ2VsbFByb3BHZXR0ZXI8QT47XG59XG5cbmludGVyZmFjZSBUYWJsZUlucHV0VGFibGVQcm9wczxBIGV4dGVuZHMgRGVmYXVsdFRhYmxlVHlwZT4gZXh0ZW5kcyBUYWJsZUlucHV0UHJvcHM8QT4ge1xuXHRhcnJheUhlbHBlcnM6IEZpZWxkQXJyYXlSZW5kZXJQcm9wcztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUYWJsZUNlbGxQcm9wczxEIGV4dGVuZHMgRGVmYXVsdFRhYmxlVHlwZSwgViA9IGFueT4gZXh0ZW5kcyBDZWxsUHJvcHM8RCwgVj4ge1xuXHRhcnJheUhlbHBlcnM6IEZpZWxkQXJyYXlSZW5kZXJQcm9wcztcblx0YWRkUm93OiAoKSA9PiB2b2lkO1xuXHR1cGRhdGVEYXRhOiAoaW5kZXg6IG51bWJlciwgaWQ6IHN0cmluZywgdmFsdWU6IFYpID0+IHZvaWQ7XG59XG5cbmZ1bmN0aW9uIFRhYmxlSW5wdXRUYWJsZTxBIGV4dGVuZHMgRGVmYXVsdFRhYmxlVHlwZT4ocHJvcHM6IFRhYmxlSW5wdXRUYWJsZVByb3BzPEE+KSB7XG5cdGNvbnN0IHtcblx0XHRuYW1lLFxuXHRcdGNvbHVtbnMsXG5cdFx0dmFsdWVzLFxuXHRcdGFycmF5SGVscGVycyxcblx0XHRzZXRGaWVsZFZhbHVlLFxuXHRcdGNyZWF0ZVJvdyxcblx0XHR0YWJsZVByb3BzLFxuXHRcdGhlYWRlclJvd1Byb3BzLFxuXHRcdGhlYWRlckNlbGxQcm9wcyxcblx0XHRib2R5UHJvcHMsXG5cdFx0cm93UHJvcHMsXG5cdFx0Y2VsbFByb3BzLFxuXHRcdGZvb3RlckNlbGxQcm9wcyxcblx0XHRmb290ZXJSb3dQcm9wcyxcblx0fSA9IHByb3BzO1xuXHRjb25zdCBjb2xzID0gdXNlTWVtbygoKSA9PiBjb2x1bW5zLCBbY29sdW1uc10pO1xuXHRjb25zdCB2YWxzID0gdXNlTWVtbygoKSA9PiB2YWx1ZXMsIFt2YWx1ZXNdKTtcblx0Y29uc3QgW2hvdmVyUm93LCBzZXRIb3ZlclJvd10gPSB1c2VTdGF0ZSgnJyk7XG5cblx0Ly8gUmVhY3QtVGFibGUgaG9va1xuXHRjb25zdCB7Z2V0VGFibGVQcm9wcywgZ2V0VGFibGVCb2R5UHJvcHMsIGhlYWRlckdyb3VwcywgcHJlcGFyZVJvdywgcm93cywgZm9vdGVyR3JvdXBzfSA9IHVzZVRhYmxlPEE+KHtcblx0XHRjb2x1bW5zOiBjb2xzLFxuXHRcdGRhdGE6IHZhbHMsXG5cdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdHVwZGF0ZURhdGEocm93SW5kZXgsIGNvbHVtbklkLCB2YWx1ZSkge1xuXHRcdFx0c2V0RmllbGRWYWx1ZShgJHtuYW1lfVske3Jvd0luZGV4fV0uJHtjb2x1bW5JZH1gLCB2YWx1ZSk7XG5cdFx0fSxcblx0XHRhZGRSb3coKSB7XG5cdFx0XHRhcnJheUhlbHBlcnMucHVzaChjcmVhdGVSb3coKSk7XG5cdFx0fSxcblx0XHRhcnJheUhlbHBlcnMsXG5cdH0pO1xuXG5cdC8vIEB0cy1pZ25vcmUgQ2hlY2sgZm9yIHRoZSBleGlzdGVuY2Ugb2YgYSBGb290ZXIgdGhhdCBpcyBub3QgdGhlIGRlZmF1bHQgZW1wdHlSZW5kZXJlcigpXG5cdGNvbnN0IGhhc0Zvb3RlciA9IGZvb3Rlckdyb3Vwcy5zb21lKGZnID0+IGZnLmhlYWRlcnMuc29tZShmZ2ggPT4gZmdoLkZvb3Rlci5uYW1lICE9PSAnZW1wdHlSZW5kZXJlcicpKTtcblxuXHQvLyBCdWlsZCBGb290ZXIgaWYgYW55IGZvb3RlciByZW5kZXJlcnMgZXhpc3Rcblx0Y29uc3QgZm9vdGVyID0gaGFzRm9vdGVyID8gKFxuXHRcdDxUYWJsZS5Gb290ZXI+XG5cdFx0XHR7Zm9vdGVyR3JvdXBzLm1hcChncm91cCA9PiAoXG5cdFx0XHRcdDxUYWJsZS5Sb3cgey4uLnsuLi5ncm91cC5nZXRGb290ZXJHcm91cFByb3BzKCksIC4uLmdyb3VwLmdldEZvb3Rlckdyb3VwUHJvcHMoZm9vdGVyUm93UHJvcHMpfX0+XG5cdFx0XHRcdFx0e2dyb3VwLmhlYWRlcnMubWFwKGNvbHVtbiA9PiAoXG5cdFx0XHRcdFx0XHQ8VGFibGUuSGVhZGVyQ2VsbCB7Li4uey4uLmNvbHVtbi5nZXRGb290ZXJQcm9wcygpLCAuLi5jb2x1bW4uZ2V0Rm9vdGVyUHJvcHMoZm9vdGVyQ2VsbFByb3BzKX19PlxuXHRcdFx0XHRcdFx0XHR7Y29sdW1uLnJlbmRlcignRm9vdGVyJyl9XG5cdFx0XHRcdFx0XHQ8L1RhYmxlLkhlYWRlckNlbGw+XG5cdFx0XHRcdFx0KSl9XG5cdFx0XHRcdDwvVGFibGUuUm93PlxuXHRcdFx0KSl9XG5cdFx0PC9UYWJsZS5Gb290ZXI+XG5cdCkgOiBudWxsO1xuXG5cdHJldHVybiAoXG5cdFx0PD5cblx0XHRcdDxUYWJsZSB7Li4uey4uLmdldFRhYmxlUHJvcHMoKSwgLi4uZ2V0VGFibGVQcm9wcyh0YWJsZVByb3BzKX19PlxuXHRcdFx0XHQ8VGFibGUuSGVhZGVyPlxuXHRcdFx0XHRcdHtoZWFkZXJHcm91cHMubWFwKGhlYWRlckdyb3VwID0+IChcblx0XHRcdFx0XHRcdDxUYWJsZS5Sb3cgey4uLnsuLi5oZWFkZXJHcm91cC5nZXRIZWFkZXJHcm91cFByb3BzKCksIC4uLmhlYWRlckdyb3VwLmdldEhlYWRlckdyb3VwUHJvcHMoaGVhZGVyUm93UHJvcHMpfX0+XG5cdFx0XHRcdFx0XHRcdHtoZWFkZXJHcm91cC5oZWFkZXJzLm1hcChjb2x1bW4gPT4gKFxuXHRcdFx0XHRcdFx0XHRcdDxUYWJsZS5IZWFkZXJDZWxsIHsuLi57Li4uY29sdW1uLmdldEhlYWRlclByb3BzKCksIC4uLmNvbHVtbi5nZXRIZWFkZXJQcm9wcyhoZWFkZXJDZWxsUHJvcHMpfX0+XG5cdFx0XHRcdFx0XHRcdFx0XHR7Y29sdW1uLnJlbmRlcignSGVhZGVyJyl9XG5cdFx0XHRcdFx0XHRcdFx0PC9UYWJsZS5IZWFkZXJDZWxsPlxuXHRcdFx0XHRcdFx0XHQpKX1cblx0XHRcdFx0XHRcdDwvVGFibGUuUm93PlxuXHRcdFx0XHRcdCkpfVxuXHRcdFx0XHQ8L1RhYmxlLkhlYWRlcj5cblx0XHRcdFx0PFRhYmxlLkJvZHkgey4uLnsuLi5nZXRUYWJsZUJvZHlQcm9wcygpLCAuLi5nZXRUYWJsZUJvZHlQcm9wcyhib2R5UHJvcHMpfX0+XG5cdFx0XHRcdFx0e3Jvd3MubWFwKHJvdyA9PiB7XG5cdFx0XHRcdFx0XHRwcmVwYXJlUm93KHJvdyk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHQ8VGFibGUuUm93XG5cdFx0XHRcdFx0XHRcdFx0ey4uLnsuLi5yb3cuZ2V0Um93UHJvcHMoKSwgLi4ucm93LmdldFJvd1Byb3BzKHJvd1Byb3BzKX19XG5cdFx0XHRcdFx0XHRcdFx0b25Nb3VzZUVudGVyPXsoKSA9PiBzZXRIb3ZlclJvdyhyb3cuaWQpfVxuXHRcdFx0XHRcdFx0XHRcdG9uTW91c2VMZWF2ZT17KCkgPT4gc2V0SG92ZXJSb3coJycpfVxuXHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0e3Jvdy5jZWxscy5tYXAoY2VsbCA9PiAoXG5cdFx0XHRcdFx0XHRcdFx0XHQ8VGFibGUuQ2VsbCB7Li4uey4uLmNlbGwuZ2V0Q2VsbFByb3BzKCksIC4uLmNlbGwuZ2V0Q2VsbFByb3BzKGNlbGxQcm9wcyl9fT57Y2VsbC5yZW5kZXIoJ0NlbGwnLCB7aG92ZXJSb3d9KX08L1RhYmxlLkNlbGw+XG5cdFx0XHRcdFx0XHRcdFx0KSl9XG5cdFx0XHRcdFx0XHRcdDwvVGFibGUuUm93PlxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9KX1cblx0XHRcdFx0PC9UYWJsZS5Cb2R5PlxuXHRcdFx0XHR7Zm9vdGVyfVxuXHRcdFx0PC9UYWJsZT5cblx0XHQ8Lz5cblx0KTtcbn1cblxuLyoqXG4gKiBDYW4gYmUgdXNlZCBpbiBhIFRGb3JtIGFzIGEgVGFibGUgSW5wdXQuXG4gKiBAcGFyYW0gcHJvcHNcbiAqIEBjb25zdHJ1Y3RvclxuICovXG5leHBvcnQgZnVuY3Rpb24gVGFibGVJbnB1dDxBIGV4dGVuZHMgRGVmYXVsdFRhYmxlVHlwZT4ocHJvcHM6IFRhYmxlSW5wdXRQcm9wczxBPikge1xuXHRyZXR1cm4gPEZpZWxkQXJyYXkgbmFtZT17cHJvcHMubmFtZX0gcmVuZGVyPXthcnJheUhlbHBlcnMgPT4gPFRhYmxlSW5wdXRUYWJsZSBhcnJheUhlbHBlcnM9e2FycmF5SGVscGVyc30gey4uLnByb3BzfSAvPn0gLz47XG59XG4iLCJpbXBvcnQgdHlwZSB7VGFibGVDZWxsUHJvcHN9IGZyb20gJy4vVGFibGVJbnB1dCc7XG5cbmV4cG9ydCB0eXBlIEFkZFJvd09uVGFiSWY8RCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBWID0gYW55PiA9IChwcm9wczogVGFibGVDZWxsUHJvcHM8RCwgVj4sIG5ld1ZhbHVlOiBWKSA9PiBib29sZWFuO1xuXG4vKipcbiAqIFVzZSBhcyBhbiBvbktleURvd24gZXZlbnQgaGFuZGxlciB0byBhZGQgYSBuZXcgcm93IHdoZW4gdGFiIGlzIHByZXNzZWQsIGRlcGVuZGluZyBvbiBjZXJ0YWluIGNyaXRlcmlhLlxuICogQHBhcmFtIGV2ZW50XG4gKiBAcGFyYW0gdmFsdWVcbiAqIEBwYXJhbSBwcm9wc1xuICogQHBhcmFtIGFkZFJvd09uVGFiSWZcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZFJvd09uVGFiPEQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgViA9IGFueT4oXG5cdGV2ZW50OiBLZXlib2FyZEV2ZW50LFxuXHR2YWx1ZTogVixcblx0cHJvcHM6IFRhYmxlQ2VsbFByb3BzPEQsIFY+LFxuXHRhZGRSb3dPblRhYklmPzogQWRkUm93T25UYWJJZjxELCBWPixcbikge1xuXHRjb25zdCB7XG5cdFx0cm93OiB7aW5kZXg6IHJvd0luZGV4fSxcblx0XHRyb3dzOiB7bGVuZ3RoOiByb3dzTGVuZ3RofSxcblx0XHRhZGRSb3csXG5cdH0gPSBwcm9wcztcblxuXHRpZiAoZXZlbnQua2V5ID09PSAnVGFiJyAmJiAhZXZlbnQuc2hpZnRLZXkgJiYgcm93SW5kZXggKyAxID09PSByb3dzTGVuZ3RoICYmIChhZGRSb3dPblRhYklmID8gYWRkUm93T25UYWJJZihwcm9wcywgdmFsdWUpIDogZmFsc2UpKSB7XG5cdFx0YWRkUm93KCk7XG5cdH1cbn1cbiIsImV4cG9ydCB7VGFibGVJbnB1dH0gZnJvbSAnLi9UYWJsZUlucHV0JztcbmV4cG9ydCB7TW9uZXlDZWxsfSBmcm9tICcuL01vbmV5Q2VsbCc7XG5leHBvcnQge01vbmV5RWRpdENlbGx9IGZyb20gJy4vTW9uZXlFZGl0Q2VsbCc7XG5leHBvcnQge01vbmV5U3VtRm9vdGVyfSBmcm9tICcuL01vbmV5U3VtRm9vdGVyJztcbmV4cG9ydCB7U3RyaW5nRWRpdENlbGx9IGZyb20gJy4vU3RyaW5nRWRpdENlbGwnO1xuZXhwb3J0IHtEcm9wZG93bkNlbGx9IGZyb20gJy4vRHJvcGRvd25DZWxsJztcbmV4cG9ydCB7SG92ZXJDZWxsfSBmcm9tICcuL0hvdmVyQ2VsbCc7XG5leHBvcnQge2FkZFJvd09uVGFifSBmcm9tICcuL2FkZFJvd09uVGFiJztcbmV4cG9ydCB0eXBlIHtBZGRSb3dPblRhYklmfSBmcm9tICcuL2FkZFJvd09uVGFiJztcbiIsImltcG9ydCB7dG9Nb25leX0gZnJvbSAnQHRoeC9tb25leSc7XG4vKiBlc2xpbnQtZGlzYWJsZSBqc3gtYTExeS9uby1zdGF0aWMtZWxlbWVudC1pbnRlcmFjdGlvbnMgKi9cbmltcG9ydCBkZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5pbXBvcnQgTW9uZXkgZnJvbSAnanMtbW9uZXknO1xuaW1wb3J0IFJlYWN0LCB7U3ludGhldGljRXZlbnR9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7RHJvcGRvd24sIERyb3Bkb3duUHJvcHMsIElucHV0LCBJbnB1dFByb3BzLCBMYWJlbH0gZnJvbSAnc2VtYW50aWMtdWktcmVhY3QnO1xuaW1wb3J0IHR5cGUge01vbmV5SW5wdXRQcm9wc30gZnJvbSAnLi4vTW9uZXlJbnB1dCc7XG5pbXBvcnQge3VzZU1vbmV5SW5wdXR9IGZyb20gJy4uL3VzZU1vbmV5SW5wdXQnO1xuXG5jb25zdCBkID0gZGVidWcoJ3RoeC5jb250cm9scy5tb25leS5Nb25leUN1cnJlbmN5SW5wdXQnKTtcblxuZXhwb3J0IGludGVyZmFjZSBNb25leUN1cnJlbmN5SW5wdXRQcm9wcyBleHRlbmRzIE1vbmV5SW5wdXRQcm9wcyB7XG5cdGN1cnJlbmN5T3B0aW9ucz86IHtrZXk6IHN0cmluZzsgdmFsdWU6IHN0cmluZzsgdGV4dDogc3RyaW5nfVtdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gTW9uZXlDdXJyZW5jeUlucHV0KHByb3BzOiBNb25leUN1cnJlbmN5SW5wdXRQcm9wcyAmIE9taXQ8SW5wdXRQcm9wcywgJ29uQ2hhbmdlJz4pIHtcblx0Y29uc3Qge25hbWUsIG9uQmx1ciwgcHJlZml4LCBkZWZhdWx0Q3VycmVuY3ksIG9uQ2hhbmdlLCBzaG93UHJlZml4LCB2YWx1ZSwgd2hvbGVOdW1iZXIsIGN1cnJlbmNpZXMsIGxvY2tlZCwgLi4ucmVzdH0gPSBwcm9wcztcblx0Y29uc3Qge2lucHV0RWxlbWVudH0gPSB1c2VNb25leUlucHV0KHtkZWZhdWx0Q3VycmVuY3ksIG9uQ2hhbmdlLCBwcmVmaXgsIHNob3dQcmVmaXgsIHZhbHVlLCB3aG9sZU51bWJlcn0pO1xuXG5cdGNvbnN0IG9wdGlvbnMgPSBjdXJyZW5jaWVzIHx8IFtcblx0XHR7a2V5OiAnQ0FEJywgdGV4dDogJ0NBRCcsIHZhbHVlOiAnQ0FEJ30sXG5cdFx0e2tleTogJ1VTRCcsIHRleHQ6ICdVU0QnLCB2YWx1ZTogJ1VTRCd9LFxuXHRdO1xuXG5cdGZ1bmN0aW9uIGhhbmRsZURyb3Bkb3duQ2hhbmdlKGU6IFN5bnRoZXRpY0V2ZW50PEhUTUxFbGVtZW50LCBFdmVudD4sIHZhbDogRHJvcGRvd25Qcm9wcykge1xuXHRcdC8vIEB0cy1pZ25vcmUgRE9OVCBERUxFVEUgVEhFICoqIElUIElTIEFOIE9QRVJBVE9SIE1FQU5JTkcgUE9XRVIvRVhQT05FTlRcblx0XHRpZiAodmFsLnZhbHVlICYmIG9uQ2hhbmdlKSBvbkNoYW5nZSh0b01vbmV5KHZhbHVlLmFtb3VudCAvIDEwICoqIE1vbmV5W3ZhbHVlLmN1cnJlbmN5XS5kZWNpbWFsX2RpZ2l0cywgTW9uZXlbdmFsLnZhbHVlXSkpO1xuXHR9XG5cblx0cmV0dXJuIChcblx0XHQ8SW5wdXQgey4uLnJlc3R9IGxhYmVsUG9zaXRpb249XCJyaWdodFwiPlxuXHRcdFx0PGlucHV0IG5hbWU9e25hbWV9IHJlZj17aW5wdXRFbGVtZW50fSBvbkJsdXI9e29uQmx1cn0gcmVhZE9ubHk9e2xvY2tlZH0gLz5cblx0XHRcdDxMYWJlbCBiYXNpYz5cblx0XHRcdFx0PERyb3Bkb3duIGRpc2FibGVkPXtsb2NrZWR9IG9wdGlvbnM9e29wdGlvbnN9IHZhbHVlPXt2YWx1ZT8uY3VycmVuY3kgfHwgZGVmYXVsdEN1cnJlbmN5Py5jb2RlIHx8ICdDQUQnfSBvbkNoYW5nZT17aGFuZGxlRHJvcGRvd25DaGFuZ2V9IC8+XG5cdFx0XHQ8L0xhYmVsPlxuXHRcdDwvSW5wdXQ+XG5cdCk7XG59XG4iLCJleHBvcnQge01vbmV5Q3VycmVuY3lJbnB1dH0gZnJvbSAnLi9Nb25leUN1cnJlbmN5SW5wdXQnO1xuZXhwb3J0IHR5cGUge01vbmV5Q3VycmVuY3lJbnB1dFByb3BzfSBmcm9tICcuL01vbmV5Q3VycmVuY3lJbnB1dCc7XG4iLCJpbXBvcnQgdHlwZSB7Q3VycmVuY2llcywgSU1vbmV5T2JqZWN0fSBmcm9tICdAdGh4L21vbmV5Jztcbi8qIGVzbGludC1kaXNhYmxlIGpzeC1hMTF5L25vLXN0YXRpYy1lbGVtZW50LWludGVyYWN0aW9ucyAqL1xuaW1wb3J0IGRlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCB0eXBlIE1vbmV5IGZyb20gJ2pzLW1vbmV5JztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQge0lucHV0LCBJbnB1dFByb3BzfSBmcm9tICdzZW1hbnRpYy11aS1yZWFjdCc7XG5pbXBvcnQge3VzZU1vbmV5SW5wdXR9IGZyb20gJy4uL3VzZU1vbmV5SW5wdXQnO1xuXG5jb25zdCBkID0gZGVidWcoJ3RoeC5jb250cm9scy5tb25leS5Nb25leUlucHV0Jyk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTW9uZXlJbnB1dFByb3BzIHtcblx0bmFtZT86IHN0cmluZztcblx0b25DaGFuZ2U/OiAodmFsdWU6IE1vbmV5KSA9PiB2b2lkO1xuXHR2YWx1ZT86IE1vbmV5IHwgSU1vbmV5T2JqZWN0O1xuXHRkZWZhdWx0Q3VycmVuY3k/OiBDdXJyZW5jaWVzLkN1cnJlbmN5OyAvLyBEZWZhdWx0cyB0byBNb25leS5DQURcblx0b25CbHVyPzogKGV2OiBhbnkpID0+IHZvaWQ7XG5cdHByZWZpeD86IHN0cmluZzsgLy8gRGVmYXVsdHMgdG8gY3VycmVuY3kgc3ltYm9sXG5cdHNob3dQcmVmaXg/OiBib29sZWFuOyAvLyBEZWZhdWx0cyB0byBmYWxzZVxuXHRsb2NrZWQ/OiBib29sZWFuOyAvLyBEZWZhdWx0cyB0byBmYWxzZVxuXHR3aG9sZU51bWJlcj86IGJvb2xlYW47IC8vIERlZmF1bHRzIHRvIGZhbHNlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBNb25leUlucHV0KHByb3BzOiBNb25leUlucHV0UHJvcHMgJiBPbWl0PElucHV0UHJvcHMsICdvbkNoYW5nZSc+KSB7XG5cdGNvbnN0IHtuYW1lLCBvbkJsdXIsIGxvY2tlZCwgcHJlZml4LCBkZWZhdWx0Q3VycmVuY3ksIG9uQ2hhbmdlLCBzaG93UHJlZml4LCB2YWx1ZSwgd2hvbGVOdW1iZXIsIC4uLnJlc3R9ID0gcHJvcHM7XG5cdGNvbnN0IHtpbnB1dEVsZW1lbnR9ID0gdXNlTW9uZXlJbnB1dCh7ZGVmYXVsdEN1cnJlbmN5LCBvbkNoYW5nZSwgcHJlZml4LCBzaG93UHJlZml4LCB2YWx1ZSwgd2hvbGVOdW1iZXJ9KTtcblxuXHRyZXR1cm4gKFxuXHRcdDxJbnB1dCB7Li4ucmVzdH0+XG5cdFx0XHQ8aW5wdXQgbmFtZT17bmFtZX0gcmVmPXtpbnB1dEVsZW1lbnR9IG9uQmx1cj17b25CbHVyfSByZWFkT25seT17bG9ja2VkfSAvPlxuXHRcdDwvSW5wdXQ+XG5cdCk7XG59XG4iLCJleHBvcnQge01vbmV5SW5wdXR9IGZyb20gJy4vTW9uZXlJbnB1dCc7XG5leHBvcnQgdHlwZSB7TW9uZXlJbnB1dFByb3BzfSBmcm9tICcuL01vbmV5SW5wdXQnO1xuIiwiaW1wb3J0IHtDdXJyZW5jaWVzLCBJTW9uZXlPYmplY3QsIGlzTW9uZXlPYmplY3QsIHRvTW9uZXl9IGZyb20gJ0B0aHgvbW9uZXknO1xuaW1wb3J0IGRlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCBJbnB1dG1hc2sgZnJvbSAnaW5wdXRtYXNrJztcbmltcG9ydCBNb25leSBmcm9tICdqcy1tb25leSc7XG5pbXBvcnQge3VzZUVmZmVjdCwgdXNlUmVmfSBmcm9tICdyZWFjdCc7XG5cbmNvbnN0IGQgPSBkZWJ1ZygndGh4LmNvbnRyb2xzLm1vbmV5LnVzZU1vbmV5SW5wdXQnKTtcblxuaW50ZXJmYWNlIFVzZU1vbmV5SW5wdXRQcm9wcyB7XG5cdG9uQ2hhbmdlPzogKHZhbHVlOiBNb25leSkgPT4gdm9pZDtcblx0dmFsdWU/OiBNb25leSB8IElNb25leU9iamVjdDtcblx0ZGVmYXVsdEN1cnJlbmN5PzogQ3VycmVuY2llcy5DdXJyZW5jeTsgLy8gRGVmYXVsdHMgdG8gTW9uZXkuQ0FEXG5cdHByZWZpeD86IHN0cmluZzsgLy8gRGVmYXVsdHMgdG8gY3VycmVuY3kgc3ltYm9sXG5cdHNob3dQcmVmaXg/OiBib29sZWFuOyAvLyBEZWZhdWx0cyB0byBmYWxzZVxuXHR3aG9sZU51bWJlcj86IGJvb2xlYW47IC8vIERlZmF1bHRzIHRvIGZhbHNlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VNb25leUlucHV0KHByb3BzOiBVc2VNb25leUlucHV0UHJvcHMpIHtcblx0Y29uc3Qge3ZhbHVlLCBvbkNoYW5nZSwgZGVmYXVsdEN1cnJlbmN5LCBzaG93UHJlZml4LCBwcmVmaXgsIHdob2xlTnVtYmVyfSA9IHByb3BzO1xuXG5cdGNvbnN0IGlucHV0RWxlbWVudCA9IHVzZVJlZjxIVE1MSW5wdXRFbGVtZW50IHwgbnVsbD4obnVsbCk7XG5cdGNvbnN0IG1hc2tJbnN0YW5jZSA9IHVzZVJlZjxJbnB1dG1hc2suSW5zdGFuY2UgfCBudWxsPihudWxsKTtcblxuXHQvLyBzZXQgdGhlIGFkakN1cnJlbmN5XG5cdGxldCBhZGpDdXJyZW5jeSA9IE1vbmV5LkNBRDtcblx0Ly8gQHRzLWlnbm9yZVxuXHRpZiAodmFsdWU/LmN1cnJlbmN5ICYmIE1vbmV5W3ZhbHVlPy5jdXJyZW5jeV0pIGFkakN1cnJlbmN5ID0gTW9uZXlbdmFsdWU/LmN1cnJlbmN5XTtcblx0aWYgKGRlZmF1bHRDdXJyZW5jeSkgYWRqQ3VycmVuY3kgPSBkZWZhdWx0Q3VycmVuY3k7XG5cblx0dXNlRWZmZWN0KCgpID0+IHtcblx0XHRpZiAoIWlucHV0RWxlbWVudC5jdXJyZW50KSB0aHJvdyBuZXcgRXJyb3IoJ0NvdWxkIG5vdCBnZXQgaW5wdXQgZWxlbWVudCcpO1xuXG5cdFx0ZCgnQ3JlYXRpbmcgaW5wdXQgbWFzayBpbnN0YW5jZScpO1xuXHRcdG1hc2tJbnN0YW5jZS5jdXJyZW50ID0gbmV3IElucHV0bWFzayh7XG5cdFx0XHRhbGlhczogJ251bWVyaWMnLFxuXHRcdFx0Z3JvdXBTZXBhcmF0b3I6ICcsJyxcblx0XHRcdGRpZ2l0czogd2hvbGVOdW1iZXIgPyAnMCcgOiBDdXJyZW5jaWVzW2FkakN1cnJlbmN5LmNvZGVdLmRlY2ltYWxfZGlnaXRzLnRvU3RyaW5nKCksXG5cdFx0XHRkaWdpdHNPcHRpb25hbDogZmFsc2UsXG5cdFx0XHRwcmVmaXg6IHNob3dQcmVmaXggPyBwcmVmaXggfHwgQ3VycmVuY2llc1thZGpDdXJyZW5jeS5jb2RlXS5zeW1ib2wgOiB1bmRlZmluZWQsXG5cdFx0XHRwbGFjZWhvbGRlcjogJzAnLFxuXHRcdFx0YXV0b1VubWFzazogdHJ1ZSxcblx0XHRcdG9uY29tcGxldGUoKSB7XG5cdFx0XHRcdGlmIChvbkNoYW5nZSkgb25DaGFuZ2UodG9Nb25leShpbnB1dEVsZW1lbnQuY3VycmVudD8udmFsdWUsIGFkakN1cnJlbmN5KSk7XG5cdFx0XHR9LFxuXHRcdFx0b25jbGVhcmVkKCkge1xuXHRcdFx0XHRpZiAob25DaGFuZ2UpIG9uQ2hhbmdlKHRvTW9uZXkoMCwgYWRqQ3VycmVuY3kpKTtcblx0XHRcdH0sXG5cdFx0XHRvbmluY29tcGxldGUoKSB7XG5cdFx0XHRcdGlmIChvbkNoYW5nZSkgb25DaGFuZ2UodG9Nb25leShpbnB1dEVsZW1lbnQuY3VycmVudD8udmFsdWUsIGFkakN1cnJlbmN5KSk7XG5cdFx0XHR9LFxuXHRcdH0pO1xuXHRcdG1hc2tJbnN0YW5jZS5jdXJyZW50Lm1hc2soaW5wdXRFbGVtZW50LmN1cnJlbnQpO1xuXG5cdFx0cmV0dXJuICgpID0+IHtcblx0XHRcdGlmIChtYXNrSW5zdGFuY2UuY3VycmVudCkge1xuXHRcdFx0XHRkKCdDbGVhbmluZyB1cCBpbnB1dCBtYXNrIGluc3RhbmNlJyk7XG5cdFx0XHRcdG1hc2tJbnN0YW5jZS5jdXJyZW50LnJlbW92ZSgpO1xuXHRcdFx0XHRtYXNrSW5zdGFuY2UuY3VycmVudCA9IG51bGw7XG5cdFx0XHR9XG5cdFx0fTtcblx0fSwgW2FkakN1cnJlbmN5LCBwcmVmaXgsIHdob2xlTnVtYmVyXSk7XG5cblx0Ly8gSWYgd2UgY2hhbmdlIHRoZSB2YWx1ZSBwcm9wIHdlIG5lZWQgdG8gc3luYyB0aGUgRE9NIHZhbHVlIHRvIGRpc3BsYXkgdGhlIG5ldyB2YWx1ZVxuXHR1c2VFZmZlY3QoKCkgPT4ge1xuXHRcdGNvbnN0IGlucHV0VmFsdWUgPSB0b01vbmV5KGlucHV0RWxlbWVudC5jdXJyZW50Py52YWx1ZSwgYWRqQ3VycmVuY3kpO1xuXHRcdGlmICgodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCkgJiYgaW5wdXRFbGVtZW50LmN1cnJlbnQpIHtcblx0XHRcdGlucHV0RWxlbWVudC5jdXJyZW50LnZhbHVlID0gJyc7XG5cdFx0fSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIE1vbmV5ICYmIGlucHV0RWxlbWVudC5jdXJyZW50KSB7XG5cdFx0XHRpZiAoIWlucHV0VmFsdWUuZXF1YWxzKHZhbHVlKSkge1xuXHRcdFx0XHRpbnB1dEVsZW1lbnQuY3VycmVudC52YWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChpc01vbmV5T2JqZWN0KHZhbHVlKSAmJiBpbnB1dEVsZW1lbnQuY3VycmVudCkge1xuXHRcdFx0Y29uc3QgdmFsdWVJbk1vbmV5ID0gdG9Nb25leSh2YWx1ZSk7XG5cdFx0XHRpZiAoIWlucHV0VmFsdWUuZXF1YWxzKHZhbHVlSW5Nb25leSkpIHtcblx0XHRcdFx0aW5wdXRFbGVtZW50LmN1cnJlbnQudmFsdWUgPSB2YWx1ZUluTW9uZXkudG9TdHJpbmcoKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKGBWYWx1ZSBtdXN0IGJlIGEgTW9uZXkgaW5zdGFuY2Ugb3IgSU1vbmV5T2JqZWN0OiAke3ZhbHVlfSAoJHt0eXBlb2YgdmFsdWV9YCk7XG5cdFx0fVxuXHR9LCBbdmFsdWUsIGFkakN1cnJlbmN5XSk7XG5cblx0cmV0dXJuIHtpbnB1dEVsZW1lbnR9O1xufVxuIiwiaW1wb3J0IGRlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCBSZWFjdCwge0NoaWxkcmVufSBmcm9tICdyZWFjdCc7XG5pbXBvcnQge3VzZVN0ZXB9IGZyb20gJy4vdXNlU3RlcCc7XG5cbmNvbnN0IGQgPSBkZWJ1ZygndGh4LmNvbnRyb2xzLnN0ZXAuRm9ybVN0ZXAnKTtcblxuaW50ZXJmYWNlIEZvcm1TdGVwUHJvcHMge1xuXHRjaGlsZHJlbjogSlNYLkVsZW1lbnQ7XG5cdHRpdGxlPzogc3RyaW5nO1xuXHRzdGVwS2V5OiBzdHJpbmc7XG5cdGhpZGRlbj86IGJvb2xlYW4gfCAoKHN0YXRlOiBhbnksIHN0ZXA6IG51bWJlcikgPT4gYm9vbGVhbik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBGb3JtU3RlcChwcm9wczogRm9ybVN0ZXBQcm9wcykge1xuXHRjb25zdCBbc3RhdGUsIGhhbmRsZVN1Ym1pdF0gPSB1c2VTdGVwKCk7XG5cdGNvbnN0IHZhbHVlcyA9IHN0YXRlW3Byb3BzLnN0ZXBLZXldIHx8IHt9O1xuXG5cdGNvbnN0IGZvcm0gPSBSZWFjdC5jbG9uZUVsZW1lbnQoQ2hpbGRyZW4ub25seShwcm9wcy5jaGlsZHJlbiksIHtcblx0XHR2YWx1ZXM6IHZhbHVlcyB8fCB7fSxcblx0XHRvblN1Ym1pdDogKHZhbHM6IHVua25vd24pID0+IGhhbmRsZVN1Ym1pdCh2YWxzLCBwcm9wcy5zdGVwS2V5KSxcblx0fSk7XG5cblx0cmV0dXJuIChcblx0XHQ8PlxuXHRcdFx0PGgxPntwcm9wcy50aXRsZX08L2gxPlxuXHRcdFx0e2Zvcm19XG5cdFx0PC8+XG5cdCk7XG59XG4iLCJpbXBvcnQgZGVidWcgZnJvbSAnZGVidWcnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuY29uc3QgZCA9IGRlYnVnKCd0aHguY29udHJvbHMuc3RlcC5TdGVwJyk7XG5cbmludGVyZmFjZSBTdGVwUHJvcHMge1xuXHRjaGlsZHJlbj86IEpTWC5FbGVtZW50IHwgSlNYLkVsZW1lbnRbXTtcblx0dGl0bGU/OiBzdHJpbmc7XG5cdHN0ZXA/OiBudW1iZXI7XG5cdGhpZGRlbj86IGJvb2xlYW4gfCAoKHN0YXRlOiBhbnksIHN0ZXA6IG51bWJlcikgPT4gYm9vbGVhbik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBTdGVwKHByb3BzOiBTdGVwUHJvcHMpIHtcblx0cmV0dXJuIChcblx0XHQ8PlxuXHRcdFx0PGgxPntwcm9wcy50aXRsZX08L2gxPlxuXHRcdFx0e3Byb3BzLmNoaWxkcmVufVxuXHRcdDwvPlxuXHQpO1xufVxuIiwiaW1wb3J0IGRlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCBSZWFjdCwge3VzZVN0YXRlLCBDaGlsZHJlbn0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtQcm9tcHR9IGZyb20gJ3JlYWN0LXJvdXRlci1kb20nO1xuaW1wb3J0IHtHcmlkLCBTdGVwIGFzIFNlbWFudGljU3RlcH0gZnJvbSAnc2VtYW50aWMtdWktcmVhY3QnO1xuaW1wb3J0IHtGb3JtU3RlcH0gZnJvbSAnLi9Gb3JtU3RlcCc7XG5pbXBvcnQge1N0ZXB9IGZyb20gJy4vU3RlcCc7XG5pbXBvcnQge1N0ZXBDb250ZXh0fSBmcm9tICcuL3N0ZXBDb250ZXh0JztcblxuY29uc3QgZCA9IGRlYnVnKCd0aHguY29udHJvbHMuc3RlcC5TdGVwUHJvdmlkZXInKTtcblxuaW50ZXJmYWNlIFN0ZXBQcm92aWRlclByb3BzIHtcblx0Y2hpbGRyZW46IChKU1guRWxlbWVudCB8IG51bGwgfCBmYWxzZSlbXTtcblx0b25TdWJtaXQ6ICh2YWx1ZXM6IGFueSkgPT4gdm9pZDtcblx0dmFsdWVzPzogYW55O1xuXHR3YXJuT25SZXJvdXRlPzogYm9vbGVhbjtcblx0dmVydGljYWw/OiBib29sZWFuO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gU3RlcFByb3ZpZGVyKHByb3BzOiBTdGVwUHJvdmlkZXJQcm9wcykge1xuXHRjb25zdCBbc3RhdGUsIHNldFN0YXRlXSA9IHVzZVN0YXRlKHByb3BzLnZhbHVlcyB8fCB7fSk7XG5cdGNvbnN0IFtjdXJyZW50U3RlcCwgc2V0Q3VycmVudFN0ZXBdID0gdXNlU3RhdGUoMCk7XG5cdGNvbnN0IFtpc1N1Ym1pdHRpbmcsIHNldElzU3VibWl0dGluZ10gPSB1c2VTdGF0ZShmYWxzZSk7XG5cblx0Y29uc3QgdGl0bGVzOiBzdHJpbmdbXSA9IFtdO1xuXHRjb25zdCBjaGlsZHJlbjogSlNYLkVsZW1lbnRbXSA9IFtdO1xuXG5cdENoaWxkcmVuLmZvckVhY2gocHJvcHM/LmNoaWxkcmVuLCAoY2hpbGQsIGluZGV4KSA9PiB7XG5cdFx0aWYgKCFjaGlsZCkgcmV0dXJuO1xuXHRcdGlmIChjaGlsZD8udHlwZSAhPT0gU3RlcCAmJiBjaGlsZD8udHlwZSAhPT0gRm9ybVN0ZXApIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihgQ2FuIG5vdCByZW5kZXIgJyR7Y2hpbGQ/LnR5cGV9JyBhcyBjaGlsZCBvZiAnU3RlcFByb3ZpZGVyJy4gTXVzdCBiZSBvZiB0eXBlICdTdGVwJyBvciAnRm9ybVN0ZXAnYCk7XG5cdFx0fVxuXHRcdGlmIChjaGlsZC5wcm9wcy5oaWRkZW4pIHtcblx0XHRcdGlmICh0eXBlb2YgY2hpbGQucHJvcHMuaGlkZGVuID09PSAnZnVuY3Rpb24nICYmICFjaGlsZC5wcm9wcy5oaWRkZW4oc3RhdGUsIGluZGV4KSkge1xuXHRcdFx0XHR0aXRsZXMucHVzaChjaGlsZD8ucHJvcHM/LnRpdGxlIHx8ICcnKTtcblx0XHRcdFx0Y2hpbGRyZW4ucHVzaChSZWFjdC5jbG9uZUVsZW1lbnQoY2hpbGQsIHtzdGVwOiBpbmRleCwga2V5OiBjaGlsZD8ua2V5IHx8IGluZGV4LnRvU3RyaW5nKCl9KSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRpdGxlcy5wdXNoKGNoaWxkPy5wcm9wcz8udGl0bGUgfHwgJycpO1xuXHRcdFx0Y2hpbGRyZW4ucHVzaChSZWFjdC5jbG9uZUVsZW1lbnQoY2hpbGQsIHtzdGVwOiBpbmRleCwga2V5OiBjaGlsZD8ua2V5IHx8IGluZGV4LnRvU3RyaW5nKCl9KSk7XG5cdFx0fVxuXHR9KTtcblxuXHRjb25zdCBvbk5hdmlnYXRlID0gKCkgPT4gJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBlbmQgdGhpcyBwcm9jZXNzPyBBbGwgdGhlIGVudGVyZWQgZGF0YSB3aWxsIGJlIGxvc3QhJztcblxuXHRjb25zdCBoYW5kbGVTdWJtaXQgPSAodmFsdWVzOiBhbnksIHN0ZXBLZXk6IHN0cmluZykgPT4ge1xuXHRcdGlmIChjdXJyZW50U3RlcCArIDEgPT09IGNoaWxkcmVuPy5sZW5ndGgpIHtcblx0XHRcdHNldFN0YXRlKHsuLi5zdGF0ZSwgW3N0ZXBLZXldOiB2YWx1ZXN9KTtcblx0XHRcdHNldElzU3VibWl0dGluZyh0cnVlKTtcblx0XHRcdHByb3BzLm9uU3VibWl0KHsuLi5zdGF0ZSwgW3N0ZXBLZXldOiB2YWx1ZXN9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0c2V0U3RhdGUoey4uLnN0YXRlLCBbc3RlcEtleV06IHZhbHVlc30pO1xuXHRcdFx0c2V0Q3VycmVudFN0ZXAoY3VycmVudFN0ZXAgKyAxKTtcblx0XHR9XG5cdH07XG5cblx0aWYgKHByb3BzLnZlcnRpY2FsKSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxTdGVwQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17e3N0YXRlLCBoYW5kbGVTdWJtaXR9fT5cblx0XHRcdFx0e3Byb3BzLndhcm5PblJlcm91dGUgJiYgPFByb21wdCBtZXNzYWdlPXtvbk5hdmlnYXRlfSB3aGVuPXshaXNTdWJtaXR0aW5nfSAvPn1cblx0XHRcdFx0PEdyaWQgZGl2aWRlZCBzdGFja2FibGU+XG5cdFx0XHRcdFx0PEdyaWQuUm93PlxuXHRcdFx0XHRcdFx0PEdyaWQuQ29sdW1uIHdpZHRoPXszfT5cblx0XHRcdFx0XHRcdFx0PFNlbWFudGljU3RlcC5Hcm91cCBvcmRlcmVkIHNpemU9XCJtaW5pXCIgdmVydGljYWwgd2lkdGhzPXsxfT5cblx0XHRcdFx0XHRcdFx0XHR7dGl0bGVzPy5tYXAoKHRpdGxlLCBpbmRleCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0XHRcdFx0PFNlbWFudGljU3RlcFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGtleT17aW5kZXgudG9TdHJpbmcoKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb21wbGV0ZWQ9e2luZGV4IDwgT2JqZWN0LmtleXMoc3RhdGUpLmxlbmd0aH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhY3RpdmU9e2N1cnJlbnRTdGVwID09PSBpbmRleH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbkNsaWNrPXsoKSA9PiBzZXRDdXJyZW50U3RlcChpbmRleCl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGlzYWJsZWQ9e2luZGV4ID4gT2JqZWN0LmtleXMoc3RhdGUpLmxlbmd0aH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxTZW1hbnRpY1N0ZXAuQ29udGVudD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxTZW1hbnRpY1N0ZXAuVGl0bGU+e3RpdGxlfTwvU2VtYW50aWNTdGVwLlRpdGxlPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvU2VtYW50aWNTdGVwLkNvbnRlbnQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDwvU2VtYW50aWNTdGVwPlxuXHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHR9KX1cblx0XHRcdFx0XHRcdFx0PC9TZW1hbnRpY1N0ZXAuR3JvdXA+XG5cdFx0XHRcdFx0XHQ8L0dyaWQuQ29sdW1uPlxuXHRcdFx0XHRcdFx0PEdyaWQuQ29sdW1uIHdpZHRoPXsxM30+e2NoaWxkcmVuPy5bY3VycmVudFN0ZXBdfTwvR3JpZC5Db2x1bW4+XG5cdFx0XHRcdFx0PC9HcmlkLlJvdz5cblx0XHRcdFx0PC9HcmlkPlxuXHRcdFx0PC9TdGVwQ29udGV4dC5Qcm92aWRlcj5cblx0XHQpO1xuXHR9XG5cblx0cmV0dXJuIChcblx0XHQ8U3RlcENvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3tzdGF0ZSwgaGFuZGxlU3VibWl0fX0+XG5cdFx0XHR7cHJvcHMud2Fybk9uUmVyb3V0ZSAmJiA8UHJvbXB0IG1lc3NhZ2U9e29uTmF2aWdhdGV9IC8+fVxuXHRcdFx0PFNlbWFudGljU3RlcC5Hcm91cCBvcmRlcmVkIHNpemU9XCJtaW5pXCI+XG5cdFx0XHRcdHt0aXRsZXM/Lm1hcCgodGl0bGUsIGluZGV4KSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdDxTZW1hbnRpY1N0ZXBcblx0XHRcdFx0XHRcdFx0a2V5PXtpbmRleC50b1N0cmluZygpfVxuXHRcdFx0XHRcdFx0XHRjb21wbGV0ZWQ9e2luZGV4IDwgT2JqZWN0LmtleXMoc3RhdGUpLmxlbmd0aH1cblx0XHRcdFx0XHRcdFx0YWN0aXZlPXtjdXJyZW50U3RlcCA9PT0gaW5kZXh9XG5cdFx0XHRcdFx0XHRcdG9uQ2xpY2s9eygpID0+IHNldEN1cnJlbnRTdGVwKGluZGV4KX1cblx0XHRcdFx0XHRcdFx0ZGlzYWJsZWQ9e2luZGV4ID4gT2JqZWN0LmtleXMoc3RhdGUpLmxlbmd0aH1cblx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0PFNlbWFudGljU3RlcC5Db250ZW50PlxuXHRcdFx0XHRcdFx0XHRcdDxTZW1hbnRpY1N0ZXAuVGl0bGU+e3RpdGxlfTwvU2VtYW50aWNTdGVwLlRpdGxlPlxuXHRcdFx0XHRcdFx0XHQ8L1NlbWFudGljU3RlcC5Db250ZW50PlxuXHRcdFx0XHRcdFx0PC9TZW1hbnRpY1N0ZXA+XG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSl9XG5cdFx0XHQ8L1NlbWFudGljU3RlcC5Hcm91cD5cblx0XHRcdHtjaGlsZHJlbj8uW2N1cnJlbnRTdGVwXX1cblx0XHQ8L1N0ZXBDb250ZXh0LlByb3ZpZGVyPlxuXHQpO1xufVxuIiwiZXhwb3J0IHtTdGVwfSBmcm9tICcuL1N0ZXAnO1xuZXhwb3J0IHt1c2VTdGVwfSBmcm9tICcuL3VzZVN0ZXAnO1xuZXhwb3J0IHtGb3JtU3RlcH0gZnJvbSAnLi9Gb3JtU3RlcCc7XG5leHBvcnQge1N0ZXBQcm92aWRlcn0gZnJvbSAnLi9TdGVwUHJvdmlkZXInO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuZXhwb3J0IGNvbnN0IFN0ZXBDb250ZXh0ID0gUmVhY3QuY3JlYXRlQ29udGV4dDx7aGFuZGxlU3VibWl0OiAodmFsdWVzOiB1bmtub3duLCBzdGVwS2V5OiBzdHJpbmcpID0+IHZvaWQ7IHN0YXRlOiBSZWNvcmQ8c3RyaW5nLCBhbnk+fT4oe1xuXHRoYW5kbGVTdWJtaXQ6ICgpID0+IHt9LFxuXHRzdGF0ZToge30sXG59KTtcbiIsImltcG9ydCB7dXNlQ29udGV4dH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtTdGVwQ29udGV4dH0gZnJvbSAnLi9zdGVwQ29udGV4dCc7XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VTdGVwKCk6IFthbnksICh2YWx1ZXM6IHVua25vd24sIHN0ZXBLZXk6IHN0cmluZykgPT4gdm9pZF0ge1xuXHRjb25zdCB7c3RhdGUsIGhhbmRsZVN1Ym1pdH0gPSB1c2VDb250ZXh0KFN0ZXBDb250ZXh0KTtcblxuXHRyZXR1cm4gW3N0YXRlLCBoYW5kbGVTdWJtaXRdO1xufVxuIiwiXG4gICAgICBpbXBvcnQgQVBJIGZyb20gXCIhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5qZWN0U3R5bGVzSW50b1N0eWxlVGFnLmpzXCI7XG4gICAgICBpbXBvcnQgZG9tQVBJIGZyb20gXCIhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc3R5bGVEb21BUEkuanNcIjtcbiAgICAgIGltcG9ydCBpbnNlcnRGbiBmcm9tIFwiIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luc2VydEJ5U2VsZWN0b3IuanNcIjtcbiAgICAgIGltcG9ydCBzZXRBdHRyaWJ1dGVzIGZyb20gXCIhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc2V0QXR0cmlidXRlc1dpdGhvdXRBdHRyaWJ1dGVzLmpzXCI7XG4gICAgICBpbXBvcnQgaW5zZXJ0U3R5bGVFbGVtZW50IGZyb20gXCIhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5zZXJ0U3R5bGVFbGVtZW50LmpzXCI7XG4gICAgICBpbXBvcnQgc3R5bGVUYWdUcmFuc2Zvcm1GbiBmcm9tIFwiIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlVGFnVHJhbnNmb3JtLmpzXCI7XG4gICAgICBpbXBvcnQgY29udGVudCwgKiBhcyBuYW1lZEV4cG9ydCBmcm9tIFwiISEuLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcz8/cnVsZVNldFsxXS5ydWxlc1syXS51c2VbMl0hLi9zdHlsZXMuY3NzXCI7XG4gICAgICBcbiAgICAgIFxuXG52YXIgb3B0aW9ucyA9IHt9O1xuXG5vcHRpb25zLnN0eWxlVGFnVHJhbnNmb3JtID0gc3R5bGVUYWdUcmFuc2Zvcm1Gbjtcbm9wdGlvbnMuc2V0QXR0cmlidXRlcyA9IHNldEF0dHJpYnV0ZXM7XG5cbiAgICAgIG9wdGlvbnMuaW5zZXJ0ID0gaW5zZXJ0Rm4uYmluZChudWxsLCBcImhlYWRcIik7XG4gICAgXG5vcHRpb25zLmRvbUFQSSA9IGRvbUFQSTtcbm9wdGlvbnMuaW5zZXJ0U3R5bGVFbGVtZW50ID0gaW5zZXJ0U3R5bGVFbGVtZW50O1xuXG52YXIgdXBkYXRlID0gQVBJKGNvbnRlbnQsIG9wdGlvbnMpO1xuXG5cblxuZXhwb3J0ICogZnJvbSBcIiEhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanM/P3J1bGVTZXRbMV0ucnVsZXNbMl0udXNlWzJdIS4vc3R5bGVzLmNzc1wiO1xuICAgICAgIGV4cG9ydCBkZWZhdWx0IGNvbnRlbnQgJiYgY29udGVudC5sb2NhbHMgPyBjb250ZW50LmxvY2FscyA6IHVuZGVmaW5lZDtcbiIsIi8vIEltcG9ydHNcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fIGZyb20gXCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvc291cmNlTWFwcy5qc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qc1wiO1xudmFyIF9fX0NTU19MT0FERVJfRVhQT1JUX19fID0gX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18pO1xuLy8gTW9kdWxlXG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5wdXNoKFttb2R1bGUuaWQsIFwiLnJ3LWRhdGV0aW1lcGlja2VyID4gaW5wdXQge1xcblxcdGJvcmRlcjogbm9uZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucnctZGF0ZXRpbWVwaWNrZXIgLnJ3LWNhbGVuZGFyLWdyaWQucnctbmF2LXZpZXcgLnJ3LWJ0biB7XFxuXFx0cGFkZGluZzogMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGF0ZVRpbWVQaWNrZXJBdXRvV2lkdGgge1xcblxcdHdpZHRoOiBhdXRvO1xcblxcdGRpc3BsYXk6IGlubGluZS1mbGV4O1xcbn1cXG5cXG4uZGF0ZVRpbWVQaWNrZXJBdXRvV2lkdGggPiBpbnB1dCB7XFxuXFx0d2lkdGg6IGF1dG87XFxufVxcblxcbi5yZWFjdC1kYXRlcGlja2VyLXdyYXBwZXIge1xcblxcdHdpZHRoOiAxMDAlO1xcblxcdGRpc3BsYXk6IGlubGluZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucmVhY3QtZGF0ZXBpY2tlcl9faW5wdXQtY29udGFpbmVyIHtcXG5cXHRkaXNwbGF5OiBpbmxpbmUgIWltcG9ydGFudDtcXG59XFxuXFxuLnJlYWN0LWRhdGVwaWNrZXItcG9wcGVyIHtcXG5cXHR6LWluZGV4OiA1ICFpbXBvcnRhbnQ7XFxufVxcblwiLCBcIlwiLHtcInZlcnNpb25cIjozLFwic291cmNlc1wiOltcIndlYnBhY2s6Ly8uL2RhdGUvRGF0ZVBpY2tlci9zdHlsZXMuY3NzXCJdLFwibmFtZXNcIjpbXSxcIm1hcHBpbmdzXCI6XCJBQUFBO0NBQ0MsdUJBQXVCO0FBQ3hCOztBQUVBO0NBQ0MscUJBQXFCO0FBQ3RCOztBQUVBO0NBQ0MsV0FBVztDQUNYLG9CQUFvQjtBQUNyQjs7QUFFQTtDQUNDLFdBQVc7QUFDWjs7QUFFQTtDQUNDLFdBQVc7Q0FDWCwwQkFBMEI7QUFDM0I7O0FBRUE7Q0FDQywwQkFBMEI7QUFDM0I7O0FBRUE7Q0FDQyxxQkFBcUI7QUFDdEJcIixcInNvdXJjZXNDb250ZW50XCI6W1wiOmdsb2JhbCgucnctZGF0ZXRpbWVwaWNrZXIpID4gaW5wdXQge1xcblxcdGJvcmRlcjogbm9uZSAhaW1wb3J0YW50O1xcbn1cXG5cXG46Z2xvYmFsKC5ydy1kYXRldGltZXBpY2tlcikgOmdsb2JhbCgucnctY2FsZW5kYXItZ3JpZC5ydy1uYXYtdmlldykgOmdsb2JhbCgucnctYnRuKSB7XFxuXFx0cGFkZGluZzogMCAhaW1wb3J0YW50O1xcbn1cXG5cXG46Z2xvYmFsKC5kYXRlVGltZVBpY2tlckF1dG9XaWR0aCkge1xcblxcdHdpZHRoOiBhdXRvO1xcblxcdGRpc3BsYXk6IGlubGluZS1mbGV4O1xcbn1cXG5cXG46Z2xvYmFsKC5kYXRlVGltZVBpY2tlckF1dG9XaWR0aCkgPiBpbnB1dCB7XFxuXFx0d2lkdGg6IGF1dG87XFxufVxcblxcbjpnbG9iYWwoLnJlYWN0LWRhdGVwaWNrZXItd3JhcHBlcikge1xcblxcdHdpZHRoOiAxMDAlO1xcblxcdGRpc3BsYXk6IGlubGluZSAhaW1wb3J0YW50O1xcbn1cXG5cXG46Z2xvYmFsKC5yZWFjdC1kYXRlcGlja2VyX19pbnB1dC1jb250YWluZXIpIHtcXG5cXHRkaXNwbGF5OiBpbmxpbmUgIWltcG9ydGFudDtcXG59XFxuXFxuOmdsb2JhbCgucmVhY3QtZGF0ZXBpY2tlci1wb3BwZXIpIHtcXG5cXHR6LWluZGV4OiA1ICFpbXBvcnRhbnQ7XFxufVxcblwiXSxcInNvdXJjZVJvb3RcIjpcIlwifV0pO1xuLy8gRXhwb3J0c1xuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18ubG9jYWxzID0ge307XG5leHBvcnQgZGVmYXVsdCBfX19DU1NfTE9BREVSX0VYUE9SVF9fXztcbiIsIlwidXNlIHN0cmljdFwiO1xuXG4vKlxuICBNSVQgTGljZW5zZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocFxuICBBdXRob3IgVG9iaWFzIEtvcHBlcnMgQHNva3JhXG4qL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoY3NzV2l0aE1hcHBpbmdUb1N0cmluZykge1xuICB2YXIgbGlzdCA9IFtdOyAvLyByZXR1cm4gdGhlIGxpc3Qgb2YgbW9kdWxlcyBhcyBjc3Mgc3RyaW5nXG5cbiAgbGlzdC50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiB0aGlzLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgdmFyIGNvbnRlbnQgPSBcIlwiO1xuICAgICAgdmFyIG5lZWRMYXllciA9IHR5cGVvZiBpdGVtWzVdICE9PSBcInVuZGVmaW5lZFwiO1xuXG4gICAgICBpZiAoaXRlbVs0XSkge1xuICAgICAgICBjb250ZW50ICs9IFwiQHN1cHBvcnRzIChcIi5jb25jYXQoaXRlbVs0XSwgXCIpIHtcIik7XG4gICAgICB9XG5cbiAgICAgIGlmIChpdGVtWzJdKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJAbWVkaWEgXCIuY29uY2F0KGl0ZW1bMl0sIFwiIHtcIik7XG4gICAgICB9XG5cbiAgICAgIGlmIChuZWVkTGF5ZXIpIHtcbiAgICAgICAgY29udGVudCArPSBcIkBsYXllclwiLmNvbmNhdChpdGVtWzVdLmxlbmd0aCA+IDAgPyBcIiBcIi5jb25jYXQoaXRlbVs1XSkgOiBcIlwiLCBcIiB7XCIpO1xuICAgICAgfVxuXG4gICAgICBjb250ZW50ICs9IGNzc1dpdGhNYXBwaW5nVG9TdHJpbmcoaXRlbSk7XG5cbiAgICAgIGlmIChuZWVkTGF5ZXIpIHtcbiAgICAgICAgY29udGVudCArPSBcIn1cIjtcbiAgICAgIH1cblxuICAgICAgaWYgKGl0ZW1bMl0pIHtcbiAgICAgICAgY29udGVudCArPSBcIn1cIjtcbiAgICAgIH1cblxuICAgICAgaWYgKGl0ZW1bNF0pIHtcbiAgICAgICAgY29udGVudCArPSBcIn1cIjtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgfSkuam9pbihcIlwiKTtcbiAgfTsgLy8gaW1wb3J0IGEgbGlzdCBvZiBtb2R1bGVzIGludG8gdGhlIGxpc3RcblxuXG4gIGxpc3QuaSA9IGZ1bmN0aW9uIGkobW9kdWxlcywgbWVkaWEsIGRlZHVwZSwgc3VwcG9ydHMsIGxheWVyKSB7XG4gICAgaWYgKHR5cGVvZiBtb2R1bGVzID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBtb2R1bGVzID0gW1tudWxsLCBtb2R1bGVzLCB1bmRlZmluZWRdXTtcbiAgICB9XG5cbiAgICB2YXIgYWxyZWFkeUltcG9ydGVkTW9kdWxlcyA9IHt9O1xuXG4gICAgaWYgKGRlZHVwZSkge1xuICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IHRoaXMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgIHZhciBpZCA9IHRoaXNbX2ldWzBdO1xuXG4gICAgICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICAgICAgYWxyZWFkeUltcG9ydGVkTW9kdWxlc1tpZF0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yICh2YXIgX2kyID0gMDsgX2kyIDwgbW9kdWxlcy5sZW5ndGg7IF9pMisrKSB7XG4gICAgICB2YXIgaXRlbSA9IFtdLmNvbmNhdChtb2R1bGVzW19pMl0pO1xuXG4gICAgICBpZiAoZGVkdXBlICYmIGFscmVhZHlJbXBvcnRlZE1vZHVsZXNbaXRlbVswXV0pIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgbGF5ZXIgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBpdGVtWzVdID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgaXRlbVs1XSA9IGxheWVyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGl0ZW1bMV0gPSBcIkBsYXllclwiLmNvbmNhdChpdGVtWzVdLmxlbmd0aCA+IDAgPyBcIiBcIi5jb25jYXQoaXRlbVs1XSkgOiBcIlwiLCBcIiB7XCIpLmNvbmNhdChpdGVtWzFdLCBcIn1cIik7XG4gICAgICAgICAgaXRlbVs1XSA9IGxheWVyO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChtZWRpYSkge1xuICAgICAgICBpZiAoIWl0ZW1bMl0pIHtcbiAgICAgICAgICBpdGVtWzJdID0gbWVkaWE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaXRlbVsxXSA9IFwiQG1lZGlhIFwiLmNvbmNhdChpdGVtWzJdLCBcIiB7XCIpLmNvbmNhdChpdGVtWzFdLCBcIn1cIik7XG4gICAgICAgICAgaXRlbVsyXSA9IG1lZGlhO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChzdXBwb3J0cykge1xuICAgICAgICBpZiAoIWl0ZW1bNF0pIHtcbiAgICAgICAgICBpdGVtWzRdID0gXCJcIi5jb25jYXQoc3VwcG9ydHMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGl0ZW1bMV0gPSBcIkBzdXBwb3J0cyAoXCIuY29uY2F0KGl0ZW1bNF0sIFwiKSB7XCIpLmNvbmNhdChpdGVtWzFdLCBcIn1cIik7XG4gICAgICAgICAgaXRlbVs0XSA9IHN1cHBvcnRzO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGxpc3QucHVzaChpdGVtKTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIGxpc3Q7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVtKSB7XG4gIHZhciBjb250ZW50ID0gaXRlbVsxXTtcbiAgdmFyIGNzc01hcHBpbmcgPSBpdGVtWzNdO1xuXG4gIGlmICghY3NzTWFwcGluZykge1xuICAgIHJldHVybiBjb250ZW50O1xuICB9XG5cbiAgaWYgKHR5cGVvZiBidG9hID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICB2YXIgYmFzZTY0ID0gYnRvYSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoY3NzTWFwcGluZykpKSk7XG4gICAgdmFyIGRhdGEgPSBcInNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LFwiLmNvbmNhdChiYXNlNjQpO1xuICAgIHZhciBzb3VyY2VNYXBwaW5nID0gXCIvKiMgXCIuY29uY2F0KGRhdGEsIFwiICovXCIpO1xuICAgIHZhciBzb3VyY2VVUkxzID0gY3NzTWFwcGluZy5zb3VyY2VzLm1hcChmdW5jdGlvbiAoc291cmNlKSB7XG4gICAgICByZXR1cm4gXCIvKiMgc291cmNlVVJMPVwiLmNvbmNhdChjc3NNYXBwaW5nLnNvdXJjZVJvb3QgfHwgXCJcIikuY29uY2F0KHNvdXJjZSwgXCIgKi9cIik7XG4gICAgfSk7XG4gICAgcmV0dXJuIFtjb250ZW50XS5jb25jYXQoc291cmNlVVJMcykuY29uY2F0KFtzb3VyY2VNYXBwaW5nXSkuam9pbihcIlxcblwiKTtcbiAgfVxuXG4gIHJldHVybiBbY29udGVudF0uam9pbihcIlxcblwiKTtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBzdHlsZXNJbkRPTSA9IFtdO1xuXG5mdW5jdGlvbiBnZXRJbmRleEJ5SWRlbnRpZmllcihpZGVudGlmaWVyKSB7XG4gIHZhciByZXN1bHQgPSAtMTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0eWxlc0luRE9NLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKHN0eWxlc0luRE9NW2ldLmlkZW50aWZpZXIgPT09IGlkZW50aWZpZXIpIHtcbiAgICAgIHJlc3VsdCA9IGk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBtb2R1bGVzVG9Eb20obGlzdCwgb3B0aW9ucykge1xuICB2YXIgaWRDb3VudE1hcCA9IHt9O1xuICB2YXIgaWRlbnRpZmllcnMgPSBbXTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgaXRlbSA9IGxpc3RbaV07XG4gICAgdmFyIGlkID0gb3B0aW9ucy5iYXNlID8gaXRlbVswXSArIG9wdGlvbnMuYmFzZSA6IGl0ZW1bMF07XG4gICAgdmFyIGNvdW50ID0gaWRDb3VudE1hcFtpZF0gfHwgMDtcbiAgICB2YXIgaWRlbnRpZmllciA9IFwiXCIuY29uY2F0KGlkLCBcIiBcIikuY29uY2F0KGNvdW50KTtcbiAgICBpZENvdW50TWFwW2lkXSA9IGNvdW50ICsgMTtcbiAgICB2YXIgaW5kZXhCeUlkZW50aWZpZXIgPSBnZXRJbmRleEJ5SWRlbnRpZmllcihpZGVudGlmaWVyKTtcbiAgICB2YXIgb2JqID0ge1xuICAgICAgY3NzOiBpdGVtWzFdLFxuICAgICAgbWVkaWE6IGl0ZW1bMl0sXG4gICAgICBzb3VyY2VNYXA6IGl0ZW1bM10sXG4gICAgICBzdXBwb3J0czogaXRlbVs0XSxcbiAgICAgIGxheWVyOiBpdGVtWzVdXG4gICAgfTtcblxuICAgIGlmIChpbmRleEJ5SWRlbnRpZmllciAhPT0gLTEpIHtcbiAgICAgIHN0eWxlc0luRE9NW2luZGV4QnlJZGVudGlmaWVyXS5yZWZlcmVuY2VzKys7XG4gICAgICBzdHlsZXNJbkRPTVtpbmRleEJ5SWRlbnRpZmllcl0udXBkYXRlcihvYmopO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgdXBkYXRlciA9IGFkZEVsZW1lbnRTdHlsZShvYmosIG9wdGlvbnMpO1xuICAgICAgb3B0aW9ucy5ieUluZGV4ID0gaTtcbiAgICAgIHN0eWxlc0luRE9NLnNwbGljZShpLCAwLCB7XG4gICAgICAgIGlkZW50aWZpZXI6IGlkZW50aWZpZXIsXG4gICAgICAgIHVwZGF0ZXI6IHVwZGF0ZXIsXG4gICAgICAgIHJlZmVyZW5jZXM6IDFcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlkZW50aWZpZXJzLnB1c2goaWRlbnRpZmllcik7XG4gIH1cblxuICByZXR1cm4gaWRlbnRpZmllcnM7XG59XG5cbmZ1bmN0aW9uIGFkZEVsZW1lbnRTdHlsZShvYmosIG9wdGlvbnMpIHtcbiAgdmFyIGFwaSA9IG9wdGlvbnMuZG9tQVBJKG9wdGlvbnMpO1xuICBhcGkudXBkYXRlKG9iaik7XG5cbiAgdmFyIHVwZGF0ZXIgPSBmdW5jdGlvbiB1cGRhdGVyKG5ld09iaikge1xuICAgIGlmIChuZXdPYmopIHtcbiAgICAgIGlmIChuZXdPYmouY3NzID09PSBvYmouY3NzICYmIG5ld09iai5tZWRpYSA9PT0gb2JqLm1lZGlhICYmIG5ld09iai5zb3VyY2VNYXAgPT09IG9iai5zb3VyY2VNYXAgJiYgbmV3T2JqLnN1cHBvcnRzID09PSBvYmouc3VwcG9ydHMgJiYgbmV3T2JqLmxheWVyID09PSBvYmoubGF5ZXIpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBhcGkudXBkYXRlKG9iaiA9IG5ld09iaik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZW1vdmUoKTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIHVwZGF0ZXI7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGxpc3QsIG9wdGlvbnMpIHtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIGxpc3QgPSBsaXN0IHx8IFtdO1xuICB2YXIgbGFzdElkZW50aWZpZXJzID0gbW9kdWxlc1RvRG9tKGxpc3QsIG9wdGlvbnMpO1xuICByZXR1cm4gZnVuY3Rpb24gdXBkYXRlKG5ld0xpc3QpIHtcbiAgICBuZXdMaXN0ID0gbmV3TGlzdCB8fCBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGFzdElkZW50aWZpZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaWRlbnRpZmllciA9IGxhc3RJZGVudGlmaWVyc1tpXTtcbiAgICAgIHZhciBpbmRleCA9IGdldEluZGV4QnlJZGVudGlmaWVyKGlkZW50aWZpZXIpO1xuICAgICAgc3R5bGVzSW5ET01baW5kZXhdLnJlZmVyZW5jZXMtLTtcbiAgICB9XG5cbiAgICB2YXIgbmV3TGFzdElkZW50aWZpZXJzID0gbW9kdWxlc1RvRG9tKG5ld0xpc3QsIG9wdGlvbnMpO1xuXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGxhc3RJZGVudGlmaWVycy5sZW5ndGg7IF9pKyspIHtcbiAgICAgIHZhciBfaWRlbnRpZmllciA9IGxhc3RJZGVudGlmaWVyc1tfaV07XG5cbiAgICAgIHZhciBfaW5kZXggPSBnZXRJbmRleEJ5SWRlbnRpZmllcihfaWRlbnRpZmllcik7XG5cbiAgICAgIGlmIChzdHlsZXNJbkRPTVtfaW5kZXhdLnJlZmVyZW5jZXMgPT09IDApIHtcbiAgICAgICAgc3R5bGVzSW5ET01bX2luZGV4XS51cGRhdGVyKCk7XG5cbiAgICAgICAgc3R5bGVzSW5ET00uc3BsaWNlKF9pbmRleCwgMSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGFzdElkZW50aWZpZXJzID0gbmV3TGFzdElkZW50aWZpZXJzO1xuICB9O1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIG1lbW8gPSB7fTtcbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuXG5mdW5jdGlvbiBnZXRUYXJnZXQodGFyZ2V0KSB7XG4gIGlmICh0eXBlb2YgbWVtb1t0YXJnZXRdID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgdmFyIHN0eWxlVGFyZ2V0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0YXJnZXQpOyAvLyBTcGVjaWFsIGNhc2UgdG8gcmV0dXJuIGhlYWQgb2YgaWZyYW1lIGluc3RlYWQgb2YgaWZyYW1lIGl0c2VsZlxuXG4gICAgaWYgKHdpbmRvdy5IVE1MSUZyYW1lRWxlbWVudCAmJiBzdHlsZVRhcmdldCBpbnN0YW5jZW9mIHdpbmRvdy5IVE1MSUZyYW1lRWxlbWVudCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gVGhpcyB3aWxsIHRocm93IGFuIGV4Y2VwdGlvbiBpZiBhY2Nlc3MgdG8gaWZyYW1lIGlzIGJsb2NrZWRcbiAgICAgICAgLy8gZHVlIHRvIGNyb3NzLW9yaWdpbiByZXN0cmljdGlvbnNcbiAgICAgICAgc3R5bGVUYXJnZXQgPSBzdHlsZVRhcmdldC5jb250ZW50RG9jdW1lbnQuaGVhZDtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgICAgICAgc3R5bGVUYXJnZXQgPSBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIG1lbW9bdGFyZ2V0XSA9IHN0eWxlVGFyZ2V0O1xuICB9XG5cbiAgcmV0dXJuIG1lbW9bdGFyZ2V0XTtcbn1cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuXG5cbmZ1bmN0aW9uIGluc2VydEJ5U2VsZWN0b3IoaW5zZXJ0LCBzdHlsZSkge1xuICB2YXIgdGFyZ2V0ID0gZ2V0VGFyZ2V0KGluc2VydCk7XG5cbiAgaWYgKCF0YXJnZXQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb3VsZG4ndCBmaW5kIGEgc3R5bGUgdGFyZ2V0LiBUaGlzIHByb2JhYmx5IG1lYW5zIHRoYXQgdGhlIHZhbHVlIGZvciB0aGUgJ2luc2VydCcgcGFyYW1ldGVyIGlzIGludmFsaWQuXCIpO1xuICB9XG5cbiAgdGFyZ2V0LmFwcGVuZENoaWxkKHN0eWxlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpbnNlcnRCeVNlbGVjdG9yOyIsIlwidXNlIHN0cmljdFwiO1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cbmZ1bmN0aW9uIGluc2VydFN0eWxlRWxlbWVudChvcHRpb25zKSB7XG4gIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInN0eWxlXCIpO1xuICBvcHRpb25zLnNldEF0dHJpYnV0ZXMoZWxlbWVudCwgb3B0aW9ucy5hdHRyaWJ1dGVzKTtcbiAgb3B0aW9ucy5pbnNlcnQoZWxlbWVudCwgb3B0aW9ucy5vcHRpb25zKTtcbiAgcmV0dXJuIGVsZW1lbnQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaW5zZXJ0U3R5bGVFbGVtZW50OyIsIlwidXNlIHN0cmljdFwiO1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cbmZ1bmN0aW9uIHNldEF0dHJpYnV0ZXNXaXRob3V0QXR0cmlidXRlcyhzdHlsZUVsZW1lbnQpIHtcbiAgdmFyIG5vbmNlID0gdHlwZW9mIF9fd2VicGFja19ub25jZV9fICE9PSBcInVuZGVmaW5lZFwiID8gX193ZWJwYWNrX25vbmNlX18gOiBudWxsO1xuXG4gIGlmIChub25jZSkge1xuICAgIHN0eWxlRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJub25jZVwiLCBub25jZSk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzZXRBdHRyaWJ1dGVzV2l0aG91dEF0dHJpYnV0ZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuZnVuY3Rpb24gYXBwbHkoc3R5bGVFbGVtZW50LCBvcHRpb25zLCBvYmopIHtcbiAgdmFyIGNzcyA9IFwiXCI7XG5cbiAgaWYgKG9iai5zdXBwb3J0cykge1xuICAgIGNzcyArPSBcIkBzdXBwb3J0cyAoXCIuY29uY2F0KG9iai5zdXBwb3J0cywgXCIpIHtcIik7XG4gIH1cblxuICBpZiAob2JqLm1lZGlhKSB7XG4gICAgY3NzICs9IFwiQG1lZGlhIFwiLmNvbmNhdChvYmoubWVkaWEsIFwiIHtcIik7XG4gIH1cblxuICB2YXIgbmVlZExheWVyID0gdHlwZW9mIG9iai5sYXllciAhPT0gXCJ1bmRlZmluZWRcIjtcblxuICBpZiAobmVlZExheWVyKSB7XG4gICAgY3NzICs9IFwiQGxheWVyXCIuY29uY2F0KG9iai5sYXllci5sZW5ndGggPiAwID8gXCIgXCIuY29uY2F0KG9iai5sYXllcikgOiBcIlwiLCBcIiB7XCIpO1xuICB9XG5cbiAgY3NzICs9IG9iai5jc3M7XG5cbiAgaWYgKG5lZWRMYXllcikge1xuICAgIGNzcyArPSBcIn1cIjtcbiAgfVxuXG4gIGlmIChvYmoubWVkaWEpIHtcbiAgICBjc3MgKz0gXCJ9XCI7XG4gIH1cblxuICBpZiAob2JqLnN1cHBvcnRzKSB7XG4gICAgY3NzICs9IFwifVwiO1xuICB9XG5cbiAgdmFyIHNvdXJjZU1hcCA9IG9iai5zb3VyY2VNYXA7XG5cbiAgaWYgKHNvdXJjZU1hcCAmJiB0eXBlb2YgYnRvYSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIGNzcyArPSBcIlxcbi8qIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsXCIuY29uY2F0KGJ0b2EodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KHNvdXJjZU1hcCkpKSksIFwiICovXCIpO1xuICB9IC8vIEZvciBvbGQgSUVcblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgICovXG5cblxuICBvcHRpb25zLnN0eWxlVGFnVHJhbnNmb3JtKGNzcywgc3R5bGVFbGVtZW50LCBvcHRpb25zLm9wdGlvbnMpO1xufVxuXG5mdW5jdGlvbiByZW1vdmVTdHlsZUVsZW1lbnQoc3R5bGVFbGVtZW50KSB7XG4gIC8vIGlzdGFuYnVsIGlnbm9yZSBpZlxuICBpZiAoc3R5bGVFbGVtZW50LnBhcmVudE5vZGUgPT09IG51bGwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBzdHlsZUVsZW1lbnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzdHlsZUVsZW1lbnQpO1xufVxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5cblxuZnVuY3Rpb24gZG9tQVBJKG9wdGlvbnMpIHtcbiAgdmFyIHN0eWxlRWxlbWVudCA9IG9wdGlvbnMuaW5zZXJ0U3R5bGVFbGVtZW50KG9wdGlvbnMpO1xuICByZXR1cm4ge1xuICAgIHVwZGF0ZTogZnVuY3Rpb24gdXBkYXRlKG9iaikge1xuICAgICAgYXBwbHkoc3R5bGVFbGVtZW50LCBvcHRpb25zLCBvYmopO1xuICAgIH0sXG4gICAgcmVtb3ZlOiBmdW5jdGlvbiByZW1vdmUoKSB7XG4gICAgICByZW1vdmVTdHlsZUVsZW1lbnQoc3R5bGVFbGVtZW50KTtcbiAgICB9XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZG9tQVBJOyIsIlwidXNlIHN0cmljdFwiO1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cbmZ1bmN0aW9uIHN0eWxlVGFnVHJhbnNmb3JtKGNzcywgc3R5bGVFbGVtZW50KSB7XG4gIGlmIChzdHlsZUVsZW1lbnQuc3R5bGVTaGVldCkge1xuICAgIHN0eWxlRWxlbWVudC5zdHlsZVNoZWV0LmNzc1RleHQgPSBjc3M7XG4gIH0gZWxzZSB7XG4gICAgd2hpbGUgKHN0eWxlRWxlbWVudC5maXJzdENoaWxkKSB7XG4gICAgICBzdHlsZUVsZW1lbnQucmVtb3ZlQ2hpbGQoc3R5bGVFbGVtZW50LmZpcnN0Q2hpbGQpO1xuICAgIH1cblxuICAgIHN0eWxlRWxlbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjc3MpKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0eWxlVGFnVHJhbnNmb3JtOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXNzZXJ0VGhpc0luaXRpYWxpemVkXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2tcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzc1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2RlZmluZVByb3BlcnR5XCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZ2V0UHJvdG90eXBlT2ZcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbmhlcml0c1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvcG9zc2libGVDb25zdHJ1Y3RvclJldHVyblwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL3NsaWNlZFRvQXJyYXlcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy90b0NvbnN1bWFibGVBcnJheVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAanMtam9kYS9jb3JlXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkB0aHgvZGF0ZVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAdGh4L21vbmV5XCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkB0aHgveXVwLXR5cGVzXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImRlYnVnXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImV2ZW50ZW1pdHRlcjNcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZmxhdFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJmb3JtaWtcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiaW5wdXRtYXNrXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImpzLW1vbmV5XCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImxvZGFzaC9nZXRcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwibG9kYXNoL3Byb3BlcnR5XCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImxvZGFzaC91bmlxXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlYWN0XCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlYWN0LWRhdGVwaWNrZXJcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3Qtcm91dGVyLWRvbVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdC10YWJsZVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdC9qc3gtZGV2LXJ1bnRpbWVcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwic2VtYW50aWMtdWktcmVhY3RcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwidXNlLWRlZXAtY29tcGFyZS1lZmZlY3RcIik7IiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHRpZDogbW9kdWxlSWQsXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXShtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIi8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSAobW9kdWxlKSA9PiB7XG5cdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuXHRcdCgpID0+IChtb2R1bGVbJ2RlZmF1bHQnXSkgOlxuXHRcdCgpID0+IChtb2R1bGUpO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCB7IGE6IGdldHRlciB9KTtcblx0cmV0dXJuIGdldHRlcjtcbn07IiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKSIsIi8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uciA9IChleHBvcnRzKSA9PiB7XG5cdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuXHR9XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG59OyIsIi8vIERhdGVcbmV4cG9ydCB0eXBlIHtEYXRlUGlja2VyfSBmcm9tICcuL2RhdGUvRGF0ZVBpY2tlcic7XG5leHBvcnQge0xvY2FsRGF0ZVBpY2tlcn0gZnJvbSAnLi9kYXRlL0xvY2FsRGF0ZVBpY2tlcic7XG5leHBvcnQgdHlwZSB7TG9jYWxEYXRlUGlja2VyUHJvcHN9IGZyb20gJy4vZGF0ZS9Mb2NhbERhdGVQaWNrZXInO1xuZXhwb3J0IHtMb2NhbE1vbnRoU2VsZWN0fSBmcm9tICcuL2RhdGUvTG9jYWxNb250aFNlbGVjdCc7XG5leHBvcnQgdHlwZSB7TG9jYWxNb250aFNlbGVjdFByb3BzfSBmcm9tICcuL2RhdGUvTG9jYWxNb250aFNlbGVjdCc7XG5leHBvcnQge0xvY2FsVGltZVBpY2tlcn0gZnJvbSAnLi9kYXRlL0xvY2FsVGltZVBpY2tlcic7XG5leHBvcnQgdHlwZSB7TG9jYWxUaW1lUGlja2VyUHJvcHN9IGZyb20gJy4vZGF0ZS9Mb2NhbFRpbWVQaWNrZXInO1xuZXhwb3J0IHtNb250aERheVBpY2tlcn0gZnJvbSAnLi9kYXRlL01vbnRoRGF5UGlja2VyJztcbmV4cG9ydCB0eXBlIHtNb250aERheVBpY2tlclByb3BzfSBmcm9tICcuL2RhdGUvTW9udGhEYXlQaWNrZXInO1xuZXhwb3J0IHtNb250aFllYXJQaWNrZXJ9IGZyb20gJy4vZGF0ZS9Nb250aFllYXJQaWNrZXInO1xuZXhwb3J0IHR5cGUge01vbnRoWWVhclBpY2tlclByb3BzfSBmcm9tICcuL2RhdGUvTW9udGhZZWFyUGlja2VyJztcbmV4cG9ydCB7WWVhclNlbGVjdH0gZnJvbSAnLi9kYXRlL1llYXJTZWxlY3QnO1xuZXhwb3J0IHR5cGUge1llYXJTZWxlY3RQcm9wc30gZnJvbSAnLi9kYXRlL1llYXJTZWxlY3QnO1xuXG4vLyBGb3JtXG5leHBvcnQge3VzZVRGb3JtLCBURm9ybX0gZnJvbSAnLi9mb3JtL1RGb3JtJztcbmV4cG9ydCB0eXBlIHtURm9ybVByb3BzfSBmcm9tICcuL2Zvcm0vVEZvcm0nO1xuXG4vLyBJbnB1dHNcbmV4cG9ydCB7TWFza2VkSW5wdXR9IGZyb20gJy4vaW5wdXRzL01hc2tlZElucHV0JztcbmV4cG9ydCB0eXBlIHtNYXNrZWRJbnB1dFByb3BzfSBmcm9tICcuL2lucHV0cy9NYXNrZWRJbnB1dCc7XG5leHBvcnQge1JhZGlvR3JvdXB9IGZyb20gJy4vaW5wdXRzL1JhZGlvR3JvdXAnO1xuZXhwb3J0IHR5cGUge1JhZGlvR3JvdXBQcm9wc30gZnJvbSAnLi9pbnB1dHMvUmFkaW9Hcm91cCc7XG5leHBvcnQge1NjcmlwdGVsLCB3aXRoU2NyaXB0ZWx9IGZyb20gJy4vaW5wdXRzL1NjcmlwdGVsJztcbmV4cG9ydCB0eXBlIHtTY3JpcHRlbFByb3BzLCBTY3JpcHRlbE1lc3NhZ2VDbGFzcywgU2NyaXB0ZWxQZW5TdHlsZX0gZnJvbSAnLi9pbnB1dHMvU2NyaXB0ZWwnO1xuZXhwb3J0IHtTY3JpcHRlbElucHV0fSBmcm9tICcuL2lucHV0cy9TY3JpcHRlbElucHV0JztcbmV4cG9ydCB0eXBlIHtTY3JpcHRlbElucHV0UHJvcHN9IGZyb20gJy4vaW5wdXRzL1NjcmlwdGVsSW5wdXQnO1xuZXhwb3J0IHtQaG9uZUlucHV0fSBmcm9tICcuL2lucHV0cy9QaG9uZUlucHV0JztcbmV4cG9ydCB0eXBlIHtQaG9uZUlucHV0UHJvcHN9IGZyb20gJy4vaW5wdXRzL1Bob25lSW5wdXQnO1xuZXhwb3J0IHtDcmVkaXRDYXJkSW5wdXR9IGZyb20gJy4vaW5wdXRzL0NyZWRpdENhcmRJbnB1dCc7XG5leHBvcnQgdHlwZSB7Q3JlZGl0Q2FyZElucHV0VHlwZX0gZnJvbSAnLi9pbnB1dHMvQ3JlZGl0Q2FyZElucHV0JztcbmV4cG9ydCB7U2luSW5wdXR9IGZyb20gJy4vaW5wdXRzL1NpbklucHV0JztcbmV4cG9ydCB0eXBlIHtTaW5JbnB1dFByb3BzfSBmcm9tICcuL2lucHV0cy9TaW5JbnB1dCc7XG5cbi8vIFRhYmxlXG5leHBvcnQge2FkZFJvd09uVGFiLCBNb25leUVkaXRDZWxsLCBTdHJpbmdFZGl0Q2VsbCwgTW9uZXlTdW1Gb290ZXIsIE1vbmV5Q2VsbCwgVGFibGVJbnB1dCwgSG92ZXJDZWxsLCBEcm9wZG93bkNlbGx9IGZyb20gJy4vaW5wdXRzL1RhYmxlSW5wdXQnO1xuZXhwb3J0IHR5cGUge0FkZFJvd09uVGFiSWZ9IGZyb20gJy4vaW5wdXRzL1RhYmxlSW5wdXQnO1xuXG4vLyBNb25leVxuZXhwb3J0IHtNb25leUlucHV0fSBmcm9tICcuL21vbmV5L01vbmV5SW5wdXQnO1xuZXhwb3J0IHR5cGUge01vbmV5SW5wdXRQcm9wc30gZnJvbSAnLi9tb25leS9Nb25leUlucHV0JztcbmV4cG9ydCB7TW9uZXlDdXJyZW5jeUlucHV0fSBmcm9tICcuL21vbmV5L01vbmV5Q3VycmVuY3lJbnB1dCc7XG5leHBvcnQgdHlwZSB7TW9uZXlDdXJyZW5jeUlucHV0UHJvcHN9IGZyb20gJy4vbW9uZXkvTW9uZXlDdXJyZW5jeUlucHV0JztcblxuLy8gU3RlcFxuZXhwb3J0IHtGb3JtU3RlcCwgU3RlcFByb3ZpZGVyLCB1c2VTdGVwLCBTdGVwfSBmcm9tICcuL3N0ZXAnO1xuIl0sIm5hbWVzIjpbIkRhdGVQaWNrZXIiLCJ0b0RhdGUiLCJ0b0xvY2FsRGF0ZSIsImRlYnVnIiwiUmVhY3QiLCJNYXNrZWREYXRlSW5wdXQiLCJkIiwiTG9jYWxEYXRlUGlja2VyIiwicHJvcHMiLCJtaW5EYXRlIiwibWF4RGF0ZSIsInZhbHVlIiwib25DaGFuZ2UiLCJvbkJsdXIiLCJhcyIsImFjdGlvbiIsImFjdGlvblBvc2l0aW9uIiwiY2xhc3NOYW1lIiwiZXJyb3IiLCJmbHVpZCIsImZvY3VzIiwiaWNvbiIsImljb25Qb3NpdGlvbiIsImludmVydGVkIiwibGFiZWwiLCJsYWJlbFBvc2l0aW9uIiwibG9hZGluZyIsInNpemUiLCJ0YWJJbmRleCIsInRyYW5zcGFyZW50IiwicmVzdCIsInNlbGVjdGVkIiwiaW5wdXRQcm9wcyIsImRhdGUiLCJmb3J3YXJkUmVmIiwiTWFza2VkSW5wdXQiLCJNYXNrZWREYXRlSW5wdXRJbm5lciIsInJlZiIsIm5hbWUiLCJhbGlhcyIsImlucHV0Rm9ybWF0IiwidGFyZ2V0IiwiTG9jYWxEYXRlIiwiU2VsZWN0IiwibW9udGhPcHRpb25zIiwidGV4dCIsImtleSIsIkxvY2FsTW9udGhTZWxlY3QiLCJ5ZWFyIiwiaGFuZGxlQmx1ciIsInRoZVllYXIiLCJub3ciLCJtb250aFZhbHVlIiwiZXYiLCJ2Iiwib2YiLCJMb2NhbFRpbWUiLCJ0b0xvY2FsVGltZSIsIk1hc2tlZFRpbWVJbnB1dCIsIkxvY2FsVGltZVBpY2tlciIsImRpc2FibGVkIiwib2ZTZWNvbmRPZkRheSIsIk1hc2tlZFRpbWVJbnB1dElubmVyIiwiSW5wdXQiLCJtb250aHMiLCJNb250aERheUhlYWRlciIsImdldE1vbnRoIiwiZGVjcmVhc2VNb250aCIsInByZXZNb250aEJ1dHRvbkRpc2FibGVkIiwiaW5jcmVhc2VNb250aCIsIm5leHRNb250aEJ1dHRvbkRpc2FibGVkIiwiTW9udGhEYXlQaWNrZXIiLCJNb250aFllYXJQaWNrZXIiLCJ1bmRlZmluZWQiLCJ3aXRoRGF5T2ZNb250aCIsIm9mRXBvY2hEYXkiLCJwbHVzTW9udGhzIiwibWludXNEYXlzIiwicGx1c1llYXJzIiwiSWNvbiIsIkJ1dHRvbiIsIkRyb3Bkb3duIiwiU2VnbWVudCIsIlllYXJTZWxlY3QiLCJ0aGlzWWVhciIsIkRhdGUiLCJnZXRGdWxsWWVhciIsIm1pblllYXIiLCJtYXhZZWFyIiwiYXZhaWxhYmxlWWVhcnMiLCJpIiwicHVzaCIsInRvU3RyaW5nIiwicGFkZGluZyIsIm1hcmdpbiIsImUiLCJ2YWwiLCJtYXJnaW5SaWdodCIsImlzRnVuY3Rpb24iLCJGb3JtaWtQcm92aWRlciIsImlzRW1wdHlDaGlsZHJlbiIsInVzZVRGb3JtIiwiVEZvcm0iLCJ0YmFnIiwiY29tcG9uZW50IiwicmVuZGVyIiwiY2hpbGRyZW4iLCJpbm5lclJlZiIsInVzZUltcGVyYXRpdmVIYW5kbGUiLCJjaGlsZCIsImNyZWF0ZUVsZW1lbnQiLCJDaGlsZHJlbiIsIm9ubHkiLCJmbGF0dGVuIiwidXNlRm9ybWlrIiwiZ2V0IiwicHJvcGVydHkiLCJ1bmlxIiwidXNlRWZmZWN0IiwidXNlU3RhdGUiLCJNZXNzYWdlIiwiY29uZmlnIiwiZm9ybWlrIiwib25WYWxpZGF0ZSIsImlzVmFsaWQiLCJnZXRTdWJtaXRGbiIsInN1Ym1pdEZvcm0iLCJ2YWx1ZXMiLCJlcnJvckNsZWFyZWQiLCJzZXRFcnJvckNsZWFyZWQiLCJtZXNzYWdlIiwiaXNTdWJtaXR0aW5nIiwiZmxhdFdhcm5pbmdzIiwiZXJyb3JzIiwiZmxhdFRvdWNoZWQiLCJ0b3VjaGVkIiwid2FybmluZ3MiLCJPYmplY3QiLCJrZXlzIiwicmVkdWNlIiwibWVtbyIsImlzVG91Y2hlZCIsInN1Ym1pdENvdW50IiwiZXJyb3JIZWFkZXIiLCJncmFwaFFMRXJyb3JzIiwiZXJyb3JNZXNzYWdlIiwic2xpY2UiLCJpbmRleE9mIiwiaGFzV2FybmluZ3MiLCJsZW5ndGgiLCJoYXNFcnJvcnMiLCJyZW5kZXJXYXJuaW5ncyIsIm92ZXJmbG93IiwibWF4SGVpZ2h0IiwibWFwIiwibXNnIiwiZmllbGRFcnJvciIsImZpZWxkTmFtZSIsImhhbmRsZVN1Ym1pdCIsInN1Ym1pdERpc2FibGVkIiwiZXJyb3JNYXJrZWRDbGVhcmVkIiwiZm9ybUVycm9yIiwiQ3JlZGl0Q2FyZENhcmROYW1lRW51bSIsIkNyZWRpdENhcmRJbnB1dCIsImNhcmRUeXBlIiwidHlwZSIsInNldFR5cGUiLCJ2YWxpZGF0ZSIsInZhbHVlQXJyYXkiLCJjYXJkTnVtYmVyIiwiZmlsdGVyIiwiYiIsImpvaW4iLCJWaXNhIiwicGFyc2VJbnQiLCJzdWJzdHIiLCJNYXN0ZXJDYXJkIiwiY3JlZGl0Q2FyZE1hc2siLCJtYXNrIiwiaXNDb21wbGV0ZSIsImF1dG9Vbm1hc2siLCJJbnB1dG1hc2siLCJ1c2VSZWYiLCJ1c2VEZWVwQ29tcGFyZUVmZmVjdCIsImlucHV0RWxlbWVudCIsIm1hc2tJbnN0YW5jZSIsImN1cnJlbnQiLCJFcnJvciIsIm9uY29tcGxldGUiLCJvbmNsZWFyZWQiLCJvbmluY29tcGxldGUiLCJyZW1vdmUiLCJQaG9uZUlucHV0IiwiZXh0ZW5zaW9uIiwiZ3JlZWR5IiwiY2xvbmVFbGVtZW50IiwiRm9ybSIsIlJhZGlvIiwiRm9ybVJhZGlvIiwiUmFkaW9Hcm91cCIsImFyZ3MiLCJjaGVja2VkIiwiU2NyaXB0ZWxDb250ZXh0IiwiU2NyaXB0ZWxTb2NrZXQiLCJTY3JpcHRlbCIsIm9tbmlzY3JpcHRVcmwiLCJpbWFnZVR5cGUiLCJzY2FsZSIsImNyb3AiLCJwZW5TdHlsZSIsInNvY2tldCIsInNldFJlbmRlciIsInNldExvYWRpbmciLCJpc1NpZ25pbmciLCJzZXRJc1NpZ25pbmciLCJvbiIsImNsb3NlIiwicmVuZGVySW1hZ2UiLCJjcmVhdGVDb250ZXh0Iiwid2l0aFNjcmlwdGVsIiwiU2NyaXB0ZWxQZW5TdHlsZSIsIlNjcmlwdGVsTWVzc2FnZUNsYXNzIiwiRXZlbnRFbWl0dGVyIiwic2VydmVyQ29ubmVjdGVkIiwic2VydmVySW5mbyIsImRldmljZXMiLCJkZXZpY2UiLCJzZW5kIiwiSlNPTiIsInN0cmluZ2lmeSIsIl9jbGFzcyIsInV1aWQiLCJkZXZpY2VDb25uZWN0ZWQiLCJyZW5kZXJTZXR0aW5ncyIsInJlbmRlckZ1bmN0aW9uIiwiUGxhaW4iLCJldmVudEVtaXR0ZXIiLCJ3aWR0aCIsImhlaWdodCIsImVtaXQiLCJvcHRpb25zIiwiV2ViU29ja2V0Iiwib25vcGVuIiwib25jbG9zZSIsIm9ubWVzc2FnZSIsInBhcnNlIiwiZGF0YSIsIkNvbm5lY3Rpb25PcGVuIiwiRGV2aWNlT3BlblJlc3BvbnNlIiwiUmVuZGVyZWRJbWFnZSIsIlNjcmlwdGVsRXhjZXB0aW9uIiwiQnV0dG9uUHJlc3MiLCJCdXR0b25Eb3duIiwiUGVuTW92ZSIsIlBlblVwIiwiV3JhcHBlZENvbXBvbmVudCIsInNjcmlwdGVsUHJvcHMiLCJ1c2VDb250ZXh0IiwiSW1hZ2UiLCJTY3JpcHRlbElucHV0IiwiYnV0dG9uVGV4dCIsImN0eCIsImVudGVyU2lnbmF0dXJlIiwic2V0RW50ZXJTaWduYXR1cmUiLCJ0aW1lc3RhbXAiLCJjYWxpYnJhdGUiLCJMYWJlbCIsIlBvcHVwIiwiU2luSW5wdXQiLCJoYXNTaW4iLCJlZGl0Iiwic2V0RWRpdCIsImRvRGVsZXRlIiwic2V0RG9EZWxldGUiLCJoYW5kbGVDaGFuZ2UiLCJwYWRkaW5nVG9wIiwiRHJvcGRvd25DZWxsIiwiZHJvcGRvd25Qcm9wcyIsIkRyb3Bkb3duQ2VsbEZuIiwicm93SW5kZXgiLCJyb3ciLCJpbmRleCIsImlkIiwiY29sdW1uIiwidXBkYXRlRGF0YSIsImV2ZW50IiwiSG92ZXJDZWxsIiwiSG92ZXJDZWxsRm4iLCJBY3Rpb24iLCJob3ZlclJvdyIsInRleHRBbGlnbiIsImZvcm1hdE1vbmV5IiwiTW9uZXlDZWxsIiwiTW9uZXlDZWxsRm4iLCJvdmVycmlkZVZhbHVlIiwiTW9uZXlJbnB1dCIsImFkZFJvd09uVGFiIiwiTW9uZXlFZGl0Q2VsbCIsIm9wdHMiLCJNb25leUVkaXRDZWxsRm4iLCJpbml0aWFsVmFsdWUiLCJzZXRWYWx1ZSIsImFkZFJvd09uVGFiSWYiLCJ0b01vbmV5IiwiTW9uZXlTdW1Gb290ZXIiLCJpbmZvIiwic3VtIiwicm93cyIsImFkZCIsIlN0cmluZ0VkaXRDZWxsIiwiU3RyaW5nRWRpdENlbGxGbiIsIkZpZWxkQXJyYXkiLCJ1c2VNZW1vIiwidXNlVGFibGUiLCJUYWJsZSIsIlRhYmxlSW5wdXRUYWJsZSIsImNvbHVtbnMiLCJhcnJheUhlbHBlcnMiLCJzZXRGaWVsZFZhbHVlIiwiY3JlYXRlUm93IiwidGFibGVQcm9wcyIsImhlYWRlclJvd1Byb3BzIiwiaGVhZGVyQ2VsbFByb3BzIiwiYm9keVByb3BzIiwicm93UHJvcHMiLCJjZWxsUHJvcHMiLCJmb290ZXJDZWxsUHJvcHMiLCJmb290ZXJSb3dQcm9wcyIsImNvbHMiLCJ2YWxzIiwic2V0SG92ZXJSb3ciLCJjb2x1bW5JZCIsImFkZFJvdyIsImdldFRhYmxlUHJvcHMiLCJnZXRUYWJsZUJvZHlQcm9wcyIsImhlYWRlckdyb3VwcyIsInByZXBhcmVSb3ciLCJmb290ZXJHcm91cHMiLCJoYXNGb290ZXIiLCJzb21lIiwiZmciLCJoZWFkZXJzIiwiZmdoIiwiRm9vdGVyIiwiZm9vdGVyIiwiZ3JvdXAiLCJnZXRGb290ZXJHcm91cFByb3BzIiwiZ2V0Rm9vdGVyUHJvcHMiLCJoZWFkZXJHcm91cCIsImdldEhlYWRlckdyb3VwUHJvcHMiLCJnZXRIZWFkZXJQcm9wcyIsImdldFJvd1Byb3BzIiwiY2VsbHMiLCJjZWxsIiwiZ2V0Q2VsbFByb3BzIiwiVGFibGVJbnB1dCIsInJvd3NMZW5ndGgiLCJzaGlmdEtleSIsIk1vbmV5IiwidXNlTW9uZXlJbnB1dCIsIk1vbmV5Q3VycmVuY3lJbnB1dCIsInByZWZpeCIsImRlZmF1bHRDdXJyZW5jeSIsInNob3dQcmVmaXgiLCJ3aG9sZU51bWJlciIsImN1cnJlbmNpZXMiLCJsb2NrZWQiLCJoYW5kbGVEcm9wZG93bkNoYW5nZSIsImFtb3VudCIsImN1cnJlbmN5IiwiZGVjaW1hbF9kaWdpdHMiLCJjb2RlIiwiQ3VycmVuY2llcyIsImlzTW9uZXlPYmplY3QiLCJhZGpDdXJyZW5jeSIsIkNBRCIsImdyb3VwU2VwYXJhdG9yIiwiZGlnaXRzIiwiZGlnaXRzT3B0aW9uYWwiLCJzeW1ib2wiLCJwbGFjZWhvbGRlciIsImlucHV0VmFsdWUiLCJlcXVhbHMiLCJ2YWx1ZUluTW9uZXkiLCJ1c2VTdGVwIiwiRm9ybVN0ZXAiLCJzdGF0ZSIsInN0ZXBLZXkiLCJmb3JtIiwib25TdWJtaXQiLCJ0aXRsZSIsIlN0ZXAiLCJQcm9tcHQiLCJHcmlkIiwiU2VtYW50aWNTdGVwIiwiU3RlcENvbnRleHQiLCJTdGVwUHJvdmlkZXIiLCJzZXRTdGF0ZSIsImN1cnJlbnRTdGVwIiwic2V0Q3VycmVudFN0ZXAiLCJzZXRJc1N1Ym1pdHRpbmciLCJ0aXRsZXMiLCJmb3JFYWNoIiwiaGlkZGVuIiwic3RlcCIsIm9uTmF2aWdhdGUiLCJ2ZXJ0aWNhbCIsIndhcm5PblJlcm91dGUiXSwic291cmNlUm9vdCI6IiJ9
5482
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ0FBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7O0FBRUEsSUFBTU0sQ0FBQyxHQUFHSCw0Q0FBSyxDQUFDLG1DQUFELENBQWY7QUFjTyxTQUFTSSxlQUFULENBQXlCQyxLQUF6QixFQUFtRTtBQUN6RSxNQUNDQyxPQURELEdBdUJJRCxLQXZCSixDQUNDQyxPQUREO0FBQUEsTUFFQ0MsT0FGRCxHQXVCSUYsS0F2QkosQ0FFQ0UsT0FGRDtBQUFBLE1BR0NDLEtBSEQsR0F1QklILEtBdkJKLENBR0NHLEtBSEQ7QUFBQSxNQUlDQyxTQUpELEdBdUJJSixLQXZCSixDQUlDSSxRQUpEO0FBQUEsTUFLQ0MsTUFMRCxHQXVCSUwsS0F2QkosQ0FLQ0ssTUFMRDtBQUFBLE1BTUNDLEVBTkQsR0F1QklOLEtBdkJKLENBTUNNLEVBTkQ7QUFBQSxNQU9DQyxNQVBELEdBdUJJUCxLQXZCSixDQU9DTyxNQVBEO0FBQUEsTUFRQ0MsY0FSRCxHQXVCSVIsS0F2QkosQ0FRQ1EsY0FSRDtBQUFBLE1BU0NDLFNBVEQsR0F1QklULEtBdkJKLENBU0NTLFNBVEQ7QUFBQSxNQVVDQyxLQVZELEdBdUJJVixLQXZCSixDQVVDVSxLQVZEO0FBQUEsTUFXQ0MsS0FYRCxHQXVCSVgsS0F2QkosQ0FXQ1csS0FYRDtBQUFBLE1BWUNDLEtBWkQsR0F1QklaLEtBdkJKLENBWUNZLEtBWkQ7QUFBQSxNQWFDQyxJQWJELEdBdUJJYixLQXZCSixDQWFDYSxJQWJEO0FBQUEsTUFjQ0MsWUFkRCxHQXVCSWQsS0F2QkosQ0FjQ2MsWUFkRDtBQUFBLE1BZUNDLFFBZkQsR0F1QklmLEtBdkJKLENBZUNlLFFBZkQ7QUFBQSxNQWdCQ0MsS0FoQkQsR0F1QkloQixLQXZCSixDQWdCQ2dCLEtBaEJEO0FBQUEsTUFpQkNDLGFBakJELEdBdUJJakIsS0F2QkosQ0FpQkNpQixhQWpCRDtBQUFBLE1Ba0JDQyxPQWxCRCxHQXVCSWxCLEtBdkJKLENBa0JDa0IsT0FsQkQ7QUFBQSxNQW1CQ0MsSUFuQkQsR0F1QkluQixLQXZCSixDQW1CQ21CLElBbkJEO0FBQUEsTUFvQkNDLFFBcEJELEdBdUJJcEIsS0F2QkosQ0FvQkNvQixRQXBCRDtBQUFBLE1BcUJDQyxXQXJCRCxHQXVCSXJCLEtBdkJKLENBcUJDcUIsV0FyQkQ7QUFBQSxNQXNCSUMsSUF0QkoseUZBdUJJdEIsS0F2Qko7O0FBeUJBLE1BQU11QixRQUFRLEdBQUdwQixLQUFLLEdBQUdWLGlEQUFNLENBQUNVLEtBQUQsQ0FBVCxHQUFtQixJQUF6QztBQUVBLE1BQU1xQixVQUFVLEdBQUc7QUFDbEJsQixJQUFBQSxFQUFFLEVBQUZBLEVBRGtCO0FBRWxCQyxJQUFBQSxNQUFNLEVBQU5BLE1BRmtCO0FBR2xCQyxJQUFBQSxjQUFjLEVBQWRBLGNBSGtCO0FBSWxCQyxJQUFBQSxTQUFTLEVBQVRBLFNBSmtCO0FBS2xCQyxJQUFBQSxLQUFLLEVBQUxBLEtBTGtCO0FBTWxCQyxJQUFBQSxLQUFLLEVBQUxBLEtBTmtCO0FBT2xCQyxJQUFBQSxLQUFLLEVBQUxBLEtBUGtCO0FBUWxCQyxJQUFBQSxJQUFJLEVBQUpBLElBUmtCO0FBU2xCQyxJQUFBQSxZQUFZLEVBQVpBLFlBVGtCO0FBVWxCQyxJQUFBQSxRQUFRLEVBQVJBLFFBVmtCO0FBV2xCQyxJQUFBQSxLQUFLLEVBQUxBLEtBWGtCO0FBWWxCQyxJQUFBQSxhQUFhLEVBQWJBLGFBWmtCO0FBYWxCQyxJQUFBQSxPQUFPLEVBQVBBLE9BYmtCO0FBY2xCQyxJQUFBQSxJQUFJLEVBQUpBLElBZGtCO0FBZWxCQyxJQUFBQSxRQUFRLEVBQVJBLFFBZmtCO0FBZ0JsQkMsSUFBQUEsV0FBVyxFQUFYQTtBQWhCa0IsR0FBbkI7QUFtQkEsc0JBQ0MsOERBQUMseURBQUQsa0NBQ0tDLElBREw7QUFFQyxZQUFRLEVBQUVDLFFBRlg7QUFHQyxZQUFRLEVBQUUsa0JBQUFFLElBQUksRUFBSTtBQUNqQixVQUFJckIsU0FBSixFQUFjQSxTQUFRLENBQUNxQixJQUFJLEdBQUcvQixzREFBVyxDQUFDK0IsSUFBRCxDQUFkLEdBQXVCLElBQTVCLENBQVI7QUFDZCxLQUxGO0FBTUMsVUFBTSxFQUFFcEIsTUFOVDtBQU9DLGVBQVcsZUFBRSw4REFBQyw2REFBRCxrQ0FBcUJtQixVQUFyQjtBQUFpQyxZQUFNLEVBQUVuQjtBQUF6QztBQUFBO0FBQUE7QUFBQTtBQUFBLFlBUGQ7QUFRQyxXQUFPLEVBQUVKLE9BQU8sR0FBR1IsaURBQU0sQ0FBQ1EsT0FBRCxDQUFULEdBQXFCLElBUnRDO0FBU0MsV0FBTyxFQUFFQyxPQUFPLEdBQUdULGlEQUFNLENBQUNTLE9BQUQsQ0FBVCxHQUFxQjtBQVR0QztBQUFBO0FBQUE7QUFBQTtBQUFBLFVBREQ7QUFhQTtLQTVEZUg7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDdkJoQjtBQUNBO0FBQ0E7O0FBRUEsSUFBTUQsQ0FBQyxHQUFHSCw0Q0FBSyxDQUFDLG1EQUFELENBQWY7O0FBYUE7QUFDQSxTQUFTaUMsb0JBQVQsQ0FBOEI1QixLQUE5QixFQUFnRzZCLEdBQWhHLEVBQTBHO0FBQ3pHLE1BQU96QixTQUFQLEdBQWtDSixLQUFsQyxDQUFPSSxRQUFQO0FBQUEsTUFBaUIwQixJQUFqQixHQUFrQzlCLEtBQWxDLENBQWlCOEIsSUFBakI7QUFBQSxNQUEwQlIsSUFBMUIseUZBQWtDdEIsS0FBbEM7O0FBRUEsc0JBQ0MsOERBQUMsNERBQUQsa0NBQ0tzQixJQURMO0FBRUMsUUFBSSxFQUFFUSxJQUZQO0FBR0MsUUFBSSxFQUFFO0FBQUNDLE1BQUFBLEtBQUssRUFBRSxVQUFSO0FBQW9CQyxNQUFBQSxXQUFXLEVBQUU7QUFBakMsS0FIUDtBQUlDLFlBQVEsRUFBRSxrQkFBQTdCLEtBQUssRUFBSTtBQUNsQixVQUFJQyxTQUFKLEVBQWNBLFNBQVEsQ0FBQztBQUFDNkIsUUFBQUEsTUFBTSxFQUFFO0FBQUM5QixVQUFBQSxLQUFLLEVBQUVBLEtBQUssSUFBSTtBQUFqQjtBQUFULE9BQUQsQ0FBUjtBQUNkO0FBTkY7QUFBQTtBQUFBO0FBQUE7QUFBQSxVQUREO0FBVUE7O0tBYlF5QjtBQWVGLElBQU0vQixlQUFlLGdCQUFHNkIsaURBQVUsQ0FBQ0Usb0JBQUQsQ0FBbEM7TUFBTS9COzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUVqQ2I7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsSUFBTUMsQ0FBQyxHQUFHSCw0Q0FBSyxDQUFDLG9DQUFELENBQWY7QUFFQSxJQUFNeUMsWUFBWSxHQUFHLENBQ3BCO0FBQUNDLEVBQUFBLElBQUksRUFBRSxTQUFQO0FBQWtCbEMsRUFBQUEsS0FBSyxFQUFFLENBQXpCO0FBQTRCbUMsRUFBQUEsR0FBRyxFQUFFO0FBQWpDLENBRG9CLEVBRXBCO0FBQUNELEVBQUFBLElBQUksRUFBRSxVQUFQO0FBQW1CbEMsRUFBQUEsS0FBSyxFQUFFLENBQTFCO0FBQTZCbUMsRUFBQUEsR0FBRyxFQUFFO0FBQWxDLENBRm9CLEVBR3BCO0FBQUNELEVBQUFBLElBQUksRUFBRSxPQUFQO0FBQWdCbEMsRUFBQUEsS0FBSyxFQUFFLENBQXZCO0FBQTBCbUMsRUFBQUEsR0FBRyxFQUFFO0FBQS9CLENBSG9CLEVBSXBCO0FBQUNELEVBQUFBLElBQUksRUFBRSxPQUFQO0FBQWdCbEMsRUFBQUEsS0FBSyxFQUFFLENBQXZCO0FBQTBCbUMsRUFBQUEsR0FBRyxFQUFFO0FBQS9CLENBSm9CLEVBS3BCO0FBQUNELEVBQUFBLElBQUksRUFBRSxLQUFQO0FBQWNsQyxFQUFBQSxLQUFLLEVBQUUsQ0FBckI7QUFBd0JtQyxFQUFBQSxHQUFHLEVBQUU7QUFBN0IsQ0FMb0IsRUFNcEI7QUFBQ0QsRUFBQUEsSUFBSSxFQUFFLE1BQVA7QUFBZWxDLEVBQUFBLEtBQUssRUFBRSxDQUF0QjtBQUF5Qm1DLEVBQUFBLEdBQUcsRUFBRTtBQUE5QixDQU5vQixFQU9wQjtBQUFDRCxFQUFBQSxJQUFJLEVBQUUsTUFBUDtBQUFlbEMsRUFBQUEsS0FBSyxFQUFFLENBQXRCO0FBQXlCbUMsRUFBQUEsR0FBRyxFQUFFO0FBQTlCLENBUG9CLEVBUXBCO0FBQUNELEVBQUFBLElBQUksRUFBRSxRQUFQO0FBQWlCbEMsRUFBQUEsS0FBSyxFQUFFLENBQXhCO0FBQTJCbUMsRUFBQUEsR0FBRyxFQUFFO0FBQWhDLENBUm9CLEVBU3BCO0FBQUNELEVBQUFBLElBQUksRUFBRSxXQUFQO0FBQW9CbEMsRUFBQUEsS0FBSyxFQUFFLENBQTNCO0FBQThCbUMsRUFBQUEsR0FBRyxFQUFFO0FBQW5DLENBVG9CLEVBVXBCO0FBQUNELEVBQUFBLElBQUksRUFBRSxTQUFQO0FBQWtCbEMsRUFBQUEsS0FBSyxFQUFFLEVBQXpCO0FBQTZCbUMsRUFBQUEsR0FBRyxFQUFFO0FBQWxDLENBVm9CLEVBV3BCO0FBQUNELEVBQUFBLElBQUksRUFBRSxVQUFQO0FBQW1CbEMsRUFBQUEsS0FBSyxFQUFFLEVBQTFCO0FBQThCbUMsRUFBQUEsR0FBRyxFQUFFO0FBQW5DLENBWG9CLEVBWXBCO0FBQUNELEVBQUFBLElBQUksRUFBRSxVQUFQO0FBQW1CbEMsRUFBQUEsS0FBSyxFQUFFLEVBQTFCO0FBQThCbUMsRUFBQUEsR0FBRyxFQUFFO0FBQW5DLENBWm9CLENBQXJCO0FBd0JPLFNBQVNDLGdCQUFULENBQTBCdkMsS0FBMUIsRUFBcUU7QUFDM0UsTUFBT0csS0FBUCxHQUFxREgsS0FBckQsQ0FBT0csS0FBUDtBQUFBLE1BQWNDLFNBQWQsR0FBcURKLEtBQXJELENBQWNJLFFBQWQ7QUFBQSxNQUF3Qm9DLElBQXhCLEdBQXFEeEMsS0FBckQsQ0FBd0J3QyxJQUF4QjtBQUFBLE1BQThCQyxVQUE5QixHQUFxRHpDLEtBQXJELENBQThCeUMsVUFBOUI7QUFBQSxNQUE2Q25CLElBQTdDLHlGQUFxRHRCLEtBQXJEOztBQUVBLE1BQU0wQyxPQUFPLEdBQUdGLElBQUksSUFBSU4sd0RBQUEsR0FBZ0JNLElBQWhCLEVBQXhCO0FBRUEsc0JBQ0MsOERBQUMscURBQUQ7QUFDQyxlQUFXLEVBQUMsY0FEYjtBQUVDLFdBQU8sRUFBRUosWUFGVjtBQUdDLFNBQUssRUFBRWpDLEtBQUssR0FBR0EsS0FBSyxDQUFDeUMsVUFBTixFQUFILEdBQXdCLEVBSHJDO0FBSUMsWUFBUSxFQUFFLGtCQUFDQyxFQUFELEVBQUtDLENBQUwsRUFBVztBQUNwQixVQUFJMUMsU0FBSixFQUFjO0FBQ2IsWUFBSSxPQUFPMEMsQ0FBQyxDQUFDM0MsS0FBVCxLQUFtQixRQUF2QixFQUFpQztBQUNoQ0MsVUFBQUEsU0FBUSxDQUFDMEMsQ0FBQyxHQUFHWix1REFBQSxDQUFhUSxPQUFiLEVBQXNCSSxDQUFDLENBQUMzQyxLQUF4QixFQUErQixDQUEvQixDQUFILEdBQXVDLElBQXpDLENBQVI7QUFDQSxTQUZELE1BRU87QUFDTkMsVUFBQUEsU0FBUSxDQUFDLElBQUQsQ0FBUjtBQUNBO0FBQ0Q7QUFDRCxLQVpGO0FBYUMsVUFBTSxFQUFFcUM7QUFiVCxLQWNLbkIsSUFkTDtBQUFBO0FBQUE7QUFBQTtBQUFBLFVBREQ7QUFrQkE7S0F2QmVpQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBRS9CaEI7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBOztBQUVBLElBQU16QyxDQUFDLEdBQUdILDRDQUFLLENBQUMsbUNBQUQsQ0FBZjtBQVlPLFNBQVN3RCxlQUFULENBQXlCbkQsS0FBekIsRUFBbUU7QUFDekUsTUFDQ0csS0FERCxHQXFCSUgsS0FyQkosQ0FDQ0csS0FERDtBQUFBLE1BRUNDLFNBRkQsR0FxQklKLEtBckJKLENBRUNJLFFBRkQ7QUFBQSxNQUdDRSxFQUhELEdBcUJJTixLQXJCSixDQUdDTSxFQUhEO0FBQUEsTUFJQ0MsTUFKRCxHQXFCSVAsS0FyQkosQ0FJQ08sTUFKRDtBQUFBLE1BS0NDLGNBTEQsR0FxQklSLEtBckJKLENBS0NRLGNBTEQ7QUFBQSxNQU1DQyxTQU5ELEdBcUJJVCxLQXJCSixDQU1DUyxTQU5EO0FBQUEsTUFPQzJDLFFBUEQsR0FxQklwRCxLQXJCSixDQU9Db0QsUUFQRDtBQUFBLE1BUUMxQyxLQVJELEdBcUJJVixLQXJCSixDQVFDVSxLQVJEO0FBQUEsTUFTQ0MsS0FURCxHQXFCSVgsS0FyQkosQ0FTQ1csS0FURDtBQUFBLE1BVUNDLEtBVkQsR0FxQklaLEtBckJKLENBVUNZLEtBVkQ7QUFBQSxNQVdDQyxJQVhELEdBcUJJYixLQXJCSixDQVdDYSxJQVhEO0FBQUEsTUFZQ0MsWUFaRCxHQXFCSWQsS0FyQkosQ0FZQ2MsWUFaRDtBQUFBLE1BYUNDLFFBYkQsR0FxQklmLEtBckJKLENBYUNlLFFBYkQ7QUFBQSxNQWNDQyxLQWRELEdBcUJJaEIsS0FyQkosQ0FjQ2dCLEtBZEQ7QUFBQSxNQWVDQyxhQWZELEdBcUJJakIsS0FyQkosQ0FlQ2lCLGFBZkQ7QUFBQSxNQWdCQ0MsT0FoQkQsR0FxQklsQixLQXJCSixDQWdCQ2tCLE9BaEJEO0FBQUEsTUFpQkNDLElBakJELEdBcUJJbkIsS0FyQkosQ0FpQkNtQixJQWpCRDtBQUFBLE1Ba0JDQyxRQWxCRCxHQXFCSXBCLEtBckJKLENBa0JDb0IsUUFsQkQ7QUFBQSxNQW1CQ0MsV0FuQkQsR0FxQklyQixLQXJCSixDQW1CQ3FCLFdBbkJEO0FBQUEsTUFvQklDLElBcEJKLHlGQXFCSXRCLEtBckJKOztBQXVCQSxNQUFJdUIsUUFBSjtBQUNBLE1BQUksT0FBT3BCLEtBQVAsS0FBaUIsUUFBckIsRUFBK0JvQixRQUFRLEdBQUc5QixpREFBTSxDQUFDdUQsa0VBQUEsQ0FBd0I3QyxLQUF4QixDQUFELENBQWpCLENBQS9CLEtBQ0tvQixRQUFRLEdBQUdwQixLQUFLLEdBQUdWLGlEQUFNLENBQUNVLEtBQUQsQ0FBVCxHQUFtQixJQUFuQztBQUVMLE1BQU1xQixVQUFVLEdBQUc7QUFDbEJsQixJQUFBQSxFQUFFLEVBQUZBLEVBRGtCO0FBRWxCQyxJQUFBQSxNQUFNLEVBQU5BLE1BRmtCO0FBR2xCQyxJQUFBQSxjQUFjLEVBQWRBLGNBSGtCO0FBSWxCQyxJQUFBQSxTQUFTLEVBQVRBLFNBSmtCO0FBS2xCMkMsSUFBQUEsUUFBUSxFQUFSQSxRQUxrQjtBQU1sQjFDLElBQUFBLEtBQUssRUFBTEEsS0FOa0I7QUFPbEJDLElBQUFBLEtBQUssRUFBTEEsS0FQa0I7QUFRbEJDLElBQUFBLEtBQUssRUFBTEEsS0FSa0I7QUFTbEJDLElBQUFBLElBQUksRUFBSkEsSUFUa0I7QUFVbEJDLElBQUFBLFlBQVksRUFBWkEsWUFWa0I7QUFXbEJDLElBQUFBLFFBQVEsRUFBUkEsUUFYa0I7QUFZbEJDLElBQUFBLEtBQUssRUFBTEEsS0Faa0I7QUFhbEJDLElBQUFBLGFBQWEsRUFBYkEsYUFia0I7QUFjbEJDLElBQUFBLE9BQU8sRUFBUEEsT0Fka0I7QUFlbEJDLElBQUFBLElBQUksRUFBSkEsSUFma0I7QUFnQmxCQyxJQUFBQSxRQUFRLEVBQVJBLFFBaEJrQjtBQWlCbEJDLElBQUFBLFdBQVcsRUFBWEE7QUFqQmtCLEdBQW5CO0FBb0JBLHNCQUNDLDhEQUFDLHlEQUFELGtDQUNLQyxJQURMO0FBRUMsWUFBUSxFQUFFQyxRQUZYO0FBR0MsWUFBUSxFQUFFLGtCQUFBRSxJQUFJLEVBQUk7QUFDakIsVUFBSXJCLFNBQUosRUFBY0EsU0FBUSxDQUFDcUIsSUFBSSxHQUFHd0Isc0RBQVcsQ0FBQ3hCLElBQUQsQ0FBZCxHQUF1QixJQUE1QixDQUFSO0FBQ2QsS0FMRjtBQU1DLGtCQUFjLE1BTmY7QUFPQyxzQkFBa0IsTUFQbkI7QUFRQyxpQkFBYSxFQUFFLEVBUmhCO0FBU0MsZUFBVyxFQUFDLE1BVGI7QUFVQyxjQUFVLEVBQUMsVUFWWjtBQVdDLGVBQVcsZUFBRSw4REFBQyw2REFBRCxvQkFBcUJELFVBQXJCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFYZDtBQUFBO0FBQUE7QUFBQTtBQUFBLFVBREQ7QUFlQTtLQS9EZTJCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3JCaEI7QUFDQTtBQUNBOztBQUVBLElBQU1yRCxDQUFDLEdBQUdILDRDQUFLLENBQUMsbURBQUQsQ0FBZjs7QUFZQTtBQUNBLFNBQVMyRCxvQkFBVCxDQUE4QnRELEtBQTlCLEVBQWdHNkIsR0FBaEcsRUFBMEc7QUFDekcsTUFBT3pCLFNBQVAsR0FBNEJKLEtBQTVCLENBQU9JLFFBQVA7QUFBQSxNQUFvQmtCLElBQXBCLHlGQUE0QnRCLEtBQTVCOztBQUVBLHNCQUNDLDhEQUFDLDREQUFEO0FBQ0MsUUFBSSxFQUFFO0FBQUMrQixNQUFBQSxLQUFLLEVBQUUsVUFBUjtBQUFvQkMsTUFBQUEsV0FBVyxFQUFFO0FBQWpDLEtBRFA7QUFFQyxZQUFRLEVBQUUsa0JBQUE3QixLQUFLLEVBQUk7QUFDbEIsVUFBSUMsU0FBSixFQUFjQSxTQUFRLENBQUM7QUFBQzZCLFFBQUFBLE1BQU0sRUFBRTtBQUFDOUIsVUFBQUEsS0FBSyxFQUFFQSxLQUFLLElBQUk7QUFBakI7QUFBVCxPQUFELENBQVI7QUFDZDtBQUpGLEtBS0ttQixJQUxMO0FBQUE7QUFBQTtBQUFBO0FBQUEsVUFERDtBQVNBOztLQVpRZ0M7QUFjRixJQUFNSixlQUFlLGdCQUFHeEIsaURBQVUsQ0FBQzRCLG9CQUFELENBQWxDO01BQU1KOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FFOUJiO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7OztBQUVBLElBQU1wRCxDQUFDLEdBQUdILDRDQUFLLENBQUMsa0NBQUQsQ0FBZjtBQUVBLElBQU02RCxNQUFNLEdBQUcsQ0FBQyxTQUFELEVBQVksVUFBWixFQUF3QixPQUF4QixFQUFpQyxPQUFqQyxFQUEwQyxLQUExQyxFQUFpRCxNQUFqRCxFQUF5RCxNQUF6RCxFQUFpRSxRQUFqRSxFQUEyRSxXQUEzRSxFQUF3RixTQUF4RixFQUFtRyxVQUFuRyxFQUErRyxVQUEvRyxDQUFmOztBQWdCQSxTQUFTQyxjQUFULENBQXdCekQsS0FBeEIsRUFBb0Q7QUFDbkQsc0JBQ0M7QUFBQSw0QkFDQztBQUFLLGVBQVMsRUFBQyxpQ0FBZjtBQUFBLGdCQUFrRHdELE1BQU0sQ0FBQ3hELEtBQUssQ0FBQ3lCLElBQU4sQ0FBV2lDLFFBQVgsRUFBRDtBQUF4RDtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBREQsZUFFQztBQUNDLFVBQUksRUFBQyxRQUROO0FBRUMsZUFBUyxFQUFDLHFFQUZYO0FBR0Msb0JBQVcsZ0JBSFo7QUFJQyxhQUFPLEVBQUUxRCxLQUFLLENBQUMyRCxhQUpoQjtBQUtDLGNBQVEsRUFBRTNELEtBQUssQ0FBQzRELHVCQUxqQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUZELGVBV0M7QUFDQyxVQUFJLEVBQUMsUUFETjtBQUVDLGVBQVMsRUFBQyxpRUFGWDtBQUdDLG9CQUFXLFlBSFo7QUFJQyxhQUFPLEVBQUU1RCxLQUFLLENBQUM2RCxhQUpoQjtBQUtDLGNBQVEsRUFBRTdELEtBQUssQ0FBQzhELHVCQUxqQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQVhEO0FBQUEsa0JBREQ7QUF1QkE7O0tBeEJRTDtBQW9DRixTQUFTTSxjQUFULENBQXdCL0QsS0FBeEIsRUFBaUU7QUFDdkUsTUFDQ0csS0FERCxHQXFCSUgsS0FyQkosQ0FDQ0csS0FERDtBQUFBLE1BRUNDLFNBRkQsR0FxQklKLEtBckJKLENBRUNJLFFBRkQ7QUFBQSxNQUdDRSxFQUhELEdBcUJJTixLQXJCSixDQUdDTSxFQUhEO0FBQUEsTUFJQ0MsTUFKRCxHQXFCSVAsS0FyQkosQ0FJQ08sTUFKRDtBQUFBLE1BS0NDLGNBTEQsR0FxQklSLEtBckJKLENBS0NRLGNBTEQ7QUFBQSxNQU1DQyxTQU5ELEdBcUJJVCxLQXJCSixDQU1DUyxTQU5EO0FBQUEsTUFPQzJDLFFBUEQsR0FxQklwRCxLQXJCSixDQU9Db0QsUUFQRDtBQUFBLE1BUUMxQyxLQVJELEdBcUJJVixLQXJCSixDQVFDVSxLQVJEO0FBQUEsTUFTQ0MsS0FURCxHQXFCSVgsS0FyQkosQ0FTQ1csS0FURDtBQUFBLE1BVUNDLEtBVkQsR0FxQklaLEtBckJKLENBVUNZLEtBVkQ7QUFBQSxNQVdDQyxJQVhELEdBcUJJYixLQXJCSixDQVdDYSxJQVhEO0FBQUEsTUFZQ0MsWUFaRCxHQXFCSWQsS0FyQkosQ0FZQ2MsWUFaRDtBQUFBLE1BYUNDLFFBYkQsR0FxQklmLEtBckJKLENBYUNlLFFBYkQ7QUFBQSxNQWNDQyxLQWRELEdBcUJJaEIsS0FyQkosQ0FjQ2dCLEtBZEQ7QUFBQSxNQWVDQyxhQWZELEdBcUJJakIsS0FyQkosQ0FlQ2lCLGFBZkQ7QUFBQSxNQWdCQ0MsT0FoQkQsR0FxQklsQixLQXJCSixDQWdCQ2tCLE9BaEJEO0FBQUEsTUFpQkNDLElBakJELEdBcUJJbkIsS0FyQkosQ0FpQkNtQixJQWpCRDtBQUFBLE1Ba0JDQyxRQWxCRCxHQXFCSXBCLEtBckJKLENBa0JDb0IsUUFsQkQ7QUFBQSxNQW1CQ0MsV0FuQkQsR0FxQklyQixLQXJCSixDQW1CQ3FCLFdBbkJEO0FBQUEsTUFvQklDLElBcEJKLHlGQXFCSXRCLEtBckJKOztBQXVCQSxNQUFNdUIsUUFBUSxHQUFHcEIsS0FBSyxHQUFHVixpREFBTSxDQUFDVSxLQUFELENBQVQsR0FBbUIsSUFBekM7QUFFQSxNQUFNcUIsVUFBVSxHQUFHO0FBQ2xCbEIsSUFBQUEsRUFBRSxFQUFGQSxFQURrQjtBQUVsQkMsSUFBQUEsTUFBTSxFQUFOQSxNQUZrQjtBQUdsQkMsSUFBQUEsY0FBYyxFQUFkQSxjQUhrQjtBQUlsQkMsSUFBQUEsU0FBUyxFQUFUQSxTQUprQjtBQUtsQjJDLElBQUFBLFFBQVEsRUFBUkEsUUFMa0I7QUFNbEIxQyxJQUFBQSxLQUFLLEVBQUxBLEtBTmtCO0FBT2xCQyxJQUFBQSxLQUFLLEVBQUxBLEtBUGtCO0FBUWxCQyxJQUFBQSxLQUFLLEVBQUxBLEtBUmtCO0FBU2xCQyxJQUFBQSxJQUFJLEVBQUpBLElBVGtCO0FBVWxCQyxJQUFBQSxZQUFZLEVBQVpBLFlBVmtCO0FBV2xCQyxJQUFBQSxRQUFRLEVBQVJBLFFBWGtCO0FBWWxCQyxJQUFBQSxLQUFLLEVBQUxBLEtBWmtCO0FBYWxCQyxJQUFBQSxhQUFhLEVBQWJBLGFBYmtCO0FBY2xCQyxJQUFBQSxPQUFPLEVBQVBBLE9BZGtCO0FBZWxCQyxJQUFBQSxJQUFJLEVBQUpBLElBZmtCO0FBZ0JsQkMsSUFBQUEsUUFBUSxFQUFSQSxRQWhCa0I7QUFpQmxCQyxJQUFBQSxXQUFXLEVBQVhBO0FBakJrQixHQUFuQjtBQW9CQSxzQkFDQyw4REFBQyx5REFBRCxrQ0FDS0MsSUFETDtBQUVDLFlBQVEsRUFBRUMsUUFGWDtBQUdDLFlBQVEsRUFBRSxrQkFBQUUsSUFBSSxFQUFJO0FBQ2pCLFVBQUlyQixTQUFKLEVBQWNBLFNBQVEsQ0FBQ3FCLElBQUksR0FBRy9CLHNEQUFXLENBQUMrQixJQUFELENBQWQsR0FBdUIsSUFBNUIsQ0FBUjtBQUNkLEtBTEY7QUFNQyxlQUFXLGVBQUUsOERBQUMsb0RBQUQsb0JBQVdELFVBQVg7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQU5kO0FBT0Msc0JBQWtCLEVBQUVpQyxjQVByQjtBQVFDLGNBQVUsRUFBQztBQVJaO0FBQUE7QUFBQTtBQUFBO0FBQUEsVUFERDtBQVlBO01BMURlTTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FFOURoQjtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7O0FBRUEsSUFBTWpFLENBQUMsR0FBR0gsNENBQUssQ0FBQyxtQ0FBRCxDQUFmO0FBY08sU0FBU3FFLGVBQVQsQ0FBeUJoRSxLQUF6QixFQUFtRTtBQUN6RSxNQUNDRyxLQURELEdBdUJJSCxLQXZCSixDQUNDRyxLQUREO0FBQUEsTUFFQ0MsU0FGRCxHQXVCSUosS0F2QkosQ0FFQ0ksUUFGRDtBQUFBLE1BR0NFLEVBSEQsR0F1QklOLEtBdkJKLENBR0NNLEVBSEQ7QUFBQSxNQUlDQyxNQUpELEdBdUJJUCxLQXZCSixDQUlDTyxNQUpEO0FBQUEsTUFLQ0MsY0FMRCxHQXVCSVIsS0F2QkosQ0FLQ1EsY0FMRDtBQUFBLE1BTUNDLFNBTkQsR0F1QklULEtBdkJKLENBTUNTLFNBTkQ7QUFBQSxNQU9DMkMsUUFQRCxHQXVCSXBELEtBdkJKLENBT0NvRCxRQVBEO0FBQUEsTUFRQzFDLEtBUkQsR0F1QklWLEtBdkJKLENBUUNVLEtBUkQ7QUFBQSxNQVNDQyxLQVRELEdBdUJJWCxLQXZCSixDQVNDVyxLQVREO0FBQUEsTUFVQ0MsS0FWRCxHQXVCSVosS0F2QkosQ0FVQ1ksS0FWRDtBQUFBLE1BV0NDLElBWEQsR0F1QkliLEtBdkJKLENBV0NhLElBWEQ7QUFBQSxNQVlDQyxZQVpELEdBdUJJZCxLQXZCSixDQVlDYyxZQVpEO0FBQUEsTUFhQ0MsUUFiRCxHQXVCSWYsS0F2QkosQ0FhQ2UsUUFiRDtBQUFBLE1BY0NDLEtBZEQsR0F1QkloQixLQXZCSixDQWNDZ0IsS0FkRDtBQUFBLE1BZUNDLGFBZkQsR0F1QklqQixLQXZCSixDQWVDaUIsYUFmRDtBQUFBLE1BZ0JDQyxPQWhCRCxHQXVCSWxCLEtBdkJKLENBZ0JDa0IsT0FoQkQ7QUFBQSxNQWlCQ0MsSUFqQkQsR0F1QkluQixLQXZCSixDQWlCQ21CLElBakJEO0FBQUEsTUFrQkNDLFFBbEJELEdBdUJJcEIsS0F2QkosQ0FrQkNvQixRQWxCRDtBQUFBLE1BbUJDQyxXQW5CRCxHQXVCSXJCLEtBdkJKLENBbUJDcUIsV0FuQkQ7QUFBQSxNQW9CQ3BCLE9BcEJELEdBdUJJRCxLQXZCSixDQW9CQ0MsT0FwQkQ7QUFBQSxNQXFCQ0MsT0FyQkQsR0F1QklGLEtBdkJKLENBcUJDRSxPQXJCRDtBQUFBLE1Bc0JJb0IsSUF0QkoseUZBdUJJdEIsS0F2Qko7O0FBeUJBLE1BQU11QixRQUFRLEdBQUdwQixLQUFLLEdBQUdWLGlEQUFNLENBQUNVLEtBQUQsQ0FBVCxHQUFtQixJQUF6QztBQUVBLE1BQU1xQixVQUFVLEdBQUc7QUFDbEJsQixJQUFBQSxFQUFFLEVBQUZBLEVBRGtCO0FBRWxCQyxJQUFBQSxNQUFNLEVBQU5BLE1BRmtCO0FBR2xCQyxJQUFBQSxjQUFjLEVBQWRBLGNBSGtCO0FBSWxCQyxJQUFBQSxTQUFTLEVBQVRBLFNBSmtCO0FBS2xCMkMsSUFBQUEsUUFBUSxFQUFSQSxRQUxrQjtBQU1sQjFDLElBQUFBLEtBQUssRUFBTEEsS0FOa0I7QUFPbEJDLElBQUFBLEtBQUssRUFBTEEsS0FQa0I7QUFRbEJDLElBQUFBLEtBQUssRUFBTEEsS0FSa0I7QUFTbEJDLElBQUFBLElBQUksRUFBSkEsSUFUa0I7QUFVbEJDLElBQUFBLFlBQVksRUFBWkEsWUFWa0I7QUFXbEJDLElBQUFBLFFBQVEsRUFBUkEsUUFYa0I7QUFZbEJDLElBQUFBLEtBQUssRUFBTEEsS0Faa0I7QUFhbEJDLElBQUFBLGFBQWEsRUFBYkEsYUFia0I7QUFjbEJDLElBQUFBLE9BQU8sRUFBUEEsT0Fka0I7QUFlbEJDLElBQUFBLElBQUksRUFBSkEsSUFma0I7QUFnQmxCQyxJQUFBQSxRQUFRLEVBQVJBLFFBaEJrQjtBQWlCbEJDLElBQUFBLFdBQVcsRUFBWEE7QUFqQmtCLEdBQW5CO0FBb0JBLHNCQUNDLDhEQUFDLHlEQUFELGtDQUNLQyxJQURMO0FBRUMsWUFBUSxFQUFFQyxRQUZYO0FBR0MsWUFBUSxFQUFFLGtCQUFBRSxJQUFJLEVBQUk7QUFDakIsVUFBSXJCLFNBQUosRUFBY0EsU0FBUSxDQUFDcUIsSUFBSSxHQUFHL0Isc0RBQVcsQ0FBQytCLElBQUQsQ0FBZCxHQUF1QndDLFNBQTVCLENBQVI7QUFDZCxLQUxGO0FBTUMsZUFBVyxlQUFFLDhEQUFDLG9EQUFELG9CQUFXekMsVUFBWDtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBTmQ7QUFPQyxjQUFVLEVBQUMsV0FQWjtBQVFDLHVCQUFtQixNQVJwQjtBQVNDLFdBQU8sRUFBRS9CLGlEQUFNLENBQUMsQ0FBQVEsT0FBTyxTQUFQLElBQUFBLE9BQU8sV0FBUCxZQUFBQSxPQUFPLENBQUVpRSxjQUFULENBQXdCLENBQXhCLE1BQThCaEMsK0RBQUEsQ0FBcUIsQ0FBckIsQ0FBL0IsQ0FUaEI7QUFVQyxXQUFPLEVBQUV6QyxpREFBTSxDQUFDLENBQUFTLE9BQU8sU0FBUCxJQUFBQSxPQUFPLFdBQVAsWUFBQUEsT0FBTyxDQUFFa0UsVUFBVCxDQUFvQixDQUFwQixFQUF1QkYsY0FBdkIsQ0FBc0MsQ0FBdEMsRUFBeUNHLFNBQXpDLENBQW1ELENBQW5ELE1BQXlEbkMsd0RBQUEsR0FBZ0JvQyxTQUFoQixDQUEwQixFQUExQixDQUExRDtBQVZoQjtBQUFBO0FBQUE7QUFBQTtBQUFBLFVBREQ7QUFjQTtLQTlEZU47Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBRXRCaEI7QUFDQTtBQUNBOztBQUVBLElBQU1sRSxDQUFDLEdBQUdILDRDQUFLLENBQUMsOEJBQUQsQ0FBZjtBQVdPLFNBQVNnRixVQUFULENBQW9CM0UsS0FBcEIsRUFBNkU7QUFDbkYsTUFBTTRFLFFBQVEsR0FBRyxJQUFJQyxJQUFKLEdBQVdDLFdBQVgsRUFBakI7O0FBQ0EsTUFBTzNFLEtBQVAsR0FBc0ZILEtBQXRGLENBQU9HLEtBQVA7QUFBQSx1QkFBc0ZILEtBQXRGLENBQWMrRSxPQUFkO0FBQUEsTUFBY0EsT0FBZCwrQkFBd0IsSUFBeEI7QUFBQSx1QkFBc0YvRSxLQUF0RixDQUE4QmdGLE9BQTlCO0FBQUEsTUFBOEJBLE9BQTlCLCtCQUF3Q0osUUFBeEM7QUFBQSxNQUFrRHhFLFNBQWxELEdBQXNGSixLQUF0RixDQUFrREksUUFBbEQ7QUFBQSxNQUE0REMsTUFBNUQsR0FBc0ZMLEtBQXRGLENBQTRESyxNQUE1RDtBQUFBLE1BQW9FSyxLQUFwRSxHQUFzRlYsS0FBdEYsQ0FBb0VVLEtBQXBFO0FBQUEsTUFBOEVZLElBQTlFLHlGQUFzRnRCLEtBQXRGOztBQUVBLE1BQU1pRixjQUFtQyxHQUFHLEVBQTVDOztBQUNBLE9BQUssSUFBSUMsQ0FBQyxHQUFHRixPQUFiLEVBQXNCRSxDQUFDLElBQUlILE9BQTNCLEVBQW9DRyxDQUFDLEVBQXJDLEVBQXlDO0FBQ3hDRCxJQUFBQSxjQUFjLENBQUNFLElBQWYsQ0FBb0I7QUFBQ2hGLE1BQUFBLEtBQUssRUFBRStFLENBQVI7QUFBVzdDLE1BQUFBLElBQUksRUFBRTZDLENBQUMsQ0FBQ0UsUUFBRixFQUFqQjtBQUErQjlDLE1BQUFBLEdBQUcsRUFBRTRDO0FBQXBDLEtBQXBCO0FBQ0E7O0FBRUQsc0JBQ0MsOERBQUMsc0RBQUQ7QUFBUyxTQUFLLE1BQWQ7QUFBZSxXQUFPLE1BQXRCO0FBQXVCLFNBQUssRUFBRTtBQUFDRyxNQUFBQSxPQUFPLEVBQUUsQ0FBVjtBQUFhQyxNQUFBQSxNQUFNLEVBQUU7QUFBckI7QUFBOUIsS0FBMkRoRSxJQUEzRDtBQUFBLDRCQUNDLDhEQUFDLHFEQUFEO0FBQ0MsV0FBSyxNQUROO0FBRUMsVUFBSSxNQUZMO0FBR0MsVUFBSSxFQUFDLFFBSE47QUFJQyxXQUFLLEVBQUVaLEtBQUssR0FBRyxLQUFILEdBQVcsT0FKeEI7QUFLQyxjQUFRLEVBQUVQLEtBQUssSUFBSTRFLE9BTHBCO0FBTUMsYUFBTyxFQUFFLG1CQUFNO0FBQ2QsWUFBSTNFLFNBQUosRUFBY0EsU0FBUSxDQUFDRCxLQUFLLEdBQUcsQ0FBVCxDQUFSO0FBQ2QsT0FSRjtBQVNDLFlBQU0sRUFBRUUsTUFUVDtBQUFBLDZCQVdDLDhEQUFDLG1EQUFEO0FBQU0sWUFBSSxFQUFDO0FBQVg7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVhEO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFERCxlQWNDLDhEQUFDLHVEQUFEO0FBQ0MsVUFBSSxlQUFFO0FBQUE7QUFBQTtBQUFBO0FBQUEsY0FEUDtBQUVDLFlBQU0sTUFGUDtBQUdDLFdBQUssTUFITjtBQUlDLGVBQVMsTUFKVjtBQUtDLFdBQUssRUFBRUYsS0FMUjtBQU1DLGFBQU8sRUFBRThFLGNBTlY7QUFPQyxjQUFRLEVBQUUsa0JBQUNNLENBQUQsRUFBSUMsR0FBSixFQUFZO0FBQ3JCLFlBQUksT0FBT0EsR0FBRyxDQUFDckYsS0FBWCxLQUFxQixRQUFyQixJQUFpQ0MsU0FBckMsRUFBK0NBLFNBQVEsQ0FBQ29GLEdBQUcsQ0FBQ3JGLEtBQUwsQ0FBUjtBQUMvQyxPQVRGO0FBVUMsV0FBSyxFQUFFTyxLQVZSO0FBV0MsWUFBTSxFQUFFTDtBQVhUO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFkRCxlQTJCQyw4REFBQyxxREFBRDtBQUNDLFdBQUssTUFETjtBQUVDLFVBQUksTUFGTDtBQUdDLFVBQUksRUFBQyxRQUhOO0FBSUMsV0FBSyxFQUFFSyxLQUFLLEdBQUcsS0FBSCxHQUFXLE9BSnhCO0FBS0MsY0FBUSxFQUFFUCxLQUFLLElBQUk2RSxPQUxwQjtBQU1DLGFBQU8sRUFBRSxtQkFBTTtBQUNkLFlBQUk1RSxTQUFKLEVBQWNBLFNBQVEsQ0FBQ0QsS0FBSyxHQUFHLENBQVQsQ0FBUjtBQUNkLE9BUkY7QUFTQyxZQUFNLEVBQUVFLE1BVFQ7QUFVQyxXQUFLLEVBQUU7QUFBQ29GLFFBQUFBLFdBQVcsRUFBRTtBQUFkLE9BVlI7QUFBQSw2QkFZQyw4REFBQyxtREFBRDtBQUFNLFlBQUksRUFBQztBQUFYO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFaRDtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBM0JEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxVQUREO0FBNENBO0tBckRlZDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FFZmhCO0FBQ0E7QUFDQTtBQUVBOztBQUVBLElBQU03RSxDQUFDLEdBQUdILDRDQUFLLENBQUMseUJBQUQsQ0FBZjtBQUVPLFNBQVNtRyxLQUFULENBQTJEOUYsS0FBM0QsRUFBdUY7QUFBQTs7QUFDN0YsTUFBTStGLElBQUksR0FBR0YsbURBQVEsQ0FBUzdGLEtBQVQsQ0FBckI7QUFDQSxNQUFPZ0csU0FBUCxHQUFnRGhHLEtBQWhELENBQU9nRyxTQUFQO0FBQUEsTUFBa0JDLE1BQWxCLEdBQWdEakcsS0FBaEQsQ0FBa0JpRyxNQUFsQjtBQUFBLE1BQTBCQyxRQUExQixHQUFnRGxHLEtBQWhELENBQTBCa0csUUFBMUI7QUFBQSxNQUFvQ0MsUUFBcEMsR0FBZ0RuRyxLQUFoRCxDQUFvQ21HLFFBQXBDLENBRjZGLENBSTdGOztBQUNBdkcsRUFBQUEsZ0VBQUEsQ0FBMEJ1RyxRQUExQixFQUFvQztBQUFBLFdBQU1KLElBQU47QUFBQSxHQUFwQztBQUVBLE1BQUlNLEtBQUssR0FBRyxJQUFaOztBQUNBLE1BQUlMLFNBQUosRUFBZTtBQUNkO0FBQ0FLLElBQUFBLEtBQUssZ0JBQUd6RywwREFBQSxDQUFvQm9HLFNBQXBCLEVBQStCRCxJQUEvQixDQUFSO0FBQ0EsR0FIRCxNQUdPLElBQUlFLE1BQUosRUFBWTtBQUNsQkksSUFBQUEsS0FBSyxHQUFHSixNQUFNLENBQUNGLElBQUQsQ0FBZDtBQUNBLEdBRk0sTUFFQSxJQUFJRyxRQUFKLEVBQWM7QUFDcEIsUUFBSVIsa0RBQVUsQ0FBQ1EsUUFBRCxDQUFkLEVBQTBCO0FBQ3pCRyxNQUFBQSxLQUFLLEdBQUlILFFBQUQsQ0FBMkRILElBQTNELENBQVI7QUFDQSxLQUZELE1BRU8sSUFBSSxDQUFDSCx1REFBZSxDQUFDTSxRQUFELENBQXBCLEVBQWdDO0FBQ3RDRyxNQUFBQSxLQUFLLEdBQUd6RywwREFBQSxDQUFvQnNHLFFBQXBCLENBQVI7QUFDQTtBQUNEOztBQUVELHNCQUFPLDhEQUFDLGtEQUFEO0FBQWdCLFNBQUssRUFBRUgsSUFBdkI7QUFBQSxjQUE4Qk07QUFBOUI7QUFBQTtBQUFBO0FBQUE7QUFBQSxVQUFQO0FBQ0E7O0dBdEJlUDtVQUNGRDs7O0tBREVDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNSaEI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFHTyxTQUFTRCxRQUFULENBQW1Gb0IsTUFBbkYsRUFBK0g7QUFBQTs7QUFDckksTUFBT2hCLE1BQVAsR0FBb0NnQixNQUFwQyxDQUFPaEIsTUFBUDtBQUFBLE1BQWVDLFFBQWYsR0FBb0NlLE1BQXBDLENBQWVmLFFBQWY7QUFBQSxNQUE0QjVFLElBQTVCLHlGQUFvQzJGLE1BQXBDLGFBRHFJLENBRXJJOzs7QUFDQSxNQUFNQyxNQUFNLEdBQUdSLGlEQUFTLENBQUNwRixJQUFELENBQXhCO0FBRUF3RixFQUFBQSxnREFBUyxDQUFDLFlBQU07QUFDZixRQUFJRyxNQUFNLENBQUNFLFVBQVgsRUFBdUJGLE1BQU0sQ0FBQ0UsVUFBUCxDQUFrQkQsTUFBTSxDQUFDRSxPQUF6QjtBQUN2QixHQUZRLEVBRU4sQ0FBQ0YsTUFBTSxDQUFDRSxPQUFSLEVBQWlCSCxNQUFNLENBQUNFLFVBQXhCLENBRk0sQ0FBVCxDQUxxSSxDQVNySTs7QUFDQUwsRUFBQUEsZ0RBQVMsQ0FBQyxZQUFNO0FBQ2YsUUFBSUcsTUFBTSxDQUFDSSxXQUFYLEVBQXdCSixNQUFNLENBQUNJLFdBQVAsQ0FBbUJILE1BQU0sQ0FBQ0ksVUFBMUI7QUFDeEIsR0FGUSxFQUVOLENBQUNKLE1BQU0sQ0FBQ0ksVUFBUixFQUFvQkwsTUFBTSxDQUFDSSxXQUEzQixDQUZNLENBQVQsQ0FWcUksQ0Fjckk7O0FBQ0FQLEVBQUFBLGdEQUFTLENBQUMsWUFBTTtBQUNmLFFBQUlHLE1BQU0sQ0FBQzdHLFFBQVgsRUFBcUI2RyxNQUFNLENBQUM3RyxRQUFQLENBQWdCOEcsTUFBTSxDQUFDSyxNQUF2QjtBQUNyQixHQUZRLEVBRU4sQ0FBQ0wsTUFBTSxDQUFDSyxNQUFSLENBRk0sQ0FBVCxDQWZxSSxDQW1Cckk7O0FBQ0Esa0JBQXdDUiwrQ0FBUSxDQUFDLEtBQUQsQ0FBaEQ7QUFBQTtBQUFBLE1BQU9TLFlBQVA7QUFBQSxNQUFxQkMsZUFBckI7O0FBQ0FYLEVBQUFBLGdEQUFTLENBQUMsWUFBTTtBQUNmLFFBQUlHLE1BQU0sQ0FBQ3ZHLEtBQVAsSUFBZ0J1RyxNQUFNLENBQUN2RyxLQUFQLENBQWFnSCxPQUE3QixJQUF3QyxDQUFDUixNQUFNLENBQUNTLFlBQXBELEVBQWtFO0FBQ2pFRixNQUFBQSxlQUFlLENBQUMsSUFBRCxDQUFmO0FBQ0E7QUFDRCxHQUpRLEVBSU4sQ0FBQ1AsTUFBTSxDQUFDSyxNQUFSLEVBQWdCTixNQUFNLENBQUN2RyxLQUF2QixDQUpNLENBQVQsQ0FyQnFJLENBMkJySTs7QUFDQSxNQUFNa0gsWUFBWSxHQUFHbkIsMkNBQU8sQ0FBZ0RTLE1BQU0sQ0FBQ1csTUFBdkQsQ0FBNUI7QUFDQSxNQUFNQyxXQUFXLEdBQUdyQiwyQ0FBTyxDQUFpRFMsTUFBTSxDQUFDYSxPQUF4RCxDQUEzQixDQTdCcUksQ0ErQnJJO0FBQ0E7O0FBQ0EsTUFBTUMsUUFBa0IsR0FBR25CLGtEQUFJLENBQzlCb0IsTUFBTSxDQUFDQyxJQUFQLENBQVlOLFlBQVosRUFBMEJPLE1BQTFCLENBQTJDLFVBQUNDLElBQUQsRUFBT2pJLEtBQVAsRUFBaUI7QUFDM0QsUUFBTWtJLFNBQVMsR0FBR1AsV0FBVyxDQUFDM0gsS0FBRCxDQUE3Qjs7QUFDQSxRQUFJa0ksU0FBUyxJQUFJbkIsTUFBTSxDQUFDb0IsV0FBUCxHQUFxQixDQUF0QyxFQUF5QztBQUN4Qyx1R0FBV0YsSUFBWCxJQUFpQnpCLGlEQUFHLENBQUNpQixZQUFELEVBQWV6SCxLQUFmLENBQXBCO0FBQ0E7O0FBQ0QsV0FBT2lJLElBQVA7QUFDQSxHQU5ELEVBTUcsRUFOSCxDQUQ4QixDQUEvQixDQWpDcUksQ0EyQ3JJOztBQUNBLE1BQUlQLE1BQWdCLEdBQUcsRUFBdkI7QUFDQSxNQUFJVSxXQUFXLEdBQUcsRUFBbEI7O0FBQ0EsTUFBSXRCLE1BQU0sQ0FBQ3ZHLEtBQVAsSUFBZ0J1RyxNQUFNLENBQUN2RyxLQUFQLENBQWFnSCxPQUFqQyxFQUEwQztBQUN6QyxRQUFJVCxNQUFNLENBQUN2RyxLQUFQLENBQWE4SCxhQUFqQixFQUFnQztBQUMvQlgsTUFBQUEsTUFBTSxHQUFHWixNQUFNLENBQUN2RyxLQUFQLENBQWE4SCxhQUFiLENBQTJCTCxNQUEzQixDQUFrQyxVQUFDQyxJQUFELEVBQU90RixDQUFQLEVBQWE7QUFDdkQsWUFBSUEsQ0FBQyxDQUFDNEUsT0FBTixFQUFlLGlHQUFXVSxJQUFYLElBQWlCdEYsQ0FBQyxDQUFDNEUsT0FBbkI7QUFDZixlQUFPVSxJQUFQO0FBQ0EsT0FIUSxFQUdOLEVBSE0sQ0FBVDtBQUlBLEtBTEQsTUFLTztBQUNOLFVBQU1LLFlBQVksR0FBR3hCLE1BQU0sQ0FBQ3ZHLEtBQVAsQ0FBYWdILE9BQWIsQ0FBcUJnQixLQUFyQixDQUEyQnpCLE1BQU0sQ0FBQ3ZHLEtBQVAsQ0FBYWdILE9BQWIsQ0FBcUJpQixPQUFyQixDQUE2QixJQUE3QixJQUFxQyxDQUFoRSxDQUFyQjtBQUNBZCxNQUFBQSxNQUFNLENBQUMxQyxJQUFQLENBQVlzRCxZQUFaO0FBQ0E7O0FBQ0RGLElBQUFBLFdBQVcsR0FBR3RCLE1BQU0sQ0FBQ3ZHLEtBQVAsQ0FBYWdILE9BQWIsQ0FBcUJnQixLQUFyQixDQUEyQixDQUEzQixFQUE4QnpCLE1BQU0sQ0FBQ3ZHLEtBQVAsQ0FBYWdILE9BQWIsQ0FBcUJpQixPQUFyQixDQUE2QixJQUE3QixDQUE5QixDQUFkO0FBQ0E7O0FBQ0RkLEVBQUFBLE1BQU0sR0FBR2hCLGtEQUFJLENBQUNnQixNQUFELENBQWIsQ0ExRHFJLENBNERySTs7QUFDQSxNQUFNZSxXQUFXLEdBQUcsRUFBRTFCLE1BQU0sQ0FBQ0UsT0FBUCxJQUFrQlksUUFBUSxDQUFDYSxNQUFULEtBQW9CLENBQXhDLENBQXBCO0FBQ0EsTUFBTUMsU0FBUyxHQUFHakIsTUFBTSxDQUFDZ0IsTUFBUCxHQUFnQixDQUFsQyxDQTlEcUksQ0FnRXJJOztBQUNBLFdBQVNFLGNBQVQsR0FBMEI7QUFBQTs7QUFDekIsUUFBSSxDQUFDSCxXQUFELElBQWdCLENBQUNFLFNBQXJCLEVBQWdDLE9BQU8sSUFBUDtBQUNoQyx3QkFDQywrREFBQyx1REFBRDtBQUFTLGFBQU8sRUFBRUYsV0FBbEI7QUFBK0IsV0FBSyxFQUFFRSxTQUFTLElBQUksQ0FBQ0YsV0FBcEQ7QUFBQSw4QkFDQywrREFBQyw4REFBRDtBQUFBLGtCQUFpQkEsV0FBVyxHQUFHLCtCQUFILGFBQXdDTCxXQUF4QztBQUE1QjtBQUFBO0FBQUE7QUFBQTtBQUFBLGNBREQsZUFHQywrREFBQyx1REFBRDtBQUFTLGFBQUssRUFBRTtBQUFDUyxVQUFBQSxRQUFRLEVBQUUsTUFBWDtBQUFtQkMsVUFBQUEsU0FBUyxFQUFFO0FBQTlCLFNBQWhCO0FBQUEsa0JBQ0UsQ0FBQ0wsV0FBVyxHQUFHWixRQUFILEdBQWNILE1BQTFCLEVBQWtDcUIsR0FBbEMsQ0FBc0MsVUFBQUMsR0FBRztBQUFBLDhCQUN6QztBQUFBLHNCQUFnQkE7QUFBaEIsYUFBVUEsR0FBVjtBQUFBO0FBQUE7QUFBQTtBQUFBLG1CQUR5QztBQUFBLFNBQXpDO0FBREY7QUFBQTtBQUFBO0FBQUE7QUFBQSxjQUhEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUREO0FBV0EsR0E5RW9JLENBZ0ZySTs7O0FBQ0EsV0FBU0MsVUFBVCxDQUFvQkMsU0FBcEIsRUFBK0Q7QUFDOUQsV0FBTyxDQUFDLENBQUMsQ0FBQ3pDLHNEQUFRLENBQUN5QyxTQUFELENBQVIsQ0FBb0JuQyxNQUFNLENBQUNhLE9BQTNCLENBQUYsSUFBeUNiLE1BQU0sQ0FBQ29CLFdBQVAsR0FBcUIsQ0FBL0QsS0FBcUUsQ0FBQyxDQUFDMUIsc0RBQVEsQ0FBQ3lDLFNBQUQsQ0FBUixDQUFvQm5DLE1BQU0sQ0FBQ1csTUFBM0IsQ0FBOUU7QUFDQSxHQW5Gb0ksQ0FxRnJJOzs7QUFDQSxXQUFTeUIsWUFBVCxDQUFzQi9ELENBQXRCLEVBQTREO0FBQzNEa0MsSUFBQUEsZUFBZSxDQUFDLEtBQUQsQ0FBZjtBQUNBUCxJQUFBQSxNQUFNLENBQUNvQyxZQUFQLENBQW9CL0QsQ0FBcEI7QUFDQTs7QUFFRCx5Q0FDSTJCLE1BREo7QUFFQzRCLElBQUFBLFNBQVMsRUFBRUEsU0FBUyxJQUFJLENBQUN0QixZQUYxQjtBQUdDb0IsSUFBQUEsV0FBVyxFQUFYQSxXQUhEO0FBSUN4QixJQUFBQSxPQUFPLEVBQUUsQ0FBQ3dCLFdBSlg7QUFLQzFILElBQUFBLE9BQU8sRUFBRStGLE1BQU0sQ0FBQy9GLE9BQVAsR0FBaUIrRixNQUFNLENBQUMvRixPQUF4QixHQUFrQyxLQUw1QztBQU1DcUksSUFBQUEsY0FBYyxFQUFFWCxXQUFXLElBQUkxQixNQUFNLENBQUNTLFlBTnZDO0FBT0M2QixJQUFBQSxrQkFBa0IsRUFBRWhDLFlBUHJCO0FBUUNpQyxJQUFBQSxTQUFTLEVBQUVYLFNBQVMsSUFBSSxDQUFDRixXQUFkLElBQTZCLENBQUNwQixZQUE5QixJQUE4QyxDQUFDTixNQUFNLENBQUNTLFlBUmxFO0FBUWdGO0FBQy9Fb0IsSUFBQUEsY0FBYyxFQUFkQSxjQVREO0FBVUNLLElBQUFBLFVBQVUsRUFBVkEsVUFWRDtBQVdDRSxJQUFBQSxZQUFZLEVBQVpBO0FBWEQ7QUFhQTs7R0F4R2V6RDtVQUdBYTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDWGhCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxJQUFNNUcsQ0FBQyxHQUFHSCw0Q0FBSyxDQUFDLHFDQUFELENBQWY7QUFjTyxTQUFTb0ssZUFBVCxDQUF5Qi9KLEtBQXpCLEVBQXNEO0FBQUE7O0FBQzVELE1BQU9LLE1BQVAsR0FBNENMLEtBQTVDLENBQU9LLE1BQVA7QUFBQSxNQUFlK0MsUUFBZixHQUE0Q3BELEtBQTVDLENBQWVvRCxRQUFmO0FBQUEsTUFBeUJoRCxTQUF6QixHQUE0Q0osS0FBNUMsQ0FBeUJJLFFBQXpCO0FBQUEsTUFBbUNELEtBQW5DLEdBQTRDSCxLQUE1QyxDQUFtQ0csS0FBbkM7O0FBQ0EsYUFBb0NBLEtBQUssSUFBSSxFQUE3QztBQUFBLE1BQU8yQixJQUFQLFFBQU9BLElBQVA7QUFBQSxNQUFha0ksTUFBYixRQUFhQSxNQUFiO0FBQUEsTUFBcUJDLEdBQXJCLFFBQXFCQSxHQUFyQjtBQUFBLE1BQTBCQyxNQUExQixRQUEwQkEsTUFBMUI7O0FBRUEsa0JBQTBCbkQsK0NBQVEsQ0FBVSxRQUFWLENBQWxDO0FBQUE7QUFBQSxNQUFPbkcsS0FBUDtBQUFBLE1BQWN1SixRQUFkOztBQUVBLHNCQUNDLCtEQUFDLG1EQUFEO0FBQUEsNEJBQ0MsK0RBQUMsMERBQUQ7QUFBYSxXQUFLLEVBQUUsQ0FBcEI7QUFBQSw2QkFDQywrREFBQyxtREFBRDtBQUFBLGdDQUNDLCtEQUFDLHlEQUFEO0FBQUEsa0NBQ0MsK0RBQUMseURBQUQ7QUFBWSxpQkFBSyxFQUFFLENBQW5CO0FBQUEsb0NBQ0M7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsb0JBREQsZUFFQywrREFBQyx5RUFBRDtBQUNDLHFCQUFPLEVBQUU7QUFBQSx1QkFBTUEsUUFBUSxDQUFDLFFBQUQsQ0FBZDtBQUFBLGVBRFY7QUFFQyxvQkFBTSxFQUFFOUosTUFGVDtBQUdDLHNCQUFRLEVBQUUsa0JBQUF5QyxDQUFDLEVBQUk7QUFDZDFDLGdCQUFBQSxTQUFRLElBQUlBLFNBQVEsQ0FBQztBQUFDMEIsa0JBQUFBLElBQUksRUFBSkEsSUFBRDtBQUFPa0ksa0JBQUFBLE1BQU0sRUFBRWxILENBQWY7QUFBa0JtSCxrQkFBQUEsR0FBRyxFQUFIQSxHQUFsQjtBQUF1QkMsa0JBQUFBLE1BQU0sRUFBTkE7QUFBdkIsaUJBQUQsQ0FBcEI7QUFDQSxlQUxGO0FBTUMsc0JBQVEsRUFBRTlHO0FBTlg7QUFBQTtBQUFBO0FBQUE7QUFBQSxvQkFGRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsa0JBREQsZUFZQywrREFBQyx5REFBRDtBQUFZLGlCQUFLLEVBQUUsQ0FBbkI7QUFBQSxvQ0FDQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxvQkFERCxlQUVDLCtEQUFDLG9EQUFEO0FBQ0MsbUJBQUssRUFBRTZHLEdBQUcsSUFBSSxFQURmO0FBRUMsc0JBQVEsRUFBRSxrQkFBQ3BILEVBQUQsRUFBS0MsQ0FBTCxFQUFXO0FBQ3BCMUMsZ0JBQUFBLFNBQVEsSUFBSUEsU0FBUSxDQUFDO0FBQUMwQixrQkFBQUEsSUFBSSxFQUFKQSxJQUFEO0FBQU9rSSxrQkFBQUEsTUFBTSxFQUFOQSxNQUFQO0FBQWVDLGtCQUFBQSxHQUFHLEVBQUVuSCxDQUFDLENBQUMzQyxLQUF0QjtBQUE2QitKLGtCQUFBQSxNQUFNLEVBQU5BO0FBQTdCLGlCQUFELENBQXBCO0FBQ0EsZUFKRjtBQUtDLHFCQUFPLEVBQUU7QUFBQSx1QkFBTUMsUUFBUSxDQUFDLEtBQUQsQ0FBZDtBQUFBLGVBTFY7QUFNQyxvQkFBTSxFQUFFO0FBQUEsdUJBQU1BLFFBQVEsQ0FBQyxNQUFELENBQWQ7QUFBQSxlQU5UO0FBT0Msc0JBQVEsRUFBRS9HO0FBUFg7QUFBQTtBQUFBO0FBQUE7QUFBQSxvQkFGRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsa0JBWkQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLGdCQURELGVBMEJDLCtEQUFDLHlEQUFEO0FBQUEsa0NBQ0MsK0RBQUMseURBQUQ7QUFBWSxpQkFBSyxFQUFFLENBQW5CO0FBQUEsb0NBQ0M7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsb0JBREQsZUFFQywrREFBQyxvREFBRDtBQUNDLG1CQUFLLEVBQUV0QixJQUFJLElBQUksRUFEaEI7QUFFQyxzQkFBUSxFQUFFLGtCQUFDZSxFQUFELEVBQUtDLENBQUwsRUFBVztBQUNwQjFDLGdCQUFBQSxTQUFRLElBQUlBLFNBQVEsQ0FBQztBQUFDMEIsa0JBQUFBLElBQUksRUFBRWdCLENBQUMsQ0FBQzNDLEtBQVQ7QUFBZ0I2SixrQkFBQUEsTUFBTSxFQUFOQSxNQUFoQjtBQUF3QkMsa0JBQUFBLEdBQUcsRUFBSEEsR0FBeEI7QUFBNkJDLGtCQUFBQSxNQUFNLEVBQU5BO0FBQTdCLGlCQUFELENBQXBCO0FBQ0EsZUFKRjtBQUtDLHFCQUFPLEVBQUU7QUFBQSx1QkFBTUMsUUFBUSxDQUFDLE1BQUQsQ0FBZDtBQUFBLGVBTFY7QUFNQyxzQkFBUSxFQUFFL0csUUFOWDtBQU9DLG1CQUFLO0FBUE47QUFBQTtBQUFBO0FBQUE7QUFBQSxvQkFGRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsa0JBREQsZUFhQywrREFBQyx5REFBRDtBQUFZLGlCQUFLLEVBQUUsQ0FBbkI7QUFBQSxvQ0FDQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxvQkFERCxlQUVDLCtEQUFDLGtFQUFEO0FBQ0MsbUJBQUssRUFBRThHLE1BRFI7QUFFQyxzQkFBUSxFQUFFLGtCQUFBcEgsQ0FBQyxFQUFJO0FBQ2QxQyxnQkFBQUEsU0FBUSxJQUFJQSxTQUFRLENBQUM7QUFBQzBCLGtCQUFBQSxJQUFJLEVBQUpBLElBQUQ7QUFBT2tJLGtCQUFBQSxNQUFNLEVBQU5BLE1BQVA7QUFBZUMsa0JBQUFBLEdBQUcsRUFBSEEsR0FBZjtBQUFvQkMsa0JBQUFBLE1BQU0sRUFBRXBIO0FBQTVCLGlCQUFELENBQXBCO0FBQ0EsZUFKRjtBQUtDLHFCQUFPLEVBQUU7QUFBQSx1QkFBTXFILFFBQVEsQ0FBQyxRQUFELENBQWQ7QUFBQSxlQUxWO0FBTUMsc0JBQVEsRUFBRS9HO0FBTlg7QUFBQTtBQUFBO0FBQUE7QUFBQSxvQkFGRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsa0JBYkQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLGdCQTFCRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFERDtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBREQsZUF1REMsK0RBQUMsMERBQUQ7QUFBYSxXQUFLLEVBQUUsRUFBcEI7QUFBQSw2QkFDQywrREFBQywyREFBRDtBQUNDLFdBQUcsRUFBRTZHLEdBQUcsSUFBSSxFQURiO0FBRUMsY0FBTSxFQUFFUCxxREFBVSxDQUFDUSxNQUFELEVBQVM7QUFBQ0UsVUFBQUEsTUFBTSxFQUFFO0FBQVQsU0FBVCxDQUFWLElBQXdDLEVBRmpEO0FBR0MsWUFBSSxFQUFFdEksSUFBSSxJQUFJLEVBSGY7QUFJQyxjQUFNLEVBQUVrSSxNQUFNLElBQUksRUFKbkI7QUFLQyxlQUFPLEVBQUVwSixLQUxWO0FBTUMsZ0JBQVEsRUFBRSxrQkFBQ3lKLENBQUQsRUFBSUMsQ0FBSixFQUFVO0FBQ25CeEssVUFBQUEsQ0FBQyxDQUFDdUssQ0FBRCxFQUFJQyxDQUFKLENBQUQ7QUFDQTtBQVJGO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFERDtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBdkREO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxVQUREO0FBc0VBOztHQTVFZVA7O0tBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDekJoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7O0FBRUEsSUFBTWpLLENBQUMsR0FBR0gsNENBQUssQ0FBQywyREFBRCxDQUFmOztBQU9BLFNBQVNpTCxPQUFULENBQWlCQyxJQUFqQixFQUE4QztBQUM3QyxVQUFRQSxJQUFSO0FBQ0MsU0FBSyxNQUFMO0FBQ0MsYUFBTyxTQUFQOztBQUNELFNBQUssWUFBTDtBQUNDLGFBQU8sZUFBUDs7QUFDRCxTQUFLLGtCQUFMO0FBQ0MsYUFBTyxTQUFQOztBQUNELFNBQUssYUFBTDtBQUNDLGFBQU8sZ0JBQVA7O0FBQ0QsU0FBSyxLQUFMO0FBQ0MsYUFBTyxRQUFQOztBQUNEO0FBQ0MsYUFBTyxhQUFQO0FBWkY7QUFjQTs7QUFFTSxTQUFTZixxQkFBVCxDQUErQjlKLEtBQS9CLEVBQWlHO0FBQUE7O0FBQ3ZHLE1BQU9HLEtBQVAsR0FBbUNILEtBQW5DLENBQU9HLEtBQVA7QUFBQSxNQUFjQyxTQUFkLEdBQW1DSixLQUFuQyxDQUFjSSxRQUFkO0FBQUEsTUFBMkJrQixJQUEzQix5RkFBbUN0QixLQUFuQzs7QUFDQSxrQkFBd0IrRywrQ0FBUSxDQUFnQixhQUFoQixDQUFoQztBQUFBO0FBQUEsTUFBT2xHLElBQVA7QUFBQSxNQUFhaUssT0FBYjs7QUFDQSxtQkFBMEIvRCwrQ0FBUSxDQUFpQixPQUFqQixDQUFsQztBQUFBO0FBQUEsTUFBT2dFLEtBQVA7QUFBQSxNQUFjQyxRQUFkOztBQUVBLE1BQU1DLGVBQWUsR0FBR1Isa0RBQVcsQ0FBQyxVQUFDUyxVQUFELEVBQTBCO0FBQzdELFFBQU1DLEdBQUcsR0FBR0QsVUFBVSxDQUFDRSxJQUFYLENBQWdCLEVBQWhCLEVBQW9CQyxVQUFwQixDQUErQixTQUEvQixFQUEwQyxFQUExQyxDQUFaO0FBQ0EsUUFBTUMsR0FBRyxHQUFHZix1REFBYyxDQUFDWSxHQUFELENBQTFCO0FBQ0EsUUFBTS9ELE9BQU8sR0FBR29ELDhDQUFRLENBQUNXLEdBQUQsQ0FBeEI7O0FBRUEsUUFBSUcsR0FBRyxDQUFDekMsTUFBSixLQUFlLENBQW5CLEVBQXNCO0FBQ3JCaUMsTUFBQUEsT0FBTyxDQUFDRixPQUFPLENBQUNVLEdBQUcsQ0FBQyxDQUFELENBQUgsQ0FBT1QsSUFBUixDQUFSLENBQVA7QUFDQSxLQUZELE1BRU87QUFDTkMsTUFBQUEsT0FBTyxDQUFDLGFBQUQsQ0FBUDtBQUNBOztBQUVELFFBQUlLLEdBQUcsQ0FBQ3RDLE1BQUosR0FBYSxDQUFqQixFQUFvQjtBQUNuQixVQUFJekIsT0FBSixFQUFhO0FBQ1o0RCxRQUFBQSxRQUFRLENBQUMsT0FBRCxDQUFSO0FBQ0EsT0FGRCxNQUVPO0FBQ05BLFFBQUFBLFFBQVEsQ0FBQyxLQUFELENBQVI7QUFDQTtBQUNELEtBTkQsTUFNTztBQUNOQSxNQUFBQSxRQUFRLENBQUMsT0FBRCxDQUFSO0FBQ0E7O0FBRUQsV0FBTzVELE9BQVA7QUFDQSxHQXRCa0MsRUFzQmhDLEVBdEJnQyxDQUFuQztBQXdCQSxNQUFNbUUsY0FBd0MsR0FBR2IsOENBQU8sQ0FDdkQ7QUFBQSxXQUFPO0FBQ05jLE1BQUFBLElBQUksRUFBRSxxQkFEQTtBQUVOQyxNQUFBQSxVQUFVLEVBQUVSLGVBRk47QUFHTlMsTUFBQUEsVUFBVSxFQUFFO0FBSE4sS0FBUDtBQUFBLEdBRHVELEVBTXZELENBQUNULGVBQUQsQ0FOdUQsQ0FBeEQ7QUFTQSxNQUFNVSxhQUFhLEdBQUdoQiwyRUFBYyxDQUFDO0FBQ3BDYSxJQUFBQSxJQUFJLEVBQUVELGNBRDhCO0FBRXBDcEwsSUFBQUEsS0FBSyxFQUFMQSxLQUZvQztBQUdwQ0MsSUFBQUEsUUFBUSxFQUFFLGtCQUFBMEMsQ0FBQyxFQUFJO0FBQ2QsVUFBTXdJLEdBQUcsR0FBR2YsdURBQWMsQ0FBQ3pILENBQUMsSUFBSSxFQUFOLENBQTFCO0FBQ0FoRCxNQUFBQSxDQUFDLENBQUNnRCxDQUFELEVBQUl3SSxHQUFKLENBQUQsQ0FGYyxDQUdkOztBQUNBbEwsTUFBQUEsU0FBUSxJQUFJQSxTQUFRLENBQUMwQyxDQUFELENBQXBCO0FBQ0E7QUFSbUMsR0FBRCxDQUFwQztBQVdBLHNCQUNDLDhEQUFDLG9EQUFELGtDQUFXeEIsSUFBWDtBQUFpQixRQUFJLE1BQXJCO0FBQUEsNEJBQ0M7QUFBTyxTQUFHLEVBQUVxSztBQUFaO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFERCxlQUVDLDhEQUFDLG1EQUFEO0FBQU0sVUFBSSxFQUFFOUssSUFBWjtBQUFrQixXQUFLLEVBQUVrSyxLQUF6QjtBQUFnQyxVQUFJLEVBQUM7QUFBckM7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUZEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxVQUREO0FBTUE7O0dBdkRlakI7VUFzQ09hOzs7S0F0Q1BiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUVoQ2hCO0FBQ0E7QUFDQTtBQUNBOztBQUVBLElBQU1oSyxDQUFDLEdBQUdILDRDQUFLLENBQUMsaUNBQUQsQ0FBZjtBQVFPLFNBQVNnQyxXQUFULENBQXFCM0IsS0FBckIsRUFBOEM7QUFBQTs7QUFDcEQsTUFBTzhCLElBQVAsR0FBaUU5QixLQUFqRSxDQUFPOEIsSUFBUDtBQUFBLE1BQWF6QixNQUFiLEdBQWlFTCxLQUFqRSxDQUFhSyxNQUFiO0FBQUEsTUFBcUIrQyxRQUFyQixHQUFpRXBELEtBQWpFLENBQXFCb0QsUUFBckI7QUFBQSxNQUErQmhELFFBQS9CLEdBQWlFSixLQUFqRSxDQUErQkksUUFBL0I7QUFBQSxNQUF5Q29MLElBQXpDLEdBQWlFeEwsS0FBakUsQ0FBeUN3TCxJQUF6QztBQUFBLE1BQStDckwsS0FBL0MsR0FBaUVILEtBQWpFLENBQStDRyxLQUEvQztBQUFBLE1BQXlEbUIsSUFBekQseUZBQWlFdEIsS0FBakU7O0FBRUEsTUFBTTRMLFFBQVEsR0FBR2pCLCtEQUFjLENBQUM7QUFBQ2EsSUFBQUEsSUFBSSxFQUFKQSxJQUFEO0FBQU9yTCxJQUFBQSxLQUFLLEVBQUxBLEtBQVA7QUFBY0MsSUFBQUEsUUFBUSxFQUFSQTtBQUFkLEdBQUQsQ0FBL0I7QUFFQSxzQkFDQyw4REFBQyxvREFBRCxrQ0FBV2tCLElBQVg7QUFBQSwyQkFDQztBQUFPLGNBQVEsRUFBRThCLFFBQWpCO0FBQTJCLFVBQUksRUFBRXRCLElBQWpDO0FBQXVDLFNBQUcsRUFBRThKLFFBQTVDO0FBQXNELFlBQU0sRUFBRXZMO0FBQTlEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFERDtBQUFBO0FBQUE7QUFBQTtBQUFBLFVBREQ7QUFLQTs7R0FWZXNCO1VBR0VnSjs7O0tBSEZoSjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDYmhCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBLElBQU03QixDQUFDLEdBQUdILDRDQUFLLENBQUMsZ0RBQUQsQ0FBZjtBQVNPLFNBQVNnTCxjQUFULENBQXdCM0ssS0FBeEIsRUFBb0Q7QUFBQTs7QUFDMUQsTUFBT0csS0FBUCxHQUF1Q0gsS0FBdkMsQ0FBT0csS0FBUDtBQUFBLE1BQWNDLFFBQWQsR0FBdUNKLEtBQXZDLENBQWNJLFFBQWQ7QUFBQSxNQUF3QjRMLEtBQXhCLEdBQXVDaE0sS0FBdkMsQ0FBd0JnTSxLQUF4QjtBQUFBLE1BQStCUixJQUEvQixHQUF1Q3hMLEtBQXZDLENBQStCd0wsSUFBL0I7QUFFQSxNQUFNUyxZQUFZLEdBQUdILDZDQUFNLENBQTBCLElBQTFCLENBQTNCO0FBQ0EsTUFBTUksWUFBWSxHQUFHSiw2Q0FBTSxDQUE0QixJQUE1QixDQUEzQjtBQUVBQyxFQUFBQSw4REFBb0IsQ0FBQyxZQUFNO0FBQzFCLFFBQUksQ0FBQ0UsWUFBWSxDQUFDRSxPQUFsQixFQUEyQixNQUFNLElBQUlDLEtBQUosQ0FBVSw2QkFBVixDQUFOO0FBRTNCdE0sSUFBQUEsQ0FBQyxDQUFDLDhCQUFELENBQUQ7QUFDQW9NLElBQUFBLFlBQVksQ0FBQ0MsT0FBYixHQUF1QixJQUFJTixrREFBSixpQ0FDbkJMLElBRG1CO0FBRXRCYSxNQUFBQSxVQUZzQix3QkFFVDtBQUFBOztBQUNaLFlBQUlqTSxRQUFKLEVBQWNBLFFBQVEsMEJBQUM2TCxZQUFZLENBQUNFLE9BQWQsMERBQUMsc0JBQXNCaE0sS0FBdkIsQ0FBUjtBQUNkLFlBQUlxTCxJQUFKLGFBQUlBLElBQUosZUFBSUEsSUFBSSxDQUFFYSxVQUFWLEVBQXNCYixJQUFJLENBQUNhLFVBQUw7QUFDdEIsT0FMcUI7QUFNdEJDLE1BQUFBLFNBTnNCLHVCQU1WO0FBQ1gsWUFBSWxNLFFBQUosRUFBY0EsUUFBUTtBQUN0QixZQUFJb0wsSUFBSixhQUFJQSxJQUFKLGVBQUlBLElBQUksQ0FBRWMsU0FBVixFQUFxQmQsSUFBSSxDQUFDYyxTQUFMO0FBQ3JCLE9BVHFCO0FBVXRCQyxNQUFBQSxZQVZzQiwwQkFVUDtBQUFBOztBQUNkLFlBQUluTSxRQUFKLEVBQWNBLFFBQVEsMkJBQUM2TCxZQUFZLENBQUNFLE9BQWQsMkRBQUMsdUJBQXNCaE0sS0FBdkIsQ0FBUjtBQUNkLFlBQUlxTCxJQUFKLGFBQUlBLElBQUosZUFBSUEsSUFBSSxDQUFFZSxZQUFWLEVBQXdCZixJQUFJLENBQUNlLFlBQUw7QUFDeEI7QUFicUIsT0FBdkI7QUFlQUwsSUFBQUEsWUFBWSxDQUFDQyxPQUFiLENBQXFCWCxJQUFyQixDQUEwQlMsWUFBWSxDQUFDRSxPQUF2QztBQUVBLFdBQU8sWUFBTTtBQUNaLFVBQUlELFlBQVksQ0FBQ0MsT0FBakIsRUFBMEI7QUFDekJyTSxRQUFBQSxDQUFDLENBQUMsaUNBQUQsQ0FBRDtBQUNBb00sUUFBQUEsWUFBWSxDQUFDQyxPQUFiLENBQXFCSyxNQUFyQjtBQUNBTixRQUFBQSxZQUFZLENBQUNDLE9BQWIsR0FBdUIsSUFBdkI7QUFDQTtBQUNELEtBTkQ7QUFPQSxHQTVCbUIsRUE0QmpCLENBQUNYLElBQUQsQ0E1QmlCLENBQXBCLENBTjBELENBb0MxRDs7QUFDQTFFLEVBQUFBLGdEQUFTLENBQUMsWUFBTTtBQUFBOztBQUNmLFFBQUltRixZQUFZLENBQUNFLE9BQWIsSUFBd0IsMkJBQUFGLFlBQVksQ0FBQ0UsT0FBYixrRkFBc0JoTSxLQUF0QixNQUFnQ0EsS0FBeEQsSUFBaUVBLEtBQUssS0FBSzhELFNBQS9FLEVBQTBGO0FBQ3pGbkUsTUFBQUEsQ0FBQyxDQUFDLG9CQUFELEVBQXVCSyxLQUF2QixDQUFEO0FBQ0E4TCxNQUFBQSxZQUFZLENBQUNFLE9BQWIsQ0FBcUJoTSxLQUFyQixHQUE2QkEsS0FBN0I7QUFDQTZMLE1BQUFBLEtBQUssSUFBSUEsS0FBSyxDQUFDN0wsS0FBRCxDQUFkO0FBQ0E7QUFDRCxHQU5RLEVBTU4sQ0FBQ0EsS0FBRCxDQU5NLENBQVQ7QUFRQSxTQUFPOEwsWUFBUDtBQUNBOztHQTlDZXRCO1VBTWZvQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNwQkQ7QUFDQTtBQUNBOztBQUVBLElBQU1qTSxDQUFDLEdBQUdILDRDQUFLLENBQUMsZ0NBQUQsQ0FBZjtBQU9PLFNBQVM4TSxVQUFULENBQW9Cek0sS0FBcEIsRUFBMEY7QUFDaEcsTUFBTzBNLFNBQVAsR0FBNkIxTSxLQUE3QixDQUFPME0sU0FBUDtBQUFBLE1BQXFCcEwsSUFBckIseUZBQTZCdEIsS0FBN0I7O0FBQ0EsTUFBTXdMLElBQUksR0FBRztBQUNaQSxJQUFBQSxJQUFJLEVBQUVrQixTQUFTLEdBQUcsc0RBQUgsR0FBNEQsdUNBRC9EO0FBRVpDLElBQUFBLE1BQU0sRUFBRSxLQUZJO0FBR1pqQixJQUFBQSxVQUFVLEVBQUU7QUFIQSxHQUFiO0FBTUEsc0JBQU8sOERBQUMscURBQUQsa0NBQWlCcEssSUFBakI7QUFBdUIsUUFBSSxFQUFFa0s7QUFBN0I7QUFBQTtBQUFBO0FBQUE7QUFBQSxVQUFQO0FBQ0E7S0FUZWlCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUVYaEI7QUFDQTtBQUNBOztBQUVBLElBQU0zTSxDQUFDLEdBQUdILDRDQUFLLENBQUMsZ0NBQUQsQ0FBZjtBQVFPLFNBQVNvTixVQUFULENBQW9CL00sS0FBcEIsRUFBK0U7QUFDckYsTUFBT2tHLFFBQVAsR0FBNkNsRyxLQUE3QyxDQUFPa0csUUFBUDtBQUFBLE1BQWlCOUYsU0FBakIsR0FBNkNKLEtBQTdDLENBQWlCSSxRQUFqQjtBQUFBLE1BQTJCRCxLQUEzQixHQUE2Q0gsS0FBN0MsQ0FBMkJHLEtBQTNCO0FBQUEsTUFBcUNtQixJQUFyQyx5RkFBNkN0QixLQUE3Qzs7QUFFQSxzQkFDQyw4REFBQyx5REFBRCxrQ0FBZ0JzQixJQUFoQjtBQUFBLGNBQ0VpRiwrQ0FBQSxDQUFhdkcsS0FBSyxDQUFDa0csUUFBbkIsRUFBNkIsVUFBQUcsS0FBSyxFQUFJO0FBQ3RDLFVBQUksQ0FBQUEsS0FBSyxTQUFMLElBQUFBLEtBQUssV0FBTCxZQUFBQSxLQUFLLENBQUV3RSxJQUFQLE1BQWdCaUMsd0RBQWhCLElBQTZCLENBQUF6RyxLQUFLLFNBQUwsSUFBQUEsS0FBSyxXQUFMLFlBQUFBLEtBQUssQ0FBRXdFLElBQVAsTUFBZ0JnQyxvREFBN0MsSUFBc0QsQ0FBQXhHLEtBQUssU0FBTCxJQUFBQSxLQUFLLFdBQUwsWUFBQUEsS0FBSyxDQUFFd0UsSUFBUCxNQUFnQmpCLHlEQUExRSxFQUFzRjtBQUNyRiw0QkFBT2dELG1EQUFZLENBQUN2RyxLQUFELEVBQVE7QUFDMUJqRyxVQUFBQSxRQUFRLEVBQUUsa0JBQUN5QyxFQUFELEVBQVVtSyxJQUFWLEVBQThDO0FBQ3ZELGdCQUFJNU0sU0FBSixFQUFjQSxTQUFRLENBQUM0TSxJQUFJLENBQUM3TSxLQUFOLENBQVI7QUFDZCxXQUh5QjtBQUkxQjhNLFVBQUFBLE9BQU8sRUFBRTlNLEtBQUssS0FBS2tHLEtBQUssQ0FBQ3JHLEtBQU4sQ0FBWUc7QUFKTCxTQUFSLENBQW5CO0FBTUE7O0FBQ0QsYUFBT2tHLEtBQVA7QUFDQSxLQVZBO0FBREY7QUFBQTtBQUFBO0FBQUE7QUFBQSxVQUREO0FBZUE7S0FsQmUwRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FFWmhCO0FBQ0E7QUFDQTtBQUNBOztBQUlBLElBQU1qTixDQUFDLEdBQUdILDRDQUFLLENBQUMsOEJBQUQsQ0FBZjtBQVdPLFNBQVN5TixRQUFULE9BQThGO0FBQUE7O0FBQUEsTUFBM0VDLGFBQTJFLFFBQTNFQSxhQUEyRTtBQUFBLE1BQTVEQyxTQUE0RCxRQUE1REEsU0FBNEQ7QUFBQSxNQUFqREMsS0FBaUQsUUFBakRBLEtBQWlEO0FBQUEsTUFBMUNDLElBQTBDLFFBQTFDQSxJQUEwQztBQUFBLE1BQXBDQyxRQUFvQyxRQUFwQ0EsUUFBb0M7QUFBQSxNQUExQnZILFFBQTBCLFFBQTFCQSxRQUEwQjtBQUNwRyxNQUFNd0gsTUFBTSxHQUFHNUIsNkNBQU0sRUFBckI7O0FBQ0Esa0JBQTRCL0UsK0NBQVEsRUFBcEM7QUFBQTtBQUFBLE1BQU9kLE1BQVA7QUFBQSxNQUFlMEgsU0FBZjs7QUFDQSxtQkFBOEI1RywrQ0FBUSxDQUFVLEtBQVYsQ0FBdEM7QUFBQTtBQUFBLE1BQU83RixPQUFQO0FBQUEsTUFBZ0IwTSxVQUFoQjs7QUFDQSxtQkFBa0M3RywrQ0FBUSxDQUFVLEtBQVYsQ0FBMUM7QUFBQTtBQUFBLE1BQU84RyxTQUFQO0FBQUEsTUFBa0JDLFlBQWxCOztBQUVBaEgsRUFBQUEsZ0RBQVMsQ0FBQyxZQUFNO0FBQ2Y0RyxJQUFBQSxNQUFNLENBQUN2QixPQUFQLEdBQWlCLElBQUlnQixxREFBSixDQUFtQjtBQUNuQ0UsTUFBQUEsYUFBYSxFQUFiQSxhQURtQztBQUVuQ0MsTUFBQUEsU0FBUyxFQUFUQSxTQUZtQztBQUduQ0MsTUFBQUEsS0FBSyxFQUFMQSxLQUhtQztBQUluQ0MsTUFBQUEsSUFBSSxFQUFKQSxJQUptQztBQUtuQ0MsTUFBQUEsUUFBUSxFQUFSQTtBQUxtQyxLQUFuQixDQUFqQjtBQVFBQyxJQUFBQSxNQUFNLENBQUN2QixPQUFQLENBQWU0QixFQUFmLENBQWtCLFFBQWxCLEVBQTRCLFVBQUE1RSxHQUFHLEVBQUk7QUFDbEN3RSxNQUFBQSxTQUFTLENBQUN4RSxHQUFELENBQVQ7QUFDQXlFLE1BQUFBLFVBQVUsQ0FBQyxLQUFELENBQVY7QUFDQUQsTUFBQUEsU0FBUyxDQUFDMUosU0FBRCxDQUFULENBSGtDLENBR1o7QUFDdEIsS0FKRDtBQUtBeUosSUFBQUEsTUFBTSxDQUFDdkIsT0FBUCxDQUFlNEIsRUFBZixDQUFrQixjQUFsQixFQUFrQyxZQUFNO0FBQ3ZDSCxNQUFBQSxVQUFVLENBQUMsSUFBRCxDQUFWO0FBQ0EsS0FGRDtBQUdBRixJQUFBQSxNQUFNLENBQUN2QixPQUFQLENBQWU0QixFQUFmLENBQWtCLFFBQWxCLEVBQTRCLFlBQU07QUFDakNILE1BQUFBLFVBQVUsQ0FBQyxLQUFELENBQVY7QUFDQUQsTUFBQUEsU0FBUyxDQUFDMUosU0FBRCxDQUFUO0FBQ0EsS0FIRDtBQUlBeUosSUFBQUEsTUFBTSxDQUFDdkIsT0FBUCxDQUFlNEIsRUFBZixDQUFrQixTQUFsQixFQUE2QixZQUFNO0FBQ2xDRCxNQUFBQSxZQUFZLENBQUMsSUFBRCxDQUFaO0FBQ0EsS0FGRDtBQUdBSixJQUFBQSxNQUFNLENBQUN2QixPQUFQLENBQWU0QixFQUFmLENBQWtCLE9BQWxCLEVBQTJCLFlBQU07QUFDaENELE1BQUFBLFlBQVksQ0FBQyxLQUFELENBQVo7QUFDQSxLQUZEO0FBSUEsV0FBTyxZQUFNO0FBQ1osVUFBSUosTUFBTSxDQUFDdkIsT0FBWCxFQUFvQnVCLE1BQU0sQ0FBQ3ZCLE9BQVAsQ0FBZTZCLEtBQWY7QUFDcEIsS0FGRDtBQUdBLEdBL0JRLEVBK0JOLENBQUNYLGFBQUQsRUFBZ0JDLFNBQWhCLEVBQTJCQyxLQUEzQixFQUFrQ0MsSUFBbEMsRUFBd0NDLFFBQXhDLENBL0JNLENBQVQ7QUFpQ0Esc0JBQU8sOERBQUMsc0VBQUQ7QUFBMEIsU0FBSyxFQUFFO0FBQUNDLE1BQUFBLE1BQU0sRUFBTkEsTUFBRDtBQUFTTyxNQUFBQSxXQUFXLEVBQUVoSSxNQUF0QjtBQUE4Qi9FLE1BQUFBLE9BQU8sRUFBUEEsT0FBOUI7QUFBdUMyTSxNQUFBQSxTQUFTLEVBQVRBO0FBQXZDLEtBQWpDO0FBQUEsY0FBcUYzSDtBQUFyRjtBQUFBO0FBQUE7QUFBQTtBQUFBLFVBQVA7QUFDQTs7R0F4Q2VrSDs7S0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDbEJoQjtBQUlPLElBQU1GLGVBQWUsZ0JBQUd0TiwwREFBQSxDQUU3QnFFLFNBRjZCLENBQXhCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ0pQO0FBRUE7Ozs7Ozs7Ozs7Ozs7Ozs7QUNGTyxJQUFLbUssZ0JBQVo7O1dBQVlBO0FBQUFBLEVBQUFBO0FBQUFBLEVBQUFBO0FBQUFBLEVBQUFBO0dBQUFBLHFCQUFBQTs7QUFNTCxJQUFLQyxvQkFBWjs7V0FBWUE7QUFBQUEsRUFBQUE7QUFBQUEsRUFBQUE7QUFBQUEsRUFBQUE7QUFBQUEsRUFBQUE7QUFBQUEsRUFBQUE7QUFBQUEsRUFBQUE7QUFBQUEsRUFBQUE7QUFBQUEsRUFBQUE7QUFBQUEsRUFBQUE7R0FBQUEseUJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNOWjtBQUNBO0FBQ0E7QUFDQTtBQUdBLElBQU12TyxDQUFDLEdBQUdILDRDQUFLLENBQUMsdUNBQUQsQ0FBZjs7QUFXQSxTQUFTNE8sZUFBVCxDQUF5QnBGLEdBQXpCLEVBQThDdUUsTUFBOUMsRUFBaUU7QUFDaEU1TixFQUFBQSxDQUFDLENBQUMsa0JBQUQsQ0FBRDs7QUFDQSxNQUFJcUosR0FBRyxDQUFDcUYsVUFBSixDQUFlQyxPQUFmLENBQXVCNUYsTUFBdkIsR0FBZ0MsQ0FBcEMsRUFBdUM7QUFDdEM7QUFDQSxRQUFNNkYsTUFBTSxHQUFHdkYsR0FBRyxDQUFDcUYsVUFBSixDQUFlQyxPQUFmLENBQXVCLENBQXZCLENBQWY7QUFDQWYsSUFBQUEsTUFBTSxDQUFDaUIsSUFBUCxDQUNDQyxJQUFJLENBQUNDLFNBQUwsQ0FBZTtBQUNkQyxNQUFBQSxNQUFNLEVBQUUsbUJBRE07QUFFZEMsTUFBQUEsSUFBSSxFQUFFTCxNQUFNLENBQUNLO0FBRkMsS0FBZixDQUREO0FBTUE7QUFDRDs7QUFFRCxTQUFTQyxlQUFULENBQXlCN0YsR0FBekIsRUFBa0R1RSxNQUFsRCxFQUFxRVYsSUFBckUsRUFBK0Y7QUFDOUZsTixFQUFBQSxDQUFDLDZCQUFzQnFKLEdBQUcsQ0FBQ3VGLE1BQUosQ0FBV0ssSUFBakMsRUFBRDtBQUNBLE1BQU96QixTQUFQLEdBQTJDTixJQUEzQyxDQUFPTSxTQUFQO0FBQUEsTUFBa0JDLEtBQWxCLEdBQTJDUCxJQUEzQyxDQUFrQk8sS0FBbEI7QUFBQSxNQUF5QkMsSUFBekIsR0FBMkNSLElBQTNDLENBQXlCUSxJQUF6QjtBQUFBLE1BQStCQyxRQUEvQixHQUEyQ1QsSUFBM0MsQ0FBK0JTLFFBQS9CO0FBQ0FDLEVBQUFBLE1BQU0sQ0FBQ2lCLElBQVAsQ0FDQ0MsSUFBSSxDQUFDQyxTQUFMLENBQWU7QUFDZEMsSUFBQUEsTUFBTSxFQUFFLDZCQURNO0FBRWRHLElBQUFBLGNBQWMsRUFBRTtBQUNmSCxNQUFBQSxNQUFNLEVBQUUsZ0JBRE87QUFFZmpFLE1BQUFBLElBQUksRUFBRXlDLFNBQVMsSUFBSSxlQUZKO0FBR2ZDLE1BQUFBLEtBQUssRUFBRUEsS0FBSyxJQUFJLENBSEQ7QUFJZkMsTUFBQUEsSUFBSSxFQUFFQSxJQUFJLElBQUksS0FKQztBQUtmQyxNQUFBQSxRQUFRLEVBQUVBLFFBQVEsR0FDZjtBQUNBeUIsUUFBQUEsY0FBYyxFQUFFekI7QUFEaEIsT0FEZSxHQUlmO0FBQ0F5QixRQUFBQSxjQUFjLEVBQUVkLDBEQUFzQmU7QUFEdEM7QUFUWTtBQUZGLEdBQWYsQ0FERDtBQWtCQTs7QUFFRCxTQUFTbEosTUFBVCxDQUFnQmtELEdBQWhCLEVBQW9DNkQsSUFBcEMsRUFBOERvQyxZQUE5RCxFQUEwRjtBQUN6RnRQLEVBQUFBLENBQUMsMkJBQW9CcUosR0FBRyxDQUFDMEIsSUFBeEIsY0FBZ0MxQixHQUFHLENBQUNrRyxLQUFwQyxjQUE2Q2xHLEdBQUcsQ0FBQ21HLE1BQWpELEVBQUQ7QUFDQUYsRUFBQUEsWUFBWSxDQUFDRyxJQUFiLENBQWtCLFFBQWxCLEVBQTRCcEcsR0FBNUI7QUFDQTs7QUFFTSxJQUFNZ0UsY0FBYjtBQUFBOztBQUFBOztBQUlDLDBCQUFZSCxJQUFaLEVBQXNDO0FBQUE7O0FBQUE7O0FBQ3JDOztBQURxQzs7QUFBQTs7QUFHckMsVUFBS3dDLE9BQUwsR0FBZXhDLElBQWY7QUFFQSxVQUFLVSxNQUFMLEdBQWMsSUFBSStCLFNBQUosQ0FBY3pDLElBQUksQ0FBQ0ssYUFBTCxJQUFzQixxQkFBcEMsQ0FBZDs7QUFFQSxVQUFLSyxNQUFMLENBQVlnQyxNQUFaLEdBQXFCLFlBQU07QUFDMUI1UCxNQUFBQSxDQUFDLENBQUMsYUFBRCxDQUFEO0FBQ0EsS0FGRDs7QUFJQSxVQUFLNE4sTUFBTCxDQUFZaUMsT0FBWixHQUFzQixZQUFNO0FBQzNCN1AsTUFBQUEsQ0FBQyxDQUFDLGVBQUQsQ0FBRDtBQUNBLEtBRkQ7O0FBSUEsVUFBSzROLE1BQUwsQ0FBWWtDLFNBQVosR0FBd0IsVUFBQS9NLEVBQUUsRUFBSTtBQUM3QixVQUFNc0csR0FBRyxHQUFHeUYsSUFBSSxDQUFDaUIsS0FBTCxDQUFXaE4sRUFBRSxDQUFDaU4sSUFBZCxDQUFaO0FBQ0EsVUFBSSxDQUFDM0csR0FBRyxDQUFDMkYsTUFBVCxFQUFpQixPQUZZLENBRUo7O0FBRXpCLGNBQVEzRixHQUFHLENBQUMyRixNQUFaO0FBQ0MsYUFBS1QsdUVBQUw7QUFDQ0UsVUFBQUEsZUFBZSxDQUFDcEYsR0FBRCxFQUFNLE1BQUt1RSxNQUFYLENBQWY7QUFDQTs7QUFDRCxhQUFLVywyRUFBTDtBQUNDVyxVQUFBQSxlQUFlLENBQUM3RixHQUFELEVBQU0sTUFBS3VFLE1BQVgsRUFBbUIsTUFBSzhCLE9BQXhCLENBQWY7QUFDQTs7QUFDRCxhQUFLbkIsc0VBQUw7QUFDQ3BJLFVBQUFBLE1BQU0sQ0FBQ2tELEdBQUQsRUFBTSxNQUFLcUcsT0FBWCw2RkFBTjtBQUNBOztBQUNELGFBQUtuQiwwRUFBTDtBQUNDdk8sVUFBQUEsQ0FBQyxxQ0FBOEJxSixHQUFHLENBQUN6QixPQUFsQyxFQUFEO0FBQ0E7O0FBRUQsYUFBSzJHLG9FQUFMO0FBQ0MsY0FBSWxGLEdBQUcsQ0FBQ25JLEtBQUosS0FBYyxRQUFsQixFQUE0QixNQUFLdU8sSUFBTCxDQUFVLFFBQVY7QUFDNUI7O0FBQ0QsYUFBS2xCLG1FQUFMO0FBQ0MsY0FBSWxGLEdBQUcsQ0FBQ25JLEtBQUosS0FBYyxJQUFsQixFQUF3QixNQUFLdU8sSUFBTCxDQUFVLGNBQVY7QUFDeEI7O0FBQ0QsYUFBS2xCLGdFQUFMO0FBQ0MsZ0JBQUtrQixJQUFMLENBQVUsU0FBVjs7QUFDQTs7QUFDRCxhQUFLbEIsOERBQUw7QUFDQyxnQkFBS2tCLElBQUwsQ0FBVSxPQUFWOztBQUNBOztBQUNEO0FBMUJEO0FBNEJBLEtBaENEOztBQWZxQztBQWdEckM7O0FBcERGO0FBQUE7QUFBQSxXQXNEQyxxQkFBWTtBQUNYelAsTUFBQUEsQ0FBQyxDQUFDLFdBQUQsQ0FBRDtBQUNBLFdBQUs0TixNQUFMLENBQVlpQixJQUFaLENBQWlCQyxJQUFJLENBQUNDLFNBQUwsQ0FBZTtBQUFDQyxRQUFBQSxNQUFNLEVBQUU7QUFBVCxPQUFmLENBQWpCO0FBQ0E7QUF6REY7QUFBQTtBQUFBLFdBMkRDLGlCQUFRO0FBQ1AsV0FBS3BCLE1BQUwsQ0FBWU0sS0FBWjtBQUNBO0FBN0RGOztBQUFBO0FBQUEsRUFBb0NNLHNEQUFwQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzNEQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDTyxTQUFTSCxZQUFULENBQXNCb0MsZ0JBQXRCLEVBQTZDQyxhQUE3QyxFQUEyRTtBQUFBOztBQUNqRixTQUFPLFVBQUN4USxLQUFEO0FBQUEsd0JBQ04sOERBQUMsK0NBQUQsa0NBQWN3USxhQUFkO0FBQUEsNkJBQ0MsOERBQUMsZ0JBQUQsb0JBQXNCeFEsS0FBdEI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUREO0FBQUE7QUFBQTtBQUFBO0FBQUEsYUFETTtBQUFBLEdBQVA7QUFLQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDZEQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsSUFBTUYsQ0FBQyxHQUFHSCw0Q0FBSyxDQUFDLG1DQUFELENBQWY7QUFRTyxTQUFTZ1IsYUFBVCxDQUF1QjNRLEtBQXZCLEVBQWtEO0FBQUE7O0FBQ3hELE1BQU9HLEtBQVAsR0FBMERILEtBQTFELENBQU9HLEtBQVA7QUFBQSxNQUFjQyxRQUFkLEdBQTBESixLQUExRCxDQUFjSSxRQUFkO0FBQUEsMEJBQTBESixLQUExRCxDQUF3QjRRLFVBQXhCO0FBQUEsTUFBd0JBLFVBQXhCLGtDQUFxQyxpQkFBckM7QUFDQSxNQUFNQyxHQUFHLEdBQUdKLGlEQUFVLENBQUN2RCxzRUFBRCxDQUF0Qjs7QUFFQSxrQkFBNENuRywrQ0FBUSxDQUFDLEtBQUQsQ0FBcEQ7QUFBQTtBQUFBLE1BQU8rSixjQUFQO0FBQUEsTUFBdUJDLGlCQUF2Qjs7QUFFQWpLLEVBQUFBLGdEQUFTLENBQUMsWUFBTTtBQUNmLFFBQUlnSyxjQUFKLEVBQW9CO0FBQ25CLFVBQUkxUSxRQUFRLElBQUl5USxHQUFKLGFBQUlBLEdBQUosZUFBSUEsR0FBRyxDQUFFNUMsV0FBckIsRUFBa0M7QUFDakM4QyxRQUFBQSxpQkFBaUIsQ0FBQyxLQUFELENBQWpCOztBQUNBLFlBQUlGLEdBQUcsQ0FBQzVDLFdBQUosQ0FBZ0JwRCxJQUFoQixLQUF5QixlQUF6QixJQUE0Q2dHLEdBQUcsQ0FBQzVDLFdBQUosQ0FBZ0JwRCxJQUFoQixLQUF5QixXQUF6RSxFQUFzRjtBQUNyRnpLLFVBQUFBLFFBQVEsQ0FBQztBQUNSeUssWUFBQUEsSUFBSSxFQUFFZ0csR0FBRyxDQUFDNUMsV0FBSixDQUFnQnBELElBRGQ7QUFFUndFLFlBQUFBLEtBQUssRUFBRXdCLEdBQUcsQ0FBQzVDLFdBQUosQ0FBZ0JvQixLQUZmO0FBR1JDLFlBQUFBLE1BQU0sRUFBRXVCLEdBQUcsQ0FBQzVDLFdBQUosQ0FBZ0JxQixNQUhoQjtBQUlSMEIsWUFBQUEsU0FBUyxFQUFFLElBQUluTSxJQUFKLEVBSkg7QUFLUmlMLFlBQUFBLElBQUksRUFBRWUsR0FBRyxDQUFDNUMsV0FBSixDQUFnQjZCO0FBTGQsV0FBRCxDQUFSO0FBT0E7QUFDRDs7QUFDRCxVQUFJMVAsUUFBUSxJQUFJLENBQUN5USxHQUFqQixFQUFzQjtBQUNyQnpRLFFBQUFBLFFBQVE7QUFDUjtBQUNEO0FBQ0QsR0FsQlEsRUFrQk4sQ0FBQ3lRLEdBQUQsQ0FsQk0sQ0FBVDs7QUFvQkEsTUFBSUMsY0FBSixFQUFvQjtBQUNuQix3QkFDQztBQUFBLDhCQUNDO0FBQUEsa0JBQU1ELEdBQUcsU0FBSCxJQUFBQSxHQUFHLFdBQUgsSUFBQUEsR0FBRyxDQUFFaEQsU0FBTCxHQUFpQixZQUFqQixHQUFnQztBQUF0QztBQUFBO0FBQUE7QUFBQTtBQUFBLGNBREQsZUFFQyw4REFBQyxxREFBRDtBQUNDLGVBQU8sRUFBRSxtQkFBTTtBQUNka0QsVUFBQUEsaUJBQWlCLENBQUMsS0FBRCxDQUFqQjtBQUNBLFNBSEY7QUFJQyxhQUFLLEVBQUMsT0FKUDtBQUtDLGVBQU8sRUFBRUYsR0FBRixhQUFFQSxHQUFGLHVCQUFFQSxHQUFHLENBQUUzUCxPQUxmO0FBTUMsZ0JBQVEsRUFBRTJQLEdBQUYsYUFBRUEsR0FBRix1QkFBRUEsR0FBRyxDQUFFM1AsT0FOaEI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsY0FGRCxlQVlDLDhEQUFDLHFEQUFEO0FBQVEsWUFBSSxFQUFDLE1BQWI7QUFBb0IsVUFBRSxFQUFDLEdBQXZCO0FBQTJCLGFBQUssTUFBaEM7QUFBaUMsZUFBTyxFQUFFO0FBQUE7O0FBQUEsaUJBQU0yUCxHQUFOLGFBQU1BLEdBQU4sOENBQU1BLEdBQUcsQ0FBRW5ELE1BQUwsQ0FBWXZCLE9BQWxCLHdEQUFNLG9CQUFxQjhFLFNBQXJCLEVBQU47QUFBQSxTQUExQztBQUFrRixnQkFBUSxFQUFFSixHQUFGLGFBQUVBLEdBQUYsdUJBQUVBLEdBQUcsQ0FBRTNQLE9BQWpHO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLGNBWkQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBREQ7QUFrQkE7O0FBRUQsTUFBSWYsS0FBSyxJQUFJQSxLQUFLLENBQUMyUCxJQUFuQixFQUF5QjtBQUN4Qix3QkFDQztBQUFBLDhCQUNDLDhEQUFDLG9EQUFEO0FBQU8sWUFBSSxFQUFDLFFBQVo7QUFBcUIsV0FBRyxFQUFFM1AsS0FBSyxDQUFDMlAsSUFBaEM7QUFBc0MsZ0JBQVE7QUFBOUM7QUFBQTtBQUFBO0FBQUE7QUFBQSxjQURELGVBRUMsOERBQUMscURBQUQ7QUFDQyxZQUFJLEVBQUMsTUFETjtBQUVDLGVBQU8sTUFGUjtBQUdDLGVBQU8sRUFBRSxtQkFBTTtBQUNkaUIsVUFBQUEsaUJBQWlCLENBQUMsS0FBRCxDQUFqQjtBQUNBLGNBQUkzUSxRQUFKLEVBQWNBLFFBQVE7QUFDdEIsU0FORjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxjQUZEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUREO0FBZUE7O0FBRUQsc0JBQU8sOERBQUMscURBQUQ7QUFBUSxXQUFPLEVBQUU7QUFBQSxhQUFNMlEsaUJBQWlCLENBQUMsSUFBRCxDQUF2QjtBQUFBLEtBQWpCO0FBQUEsY0FBaURIO0FBQWpEO0FBQUE7QUFBQTtBQUFBO0FBQUEsVUFBUDtBQUNBOztHQWxFZUQ7O0tBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBRWRoQjtBQUNBO0FBQ0E7QUFDQTtBQUVBOztBQUVBLElBQU03USxDQUFDLEdBQUdILDRDQUFLLENBQUMsOEJBQUQsQ0FBZjtBQU9PLFNBQVN3UixRQUFULENBQWtCblIsS0FBbEIsRUFBd0M7QUFBQTs7QUFDOUMsTUFBT0csS0FBUCxHQUFtQ0gsS0FBbkMsQ0FBT0csS0FBUDtBQUFBLE1BQWNDLFFBQWQsR0FBbUNKLEtBQW5DLENBQWNJLFFBQWQ7QUFBQSxNQUEyQmtCLElBQTNCLHlGQUFtQ3RCLEtBQW5DOztBQUNBLGtCQUEwQitHLCtDQUFRLENBQWlCLE9BQWpCLENBQWxDO0FBQUE7QUFBQSxNQUFPZ0UsS0FBUDtBQUFBLE1BQWNDLFFBQWQ7O0FBRUEsTUFBTUMsZUFBZSxHQUFHUixrREFBVyxDQUFDLFVBQUNTLFVBQUQsRUFBMEI7QUFDN0QsUUFBTUMsR0FBRyxHQUFHRCxVQUFVLENBQUNFLElBQVgsQ0FBZ0IsRUFBaEIsRUFBb0JDLFVBQXBCLENBQStCLFdBQS9CLEVBQTRDLEVBQTVDLENBQVo7QUFDQSxRQUFNYixRQUFRLEdBQUcsSUFBSTBHLGdFQUFKLENBQVEvRixHQUFSLENBQWpCOztBQUNBLFFBQUlBLEdBQUcsQ0FBQ3RDLE1BQUosR0FBYSxDQUFqQixFQUFvQjtBQUNuQixVQUFJMkIsUUFBUSxDQUFDcEQsT0FBVCxFQUFKLEVBQXdCO0FBQ3ZCNEQsUUFBQUEsUUFBUSxDQUFDLE9BQUQsQ0FBUjtBQUNBLE9BRkQsTUFFTztBQUNOQSxRQUFBQSxRQUFRLENBQUMsS0FBRCxDQUFSO0FBQ0E7QUFDRCxLQU5ELE1BTU87QUFDTkEsTUFBQUEsUUFBUSxDQUFDLE9BQUQsQ0FBUjtBQUNBOztBQUNELFdBQU9SLFFBQVEsQ0FBQ3BELE9BQVQsRUFBUDtBQUNBLEdBYmtDLEVBYWhDLEVBYmdDLENBQW5DO0FBZUEsTUFBTW9FLElBQThCLEdBQUdkLDhDQUFPLENBQzdDO0FBQUEsV0FBTztBQUNOYyxNQUFBQSxJQUFJLEVBQUUsYUFEQTtBQUVOQyxNQUFBQSxVQUFVLEVBQUVSLGVBRk47QUFHTjBCLE1BQUFBLE1BQU0sRUFBRSxLQUhGO0FBSU5qQixNQUFBQSxVQUFVLEVBQUU7QUFKTixLQUFQO0FBQUEsR0FENkMsRUFPN0MsQ0FBQ1QsZUFBRCxDQVA2QyxDQUE5QztBQVVBLE1BQU1VLGFBQWEsR0FBR2hCLDJFQUFjLENBQUM7QUFDcENhLElBQUFBLElBQUksRUFBSkEsSUFEb0M7QUFFcENyTCxJQUFBQSxLQUFLLEVBQUxBLEtBRm9DO0FBR3BDQyxJQUFBQSxRQUFRO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLE1BQUUsVUFBQTBDLENBQUMsRUFBSTtBQUNkMUMsTUFBQUEsUUFBUSxJQUFJQSxRQUFRLENBQUMwQyxDQUFELENBQXBCO0FBQ0EsS0FGTyxDQUg0QjtBQU1wQ2tKLElBQUFBLEtBQUssRUFBRSxlQUFBbEosQ0FBQyxFQUFJO0FBQ1htSSxNQUFBQSxlQUFlLENBQUMsQ0FBQ25JLENBQUMsSUFBSSxFQUFOLENBQUQsQ0FBZjtBQUNBO0FBUm1DLEdBQUQsQ0FBcEM7QUFXQSxzQkFDQyw4REFBQyxvREFBRCxrQ0FBV3hCLElBQVg7QUFBaUIsUUFBSSxNQUFyQjtBQUFBLDRCQUNDO0FBQU8sU0FBRyxFQUFFcUs7QUFBWjtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBREQsZUFFQyw4REFBQyxtREFBRDtBQUFNLFVBQUksRUFBQyxVQUFYO0FBQXNCLFdBQUssRUFBRVosS0FBN0I7QUFBb0MsVUFBSSxFQUFDO0FBQXpDO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFGRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsVUFERDtBQU1BOztHQTlDZW9HO1VBNkJPeEc7OztLQTdCUHdHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FFZGhCO0FBQ0E7O0FBSU8sU0FBU0MsWUFBVCxDQUF5REMsYUFBekQsRUFBdUY7QUFDN0YsU0FBTyxTQUFTQyxjQUFULENBQXdCdFIsS0FBeEIsRUFBa0Q7QUFDeEQsUUFDQ0csS0FERCxHQUtJSCxLQUxKLENBQ0NHLEtBREQ7QUFBQSxRQUVjb1IsUUFGZCxHQUtJdlIsS0FMSixDQUVDd1IsR0FGRCxDQUVPQyxLQUZQO0FBQUEsUUFHVUMsRUFIVixHQUtJMVIsS0FMSixDQUdDMlIsTUFIRCxDQUdVRCxFQUhWO0FBQUEsUUFJQ0UsVUFKRCxHQUtJNVIsS0FMSixDQUlDNFIsVUFKRCxDQUR3RCxDQVF4RDs7QUFDQSxRQUFjOU8sQ0FBZCxHQUFzQ3VPLGFBQXRDLENBQU9sUixLQUFQO0FBQUEsUUFBaUJDLFNBQWpCLEdBQXNDaVIsYUFBdEMsQ0FBaUJqUixRQUFqQjtBQUFBLFFBQThCa0IsSUFBOUIseUZBQXNDK1AsYUFBdEM7O0FBRUEsd0JBQ0MsOERBQUMsdURBQUQsa0NBQ0svUCxJQURMO0FBRUMsV0FBSyxFQUFFbkIsS0FGUjtBQUdDLGNBQVEsRUFBRSxrQkFBQzBSLEtBQUQsRUFBUXJNLEdBQVIsRUFBZ0I7QUFDekJvTSxRQUFBQSxVQUFVLENBQUNMLFFBQUQsRUFBV0csRUFBWCxFQUFlbE0sR0FBRyxDQUFDckYsS0FBbkIsQ0FBVjtBQUNBLFlBQUlDLFNBQUosRUFBY0EsU0FBUSxDQUFDeVIsS0FBRCxFQUFRck0sR0FBUixDQUFSO0FBQ2Q7QUFORjtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBREQ7QUFVQSxHQXJCRDtBQXNCQTtLQXZCZTRMOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNMaEI7QUFDQTs7QUFHQSxJQUFNdFIsQ0FBQyxHQUFHSCw0Q0FBSyxDQUFDLDBDQUFELENBQWY7QUFNTyxTQUFTbVMsU0FBVCxDQUFzRHRDLE9BQXRELEVBQW9GO0FBQzFGLFNBQU8sU0FBU3VDLFdBQVQsQ0FBcUIvUixLQUFyQixFQUEwQztBQUNoRCxRQUFPZ1MsTUFBUCxHQUFpQnhDLE9BQWpCLENBQU93QyxNQUFQLENBRGdELENBR2hEOztBQUNBLFFBQUloUyxLQUFLLENBQUNpUyxRQUFOLEtBQW1CalMsS0FBSyxDQUFDd1IsR0FBTixDQUFVRSxFQUFqQyxFQUFxQztBQUNwQywwQkFDQztBQUFLLGFBQUssRUFBRTtBQUFDUSxVQUFBQSxTQUFTLEVBQUU7QUFBWixTQUFaO0FBQUEsK0JBRUMsOERBQUMsTUFBRCxvQkFBWWxTLEtBQVo7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUZEO0FBQUE7QUFBQTtBQUFBO0FBQUEsY0FERDtBQU1BOztBQUNELFdBQU8sSUFBUDtBQUNBLEdBYkQ7QUFjQTtLQWZlOFI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNWaEI7QUFFQTs7QUFRTyxTQUFTTSxTQUFULENBQXNENUMsT0FBdEQsRUFBcUY7QUFDM0YsU0FBTyxTQUFTNkMsV0FBVCxDQUFxQnJTLEtBQXJCLEVBQWlEO0FBQ3ZELHdCQUFPO0FBQUssV0FBSyxFQUFFO0FBQUNrUyxRQUFBQSxTQUFTLEVBQUU7QUFBWixPQUFaO0FBQUEsZ0JBQW1DQyx1REFBVyxDQUFDM0MsT0FBTyxTQUFQLElBQUFBLE9BQU8sV0FBUCxJQUFBQSxPQUFPLENBQUU4QyxhQUFULEdBQXlCOUMsT0FBTyxDQUFDOEMsYUFBUixDQUFzQnRTLEtBQXRCLENBQXpCLEdBQXdEQSxLQUFLLENBQUNHLEtBQS9EO0FBQTlDO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBUDtBQUNBLEdBRkQ7QUFHQTtLQUplaVM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ1ZoQjtBQUVBO0FBQ0E7QUFHQTs7QUFFQSxJQUFNdFMsQ0FBQyxHQUFHSCw0Q0FBSyxDQUFDLDhDQUFELENBQWY7QUFPTyxTQUFTOFMsYUFBVCxDQUEwREMsSUFBMUQsRUFBMEY7QUFBQTs7QUFDaEcsWUFBTyxTQUFTQyxlQUFULENBQXlCM1MsS0FBekIsRUFBMEQ7QUFBQTs7QUFDaEUsUUFDUTRTLFlBRFIsR0FLSTVTLEtBTEosQ0FDQ0csS0FERDtBQUFBLFFBRWNvUixRQUZkLEdBS0l2UixLQUxKLENBRUN3UixHQUZELENBRU9DLEtBRlA7QUFBQSxRQUdVQyxFQUhWLEdBS0kxUixLQUxKLENBR0MyUixNQUhELENBR1VELEVBSFY7QUFBQSxRQUlDRSxVQUpELEdBS0k1UixLQUxKLENBSUM0UixVQUpEOztBQU9BLG9CQUEwQjdLLCtDQUFRLENBQUM2TCxZQUFELENBQWxDO0FBQUE7QUFBQSxRQUFPelMsS0FBUDtBQUFBLFFBQWMwUyxRQUFkOztBQUVBLHdCQUNDLDhEQUFDLHlEQUFEO0FBQ0MsV0FBSyxNQUROO0FBRUMsaUJBQVcsTUFGWjtBQUdDLFdBQUssRUFBRTFTLEtBSFI7QUFJQyxjQUFRLEVBQUUwUyxRQUpYO0FBS0MsWUFBTSxFQUFFLGtCQUFNO0FBQ2JqQixRQUFBQSxVQUFVLENBQUNMLFFBQUQsRUFBV0csRUFBWCxFQUFldlIsS0FBZixDQUFWO0FBQ0EsT0FQRjtBQVFDLGVBQVMsRUFBRSxtQkFBQzBSLEtBQUQ7QUFBQSxlQUEwQlcseURBQVcsQ0FBQ1gsS0FBRCxFQUFRMVIsS0FBUixFQUFlSCxLQUFmLEVBQXNCMFMsSUFBdEIsYUFBc0JBLElBQXRCLHVCQUFzQkEsSUFBSSxDQUFFSSxhQUE1QixDQUFyQztBQUFBO0FBUlo7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUREO0FBWUEsR0F0QkQ7QUF1QkE7S0F4QmVMOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDZmhCO0FBQ0E7O0FBT08sU0FBU08sY0FBVCxDQUEyRHhELE9BQTNELEVBQThGO0FBQUE7O0FBQ3BHLGFBQWFBLE9BQU8sSUFBSSxFQUF4QjtBQUFBLE1BQU9rQyxFQUFQLFFBQU9BLEVBQVA7O0FBRUEsU0FBTyxVQUFDdUIsSUFBRCxFQUE0QjtBQUNsQyxRQUFNQyxHQUFHLEdBQUdELElBQUksQ0FBQ0UsSUFBTCxDQUFVaEwsTUFBVixDQUFpQixVQUFDQyxJQUFELEVBQU9vSixHQUFQO0FBQUEsYUFBZXBKLElBQUksQ0FBQ2dMLEdBQUwsQ0FBUzVCLEdBQUcsQ0FBQ2pLLE1BQUosQ0FBV21LLEVBQVgsQ0FBVCxDQUFmO0FBQUEsS0FBakIsRUFBMERxQixtREFBTyxFQUFqRSxDQUFaO0FBQ0Esd0JBQU87QUFBSyxXQUFLLEVBQUU7QUFBQ2IsUUFBQUEsU0FBUyxFQUFFO0FBQVosT0FBWjtBQUFBLGdCQUFtQ0MsdURBQVcsQ0FBQ2UsR0FBRDtBQUE5QztBQUFBO0FBQUE7QUFBQTtBQUFBLGFBQVA7QUFDQSxHQUhEO0FBSUE7S0FQZUY7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ1JoQjtBQUNBO0FBQ0E7QUFHQTs7QUFFQSxJQUFNbFQsQ0FBQyxHQUFHSCw0Q0FBSyxDQUFDLCtDQUFELENBQWY7QUFTTyxTQUFTMFQsY0FBVCxDQUEyRDdELE9BQTNELEVBQStGO0FBQUE7O0FBQ3JHLGFBQW9DQSxPQUFPLElBQUksRUFBL0M7QUFBQSxNQUFPaE8sVUFBUCxRQUFPQSxVQUFQO0FBQUEsTUFBbUJzUixhQUFuQixRQUFtQkEsYUFBbkI7O0FBRUEsWUFBTyxTQUFTUSxnQkFBVCxDQUEwQnRULEtBQTFCLEVBQTREO0FBQUE7O0FBQ2xFLFFBQ1E0UyxZQURSLEdBS0k1UyxLQUxKLENBQ0NHLEtBREQ7QUFBQSxRQUVPc1IsS0FGUCxHQUtJelIsS0FMSixDQUVDd1IsR0FGRCxDQUVPQyxLQUZQO0FBQUEsUUFHVUMsRUFIVixHQUtJMVIsS0FMSixDQUdDMlIsTUFIRCxDQUdVRCxFQUhWO0FBQUEsUUFJQ0UsVUFKRCxHQUtJNVIsS0FMSixDQUlDNFIsVUFKRDs7QUFPQSxvQkFBMEI3SywrQ0FBUSxDQUFDNkwsWUFBRCxDQUFsQztBQUFBO0FBQUEsUUFBT3pTLEtBQVA7QUFBQSxRQUFjMFMsUUFBZDs7QUFFQSx3QkFDQyw4REFBQyxvREFBRDtBQUNDLFdBQUssTUFETjtBQUVDLGlCQUFXO0FBRlosT0FHS3JSLFVBSEw7QUFJQyxXQUFLLEVBQUVyQixLQUpSO0FBS0MsY0FBUSxFQUFFLGtCQUFDMEMsRUFBRCxFQUFLQyxDQUFMLEVBQVc7QUFDcEIrUCxRQUFBQSxRQUFRLENBQUMvUCxDQUFDLENBQUMzQyxLQUFILENBQVI7QUFDQSxPQVBGO0FBUUMsWUFBTSxFQUFFLGtCQUFNO0FBQ2J5UixRQUFBQSxVQUFVLENBQUNILEtBQUQsRUFBUUMsRUFBUixFQUFZdlIsS0FBWixDQUFWO0FBQ0EsT0FWRjtBQVdDLGVBQVMsRUFBRSxtQkFBQzBSLEtBQUQ7QUFBQSxlQUEwQlcseURBQVcsQ0FBQ1gsS0FBRCxFQUFRMVIsS0FBUixFQUFlSCxLQUFmLEVBQXNCOFMsYUFBdEIsQ0FBckM7QUFBQTtBQVhaO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFERDtBQWVBLEdBekJEO0FBMEJBO0tBN0JlTzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNoQmhCO0FBQ0E7QUFDQTs7QUFDQTtBQUNBO0FBWUE7OztBQUVBLElBQU12VCxDQUFDLEdBQUdILDRDQUFLLENBQUMsZ0NBQUQsQ0FBZjs7QUE4QkEsU0FBUytULGVBQVQsQ0FBcUQxVCxLQUFyRCxFQUFxRjtBQUFBOztBQUFBOztBQUNwRixNQUNDOEIsSUFERCxHQWVJOUIsS0FmSixDQUNDOEIsSUFERDtBQUFBLE1BRUM2UixPQUZELEdBZUkzVCxLQWZKLENBRUMyVCxPQUZEO0FBQUEsTUFHQ3BNLE1BSEQsR0FlSXZILEtBZkosQ0FHQ3VILE1BSEQ7QUFBQSxNQUlDcU0sWUFKRCxHQWVJNVQsS0FmSixDQUlDNFQsWUFKRDtBQUFBLE1BS0NDLGFBTEQsR0FlSTdULEtBZkosQ0FLQzZULGFBTEQ7QUFBQSxNQU1DQyxTQU5ELEdBZUk5VCxLQWZKLENBTUM4VCxTQU5EO0FBQUEsTUFPQ0MsVUFQRCxHQWVJL1QsS0FmSixDQU9DK1QsVUFQRDtBQUFBLE1BUUNDLGNBUkQsR0FlSWhVLEtBZkosQ0FRQ2dVLGNBUkQ7QUFBQSxNQVNDQyxlQVRELEdBZUlqVSxLQWZKLENBU0NpVSxlQVREO0FBQUEsTUFVQ0MsU0FWRCxHQWVJbFUsS0FmSixDQVVDa1UsU0FWRDtBQUFBLE1BV0NDLFFBWEQsR0FlSW5VLEtBZkosQ0FXQ21VLFFBWEQ7QUFBQSxNQVlDQyxTQVpELEdBZUlwVSxLQWZKLENBWUNvVSxTQVpEO0FBQUEsTUFhQ0MsZUFiRCxHQWVJclUsS0FmSixDQWFDcVUsZUFiRDtBQUFBLE1BY0NDLGNBZEQsR0FlSXRVLEtBZkosQ0FjQ3NVLGNBZEQ7QUFnQkEsTUFBTUMsSUFBSSxHQUFHN0osOENBQU8sQ0FBQztBQUFBLFdBQU1pSixPQUFOO0FBQUEsR0FBRCxFQUFnQixDQUFDQSxPQUFELENBQWhCLENBQXBCO0FBQ0EsTUFBTWEsSUFBSSxHQUFHOUosOENBQU8sQ0FBQztBQUFBLFdBQU1uRCxNQUFOO0FBQUEsR0FBRCxFQUFlLENBQUNBLE1BQUQsQ0FBZixDQUFwQjs7QUFDQSxrQkFBZ0NSLCtDQUFRLENBQUMsRUFBRCxDQUF4QztBQUFBO0FBQUEsTUFBT2tMLFFBQVA7QUFBQSxNQUFpQndDLFdBQWpCLGlCQW5Cb0YsQ0FxQnBGOzs7QUFDQSxrQkFBeUZqQixxREFBUSxDQUFJO0FBQ3BHRyxJQUFBQSxPQUFPLEVBQUVZLElBRDJGO0FBRXBHekUsSUFBQUEsSUFBSSxFQUFFMEUsSUFGOEY7QUFHcEc7QUFDQTVDLElBQUFBLFVBSm9HLHNCQUl6RkwsUUFKeUYsRUFJL0VtRCxRQUorRSxFQUlyRXZVLEtBSnFFLEVBSTlEO0FBQ3JDMFQsTUFBQUEsYUFBYSxXQUFJL1IsSUFBSixjQUFZeVAsUUFBWixlQUF5Qm1ELFFBQXpCLEdBQXFDdlUsS0FBckMsQ0FBYjtBQUNBLEtBTm1HO0FBT3BHd1UsSUFBQUEsTUFQb0csb0JBTzNGO0FBQ1JmLE1BQUFBLFlBQVksQ0FBQ3pPLElBQWIsQ0FBa0IyTyxTQUFTLEVBQTNCO0FBQ0EsS0FUbUc7QUFVcEdGLElBQUFBLFlBQVksRUFBWkE7QUFWb0csR0FBSixDQUFqRztBQUFBLE1BQU9nQixhQUFQLGFBQU9BLGFBQVA7QUFBQSxNQUFzQkMsaUJBQXRCLGFBQXNCQSxpQkFBdEI7QUFBQSxNQUF5Q0MsWUFBekMsYUFBeUNBLFlBQXpDO0FBQUEsTUFBdURDLFVBQXZELGFBQXVEQSxVQUF2RDtBQUFBLE1BQW1FNUIsSUFBbkUsYUFBbUVBLElBQW5FO0FBQUEsTUFBeUU2QixZQUF6RSxhQUF5RUEsWUFBekUsQ0F0Qm9GLENBbUNwRjs7O0FBQ0EsTUFBTUMsU0FBUyxHQUFHRCxZQUFZLENBQUNFLElBQWIsQ0FBa0IsVUFBQUMsRUFBRTtBQUFBLFdBQUlBLEVBQUUsQ0FBQ0MsT0FBSCxDQUFXRixJQUFYLENBQWdCLFVBQUFHLEdBQUc7QUFBQSxhQUFJQSxHQUFHLENBQUNDLE1BQUosQ0FBV3hULElBQVgsS0FBb0IsZUFBeEI7QUFBQSxLQUFuQixDQUFKO0FBQUEsR0FBcEIsQ0FBbEIsQ0FwQ29GLENBc0NwRjs7QUFDQSxNQUFNeVQsTUFBTSxHQUFHTixTQUFTLGdCQUN2Qiw4REFBQywyREFBRDtBQUFBLGNBQ0VELFlBQVksQ0FBQzlMLEdBQWIsQ0FBaUIsVUFBQXNNLEtBQUs7QUFBQSwwQkFDdEIsOERBQUMsd0RBQUQsa0VBQW1CQSxLQUFLLENBQUNDLG1CQUFOLEVBQW5CLEdBQW1ERCxLQUFLLENBQUNDLG1CQUFOLENBQTBCbkIsY0FBMUIsQ0FBbkQ7QUFBQSxrQkFDRWtCLEtBQUssQ0FBQ0osT0FBTixDQUFjbE0sR0FBZCxDQUFrQixVQUFBeUksTUFBTTtBQUFBLDhCQUN4Qiw4REFBQywrREFBRCxrRUFBMEJBLE1BQU0sQ0FBQytELGNBQVAsRUFBMUIsR0FBc0QvRCxNQUFNLENBQUMrRCxjQUFQLENBQXNCckIsZUFBdEIsQ0FBdEQ7QUFBQSxzQkFDRTFDLE1BQU0sQ0FBQzFMLE1BQVAsQ0FBYyxRQUFkO0FBREY7QUFBQTtBQUFBO0FBQUE7QUFBQSxtQkFEd0I7QUFBQSxTQUF4QjtBQURGO0FBQUE7QUFBQTtBQUFBO0FBQUEsZUFEc0I7QUFBQSxLQUF0QjtBQURGO0FBQUE7QUFBQTtBQUFBO0FBQUEsVUFEdUIsR0FZcEIsSUFaSjtBQWNBLHNCQUNDO0FBQUEsMkJBQ0MsOERBQUMsb0RBQUQsa0VBQWUyTyxhQUFhLEVBQTVCLEdBQW1DQSxhQUFhLENBQUNiLFVBQUQsQ0FBaEQ7QUFBQSw4QkFDQyw4REFBQywyREFBRDtBQUFBLGtCQUNFZSxZQUFZLENBQUM1TCxHQUFiLENBQWlCLFVBQUF5TSxXQUFXO0FBQUEsOEJBQzVCLDhEQUFDLHdEQUFELGtFQUFtQkEsV0FBVyxDQUFDQyxtQkFBWixFQUFuQixHQUF5REQsV0FBVyxDQUFDQyxtQkFBWixDQUFnQzVCLGNBQWhDLENBQXpEO0FBQUEsc0JBQ0UyQixXQUFXLENBQUNQLE9BQVosQ0FBb0JsTSxHQUFwQixDQUF3QixVQUFBeUksTUFBTTtBQUFBLGtDQUM5Qiw4REFBQywrREFBRCxrRUFBMEJBLE1BQU0sQ0FBQ2tFLGNBQVAsRUFBMUIsR0FBc0RsRSxNQUFNLENBQUNrRSxjQUFQLENBQXNCNUIsZUFBdEIsQ0FBdEQ7QUFBQSwwQkFDRXRDLE1BQU0sQ0FBQzFMLE1BQVAsQ0FBYyxRQUFkO0FBREY7QUFBQTtBQUFBO0FBQUE7QUFBQSx1QkFEOEI7QUFBQSxhQUE5QjtBQURGO0FBQUE7QUFBQTtBQUFBO0FBQUEsbUJBRDRCO0FBQUEsU0FBNUI7QUFERjtBQUFBO0FBQUE7QUFBQTtBQUFBLGNBREQsZUFZQyw4REFBQyx5REFBRCxrRUFBb0I0TyxpQkFBaUIsRUFBckMsR0FBNENBLGlCQUFpQixDQUFDWCxTQUFELENBQTdEO0FBQUEsa0JBQ0VmLElBQUksQ0FBQ2pLLEdBQUwsQ0FBUyxVQUFBc0ksR0FBRyxFQUFJO0FBQ2hCdUQsVUFBQUEsVUFBVSxDQUFDdkQsR0FBRCxDQUFWO0FBQ0EsOEJBQ0MsOERBQUMsd0RBQUQsa0VBQ1NBLEdBQUcsQ0FBQ3NFLFdBQUosRUFEVCxHQUMrQnRFLEdBQUcsQ0FBQ3NFLFdBQUosQ0FBZ0IzQixRQUFoQixDQUQvQjtBQUVDLHdCQUFZLEVBQUU7QUFBQSxxQkFBTU0sV0FBVyxDQUFDakQsR0FBRyxDQUFDRSxFQUFMLENBQWpCO0FBQUEsYUFGZjtBQUdDLHdCQUFZLEVBQUU7QUFBQSxxQkFBTStDLFdBQVcsQ0FBQyxFQUFELENBQWpCO0FBQUEsYUFIZjtBQUFBLHNCQUtFakQsR0FBRyxDQUFDdUUsS0FBSixDQUFVN00sR0FBVixDQUFjLFVBQUE4TSxJQUFJO0FBQUEsa0NBQ2xCLDhEQUFDLHlEQUFELGtFQUFvQkEsSUFBSSxDQUFDQyxZQUFMLEVBQXBCLEdBQTRDRCxJQUFJLENBQUNDLFlBQUwsQ0FBa0I3QixTQUFsQixDQUE1QztBQUFBLDBCQUE0RTRCLElBQUksQ0FBQy9QLE1BQUwsQ0FBWSxNQUFaLEVBQW9CO0FBQUNnTSxrQkFBQUEsUUFBUSxFQUFSQTtBQUFELGlCQUFwQjtBQUE1RTtBQUFBO0FBQUE7QUFBQTtBQUFBLHVCQURrQjtBQUFBLGFBQWxCO0FBTEY7QUFBQTtBQUFBO0FBQUE7QUFBQSxtQkFERDtBQVdBLFNBYkE7QUFERjtBQUFBO0FBQUE7QUFBQTtBQUFBLGNBWkQsRUE0QkVzRCxNQTVCRjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFERCxtQkFERDtBQWtDQTtBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztHQTdGUzdCO1VBc0JpRkY7OztLQXRCakZFO0FBOEZGLFNBQVN3QyxVQUFULENBQWdEbFcsS0FBaEQsRUFBMkU7QUFBQTs7QUFDakYsc0JBQU8sOERBQUMsOENBQUQ7QUFBWSxRQUFJLEVBQUVBLEtBQUssQ0FBQzhCLElBQXhCO0FBQThCLFVBQU0sRUFBRSxnQkFBQThSLFlBQVk7QUFBQSwwQkFBSSw4REFBQyxlQUFEO0FBQWlCLG9CQUFZLEVBQUVBO0FBQS9CLFNBQWlENVQsS0FBakQ7QUFBQTtBQUFBO0FBQUE7QUFBQSxnQkFBSjtBQUFBO0FBQWxEO0FBQUE7QUFBQTtBQUFBO0FBQUEsVUFBUDtBQUNBO01BRmVrVzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzFJaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTMUQsV0FBVCxDQUNOWCxLQURNLEVBRU4xUixLQUZNLEVBR05ILEtBSE0sRUFJTjhTLGFBSk0sRUFLTDtBQUNELE1BQ2N2QixRQURkLEdBSUl2UixLQUpKLENBQ0N3UixHQURELENBQ09DLEtBRFA7QUFBQSxNQUVnQjBFLFVBRmhCLEdBSUluVyxLQUpKLENBRUNtVCxJQUZELENBRVF0SyxNQUZSO0FBQUEsTUFHQzhMLE1BSEQsR0FJSTNVLEtBSkosQ0FHQzJVLE1BSEQ7O0FBTUEsTUFBSTlDLEtBQUssQ0FBQ3ZQLEdBQU4sS0FBYyxLQUFkLElBQXVCLENBQUN1UCxLQUFLLENBQUN1RSxRQUE5QixJQUEwQzdFLFFBQVEsR0FBRyxDQUFYLEtBQWlCNEUsVUFBM0QsS0FBMEVyRCxhQUFhLEdBQUdBLGFBQWEsQ0FBQzlTLEtBQUQsRUFBUUcsS0FBUixDQUFoQixHQUFpQyxLQUF4SCxDQUFKLEVBQW9JO0FBQ25Jd1UsSUFBQUEsTUFBTTtBQUNOO0FBQ0Q7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDMUJEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDTkE7QUFDQTs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOztBQUVBLElBQU03VSxDQUFDLEdBQUdILDRDQUFLLENBQUMsdUNBQUQsQ0FBZjtBQU1PLFNBQVM2VyxrQkFBVCxDQUE0QnhXLEtBQTVCLEVBQTJGO0FBQUE7O0FBQ2pHLE1BQU84QixJQUFQLEdBQXVIOUIsS0FBdkgsQ0FBTzhCLElBQVA7QUFBQSxNQUFhekIsTUFBYixHQUF1SEwsS0FBdkgsQ0FBYUssTUFBYjtBQUFBLE1BQXFCb1csTUFBckIsR0FBdUh6VyxLQUF2SCxDQUFxQnlXLE1BQXJCO0FBQUEsTUFBNkJDLGVBQTdCLEdBQXVIMVcsS0FBdkgsQ0FBNkIwVyxlQUE3QjtBQUFBLE1BQThDdFcsUUFBOUMsR0FBdUhKLEtBQXZILENBQThDSSxRQUE5QztBQUFBLE1BQXdEdVcsVUFBeEQsR0FBdUgzVyxLQUF2SCxDQUF3RDJXLFVBQXhEO0FBQUEsTUFBb0V4VyxLQUFwRSxHQUF1SEgsS0FBdkgsQ0FBb0VHLEtBQXBFO0FBQUEsTUFBMkV5VyxXQUEzRSxHQUF1SDVXLEtBQXZILENBQTJFNFcsV0FBM0U7QUFBQSxNQUF3RkMsVUFBeEYsR0FBdUg3VyxLQUF2SCxDQUF3RjZXLFVBQXhGO0FBQUEsTUFBb0dDLE1BQXBHLEdBQXVIOVcsS0FBdkgsQ0FBb0c4VyxNQUFwRztBQUFBLE1BQStHeFYsSUFBL0cseUZBQXVIdEIsS0FBdkg7O0FBRUEsTUFBTXdQLE9BQU8sR0FBR3FILFVBQVUsSUFBSSxDQUM3QjtBQUFDdlUsSUFBQUEsR0FBRyxFQUFFLEtBQU47QUFBYUQsSUFBQUEsSUFBSSxFQUFFLEtBQW5CO0FBQTBCbEMsSUFBQUEsS0FBSyxFQUFFO0FBQWpDLEdBRDZCLEVBRTdCO0FBQUNtQyxJQUFBQSxHQUFHLEVBQUUsS0FBTjtBQUFhRCxJQUFBQSxJQUFJLEVBQUUsS0FBbkI7QUFBMEJsQyxJQUFBQSxLQUFLLEVBQUU7QUFBakMsR0FGNkIsQ0FBOUI7QUFLQSxNQUFNNFcsWUFBWSxHQUFHdE0sa0RBQVcsQ0FDL0IsVUFBQzNILENBQUQsRUFBZTtBQUNkLFFBQUksQ0FBQ0EsQ0FBTCxFQUFRO0FBQ1AxQyxNQUFBQSxRQUFRLElBQUlBLFFBQVEsQ0FBQzJTLG1EQUFPLENBQUMsQ0FBRCxFQUFJMkQsZUFBSixDQUFSLENBQXBCO0FBQ0EsS0FGRCxNQUVPO0FBQ050VyxNQUFBQSxRQUFRLElBQUlBLFFBQVEsQ0FBQzBDLENBQUQsQ0FBcEI7QUFDQTtBQUNELEdBUDhCLEVBUS9CLENBQUM0VCxlQUFELEVBQWtCdFcsUUFBbEIsQ0FSK0IsQ0FBaEM7QUFXQSxNQUFNb0YsR0FBRyxHQUFHLEVBQUVyRixLQUFLLFlBQVlrVyxpREFBbkIsS0FBNkJsVyxLQUFLLEtBQUs4RCxTQUF2QyxHQUFtRDhPLG1EQUFPLENBQUM1UyxLQUFELENBQTFELEdBQW9FQSxLQUFoRjs7QUFFQSx1QkFBdUJvVyw2REFBYSxDQUFDO0FBQUNuVyxJQUFBQSxRQUFRLEVBQUUyVyxZQUFYO0FBQXlCTixJQUFBQSxNQUFNLEVBQU5BLE1BQXpCO0FBQWlDRSxJQUFBQSxVQUFVLEVBQVZBLFVBQWpDO0FBQTZDeFcsSUFBQUEsS0FBSyxFQUFFcUYsR0FBcEQ7QUFBeURvUixJQUFBQSxXQUFXLEVBQVhBO0FBQXpELEdBQUQsQ0FBcEM7QUFBQTtBQUFBLE1BQU8zSyxZQUFQOztBQUVBLE1BQU0rSyxvQkFBb0IsR0FBR3ZNLGtEQUFXLENBQ3ZDLFVBQUNsRixDQUFELEVBQXdDekMsQ0FBeEMsRUFBNkQ7QUFDNUQsUUFBTW1VLGVBQWUsR0FBR25VLENBQUMsQ0FBQzNDLEtBQTFCO0FBQ0EsUUFBTStXLFFBQVEsR0FBRyxJQUFJYixpREFBSixDQUFVLENBQUFsVyxLQUFLLFNBQUwsSUFBQUEsS0FBSyxXQUFMLFlBQUFBLEtBQUssQ0FBRWdYLE1BQVAsS0FBaUIsQ0FBM0IsRUFBOEJGLGVBQTlCLENBQWpCO0FBRUFuWCxJQUFBQSxDQUFDLENBQUMsUUFBRCxFQUFXSyxLQUFYLEVBQWtCOFcsZUFBbEIsRUFBbUNDLFFBQW5DLENBQUQsQ0FKNEQsQ0FLNUQ7O0FBQ0E5VyxJQUFBQSxRQUFRLElBQUlBLFFBQVEsQ0FBQzhXLFFBQUQsQ0FBcEIsQ0FONEQsQ0FPNUQ7QUFDQSxHQVRzQyxFQVV2QyxDQUFDOVcsUUFBRCxFQUFXRCxLQUFYLENBVnVDLENBQXhDO0FBYUEsTUFBTWlYLFlBQVksR0FBRyxDQUFBalgsS0FBSyxTQUFMLElBQUFBLEtBQUssV0FBTCxZQUFBQSxLQUFLLENBQUVrWCxRQUFQLE1BQW1CWCxlQUFuQixhQUFtQkEsZUFBbkIsdUJBQW1CQSxlQUFlLENBQUVZLElBQXBDLEtBQTRDLEtBQWpFO0FBQ0F4WCxFQUFBQSxDQUFDLENBQUMsUUFBRCxFQUFXSyxLQUFYLEVBQWtCaVgsWUFBbEIsQ0FBRDtBQUVBLHNCQUNDLDhEQUFDLG9EQUFELGtDQUFXOVYsSUFBWDtBQUFpQixpQkFBYSxFQUFDLE9BQS9CO0FBQUEsNEJBQ0M7QUFBTyxVQUFJLEVBQUVRLElBQWI7QUFBbUIsU0FBRyxFQUFFbUssWUFBeEI7QUFBc0MsWUFBTSxFQUFFNUwsTUFBOUM7QUFBc0QsY0FBUSxFQUFFeVc7QUFBaEU7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQURELGVBRUMsOERBQUMsb0RBQUQ7QUFBTyxXQUFLLE1BQVo7QUFBQSw2QkFDQyw4REFBQyx1REFBRDtBQUFVLGdCQUFRLEVBQUVBLE1BQXBCO0FBQTRCLGVBQU8sRUFBRXRILE9BQXJDO0FBQThDLGFBQUssRUFBRTRILFlBQXJEO0FBQW1FLGdCQUFRLEVBQUVKO0FBQTdFO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFERDtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBRkQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFVBREQ7QUFRQTs7R0EvQ2VSO1VBcUJRRDs7O0tBckJSQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBRWZoQjtBQUNBOztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsSUFBTTFXLENBQUMsR0FBR0gsNENBQUssQ0FBQywrQkFBRCxDQUFmO0FBY08sU0FBUzRTLFVBQVQsQ0FBb0J2UyxLQUFwQixFQUEyRTtBQUFBOztBQUNqRixNQUFPOEIsSUFBUCxHQUEyRzlCLEtBQTNHLENBQU84QixJQUFQO0FBQUEsTUFBYXpCLE1BQWIsR0FBMkdMLEtBQTNHLENBQWFLLE1BQWI7QUFBQSxNQUFxQnlXLE1BQXJCLEdBQTJHOVcsS0FBM0csQ0FBcUI4VyxNQUFyQjtBQUFBLE1BQTZCTCxNQUE3QixHQUEyR3pXLEtBQTNHLENBQTZCeVcsTUFBN0I7QUFBQSxNQUFxQ0MsZUFBckMsR0FBMkcxVyxLQUEzRyxDQUFxQzBXLGVBQXJDO0FBQUEsTUFBc0R0VyxRQUF0RCxHQUEyR0osS0FBM0csQ0FBc0RJLFFBQXREO0FBQUEsTUFBZ0V1VyxVQUFoRSxHQUEyRzNXLEtBQTNHLENBQWdFMlcsVUFBaEU7QUFBQSxNQUE0RXhXLEtBQTVFLEdBQTJHSCxLQUEzRyxDQUE0RUcsS0FBNUU7QUFBQSxNQUFtRnlXLFdBQW5GLEdBQTJHNVcsS0FBM0csQ0FBbUY0VyxXQUFuRjtBQUFBLE1BQW1HdFYsSUFBbkcseUZBQTJHdEIsS0FBM0c7O0FBRUEsTUFBTStXLFlBQVksR0FBR3RNLGtEQUFXLENBQy9CLFVBQUMzSCxDQUFELEVBQWU7QUFDZCxRQUFJLENBQUNBLENBQUwsRUFBUTtBQUNQMUMsTUFBQUEsUUFBUSxJQUFJQSxRQUFRLENBQUMyUyxtREFBTyxDQUFDLENBQUQsRUFBSTJELGVBQUosQ0FBUixDQUFwQjtBQUNBLEtBRkQsTUFFTztBQUNOdFcsTUFBQUEsUUFBUSxJQUFJQSxRQUFRLENBQUMwQyxDQUFELENBQXBCO0FBQ0E7QUFDRCxHQVA4QixFQVEvQixDQUFDNFQsZUFBRCxFQUFrQnRXLFFBQWxCLENBUitCLENBQWhDO0FBV0EsTUFBTW9GLEdBQUcsR0FBRyxFQUFFckYsS0FBSyxZQUFZa1csaURBQW5CLEtBQTZCbFcsS0FBSyxLQUFLOEQsU0FBdkMsR0FBbUQ4TyxtREFBTyxDQUFDNVMsS0FBRCxDQUExRCxHQUFvRUEsS0FBaEY7O0FBRUEsdUJBQXVCb1csNkRBQWEsQ0FBQztBQUFDblcsSUFBQUEsUUFBUSxFQUFFMlcsWUFBWDtBQUF5Qk4sSUFBQUEsTUFBTSxFQUFOQSxNQUF6QjtBQUFpQ0UsSUFBQUEsVUFBVSxFQUFWQSxVQUFqQztBQUE2Q3hXLElBQUFBLEtBQUssRUFBRXFGLEdBQXBEO0FBQXlEb1IsSUFBQUEsV0FBVyxFQUFYQTtBQUF6RCxHQUFELENBQXBDO0FBQUE7QUFBQSxNQUFPM0ssWUFBUDs7QUFFQSxzQkFDQyw4REFBQyxvREFBRCxrQ0FBVzNLLElBQVg7QUFBQSwyQkFDQztBQUFPLFVBQUksRUFBRVEsSUFBYjtBQUFtQixTQUFHLEVBQUVtSyxZQUF4QjtBQUFzQyxZQUFNLEVBQUU1TCxNQUE5QztBQUFzRCxjQUFRLEVBQUV5VztBQUFoRTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBREQ7QUFBQTtBQUFBO0FBQUE7QUFBQSxVQUREO0FBS0E7O0dBdkJldkU7VUFnQlFnRTs7O0tBaEJSaEU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBRXRCaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBLElBQU16UyxDQUFDLEdBQUdILDRDQUFLLENBQUMsa0NBQUQsQ0FBZjtBQWNPLFNBQVM0VyxhQUFULENBQXVCdlcsS0FBdkIsRUFBMkc7QUFBQTs7QUFDakgsTUFBT0csS0FBUCxHQUFrRUgsS0FBbEUsQ0FBT0csS0FBUDtBQUFBLE1BQWNDLFFBQWQsR0FBa0VKLEtBQWxFLENBQWNJLFFBQWQ7QUFBQSxNQUF3QjRMLEtBQXhCLEdBQWtFaE0sS0FBbEUsQ0FBd0JnTSxLQUF4QjtBQUFBLE1BQStCMkssVUFBL0IsR0FBa0UzVyxLQUFsRSxDQUErQjJXLFVBQS9CO0FBQUEsTUFBMkNGLE1BQTNDLEdBQWtFelcsS0FBbEUsQ0FBMkN5VyxNQUEzQztBQUFBLE1BQW1ERyxXQUFuRCxHQUFrRTVXLEtBQWxFLENBQW1ENFcsV0FBbkQ7QUFFQSxNQUFNM0ssWUFBWSxHQUFHSCw2Q0FBTSxDQUEwQixJQUExQixDQUEzQjtBQUNBLE1BQU1JLFlBQVksR0FBR0osNkNBQU0sQ0FBNEIsSUFBNUIsQ0FBM0IsQ0FKaUgsQ0FNakg7QUFDQTtBQUNBO0FBQ0E7O0FBQ0EsTUFBTXNMLFlBQVksR0FBRyxDQUFBalgsS0FBSyxTQUFMLElBQUFBLEtBQUssV0FBTCxZQUFBQSxLQUFLLENBQUVrWCxRQUFQLEtBQW1CLEtBQXhDO0FBRUF2USxFQUFBQSxnREFBUyxDQUFDLFlBQU07QUFDZixRQUFJLENBQUNtRixZQUFZLENBQUNFLE9BQWxCLEVBQTJCLE1BQU0sSUFBSUMsS0FBSixDQUFVLDZCQUFWLENBQU47QUFFM0J0TSxJQUFBQSxDQUFDLENBQUMsOEJBQUQsQ0FBRDtBQUNBb00sSUFBQUEsWUFBWSxDQUFDQyxPQUFiLEdBQXVCLElBQUlOLGtEQUFKLENBQWM7QUFDcEM5SixNQUFBQSxLQUFLLEVBQUUsU0FENkI7QUFFcEN3VixNQUFBQSxjQUFjLEVBQUUsR0FGb0I7QUFHcENDLE1BQUFBLE1BQU0sRUFBRVosV0FBVyxHQUFHLEdBQUgsR0FBU1AsaURBQUssQ0FBQ2UsWUFBRCxDQUFMLENBQW9CSyxjQUFwQixDQUFtQ3JTLFFBQW5DLEVBSFE7QUFJcENzUyxNQUFBQSxjQUFjLEVBQUUsS0FKb0I7QUFLcENqQixNQUFBQSxNQUFNLEVBQUVFLFVBQVUsR0FBR0YsTUFBTSxJQUFJSixpREFBSyxDQUFDZSxZQUFELENBQUwsQ0FBb0JPLE1BQWpDLEdBQTBDMVQsU0FMeEI7QUFNcEMyVCxNQUFBQSxXQUFXLEVBQUUsR0FOdUI7QUFPcENsTSxNQUFBQSxVQUFVLEVBQUUsSUFQd0I7QUFRcENXLE1BQUFBLFVBUm9DLHdCQVF2QjtBQUNaLFlBQUlqTSxRQUFKLEVBQWM7QUFBQTs7QUFDYix1Q0FBSTZMLFlBQVksQ0FBQ0UsT0FBakIsa0RBQUksc0JBQXNCaE0sS0FBMUIsRUFBaUM7QUFBQTs7QUFDaENDLFlBQUFBLFFBQVEsQ0FBQzJTLG1EQUFPLDJCQUFDOUcsWUFBWSxDQUFDRSxPQUFkLDJEQUFDLHVCQUFzQmhNLEtBQXZCLEVBQThCaVgsWUFBOUIsQ0FBUixDQUFSO0FBQ0EsV0FGRCxNQUVPO0FBQ05oWCxZQUFBQSxRQUFRO0FBQ1I7QUFDRDtBQUNELE9BaEJtQztBQWlCcENrTSxNQUFBQSxTQWpCb0MsdUJBaUJ4QjtBQUNYLFlBQUlsTSxRQUFKLEVBQWNBLFFBQVE7QUFDdEIsT0FuQm1DO0FBb0JwQ21NLE1BQUFBLFlBcEJvQywwQkFvQnJCO0FBQUE7O0FBQ2QsWUFBSW5NLFFBQUosRUFBY0EsUUFBUSxDQUFDMlMsbURBQU8sMkJBQUM5RyxZQUFZLENBQUNFLE9BQWQsMkRBQUMsdUJBQXNCaE0sS0FBdkIsRUFBOEJpWCxZQUE5QixDQUFSLENBQVI7QUFDZDtBQXRCbUMsS0FBZCxDQUF2QjtBQXdCQWxMLElBQUFBLFlBQVksQ0FBQ0MsT0FBYixDQUFxQlgsSUFBckIsQ0FBMEJTLFlBQVksQ0FBQ0UsT0FBdkM7QUFFQSxXQUFPLFlBQU07QUFDWixVQUFJRCxZQUFZLENBQUNDLE9BQWpCLEVBQTBCO0FBQ3pCck0sUUFBQUEsQ0FBQyxDQUFDLGlDQUFELENBQUQ7QUFDQW9NLFFBQUFBLFlBQVksQ0FBQ0MsT0FBYixDQUFxQkssTUFBckI7QUFDQU4sUUFBQUEsWUFBWSxDQUFDQyxPQUFiLEdBQXVCLElBQXZCO0FBQ0E7QUFDRCxLQU5EO0FBT0EsR0FyQ1EsRUFxQ04sQ0FBQ2lMLFlBQUQsRUFBZVgsTUFBZixFQUF1QkUsVUFBdkIsRUFBbUNDLFdBQW5DLENBckNNLENBQVQ7QUF1Q0EsTUFBTWlCLE1BQU0sR0FBR3BOLGtEQUFXLENBQ3pCLFVBQUMzSCxDQUFELEVBQWU7QUFDZCxRQUFJbUosWUFBWSxDQUFDRSxPQUFqQixFQUEwQjtBQUN6QnJNLE1BQUFBLENBQUMsQ0FBQyxxQkFBRCxFQUF3QmdELENBQXhCLENBQUQ7O0FBQ0EsVUFBSUEsQ0FBSixFQUFPO0FBQ05tSixRQUFBQSxZQUFZLENBQUNFLE9BQWIsQ0FBcUJoTSxLQUFyQixHQUE2QjJDLENBQUMsQ0FBQ2dWLFNBQUYsR0FBYzFTLFFBQWQsRUFBN0I7QUFDQSxPQUZELE1BRU87QUFDTjZHLFFBQUFBLFlBQVksQ0FBQ0UsT0FBYixDQUFxQmhNLEtBQXJCLEdBQTZCLEVBQTdCO0FBQ0E7O0FBQ0Q2TCxNQUFBQSxLQUFLLElBQUlBLEtBQUssQ0FBQ2xKLENBQUQsQ0FBZDtBQUNBO0FBQ0QsR0FYd0IsRUFZekIsQ0FBQ2tKLEtBQUQsQ0FaeUIsQ0FBMUIsQ0FuRGlILENBa0VqSDs7QUFDQWxGLEVBQUFBLGdEQUFTLENBQUMsWUFBTTtBQUFBOztBQUNmLFFBQU1pUix3QkFBd0IsR0FBRywyQkFBQTlMLFlBQVksQ0FBQ0UsT0FBYixrRkFBc0JoTSxLQUF0QixLQUErQixFQUFoRSxDQURlLENBQ3FEOztBQUNwRSxRQUFNNlgsZ0JBQWdCLEdBQUc3WCxLQUFLLEdBQUdBLEtBQUssQ0FBQ2lGLFFBQU4sRUFBSCxHQUFzQixFQUFwRCxDQUZlLENBRXlDOztBQUV4RCxRQUFJMlMsd0JBQXdCLEtBQUtDLGdCQUFqQyxFQUFtRDtBQUNsREgsTUFBQUEsTUFBTSxDQUFDMVgsS0FBRCxDQUFOO0FBQ0E7QUFDRCxHQVBRLEVBT04sQ0FBQzBYLE1BQUQsRUFBUzFYLEtBQVQsQ0FQTSxDQUFUO0FBU0EsU0FBTyxDQUFDOEwsWUFBRCxFQUFlNEwsTUFBZixDQUFQO0FBQ0E7O0dBN0VldEI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNwQmhCO0FBQ0E7QUFDQTs7O0FBRUEsSUFBTXpXLENBQUMsR0FBR0gsNENBQUssQ0FBQyw0QkFBRCxDQUFmO0FBU08sU0FBU3VZLFFBQVQsQ0FBa0JsWSxLQUFsQixFQUF3QztBQUFBOztBQUM5QyxpQkFBOEJpWSxpREFBTyxFQUFyQztBQUFBO0FBQUEsTUFBT0UsS0FBUDtBQUFBLE1BQWM3TyxZQUFkOztBQUNBLE1BQU0vQixNQUFNLEdBQUc0USxLQUFLLENBQUNuWSxLQUFLLENBQUNvWSxPQUFQLENBQUwsSUFBd0IsRUFBdkM7QUFFQSxNQUFNQyxJQUFJLGdCQUFHelkseURBQUEsQ0FBbUIyRyxnREFBQSxDQUFjdkcsS0FBSyxDQUFDa0csUUFBcEIsQ0FBbkIsRUFBa0Q7QUFDOURxQixJQUFBQSxNQUFNLEVBQUVBLE1BQU0sSUFBSSxFQUQ0QztBQUU5RCtRLElBQUFBLFFBQVEsRUFBRSxrQkFBQzlELElBQUQ7QUFBQSxhQUFtQmxMLFlBQVksQ0FBQ2tMLElBQUQsRUFBT3hVLEtBQUssQ0FBQ29ZLE9BQWIsQ0FBL0I7QUFBQTtBQUZvRCxHQUFsRCxDQUFiO0FBS0Esc0JBQ0M7QUFBQSw0QkFDQztBQUFBLGdCQUFLcFksS0FBSyxDQUFDdVk7QUFBWDtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBREQsRUFFRUYsSUFGRjtBQUFBLGtCQUREO0FBTUE7O0dBZmVIO1VBQ2VEOzs7S0FEZkM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNiaEI7QUFDQTs7O0FBRUEsSUFBTXBZLENBQUMsR0FBR0gsNENBQUssQ0FBQyx3QkFBRCxDQUFmO0FBU08sU0FBUzZZLElBQVQsQ0FBY3hZLEtBQWQsRUFBZ0M7QUFDdEMsc0JBQ0M7QUFBQSw0QkFDQztBQUFBLGdCQUFLQSxLQUFLLENBQUN1WTtBQUFYO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFERCxFQUVFdlksS0FBSyxDQUFDa0csUUFGUjtBQUFBLGtCQUREO0FBTUE7S0FQZXNTOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNaaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsSUFBTTFZLENBQUMsR0FBR0gsNENBQUssQ0FBQyxnQ0FBRCxDQUFmO0FBVU8sU0FBU2laLFlBQVQsQ0FBc0I1WSxLQUF0QixFQUFnRDtBQUFBOztBQUFBOztBQUN0RCxrQkFBMEIrRywrQ0FBUSxDQUFDL0csS0FBSyxDQUFDdUgsTUFBTixJQUFnQixFQUFqQixDQUFsQztBQUFBO0FBQUEsTUFBTzRRLEtBQVA7QUFBQSxNQUFjVSxRQUFkOztBQUNBLG1CQUFzQzlSLCtDQUFRLENBQUMsQ0FBRCxDQUE5QztBQUFBO0FBQUEsTUFBTytSLFdBQVA7QUFBQSxNQUFvQkMsY0FBcEI7O0FBQ0EsbUJBQXdDaFMsK0NBQVEsQ0FBQyxLQUFELENBQWhEO0FBQUE7QUFBQSxNQUFPWSxZQUFQO0FBQUEsTUFBcUJxUixlQUFyQjs7QUFFQSxNQUFNQyxNQUFnQixHQUFHLEVBQXpCO0FBQ0EsTUFBTS9TLFFBQXVCLEdBQUcsRUFBaEM7QUFFQUssRUFBQUEsbURBQUEsQ0FBaUJ2RyxLQUFqQixhQUFpQkEsS0FBakIsdUJBQWlCQSxLQUFLLENBQUVrRyxRQUF4QixFQUFrQyxVQUFDRyxLQUFELEVBQVFvTCxLQUFSLEVBQWtCO0FBQ25ELFFBQUksQ0FBQ3BMLEtBQUwsRUFBWTs7QUFDWixRQUFJLENBQUFBLEtBQUssU0FBTCxJQUFBQSxLQUFLLFdBQUwsWUFBQUEsS0FBSyxDQUFFd0UsSUFBUCxNQUFnQjJOLHVDQUFoQixJQUF3QixDQUFBblMsS0FBSyxTQUFMLElBQUFBLEtBQUssV0FBTCxZQUFBQSxLQUFLLENBQUV3RSxJQUFQLE1BQWdCcU4sK0NBQTVDLEVBQXNEO0FBQ3JELFlBQU0sSUFBSTlMLEtBQUosMkJBQTZCL0YsS0FBN0IsYUFBNkJBLEtBQTdCLHVCQUE2QkEsS0FBSyxDQUFFd0UsSUFBcEMsd0VBQU47QUFDQTs7QUFDRCxRQUFJeEUsS0FBSyxDQUFDckcsS0FBTixDQUFZbVosTUFBaEIsRUFBd0I7QUFDdkIsVUFBSSxPQUFPOVMsS0FBSyxDQUFDckcsS0FBTixDQUFZbVosTUFBbkIsS0FBOEIsVUFBOUIsSUFBNEMsQ0FBQzlTLEtBQUssQ0FBQ3JHLEtBQU4sQ0FBWW1aLE1BQVosQ0FBbUJoQixLQUFuQixFQUEwQjFHLEtBQTFCLENBQWpELEVBQW1GO0FBQUE7O0FBQ2xGd0gsUUFBQUEsTUFBTSxDQUFDOVQsSUFBUCxDQUFZLENBQUFrQixLQUFLLFNBQUwsSUFBQUEsS0FBSyxXQUFMLDRCQUFBQSxLQUFLLENBQUVyRyxLQUFQLDhEQUFjdVksS0FBZCxLQUF1QixFQUFuQztBQUNBclMsUUFBQUEsUUFBUSxDQUFDZixJQUFULGVBQWN2Rix5REFBQSxDQUFtQnlHLEtBQW5CLEVBQTBCO0FBQUMrUyxVQUFBQSxJQUFJLEVBQUUzSCxLQUFQO0FBQWNuUCxVQUFBQSxHQUFHLEVBQUUsQ0FBQStELEtBQUssU0FBTCxJQUFBQSxLQUFLLFdBQUwsWUFBQUEsS0FBSyxDQUFFL0QsR0FBUCxLQUFjbVAsS0FBSyxDQUFDck0sUUFBTjtBQUFqQyxTQUExQixDQUFkO0FBQ0E7QUFDRCxLQUxELE1BS087QUFBQTs7QUFDTjZULE1BQUFBLE1BQU0sQ0FBQzlULElBQVAsQ0FBWSxDQUFBa0IsS0FBSyxTQUFMLElBQUFBLEtBQUssV0FBTCw2QkFBQUEsS0FBSyxDQUFFckcsS0FBUCxnRUFBY3VZLEtBQWQsS0FBdUIsRUFBbkM7QUFDQXJTLE1BQUFBLFFBQVEsQ0FBQ2YsSUFBVCxlQUFjdkYseURBQUEsQ0FBbUJ5RyxLQUFuQixFQUEwQjtBQUFDK1MsUUFBQUEsSUFBSSxFQUFFM0gsS0FBUDtBQUFjblAsUUFBQUEsR0FBRyxFQUFFLENBQUErRCxLQUFLLFNBQUwsSUFBQUEsS0FBSyxXQUFMLFlBQUFBLEtBQUssQ0FBRS9ELEdBQVAsS0FBY21QLEtBQUssQ0FBQ3JNLFFBQU47QUFBakMsT0FBMUIsQ0FBZDtBQUNBO0FBQ0QsR0FkRDs7QUFnQkEsTUFBTWlVLFVBQVUsR0FBRyxTQUFiQSxVQUFhO0FBQUEsV0FBTSwrRUFBTjtBQUFBLEdBQW5COztBQUVBLE1BQU0vUCxZQUFZLEdBQUcsU0FBZkEsWUFBZSxDQUFDL0IsTUFBRCxFQUFjNlEsT0FBZCxFQUFrQztBQUN0RCxRQUFJVSxXQUFXLEdBQUcsQ0FBZCxNQUFvQjVTLFFBQXBCLGFBQW9CQSxRQUFwQix1QkFBb0JBLFFBQVEsQ0FBRTJDLE1BQTlCLENBQUosRUFBMEM7QUFDekNnUSxNQUFBQSxRQUFRLGlDQUFLVixLQUFMLHdGQUFhQyxPQUFiLEVBQXVCN1EsTUFBdkIsR0FBUjtBQUNBeVIsTUFBQUEsZUFBZSxDQUFDLElBQUQsQ0FBZjtBQUNBaFosTUFBQUEsS0FBSyxDQUFDc1ksUUFBTixpQ0FBbUJILEtBQW5CLHdGQUEyQkMsT0FBM0IsRUFBcUM3USxNQUFyQztBQUNBLEtBSkQsTUFJTztBQUNOc1IsTUFBQUEsUUFBUSxpQ0FBS1YsS0FBTCx3RkFBYUMsT0FBYixFQUF1QjdRLE1BQXZCLEdBQVI7QUFDQXdSLE1BQUFBLGNBQWMsQ0FBQ0QsV0FBVyxHQUFHLENBQWYsQ0FBZDtBQUNBO0FBQ0QsR0FURDs7QUFXQSxNQUFJOVksS0FBSyxDQUFDc1osUUFBVixFQUFvQjtBQUNuQix3QkFDQyw4REFBQyw4REFBRDtBQUFzQixXQUFLLEVBQUU7QUFBQ25CLFFBQUFBLEtBQUssRUFBTEEsS0FBRDtBQUFRN08sUUFBQUEsWUFBWSxFQUFaQTtBQUFSLE9BQTdCO0FBQUEsaUJBQ0V0SixLQUFLLENBQUN1WixhQUFOLGlCQUF1Qiw4REFBQyxvREFBRDtBQUFRLGVBQU8sRUFBRUYsVUFBakI7QUFBNkIsWUFBSSxFQUFFLENBQUMxUjtBQUFwQztBQUFBO0FBQUE7QUFBQTtBQUFBLGNBRHpCLGVBRUMsOERBQUMsbURBQUQ7QUFBTSxlQUFPLE1BQWI7QUFBYyxpQkFBUyxNQUF2QjtBQUFBLCtCQUNDLDhEQUFDLHVEQUFEO0FBQUEsa0NBQ0MsOERBQUMsMERBQUQ7QUFBYSxpQkFBSyxFQUFFLENBQXBCO0FBQUEsbUNBQ0MsOERBQUMseURBQUQ7QUFBb0IscUJBQU8sTUFBM0I7QUFBNEIsa0JBQUksRUFBQyxNQUFqQztBQUF3QyxzQkFBUSxNQUFoRDtBQUFpRCxvQkFBTSxFQUFFLENBQXpEO0FBQUEsd0JBQ0VzUixNQURGLGFBQ0VBLE1BREYsdUJBQ0VBLE1BQU0sQ0FBRS9QLEdBQVIsQ0FBWSxVQUFDcVAsS0FBRCxFQUFROUcsS0FBUixFQUFrQjtBQUM5QixvQ0FDQyw4REFBQyxtREFBRDtBQUVDLDJCQUFTLEVBQUVBLEtBQUssR0FBR3hKLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZaVEsS0FBWixFQUFtQnRQLE1BRnZDO0FBR0Msd0JBQU0sRUFBRWlRLFdBQVcsS0FBS3JILEtBSHpCO0FBSUMseUJBQU8sRUFBRTtBQUFBLDJCQUFNc0gsY0FBYyxDQUFDdEgsS0FBRCxDQUFwQjtBQUFBLG1CQUpWO0FBS0MsMEJBQVEsRUFBRUEsS0FBSyxHQUFHeEosTUFBTSxDQUFDQyxJQUFQLENBQVlpUSxLQUFaLEVBQW1CdFAsTUFMdEM7QUFBQSx5Q0FPQyw4REFBQywyREFBRDtBQUFBLDJDQUNDLDhEQUFDLHlEQUFEO0FBQUEsZ0NBQXFCMFA7QUFBckI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUREO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFQRCxtQkFDTTlHLEtBQUssQ0FBQ3JNLFFBQU4sRUFETjtBQUFBO0FBQUE7QUFBQTtBQUFBLHlCQUREO0FBYUEsZUFkQTtBQURGO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFERDtBQUFBO0FBQUE7QUFBQTtBQUFBLGtCQURELGVBb0JDLDhEQUFDLDBEQUFEO0FBQWEsaUJBQUssRUFBRSxFQUFwQjtBQUFBLHNCQUF5QmMsUUFBekIsYUFBeUJBLFFBQXpCLHVCQUF5QkEsUUFBUSxDQUFHNFMsV0FBSDtBQUFqQztBQUFBO0FBQUE7QUFBQTtBQUFBLGtCQXBCRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFERDtBQUFBO0FBQUE7QUFBQTtBQUFBLGNBRkQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBREQ7QUE2QkE7O0FBRUQsc0JBQ0MsOERBQUMsOERBQUQ7QUFBc0IsU0FBSyxFQUFFO0FBQUNYLE1BQUFBLEtBQUssRUFBTEEsS0FBRDtBQUFRN08sTUFBQUEsWUFBWSxFQUFaQTtBQUFSLEtBQTdCO0FBQUEsZUFDRXRKLEtBQUssQ0FBQ3VaLGFBQU4saUJBQXVCLDhEQUFDLG9EQUFEO0FBQVEsYUFBTyxFQUFFRjtBQUFqQjtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBRHpCLGVBRUMsOERBQUMseURBQUQ7QUFBb0IsYUFBTyxNQUEzQjtBQUE0QixVQUFJLEVBQUMsTUFBakM7QUFBQSxnQkFDRUosTUFERixhQUNFQSxNQURGLHVCQUNFQSxNQUFNLENBQUUvUCxHQUFSLENBQVksVUFBQ3FQLEtBQUQsRUFBUTlHLEtBQVIsRUFBa0I7QUFDOUIsNEJBQ0MsOERBQUMsbURBQUQ7QUFFQyxtQkFBUyxFQUFFQSxLQUFLLEdBQUd4SixNQUFNLENBQUNDLElBQVAsQ0FBWWlRLEtBQVosRUFBbUJ0UCxNQUZ2QztBQUdDLGdCQUFNLEVBQUVpUSxXQUFXLEtBQUtySCxLQUh6QjtBQUlDLGlCQUFPLEVBQUU7QUFBQSxtQkFBTXNILGNBQWMsQ0FBQ3RILEtBQUQsQ0FBcEI7QUFBQSxXQUpWO0FBS0Msa0JBQVEsRUFBRUEsS0FBSyxHQUFHeEosTUFBTSxDQUFDQyxJQUFQLENBQVlpUSxLQUFaLEVBQW1CdFAsTUFMdEM7QUFBQSxpQ0FPQyw4REFBQywyREFBRDtBQUFBLG1DQUNDLDhEQUFDLHlEQUFEO0FBQUEsd0JBQXFCMFA7QUFBckI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUREO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFQRCxXQUNNOUcsS0FBSyxDQUFDck0sUUFBTixFQUROO0FBQUE7QUFBQTtBQUFBO0FBQUEsaUJBREQ7QUFhQSxPQWRBO0FBREY7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUZELEVBbUJFYyxRQW5CRixhQW1CRUEsUUFuQkYsdUJBbUJFQSxRQUFRLENBQUc0UyxXQUFILENBbkJWO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxVQUREO0FBdUJBOztHQTVGZUY7O0tBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDbEJoQjtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDRkE7QUFFTyxJQUFNRCxXQUFXLGdCQUFHL1ksMERBQUEsQ0FBNEc7QUFDdEkwSixFQUFBQSxZQUFZLEVBQUUsd0JBQU0sQ0FBRSxDQURnSDtBQUV0STZPLEVBQUFBLEtBQUssRUFBRTtBQUYrSCxDQUE1RyxDQUFwQjs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ0ZQO0FBQ0E7QUFFTyxTQUFTRixPQUFULEdBQXNFO0FBQUE7O0FBQzVFLG9CQUE4QnhILGlEQUFVLENBQUNrSSxxREFBRCxDQUF4QztBQUFBLE1BQU9SLEtBQVAsZUFBT0EsS0FBUDtBQUFBLE1BQWM3TyxZQUFkLGVBQWNBLFlBQWQ7O0FBRUEsU0FBTyxDQUFDNk8sS0FBRCxFQUFRN08sWUFBUixDQUFQO0FBQ0E7O0dBSmUyTzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ0ZoQixNQUFxRztBQUNyRyxNQUEyRjtBQUMzRixNQUFrRztBQUNsRyxNQUFxSDtBQUNySCxNQUE4RztBQUM5RyxNQUE4RztBQUM5RyxNQUFzSTtBQUN0STtBQUNBOztBQUVBOztBQUVBLDRCQUE0QixxR0FBbUI7QUFDL0Msd0JBQXdCLGtIQUFhOztBQUVyQyx1QkFBdUIsdUdBQWE7QUFDcEM7QUFDQSxpQkFBaUIsK0ZBQU07QUFDdkIsNkJBQTZCLHNHQUFrQjs7QUFFL0MsYUFBYSwwR0FBRyxDQUFDLCtHQUFPOzs7O0FBSWdGO0FBQ3hHLE9BQU8saUVBQWUsK0dBQU8sSUFBSSxzSEFBYyxHQUFHLHNIQUFjLFlBQVksRUFBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUN6QjdFLE1BQXFHO0FBQ3JHLE1BQTJGO0FBQzNGLE1BQWtHO0FBQ2xHLE1BQXFIO0FBQ3JILE1BQThHO0FBQzlHLE1BQThHO0FBQzlHLE1BQXNJO0FBQ3RJO0FBQ0E7O0FBRUE7O0FBRUEsNEJBQTRCLHFHQUFtQjtBQUMvQyx3QkFBd0Isa0hBQWE7O0FBRXJDLHVCQUF1Qix1R0FBYTtBQUNwQztBQUNBLGlCQUFpQiwrRkFBTTtBQUN2Qiw2QkFBNkIsc0dBQWtCOztBQUUvQyxhQUFhLDBHQUFHLENBQUMsK0dBQU87Ozs7QUFJZ0Y7QUFDeEcsT0FBTyxpRUFBZSwrR0FBTyxJQUFJLHNIQUFjLEdBQUcsc0hBQWMsWUFBWSxFQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDMUI3RTtBQUNnSDtBQUNqQjtBQUMvRiw4QkFBOEIsbUZBQTJCLENBQUMsNEZBQXFDO0FBQy9GO0FBQ0Esc0VBQXNFLDRCQUE0QixHQUFHLDhEQUE4RCwwQkFBMEIsR0FBRyw4QkFBOEIsZ0JBQWdCLHlCQUF5QixHQUFHLHNDQUFzQyxnQkFBZ0IsR0FBRywrQkFBK0IsZ0JBQWdCLCtCQUErQixHQUFHLHdDQUF3QywrQkFBK0IsR0FBRyw4QkFBOEIsMEJBQTBCLEdBQUcsU0FBUyw2RkFBNkYsWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssVUFBVSxZQUFZLE9BQU8sS0FBSyxVQUFVLE1BQU0sS0FBSyxVQUFVLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksK0RBQStELDRCQUE0QixHQUFHLHlGQUF5RiwwQkFBMEIsR0FBRyx1Q0FBdUMsZ0JBQWdCLHlCQUF5QixHQUFHLCtDQUErQyxnQkFBZ0IsR0FBRyx3Q0FBd0MsZ0JBQWdCLCtCQUErQixHQUFHLGlEQUFpRCwrQkFBK0IsR0FBRyx1Q0FBdUMsMEJBQTBCLEdBQUcscUJBQXFCO0FBQzM1QztBQUNBO0FBQ0EsaUVBQWUsdUJBQXVCLEVBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNSdkM7QUFDZ0g7QUFDakI7QUFDL0YsOEJBQThCLG1GQUEyQixDQUFDLDRGQUFxQztBQUMvRjtBQUNBLGlEQUFpRCx5QkFBeUIsR0FBRyxTQUFTLG9HQUFvRyxZQUFZLHlDQUF5Qyx5QkFBeUIsR0FBRyxxQkFBcUI7QUFDaFM7QUFDQTtBQUNBLGlFQUFlLHVCQUF1QixFQUFDOzs7Ozs7Ozs7OztBQ1IxQjs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCOztBQUVqQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHFEQUFxRDtBQUNyRDs7QUFFQTtBQUNBLGdEQUFnRDtBQUNoRDs7QUFFQTtBQUNBLHFGQUFxRjtBQUNyRjs7QUFFQTs7QUFFQTtBQUNBLHFCQUFxQjtBQUNyQjs7QUFFQTtBQUNBLHFCQUFxQjtBQUNyQjs7QUFFQTtBQUNBLHFCQUFxQjtBQUNyQjs7QUFFQTtBQUNBLEtBQUs7QUFDTCxLQUFLOzs7QUFHTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLHVCQUF1QixrQkFBa0I7QUFDekM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxzQkFBc0Isc0JBQXNCO0FBQzVDOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Ysc0ZBQXNGLHFCQUFxQjtBQUMzRztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWLGlEQUFpRCxxQkFBcUI7QUFDdEU7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVixzREFBc0QscUJBQXFCO0FBQzNFO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7Ozs7Ozs7OztBQ3JHYTs7QUFFYjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx1REFBdUQsY0FBYztBQUNyRTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBOzs7Ozs7Ozs7O0FDckJhOztBQUViOztBQUVBO0FBQ0E7O0FBRUEsa0JBQWtCLHdCQUF3QjtBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLGtCQUFrQixpQkFBaUI7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG9CQUFvQiw0QkFBNEI7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEscUJBQXFCLDZCQUE2QjtBQUNsRDs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7QUN2R2E7O0FBRWI7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esc0RBQXNEOztBQUV0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOzs7Ozs7Ozs7O0FDdENhOztBQUViO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOzs7Ozs7Ozs7O0FDVmE7O0FBRWI7QUFDQTtBQUNBLGNBQWMsS0FBd0MsR0FBRyxzQkFBaUIsR0FBRyxDQUFJOztBQUVqRjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7Ozs7Ozs7OztBQ1hhOztBQUViO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtEQUFrRDtBQUNsRDs7QUFFQTtBQUNBLDBDQUEwQztBQUMxQzs7QUFFQTs7QUFFQTtBQUNBLGlGQUFpRjtBQUNqRjs7QUFFQTs7QUFFQTtBQUNBLGFBQWE7QUFDYjs7QUFFQTtBQUNBLGFBQWE7QUFDYjs7QUFFQTtBQUNBLGFBQWE7QUFDYjs7QUFFQTs7QUFFQTtBQUNBLHlEQUF5RDtBQUN6RCxJQUFJOztBQUVKOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7Ozs7Ozs7Ozs7QUNyRWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7Ozs7Ozs7OztBQ2ZBOzs7Ozs7Ozs7O0FDQUE7Ozs7Ozs7Ozs7QUNBQTs7Ozs7Ozs7OztBQ0FBOzs7Ozs7Ozs7O0FDQUE7Ozs7Ozs7Ozs7QUNBQTs7Ozs7Ozs7OztBQ0FBOzs7Ozs7Ozs7O0FDQUE7Ozs7Ozs7Ozs7QUNBQTs7Ozs7Ozs7OztBQ0FBOzs7Ozs7Ozs7O0FDQUE7Ozs7Ozs7Ozs7QUNBQTs7Ozs7Ozs7OztBQ0FBOzs7Ozs7Ozs7O0FDQUE7Ozs7Ozs7Ozs7QUNBQTs7Ozs7Ozs7OztBQ0FBOzs7Ozs7Ozs7O0FDQUE7Ozs7Ozs7Ozs7QUNBQTs7Ozs7Ozs7OztBQ0FBOzs7Ozs7Ozs7O0FDQUE7Ozs7Ozs7Ozs7QUNBQTs7Ozs7Ozs7OztBQ0FBOzs7Ozs7Ozs7O0FDQUE7Ozs7Ozs7Ozs7QUNBQTs7Ozs7Ozs7OztBQ0FBOzs7Ozs7Ozs7O0FDQUE7Ozs7Ozs7Ozs7QUNBQTs7Ozs7Ozs7OztBQ0FBOzs7Ozs7Ozs7O0FDQUE7Ozs7Ozs7Ozs7QUNBQTs7Ozs7Ozs7OztBQ0FBOzs7Ozs7Ozs7O0FDQUE7Ozs7Ozs7Ozs7QUNBQTs7Ozs7Ozs7OztBQ0FBOzs7Ozs7VUNBQTtVQUNBOztVQUVBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBOztVQUVBO1VBQ0E7O1VBRUE7VUFDQTtVQUNBOzs7OztXQ3RCQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0EsaUNBQWlDLFdBQVc7V0FDNUM7V0FDQTs7Ozs7V0NQQTtXQUNBO1dBQ0E7V0FDQTtXQUNBLHlDQUF5Qyx3Q0FBd0M7V0FDakY7V0FDQTtXQUNBOzs7OztXQ1BBOzs7OztXQ0FBO1dBQ0E7V0FDQTtXQUNBLHVEQUF1RCxpQkFBaUI7V0FDeEU7V0FDQSxnREFBZ0QsYUFBYTtXQUM3RDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ05BO0FBRUE7QUFFQTtBQUVBO0FBRUE7QUFFQTtBQUVBO0FBR0E7QUFDQTtBQUdBO0FBQ0E7QUFFQTtBQUVBO0FBRUE7QUFFQTtBQUVBO0FBRUE7QUFHQTtBQUNBO0FBR0E7QUFDQTtBQUVBO0FBR0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9kYXRlL0RhdGVQaWNrZXIvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vZGF0ZS9Mb2NhbERhdGVQaWNrZXIvTG9jYWxEYXRlUGlja2VyLnRzeCIsIndlYnBhY2s6Ly8vLi9kYXRlL0xvY2FsRGF0ZVBpY2tlci9NYXNrZWREYXRlSW5wdXQudHN4Iiwid2VicGFjazovLy8uL2RhdGUvTG9jYWxEYXRlUGlja2VyL2luZGV4LnRzIiwid2VicGFjazovLy8uL2RhdGUvTG9jYWxNb250aFNlbGVjdC9Mb2NhbE1vbnRoU2VsZWN0LnRzeCIsIndlYnBhY2s6Ly8vLi9kYXRlL0xvY2FsTW9udGhTZWxlY3QvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vZGF0ZS9Mb2NhbFRpbWVQaWNrZXIvTG9jYWxUaW1lUGlja2VyLnRzeCIsIndlYnBhY2s6Ly8vLi9kYXRlL0xvY2FsVGltZVBpY2tlci9NYXNrZWRUaW1lSW5wdXQudHN4Iiwid2VicGFjazovLy8uL2RhdGUvTG9jYWxUaW1lUGlja2VyL2luZGV4LnRzIiwid2VicGFjazovLy8uL2RhdGUvTW9udGhEYXlQaWNrZXIvTW9udGhEYXlQaWNrZXIudHN4Iiwid2VicGFjazovLy8uL2RhdGUvTW9udGhEYXlQaWNrZXIvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vZGF0ZS9Nb250aFllYXJQaWNrZXIvTW9udGhZZWFyUGlja2VyLnRzeCIsIndlYnBhY2s6Ly8vLi9kYXRlL01vbnRoWWVhclBpY2tlci9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9kYXRlL1llYXJTZWxlY3QvWWVhclNlbGVjdC50c3giLCJ3ZWJwYWNrOi8vLy4vZGF0ZS9ZZWFyU2VsZWN0L2luZGV4LnRzIiwid2VicGFjazovLy8uL2Zvcm0vVEZvcm0vVEZvcm0udHN4Iiwid2VicGFjazovLy8uL2Zvcm0vVEZvcm0vaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vZm9ybS9URm9ybS91c2VURm9ybS50c3giLCJ3ZWJwYWNrOi8vLy4vaW5wdXRzL0NyZWRpdENhcmRJbnB1dC9DcmVkaXRDYXJkSW5wdXQudHN4Iiwid2VicGFjazovLy8uL2lucHV0cy9DcmVkaXRDYXJkSW5wdXQvQ3JlZGl0Q2FyZE51bWJlcklucHV0LnRzeCIsIndlYnBhY2s6Ly8vLi9pbnB1dHMvQ3JlZGl0Q2FyZElucHV0L2luZGV4LnRzIiwid2VicGFjazovLy8uL2lucHV0cy9NYXNrZWRJbnB1dC9NYXNrZWRJbnB1dC50c3giLCJ3ZWJwYWNrOi8vLy4vaW5wdXRzL01hc2tlZElucHV0L2luZGV4LnRzIiwid2VicGFjazovLy8uL2lucHV0cy9NYXNrZWRJbnB1dC91c2VNYXNrZWRJbnB1dC50cyIsIndlYnBhY2s6Ly8vLi9pbnB1dHMvUGhvbmVJbnB1dC9QaG9uZUlucHV0LnRzeCIsIndlYnBhY2s6Ly8vLi9pbnB1dHMvUGhvbmVJbnB1dC9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9pbnB1dHMvUmFkaW9Hcm91cC9SYWRpb0dyb3VwLnRzeCIsIndlYnBhY2s6Ly8vLi9pbnB1dHMvUmFkaW9Hcm91cC9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9pbnB1dHMvU2NyaXB0ZWwvU2NyaXB0ZWwudHN4Iiwid2VicGFjazovLy8uL2lucHV0cy9TY3JpcHRlbC9TY3JpcHRlbENvbnRleHQudHMiLCJ3ZWJwYWNrOi8vLy4vaW5wdXRzL1NjcmlwdGVsL2luZGV4LnRzIiwid2VicGFjazovLy8uL2lucHV0cy9TY3JpcHRlbC9zY3JpcHRlbC9lbnVtcy50cyIsIndlYnBhY2s6Ly8vLi9pbnB1dHMvU2NyaXB0ZWwvc2NyaXB0ZWwvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vaW5wdXRzL1NjcmlwdGVsL3dpdGhTY3JpcHRlbC50c3giLCJ3ZWJwYWNrOi8vLy4vaW5wdXRzL1NjcmlwdGVsSW5wdXQvU2NyaXB0ZWxJbnB1dC50c3giLCJ3ZWJwYWNrOi8vLy4vaW5wdXRzL1NjcmlwdGVsSW5wdXQvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vaW5wdXRzL1NpbklucHV0L1NpbklucHV0LnRzeCIsIndlYnBhY2s6Ly8vLi9pbnB1dHMvU2luSW5wdXQvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vaW5wdXRzL1RhYmxlSW5wdXQvRHJvcGRvd25DZWxsLnRzeCIsIndlYnBhY2s6Ly8vLi9pbnB1dHMvVGFibGVJbnB1dC9Ib3ZlckNlbGwudHN4Iiwid2VicGFjazovLy8uL2lucHV0cy9UYWJsZUlucHV0L01vbmV5Q2VsbC50c3giLCJ3ZWJwYWNrOi8vLy4vaW5wdXRzL1RhYmxlSW5wdXQvTW9uZXlFZGl0Q2VsbC50c3giLCJ3ZWJwYWNrOi8vLy4vaW5wdXRzL1RhYmxlSW5wdXQvTW9uZXlTdW1Gb290ZXIudHN4Iiwid2VicGFjazovLy8uL2lucHV0cy9UYWJsZUlucHV0L1N0cmluZ0VkaXRDZWxsLnRzeCIsIndlYnBhY2s6Ly8vLi9pbnB1dHMvVGFibGVJbnB1dC9UYWJsZUlucHV0LnRzeCIsIndlYnBhY2s6Ly8vLi9pbnB1dHMvVGFibGVJbnB1dC9hZGRSb3dPblRhYi50cyIsIndlYnBhY2s6Ly8vLi9pbnB1dHMvVGFibGVJbnB1dC9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9tb25leS9Nb25leUN1cnJlbmN5SW5wdXQvTW9uZXlDdXJyZW5jeUlucHV0LnRzeCIsIndlYnBhY2s6Ly8vLi9tb25leS9Nb25leUN1cnJlbmN5SW5wdXQvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vbW9uZXkvTW9uZXlJbnB1dC9Nb25leUlucHV0LnRzeCIsIndlYnBhY2s6Ly8vLi9tb25leS9Nb25leUlucHV0L2luZGV4LnRzIiwid2VicGFjazovLy8uL21vbmV5L3VzZU1vbmV5SW5wdXQudHMiLCJ3ZWJwYWNrOi8vLy4vc3RlcC9Gb3JtU3RlcC50c3giLCJ3ZWJwYWNrOi8vLy4vc3RlcC9TdGVwLnRzeCIsIndlYnBhY2s6Ly8vLi9zdGVwL1N0ZXBQcm92aWRlci50c3giLCJ3ZWJwYWNrOi8vLy4vc3RlcC9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9zdGVwL3N0ZXBDb250ZXh0LnRzIiwid2VicGFjazovLy8uL3N0ZXAvdXNlU3RlcC50cyIsIndlYnBhY2s6Ly8vLi9kYXRlL0RhdGVQaWNrZXIvc3R5bGVzLmNzcz8xM2I3Iiwid2VicGFjazovLy8uL2lucHV0cy9DcmVkaXRDYXJkSW5wdXQvc3R5bGVzLmNzcz9mZTFkIiwid2VicGFjazovLy8uL2RhdGUvRGF0ZVBpY2tlci9zdHlsZXMuY3NzIiwid2VicGFjazovLy8uL2lucHV0cy9DcmVkaXRDYXJkSW5wdXQvc3R5bGVzLmNzcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL3NvdXJjZU1hcHMuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luamVjdFN0eWxlc0ludG9TdHlsZVRhZy5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5zZXJ0QnlTZWxlY3Rvci5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5zZXJ0U3R5bGVFbGVtZW50LmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zZXRBdHRyaWJ1dGVzV2l0aG91dEF0dHJpYnV0ZXMuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlRG9tQVBJLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zdHlsZVRhZ1RyYW5zZm9ybS5qcyIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgY29tbW9uanMgXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2Fzc2VydFRoaXNJbml0aWFsaXplZFwiIiwid2VicGFjazovLy9leHRlcm5hbCBjb21tb25qcyBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2tcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgY29tbW9uanMgXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzXCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIGNvbW1vbmpzIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9kZWZpbmVQcm9wZXJ0eVwiIiwid2VicGFjazovLy9leHRlcm5hbCBjb21tb25qcyBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZ2V0UHJvdG90eXBlT2ZcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgY29tbW9uanMgXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2luaGVyaXRzXCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIGNvbW1vbmpzIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9vYmplY3RXaXRob3V0UHJvcGVydGllc1wiIiwid2VicGFjazovLy9leHRlcm5hbCBjb21tb25qcyBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvcG9zc2libGVDb25zdHJ1Y3RvclJldHVyblwiIiwid2VicGFjazovLy9leHRlcm5hbCBjb21tb25qcyBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvc2xpY2VkVG9BcnJheVwiIiwid2VicGFjazovLy9leHRlcm5hbCBjb21tb25qcyBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvdG9Db25zdW1hYmxlQXJyYXlcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgY29tbW9uanMgXCJAanMtam9kYS9jb3JlXCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIGNvbW1vbmpzIFwiQHRoeC9kYXRlXCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIGNvbW1vbmpzIFwiQHRoeC9tb25leVwiIiwid2VicGFjazovLy9leHRlcm5hbCBjb21tb25qcyBcImNyZWRpdC1jYXJkLXR5cGVcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgY29tbW9uanMgXCJkZWJ1Z1wiIiwid2VicGFjazovLy9leHRlcm5hbCBjb21tb25qcyBcImV2ZW50ZW1pdHRlcjNcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgY29tbW9uanMgXCJmbGF0XCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIGNvbW1vbmpzIFwiZm9ybWlrXCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIGNvbW1vbmpzIFwiaW5wdXRtYXNrXCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIGNvbW1vbmpzIFwianMtbW9uZXlcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgY29tbW9uanMgXCJsb2Rhc2gvZ2V0XCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIGNvbW1vbmpzIFwibG9kYXNoL3Byb3BlcnR5XCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIGNvbW1vbmpzIFwibG9kYXNoL3VuaXFcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgY29tbW9uanMgXCJsdWhuXCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIGNvbW1vbmpzIFwicmVhY3RcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgY29tbW9uanMgXCJyZWFjdC1jcmVkaXQtY2FyZHNcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgY29tbW9uanMgXCJyZWFjdC1jcmVkaXQtY2FyZHMvZXMvc3R5bGVzLWNvbXBpbGVkLmNzc1wiIiwid2VicGFjazovLy9leHRlcm5hbCBjb21tb25qcyBcInJlYWN0LWRhdGVwaWNrZXJcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgY29tbW9uanMgXCJyZWFjdC1yb3V0ZXItZG9tXCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIGNvbW1vbmpzIFwicmVhY3QtdGFibGVcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgY29tbW9uanMgXCJyZWFjdC9qc3gtZGV2LXJ1bnRpbWVcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgY29tbW9uanMgXCJzZW1hbnRpYy11aS1yZWFjdFwiIiwid2VicGFjazovLy9leHRlcm5hbCBjb21tb25qcyBcInNvY2lhbC1pbnN1cmFuY2UtbnVtYmVyXCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIGNvbW1vbmpzIFwidXNlLWRlZXAtY29tcGFyZS1lZmZlY3RcIiIsIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svcnVudGltZS9jb21wYXQgZ2V0IGRlZmF1bHQgZXhwb3J0Iiwid2VicGFjazovLy93ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svcnVudGltZS9oYXNPd25Qcm9wZXJ0eSBzaG9ydGhhbmQiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svcnVudGltZS9tYWtlIG5hbWVzcGFjZSBvYmplY3QiLCJ3ZWJwYWNrOi8vLy4vaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IERhdGVQaWNrZXIgZnJvbSAncmVhY3QtZGF0ZXBpY2tlcic7XG5pbXBvcnQgJy4vc3R5bGVzLmNzcyc7XG5cbmV4cG9ydCB7RGF0ZVBpY2tlcn07XG4iLCJpbXBvcnQgdHlwZSB7TG9jYWxEYXRlfSBmcm9tICdAanMtam9kYS9jb3JlJztcbmltcG9ydCB7dG9EYXRlLCB0b0xvY2FsRGF0ZX0gZnJvbSAnQHRoeC9kYXRlJztcbmltcG9ydCBkZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHR5cGUge1JlYWN0RGF0ZVBpY2tlclByb3BzfSBmcm9tICdyZWFjdC1kYXRlcGlja2VyJztcbmltcG9ydCB0eXBlIHtJbnB1dFByb3BzfSBmcm9tICdzZW1hbnRpYy11aS1yZWFjdCc7XG5pbXBvcnQge0RhdGVQaWNrZXJ9IGZyb20gJy4uL0RhdGVQaWNrZXIvaW5kZXgnO1xuaW1wb3J0IHtNYXNrZWREYXRlSW5wdXR9IGZyb20gJy4vTWFza2VkRGF0ZUlucHV0JztcblxuY29uc3QgZCA9IGRlYnVnKCd0aHguY29udHJvbHMuZGF0ZS5Mb2NhbERhdGVQaWNrZXInKTtcblxuaW50ZXJmYWNlIElMb2NhbERhdGVQaWNrZXIge1xuXHR2YWx1ZT86IExvY2FsRGF0ZSB8IG51bWJlciB8IG51bGw7XG5cdG9uQ2hhbmdlPzogKHZhbHVlOiBMb2NhbERhdGUgfCBudWxsKSA9PiB2b2lkO1xuXHRvbkNoYW5nZVJhdz86ICgpID0+IHZvaWQ7XG5cdG1pbkRhdGU/OiBMb2NhbERhdGU7XG5cdG1heERhdGU/OiBMb2NhbERhdGU7XG59XG5cbnR5cGUgSW5wdXRQcm9wc09taXR0ZWQgPSBPbWl0PElucHV0UHJvcHMsICdvbkNoYW5nZSc+O1xudHlwZSBSZWFjdERhdGVQaWNrZXJQcm9wc09taXR0ZWQgPSBPbWl0PE9taXQ8UmVhY3REYXRlUGlja2VyUHJvcHMsICd2YWx1ZSc+LCAnb25DaGFuZ2UnIHwgJ21pbkRhdGUnIHwgJ21heERhdGUnPjtcbmV4cG9ydCB0eXBlIExvY2FsRGF0ZVBpY2tlclByb3BzID0gSUxvY2FsRGF0ZVBpY2tlciAmIElucHV0UHJvcHNPbWl0dGVkICYgUmVhY3REYXRlUGlja2VyUHJvcHNPbWl0dGVkO1xuXG5leHBvcnQgZnVuY3Rpb24gTG9jYWxEYXRlUGlja2VyKHByb3BzOiBMb2NhbERhdGVQaWNrZXJQcm9wcyk6IEpTWC5FbGVtZW50IHtcblx0Y29uc3Qge1xuXHRcdG1pbkRhdGUsXG5cdFx0bWF4RGF0ZSxcblx0XHR2YWx1ZSxcblx0XHRvbkNoYW5nZSxcblx0XHRvbkJsdXIsXG5cdFx0YXMsXG5cdFx0YWN0aW9uLFxuXHRcdGFjdGlvblBvc2l0aW9uLFxuXHRcdGNsYXNzTmFtZSxcblx0XHRlcnJvcixcblx0XHRmbHVpZCxcblx0XHRmb2N1cyxcblx0XHRpY29uLFxuXHRcdGljb25Qb3NpdGlvbixcblx0XHRpbnZlcnRlZCxcblx0XHRsYWJlbCxcblx0XHRsYWJlbFBvc2l0aW9uLFxuXHRcdGxvYWRpbmcsXG5cdFx0c2l6ZSxcblx0XHR0YWJJbmRleCxcblx0XHR0cmFuc3BhcmVudCxcblx0XHQuLi5yZXN0XG5cdH0gPSBwcm9wcztcblxuXHRjb25zdCBzZWxlY3RlZCA9IHZhbHVlID8gdG9EYXRlKHZhbHVlKSA6IG51bGw7XG5cblx0Y29uc3QgaW5wdXRQcm9wcyA9IHtcblx0XHRhcyxcblx0XHRhY3Rpb24sXG5cdFx0YWN0aW9uUG9zaXRpb24sXG5cdFx0Y2xhc3NOYW1lLFxuXHRcdGVycm9yLFxuXHRcdGZsdWlkLFxuXHRcdGZvY3VzLFxuXHRcdGljb24sXG5cdFx0aWNvblBvc2l0aW9uLFxuXHRcdGludmVydGVkLFxuXHRcdGxhYmVsLFxuXHRcdGxhYmVsUG9zaXRpb24sXG5cdFx0bG9hZGluZyxcblx0XHRzaXplLFxuXHRcdHRhYkluZGV4LFxuXHRcdHRyYW5zcGFyZW50LFxuXHR9O1xuXG5cdHJldHVybiAoXG5cdFx0PERhdGVQaWNrZXJcblx0XHRcdHsuLi5yZXN0fVxuXHRcdFx0c2VsZWN0ZWQ9e3NlbGVjdGVkfVxuXHRcdFx0b25DaGFuZ2U9e2RhdGUgPT4ge1xuXHRcdFx0XHRpZiAob25DaGFuZ2UpIG9uQ2hhbmdlKGRhdGUgPyB0b0xvY2FsRGF0ZShkYXRlKSA6IG51bGwpO1xuXHRcdFx0fX1cblx0XHRcdG9uQmx1cj17b25CbHVyfVxuXHRcdFx0Y3VzdG9tSW5wdXQ9ezxNYXNrZWREYXRlSW5wdXQgey4uLmlucHV0UHJvcHN9IG9uQmx1cj17b25CbHVyfSAvPn1cblx0XHRcdG1pbkRhdGU9e21pbkRhdGUgPyB0b0RhdGUobWluRGF0ZSkgOiBudWxsfVxuXHRcdFx0bWF4RGF0ZT17bWF4RGF0ZSA/IHRvRGF0ZShtYXhEYXRlKSA6IG51bGx9XG5cdFx0Lz5cblx0KTtcbn1cbiIsImltcG9ydCBkZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5pbXBvcnQgUmVhY3QsIHtmb3J3YXJkUmVmfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQge01hc2tlZElucHV0LCBNYXNrZWRJbnB1dFByb3BzfSBmcm9tICcuLi8uLi9pbnB1dHMvTWFza2VkSW5wdXQnO1xuXG5jb25zdCBkID0gZGVidWcoJ3RoeC5jb250cm9scy5kYXRlLkxvY2FsRGF0ZVBpY2tlci5NYXNrZWREYXRlSW5wdXQnKTtcblxuZXhwb3J0IGludGVyZmFjZSBNYXNrZWREYXRlSW5wdXRWYWx1ZSB7XG5cdHRhcmdldDoge1xuXHRcdHZhbHVlOiBzdHJpbmc7XG5cdH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWFza2VkRGF0ZUlucHV0UHJvcHMge1xuXHRuYW1lPzogc3RyaW5nO1xuXHRvbkNoYW5nZT86ICh2YWx1ZTogTWFza2VkRGF0ZUlucHV0VmFsdWUpID0+IHZvaWQ7XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycyxAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbmZ1bmN0aW9uIE1hc2tlZERhdGVJbnB1dElubmVyKHByb3BzOiBNYXNrZWREYXRlSW5wdXRQcm9wcyAmIE9taXQ8TWFza2VkSW5wdXRQcm9wcywgJ29uQ2hhbmdlJz4sIHJlZjogYW55KSB7XG5cdGNvbnN0IHtvbkNoYW5nZSwgbmFtZSwgLi4ucmVzdH0gPSBwcm9wcztcblxuXHRyZXR1cm4gKFxuXHRcdDxNYXNrZWRJbnB1dFxuXHRcdFx0ey4uLnJlc3R9XG5cdFx0XHRuYW1lPXtuYW1lfVxuXHRcdFx0bWFzaz17e2FsaWFzOiAnZGF0ZXRpbWUnLCBpbnB1dEZvcm1hdDogJ21tL2RkL3l5eXknfX1cblx0XHRcdG9uQ2hhbmdlPXt2YWx1ZSA9PiB7XG5cdFx0XHRcdGlmIChvbkNoYW5nZSkgb25DaGFuZ2Uoe3RhcmdldDoge3ZhbHVlOiB2YWx1ZSB8fCAnJ319KTtcblx0XHRcdH19XG5cdFx0Lz5cblx0KTtcbn1cblxuZXhwb3J0IGNvbnN0IE1hc2tlZERhdGVJbnB1dCA9IGZvcndhcmRSZWYoTWFza2VkRGF0ZUlucHV0SW5uZXIpO1xuIiwiZXhwb3J0IHtMb2NhbERhdGVQaWNrZXJ9IGZyb20gJy4vTG9jYWxEYXRlUGlja2VyJztcbmV4cG9ydCB0eXBlIHtMb2NhbERhdGVQaWNrZXJQcm9wc30gZnJvbSAnLi9Mb2NhbERhdGVQaWNrZXInO1xuIiwiaW1wb3J0IHtMb2NhbERhdGV9IGZyb20gJ0Bqcy1qb2RhL2NvcmUnO1xuaW1wb3J0IGRlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQge1NlbGVjdCwgU2VsZWN0UHJvcHN9IGZyb20gJ3NlbWFudGljLXVpLXJlYWN0JztcblxuY29uc3QgZCA9IGRlYnVnKCd0aHguY29udHJvbHMuZGF0ZS5Mb2NhbE1vbnRoU2VsZWN0Jyk7XG5cbmNvbnN0IG1vbnRoT3B0aW9ucyA9IFtcblx0e3RleHQ6ICdKYW51YXJ5JywgdmFsdWU6IDEsIGtleTogMX0sXG5cdHt0ZXh0OiAnRmVicnVhcnknLCB2YWx1ZTogMiwga2V5OiAyfSxcblx0e3RleHQ6ICdNYXJjaCcsIHZhbHVlOiAzLCBrZXk6IDN9LFxuXHR7dGV4dDogJ0FwcmlsJywgdmFsdWU6IDQsIGtleTogNH0sXG5cdHt0ZXh0OiAnTWF5JywgdmFsdWU6IDUsIGtleTogNX0sXG5cdHt0ZXh0OiAnSnVuZScsIHZhbHVlOiA2LCBrZXk6IDZ9LFxuXHR7dGV4dDogJ0p1bHknLCB2YWx1ZTogNywga2V5OiA3fSxcblx0e3RleHQ6ICdBdWd1c3QnLCB2YWx1ZTogOCwga2V5OiA4fSxcblx0e3RleHQ6ICdTZXB0ZW1iZXInLCB2YWx1ZTogOSwga2V5OiA5fSxcblx0e3RleHQ6ICdPY3RvYmVyJywgdmFsdWU6IDEwLCBrZXk6IDEwfSxcblx0e3RleHQ6ICdOb3ZlbWJlcicsIHZhbHVlOiAxMSwga2V5OiAxMX0sXG5cdHt0ZXh0OiAnRGVjZW1iZXInLCB2YWx1ZTogMTIsIGtleTogMTJ9LFxuXTtcblxuaW50ZXJmYWNlIElMb2NhbE1vbnRoU2VsZWN0UHJvcHMge1xuXHRvbkNoYW5nZT86ICh2YWx1ZTogTG9jYWxEYXRlIHwgbnVsbCkgPT4gdm9pZDtcblx0dmFsdWU/OiBMb2NhbERhdGUgfCBudWxsO1xuXHR5ZWFyPzogbnVtYmVyO1xuXHRoYW5kbGVCbHVyPzogKGV2ZW50OiBhbnkpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCB0eXBlIExvY2FsTW9udGhTZWxlY3RQcm9wcyA9IElMb2NhbE1vbnRoU2VsZWN0UHJvcHMgJiBPbWl0PFNlbGVjdFByb3BzLCAnb3B0aW9ucyc+O1xuXG5leHBvcnQgZnVuY3Rpb24gTG9jYWxNb250aFNlbGVjdChwcm9wczogTG9jYWxNb250aFNlbGVjdFByb3BzKTogSlNYLkVsZW1lbnQge1xuXHRjb25zdCB7dmFsdWUsIG9uQ2hhbmdlLCB5ZWFyLCBoYW5kbGVCbHVyLCAuLi5yZXN0fSA9IHByb3BzO1xuXG5cdGNvbnN0IHRoZVllYXIgPSB5ZWFyIHx8IExvY2FsRGF0ZS5ub3coKS55ZWFyKCk7XG5cblx0cmV0dXJuIChcblx0XHQ8U2VsZWN0XG5cdFx0XHRwbGFjZWhvbGRlcj1cIlNlbGVjdCBNb250aFwiXG5cdFx0XHRvcHRpb25zPXttb250aE9wdGlvbnN9XG5cdFx0XHR2YWx1ZT17dmFsdWUgPyB2YWx1ZS5tb250aFZhbHVlKCkgOiAnJ31cblx0XHRcdG9uQ2hhbmdlPXsoZXYsIHYpID0+IHtcblx0XHRcdFx0aWYgKG9uQ2hhbmdlKSB7XG5cdFx0XHRcdFx0aWYgKHR5cGVvZiB2LnZhbHVlID09PSAnbnVtYmVyJykge1xuXHRcdFx0XHRcdFx0b25DaGFuZ2UodiA/IExvY2FsRGF0ZS5vZih0aGVZZWFyLCB2LnZhbHVlLCAxKSA6IG51bGwpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRvbkNoYW5nZShudWxsKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH19XG5cdFx0XHRvbkJsdXI9e2hhbmRsZUJsdXJ9XG5cdFx0XHR7Li4ucmVzdH1cblx0XHQvPlxuXHQpO1xufVxuIiwiZXhwb3J0IHtMb2NhbE1vbnRoU2VsZWN0fSBmcm9tICcuL0xvY2FsTW9udGhTZWxlY3QnO1xuZXhwb3J0IHR5cGUge0xvY2FsTW9udGhTZWxlY3RQcm9wc30gZnJvbSAnLi9Mb2NhbE1vbnRoU2VsZWN0JztcbiIsImltcG9ydCB7TG9jYWxUaW1lfSBmcm9tICdAanMtam9kYS9jb3JlJztcbmltcG9ydCB7dG9EYXRlLCB0b0xvY2FsVGltZX0gZnJvbSAnQHRoeC9kYXRlJztcbmltcG9ydCBkZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHR5cGUge1JlYWN0RGF0ZVBpY2tlclByb3BzfSBmcm9tICdyZWFjdC1kYXRlcGlja2VyJztcbmltcG9ydCB0eXBlIHtJbnB1dFByb3BzfSBmcm9tICdzZW1hbnRpYy11aS1yZWFjdCc7XG5pbXBvcnQge0RhdGVQaWNrZXJ9IGZyb20gJy4uL0RhdGVQaWNrZXIvaW5kZXgnO1xuaW1wb3J0IHtNYXNrZWRUaW1lSW5wdXR9IGZyb20gJy4vTWFza2VkVGltZUlucHV0JztcblxuY29uc3QgZCA9IGRlYnVnKCd0aHguY29udHJvbHMuZGF0ZS5Mb2NhbFRpbWVQaWNrZXInKTtcblxuaW50ZXJmYWNlIElMb2NhbFRpbWVQaWNrZXIge1xuXHR2YWx1ZT86IExvY2FsVGltZSB8IG51bWJlciB8IG51bGw7XG5cdG9uQ2hhbmdlPzogKHZhbHVlOiBMb2NhbFRpbWUgfCBudWxsKSA9PiB2b2lkO1xuXHRvbkNoYW5nZVJhdz86ICgpID0+IHZvaWQ7XG59XG5cbnR5cGUgSW5wdXRQcm9wc09taXR0ZWQgPSBPbWl0PElucHV0UHJvcHMsICdvbkNoYW5nZSc+O1xudHlwZSBSZWFjdERhdGVQaWNrZXJQcm9wc09taXR0ZWQgPSBPbWl0PE9taXQ8UmVhY3REYXRlUGlja2VyUHJvcHMsICd2YWx1ZSc+LCAnb25DaGFuZ2UnPjtcbmV4cG9ydCB0eXBlIExvY2FsVGltZVBpY2tlclByb3BzID0gSUxvY2FsVGltZVBpY2tlciAmIElucHV0UHJvcHNPbWl0dGVkICYgUmVhY3REYXRlUGlja2VyUHJvcHNPbWl0dGVkO1xuXG5leHBvcnQgZnVuY3Rpb24gTG9jYWxUaW1lUGlja2VyKHByb3BzOiBMb2NhbFRpbWVQaWNrZXJQcm9wcyk6IEpTWC5FbGVtZW50IHtcblx0Y29uc3Qge1xuXHRcdHZhbHVlLFxuXHRcdG9uQ2hhbmdlLFxuXHRcdGFzLFxuXHRcdGFjdGlvbixcblx0XHRhY3Rpb25Qb3NpdGlvbixcblx0XHRjbGFzc05hbWUsXG5cdFx0ZGlzYWJsZWQsXG5cdFx0ZXJyb3IsXG5cdFx0Zmx1aWQsXG5cdFx0Zm9jdXMsXG5cdFx0aWNvbixcblx0XHRpY29uUG9zaXRpb24sXG5cdFx0aW52ZXJ0ZWQsXG5cdFx0bGFiZWwsXG5cdFx0bGFiZWxQb3NpdGlvbixcblx0XHRsb2FkaW5nLFxuXHRcdHNpemUsXG5cdFx0dGFiSW5kZXgsXG5cdFx0dHJhbnNwYXJlbnQsXG5cdFx0Li4ucmVzdFxuXHR9ID0gcHJvcHM7XG5cblx0bGV0IHNlbGVjdGVkO1xuXHRpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykgc2VsZWN0ZWQgPSB0b0RhdGUoTG9jYWxUaW1lLm9mU2Vjb25kT2ZEYXkodmFsdWUpKTtcblx0ZWxzZSBzZWxlY3RlZCA9IHZhbHVlID8gdG9EYXRlKHZhbHVlKSA6IG51bGw7XG5cblx0Y29uc3QgaW5wdXRQcm9wcyA9IHtcblx0XHRhcyxcblx0XHRhY3Rpb24sXG5cdFx0YWN0aW9uUG9zaXRpb24sXG5cdFx0Y2xhc3NOYW1lLFxuXHRcdGRpc2FibGVkLFxuXHRcdGVycm9yLFxuXHRcdGZsdWlkLFxuXHRcdGZvY3VzLFxuXHRcdGljb24sXG5cdFx0aWNvblBvc2l0aW9uLFxuXHRcdGludmVydGVkLFxuXHRcdGxhYmVsLFxuXHRcdGxhYmVsUG9zaXRpb24sXG5cdFx0bG9hZGluZyxcblx0XHRzaXplLFxuXHRcdHRhYkluZGV4LFxuXHRcdHRyYW5zcGFyZW50LFxuXHR9O1xuXG5cdHJldHVybiAoXG5cdFx0PERhdGVQaWNrZXJcblx0XHRcdHsuLi5yZXN0fVxuXHRcdFx0c2VsZWN0ZWQ9e3NlbGVjdGVkfVxuXHRcdFx0b25DaGFuZ2U9e2RhdGUgPT4ge1xuXHRcdFx0XHRpZiAob25DaGFuZ2UpIG9uQ2hhbmdlKGRhdGUgPyB0b0xvY2FsVGltZShkYXRlKSA6IG51bGwpO1xuXHRcdFx0fX1cblx0XHRcdHNob3dUaW1lU2VsZWN0XG5cdFx0XHRzaG93VGltZVNlbGVjdE9ubHlcblx0XHRcdHRpbWVJbnRlcnZhbHM9ezE1fVxuXHRcdFx0dGltZUNhcHRpb249XCJUaW1lXCJcblx0XHRcdGRhdGVGb3JtYXQ9XCJoaDptbSBhYVwiXG5cdFx0XHRjdXN0b21JbnB1dD17PE1hc2tlZFRpbWVJbnB1dCB7Li4uaW5wdXRQcm9wc30gLz59XG5cdFx0Lz5cblx0KTtcbn1cbiIsImltcG9ydCBkZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5pbXBvcnQgUmVhY3QsIHtmb3J3YXJkUmVmfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQge01hc2tlZElucHV0LCBNYXNrZWRJbnB1dFByb3BzfSBmcm9tICcuLi8uLi9pbnB1dHMvTWFza2VkSW5wdXQnO1xuXG5jb25zdCBkID0gZGVidWcoJ3RoeC5jb250cm9scy5kYXRlLkxvY2FsVGltZVBpY2tlci5NYXNrZWRUaW1lSW5wdXQnKTtcblxuZXhwb3J0IGludGVyZmFjZSBNYXNrZWRUaW1lSW5wdXRWYWx1ZSB7XG5cdHRhcmdldDoge1xuXHRcdHZhbHVlOiBzdHJpbmc7XG5cdH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWFza2VkVGltZUlucHV0UHJvcHMge1xuXHRvbkNoYW5nZT86ICh2YWx1ZTogTWFza2VkVGltZUlucHV0VmFsdWUpID0+IHZvaWQ7XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycyxAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbmZ1bmN0aW9uIE1hc2tlZFRpbWVJbnB1dElubmVyKHByb3BzOiBNYXNrZWRUaW1lSW5wdXRQcm9wcyAmIE9taXQ8TWFza2VkSW5wdXRQcm9wcywgJ29uQ2hhbmdlJz4sIHJlZjogYW55KSB7XG5cdGNvbnN0IHtvbkNoYW5nZSwgLi4ucmVzdH0gPSBwcm9wcztcblxuXHRyZXR1cm4gKFxuXHRcdDxNYXNrZWRJbnB1dFxuXHRcdFx0bWFzaz17e2FsaWFzOiAnZGF0ZXRpbWUnLCBpbnB1dEZvcm1hdDogJ2hoOk1NIFRUJ319XG5cdFx0XHRvbkNoYW5nZT17dmFsdWUgPT4ge1xuXHRcdFx0XHRpZiAob25DaGFuZ2UpIG9uQ2hhbmdlKHt0YXJnZXQ6IHt2YWx1ZTogdmFsdWUgfHwgJyd9fSk7XG5cdFx0XHR9fVxuXHRcdFx0ey4uLnJlc3R9XG5cdFx0Lz5cblx0KTtcbn1cblxuZXhwb3J0IGNvbnN0IE1hc2tlZFRpbWVJbnB1dCA9IGZvcndhcmRSZWYoTWFza2VkVGltZUlucHV0SW5uZXIpO1xuIiwiZXhwb3J0IHtMb2NhbFRpbWVQaWNrZXJ9IGZyb20gJy4vTG9jYWxUaW1lUGlja2VyJztcbmV4cG9ydCB0eXBlIHtMb2NhbFRpbWVQaWNrZXJQcm9wc30gZnJvbSAnLi9Mb2NhbFRpbWVQaWNrZXInO1xuIiwiaW1wb3J0IHR5cGUge0xvY2FsRGF0ZX0gZnJvbSAnQGpzLWpvZGEvY29yZSc7XG5pbXBvcnQge3RvRGF0ZSwgdG9Mb2NhbERhdGV9IGZyb20gJ0B0aHgvZGF0ZSc7XG5pbXBvcnQgZGVidWcgZnJvbSAnZGVidWcnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB0eXBlIHtSZWFjdERhdGVQaWNrZXJQcm9wc30gZnJvbSAncmVhY3QtZGF0ZXBpY2tlcic7XG5pbXBvcnQge0lucHV0UHJvcHMsIElucHV0fSBmcm9tICdzZW1hbnRpYy11aS1yZWFjdCc7XG5pbXBvcnQge0RhdGVQaWNrZXJ9IGZyb20gJy4uL0RhdGVQaWNrZXIvaW5kZXgnO1xuXG5jb25zdCBkID0gZGVidWcoJ3RoeC5jb250cm9scy5kYXRlLk1vbnRoRGF5UGlja2VyJyk7XG5cbmNvbnN0IG1vbnRocyA9IFsnSmFudWFyeScsICdGZWJydWFyeScsICdNYXJjaCcsICdBcHJpbCcsICdNYXknLCAnSnVuZScsICdKdWx5JywgJ0F1Z3VzdCcsICdTZXB0ZW1iZXInLCAnT2N0b2JlcicsICdOb3ZlbWJlcicsICdEZWNlbWJlciddO1xuXG5pbnRlcmZhY2UgTW9udGhEYXlIZWFkZXJQcm9wcyB7XG5cdGRhdGU6IERhdGU7XG5cdGNoYW5nZVllYXIoeWVhcjogbnVtYmVyKTogdm9pZDtcblx0Y2hhbmdlTW9udGgobW9udGg6IG51bWJlcik6IHZvaWQ7XG5cdGRlY3JlYXNlTW9udGgoKTogdm9pZDtcblx0aW5jcmVhc2VNb250aCgpOiB2b2lkO1xuXHRwcmV2TW9udGhCdXR0b25EaXNhYmxlZDogYm9vbGVhbjtcblx0bmV4dE1vbnRoQnV0dG9uRGlzYWJsZWQ6IGJvb2xlYW47XG5cdGRlY3JlYXNlWWVhcigpOiB2b2lkO1xuXHRpbmNyZWFzZVllYXIoKTogdm9pZDtcblx0cHJldlllYXJCdXR0b25EaXNhYmxlZDogYm9vbGVhbjtcblx0bmV4dFllYXJCdXR0b25EaXNhYmxlZDogYm9vbGVhbjtcbn1cblxuZnVuY3Rpb24gTW9udGhEYXlIZWFkZXIocHJvcHM6IE1vbnRoRGF5SGVhZGVyUHJvcHMpIHtcblx0cmV0dXJuIChcblx0XHQ8PlxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJyZWFjdC1kYXRlcGlja2VyX19jdXJyZW50LW1vbnRoXCI+e21vbnRoc1twcm9wcy5kYXRlLmdldE1vbnRoKCldfTwvZGl2PlxuXHRcdFx0PGJ1dHRvblxuXHRcdFx0XHR0eXBlPVwiYnV0dG9uXCJcblx0XHRcdFx0Y2xhc3NOYW1lPVwicmVhY3QtZGF0ZXBpY2tlcl9fbmF2aWdhdGlvbiByZWFjdC1kYXRlcGlja2VyX19uYXZpZ2F0aW9uLS1wcmV2aW91c1wiXG5cdFx0XHRcdGFyaWEtbGFiZWw9XCJQcmV2aW91cyBNb250aFwiXG5cdFx0XHRcdG9uQ2xpY2s9e3Byb3BzLmRlY3JlYXNlTW9udGh9XG5cdFx0XHRcdGRpc2FibGVkPXtwcm9wcy5wcmV2TW9udGhCdXR0b25EaXNhYmxlZH1cblx0XHRcdD5cblx0XHRcdFx0UHJldmlvdXMgTW9udGhcblx0XHRcdDwvYnV0dG9uPlxuXHRcdFx0PGJ1dHRvblxuXHRcdFx0XHR0eXBlPVwiYnV0dG9uXCJcblx0XHRcdFx0Y2xhc3NOYW1lPVwicmVhY3QtZGF0ZXBpY2tlcl9fbmF2aWdhdGlvbiByZWFjdC1kYXRlcGlja2VyX19uYXZpZ2F0aW9uLS1uZXh0XCJcblx0XHRcdFx0YXJpYS1sYWJlbD1cIk5leHQgTW9udGhcIlxuXHRcdFx0XHRvbkNsaWNrPXtwcm9wcy5pbmNyZWFzZU1vbnRofVxuXHRcdFx0XHRkaXNhYmxlZD17cHJvcHMubmV4dE1vbnRoQnV0dG9uRGlzYWJsZWR9XG5cdFx0XHQ+XG5cdFx0XHRcdE5leHQgTW9udGhcblx0XHRcdDwvYnV0dG9uPlxuXHRcdDwvPlxuXHQpO1xufVxuXG5pbnRlcmZhY2UgSU1vbnRoRGF5UGlja2VyUHJvcHMge1xuXHR2YWx1ZT86IExvY2FsRGF0ZSB8IG51bWJlciB8IG51bGw7XG5cdG9uQ2hhbmdlPzogKHZhbHVlOiBMb2NhbERhdGUgfCBudWxsKSA9PiB2b2lkO1xuXHRvbkNoYW5nZVJhdz86ICgpID0+IHZvaWQ7XG59XG5cbnR5cGUgSW5wdXRQcm9wc09taXR0ZWQgPSBPbWl0PElucHV0UHJvcHMsICdvbkNoYW5nZSc+O1xudHlwZSBSZWFjdERhdGVQaWNrZXJQcm9wc09taXR0ZWQgPSBPbWl0PE9taXQ8UmVhY3REYXRlUGlja2VyUHJvcHMsICd2YWx1ZSc+LCAnb25DaGFuZ2UnPjtcbmV4cG9ydCB0eXBlIE1vbnRoRGF5UGlja2VyUHJvcHMgPSBJTW9udGhEYXlQaWNrZXJQcm9wcyAmIElucHV0UHJvcHNPbWl0dGVkICYgUmVhY3REYXRlUGlja2VyUHJvcHNPbWl0dGVkO1xuXG5leHBvcnQgZnVuY3Rpb24gTW9udGhEYXlQaWNrZXIocHJvcHM6IE1vbnRoRGF5UGlja2VyUHJvcHMpOiBKU1guRWxlbWVudCB7XG5cdGNvbnN0IHtcblx0XHR2YWx1ZSxcblx0XHRvbkNoYW5nZSxcblx0XHRhcyxcblx0XHRhY3Rpb24sXG5cdFx0YWN0aW9uUG9zaXRpb24sXG5cdFx0Y2xhc3NOYW1lLFxuXHRcdGRpc2FibGVkLFxuXHRcdGVycm9yLFxuXHRcdGZsdWlkLFxuXHRcdGZvY3VzLFxuXHRcdGljb24sXG5cdFx0aWNvblBvc2l0aW9uLFxuXHRcdGludmVydGVkLFxuXHRcdGxhYmVsLFxuXHRcdGxhYmVsUG9zaXRpb24sXG5cdFx0bG9hZGluZyxcblx0XHRzaXplLFxuXHRcdHRhYkluZGV4LFxuXHRcdHRyYW5zcGFyZW50LFxuXHRcdC4uLnJlc3Rcblx0fSA9IHByb3BzO1xuXG5cdGNvbnN0IHNlbGVjdGVkID0gdmFsdWUgPyB0b0RhdGUodmFsdWUpIDogbnVsbDtcblxuXHRjb25zdCBpbnB1dFByb3BzID0ge1xuXHRcdGFzLFxuXHRcdGFjdGlvbixcblx0XHRhY3Rpb25Qb3NpdGlvbixcblx0XHRjbGFzc05hbWUsXG5cdFx0ZGlzYWJsZWQsXG5cdFx0ZXJyb3IsXG5cdFx0Zmx1aWQsXG5cdFx0Zm9jdXMsXG5cdFx0aWNvbixcblx0XHRpY29uUG9zaXRpb24sXG5cdFx0aW52ZXJ0ZWQsXG5cdFx0bGFiZWwsXG5cdFx0bGFiZWxQb3NpdGlvbixcblx0XHRsb2FkaW5nLFxuXHRcdHNpemUsXG5cdFx0dGFiSW5kZXgsXG5cdFx0dHJhbnNwYXJlbnQsXG5cdH07XG5cblx0cmV0dXJuIChcblx0XHQ8RGF0ZVBpY2tlclxuXHRcdFx0ey4uLnJlc3R9XG5cdFx0XHRzZWxlY3RlZD17c2VsZWN0ZWR9XG5cdFx0XHRvbkNoYW5nZT17ZGF0ZSA9PiB7XG5cdFx0XHRcdGlmIChvbkNoYW5nZSkgb25DaGFuZ2UoZGF0ZSA/IHRvTG9jYWxEYXRlKGRhdGUpIDogbnVsbCk7XG5cdFx0XHR9fVxuXHRcdFx0Y3VzdG9tSW5wdXQ9ezxJbnB1dCB7Li4uaW5wdXRQcm9wc30gLz59XG5cdFx0XHRyZW5kZXJDdXN0b21IZWFkZXI9e01vbnRoRGF5SGVhZGVyfVxuXHRcdFx0ZGF0ZUZvcm1hdD1cIk1NTU0gZFwiXG5cdFx0Lz5cblx0KTtcbn1cbiIsImV4cG9ydCB7TW9udGhEYXlQaWNrZXJ9IGZyb20gJy4vTW9udGhEYXlQaWNrZXInO1xuZXhwb3J0IHR5cGUge01vbnRoRGF5UGlja2VyUHJvcHN9IGZyb20gJy4vTW9udGhEYXlQaWNrZXInO1xuIiwiaW1wb3J0IHtMb2NhbERhdGV9IGZyb20gJ0Bqcy1qb2RhL2NvcmUnO1xuaW1wb3J0IHt0b0RhdGUsIHRvTG9jYWxEYXRlfSBmcm9tICdAdGh4L2RhdGUnO1xuaW1wb3J0IGRlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgdHlwZSB7UmVhY3REYXRlUGlja2VyUHJvcHN9IGZyb20gJ3JlYWN0LWRhdGVwaWNrZXInO1xuaW1wb3J0IHtJbnB1dFByb3BzLCBJbnB1dH0gZnJvbSAnc2VtYW50aWMtdWktcmVhY3QnO1xuaW1wb3J0IHtEYXRlUGlja2VyfSBmcm9tICcuLi9EYXRlUGlja2VyL2luZGV4JztcblxuY29uc3QgZCA9IGRlYnVnKCd0aHguY29udHJvbHMuZGF0ZS5Nb250aFllYXJQaWNrZXInKTtcblxuaW50ZXJmYWNlIElNb250aFllYXJQaWNrZXJQcm9wcyB7XG5cdHZhbHVlPzogTG9jYWxEYXRlIHwgbnVtYmVyIHwgdW5kZWZpbmVkO1xuXHRvbkNoYW5nZT86ICh2YWx1ZTogTG9jYWxEYXRlIHwgdW5kZWZpbmVkKSA9PiB2b2lkO1xuXHRvbkNoYW5nZVJhdz86ICgpID0+IHZvaWQ7XG5cdG1pbkRhdGU/OiBMb2NhbERhdGUgfCB1bmRlZmluZWQ7XG5cdG1heERhdGU/OiBMb2NhbERhdGUgfCB1bmRlZmluZWQ7XG59XG5cbnR5cGUgSW5wdXRQcm9wc09taXR0ZWQgPSBPbWl0PElucHV0UHJvcHMsICdvbkNoYW5nZSc+O1xudHlwZSBSZWFjdERhdGVQaWNrZXJQcm9wc09taXR0ZWQgPSBPbWl0PE9taXQ8UmVhY3REYXRlUGlja2VyUHJvcHMsICd2YWx1ZScgfCAnbWluRGF0ZScgfCAnbWF4RGF0ZSc+LCAnb25DaGFuZ2UnPjtcbmV4cG9ydCB0eXBlIE1vbnRoWWVhclBpY2tlclByb3BzID0gSU1vbnRoWWVhclBpY2tlclByb3BzICYgSW5wdXRQcm9wc09taXR0ZWQgJiBSZWFjdERhdGVQaWNrZXJQcm9wc09taXR0ZWQ7XG5cbmV4cG9ydCBmdW5jdGlvbiBNb250aFllYXJQaWNrZXIocHJvcHM6IE1vbnRoWWVhclBpY2tlclByb3BzKTogSlNYLkVsZW1lbnQge1xuXHRjb25zdCB7XG5cdFx0dmFsdWUsXG5cdFx0b25DaGFuZ2UsXG5cdFx0YXMsXG5cdFx0YWN0aW9uLFxuXHRcdGFjdGlvblBvc2l0aW9uLFxuXHRcdGNsYXNzTmFtZSxcblx0XHRkaXNhYmxlZCxcblx0XHRlcnJvcixcblx0XHRmbHVpZCxcblx0XHRmb2N1cyxcblx0XHRpY29uLFxuXHRcdGljb25Qb3NpdGlvbixcblx0XHRpbnZlcnRlZCxcblx0XHRsYWJlbCxcblx0XHRsYWJlbFBvc2l0aW9uLFxuXHRcdGxvYWRpbmcsXG5cdFx0c2l6ZSxcblx0XHR0YWJJbmRleCxcblx0XHR0cmFuc3BhcmVudCxcblx0XHRtaW5EYXRlLFxuXHRcdG1heERhdGUsXG5cdFx0Li4ucmVzdFxuXHR9ID0gcHJvcHM7XG5cblx0Y29uc3Qgc2VsZWN0ZWQgPSB2YWx1ZSA/IHRvRGF0ZSh2YWx1ZSkgOiBudWxsO1xuXG5cdGNvbnN0IGlucHV0UHJvcHMgPSB7XG5cdFx0YXMsXG5cdFx0YWN0aW9uLFxuXHRcdGFjdGlvblBvc2l0aW9uLFxuXHRcdGNsYXNzTmFtZSxcblx0XHRkaXNhYmxlZCxcblx0XHRlcnJvcixcblx0XHRmbHVpZCxcblx0XHRmb2N1cyxcblx0XHRpY29uLFxuXHRcdGljb25Qb3NpdGlvbixcblx0XHRpbnZlcnRlZCxcblx0XHRsYWJlbCxcblx0XHRsYWJlbFBvc2l0aW9uLFxuXHRcdGxvYWRpbmcsXG5cdFx0c2l6ZSxcblx0XHR0YWJJbmRleCxcblx0XHR0cmFuc3BhcmVudCxcblx0fTtcblxuXHRyZXR1cm4gKFxuXHRcdDxEYXRlUGlja2VyXG5cdFx0XHR7Li4ucmVzdH1cblx0XHRcdHNlbGVjdGVkPXtzZWxlY3RlZH1cblx0XHRcdG9uQ2hhbmdlPXtkYXRlID0+IHtcblx0XHRcdFx0aWYgKG9uQ2hhbmdlKSBvbkNoYW5nZShkYXRlID8gdG9Mb2NhbERhdGUoZGF0ZSkgOiB1bmRlZmluZWQpO1xuXHRcdFx0fX1cblx0XHRcdGN1c3RvbUlucHV0PXs8SW5wdXQgey4uLmlucHV0UHJvcHN9IC8+fVxuXHRcdFx0ZGF0ZUZvcm1hdD1cIk1NTU0geXl5eVwiXG5cdFx0XHRzaG93TW9udGhZZWFyUGlja2VyXG5cdFx0XHRtaW5EYXRlPXt0b0RhdGUobWluRGF0ZT8ud2l0aERheU9mTW9udGgoMSkgfHwgTG9jYWxEYXRlLm9mRXBvY2hEYXkoMCkpfVxuXHRcdFx0bWF4RGF0ZT17dG9EYXRlKG1heERhdGU/LnBsdXNNb250aHMoMSkud2l0aERheU9mTW9udGgoMSkubWludXNEYXlzKDEpIHx8IExvY2FsRGF0ZS5ub3coKS5wbHVzWWVhcnMoMjApKX1cblx0XHQvPlxuXHQpO1xufVxuIiwiZXhwb3J0IHtNb250aFllYXJQaWNrZXJ9IGZyb20gJy4vTW9udGhZZWFyUGlja2VyJztcbmV4cG9ydCB0eXBlIHtNb250aFllYXJQaWNrZXJQcm9wc30gZnJvbSAnLi9Nb250aFllYXJQaWNrZXInO1xuIiwiaW1wb3J0IGRlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQge0ljb24sIEJ1dHRvbiwgRHJvcGRvd24sIERyb3Bkb3duSXRlbVByb3BzLCBTZWdtZW50LCBTZWdtZW50UHJvcHN9IGZyb20gJ3NlbWFudGljLXVpLXJlYWN0JztcblxuY29uc3QgZCA9IGRlYnVnKCd0aHguY29udHJvbHMuZGF0ZS5ZZWFyU2VsZWN0Jyk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgWWVhclNlbGVjdFByb3BzIHtcblx0b25DaGFuZ2U/OiAodmFsdWU6IG51bWJlcikgPT4gdm9pZDtcblx0b25CbHVyPzogKGV2OiBhbnkpID0+IHZvaWQ7XG5cdHZhbHVlOiBudW1iZXI7XG5cdG1pblllYXI/OiBudW1iZXI7IC8vIERlZmF1bHRzIHRvIDE5NzBcblx0bWF4WWVhcj86IG51bWJlcjsgLy8gRGVmYXVsdHMgdG8gY3VycmVudCB5ZWFyXG5cdGVycm9yPzogYm9vbGVhbjsgLy8gRGVmYXVsdHMgdG8gZmFsc2Vcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFllYXJTZWxlY3QocHJvcHM6IFllYXJTZWxlY3RQcm9wcyAmIE9taXQ8U2VnbWVudFByb3BzLCAnb25DaGFuZ2UnPikge1xuXHRjb25zdCB0aGlzWWVhciA9IG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKTtcblx0Y29uc3Qge3ZhbHVlLCBtaW5ZZWFyID0gMTk3MCwgbWF4WWVhciA9IHRoaXNZZWFyLCBvbkNoYW5nZSwgb25CbHVyLCBlcnJvciwgLi4ucmVzdH0gPSBwcm9wcztcblxuXHRjb25zdCBhdmFpbGFibGVZZWFyczogRHJvcGRvd25JdGVtUHJvcHNbXSA9IFtdO1xuXHRmb3IgKGxldCBpID0gbWF4WWVhcjsgaSA+PSBtaW5ZZWFyOyBpLS0pIHtcblx0XHRhdmFpbGFibGVZZWFycy5wdXNoKHt2YWx1ZTogaSwgdGV4dDogaS50b1N0cmluZygpLCBrZXk6IGl9KTtcblx0fVxuXG5cdHJldHVybiAoXG5cdFx0PFNlZ21lbnQgYmFzaWMgY29tcGFjdCBzdHlsZT17e3BhZGRpbmc6IDAsIG1hcmdpbjogMH19IHsuLi5yZXN0fT5cblx0XHRcdDxCdXR0b25cblx0XHRcdFx0YmFzaWNcblx0XHRcdFx0aWNvblxuXHRcdFx0XHR0eXBlPVwiYnV0dG9uXCJcblx0XHRcdFx0Y29sb3I9e2Vycm9yID8gJ3JlZCcgOiAnZ3JlZW4nfVxuXHRcdFx0XHRkaXNhYmxlZD17dmFsdWUgPD0gbWluWWVhcn1cblx0XHRcdFx0b25DbGljaz17KCkgPT4ge1xuXHRcdFx0XHRcdGlmIChvbkNoYW5nZSkgb25DaGFuZ2UodmFsdWUgLSAxKTtcblx0XHRcdFx0fX1cblx0XHRcdFx0b25CbHVyPXtvbkJsdXJ9XG5cdFx0XHQ+XG5cdFx0XHRcdDxJY29uIG5hbWU9XCJhcnJvdyBsZWZ0XCIgLz5cblx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0PERyb3Bkb3duXG5cdFx0XHRcdGljb249ezxkaXYgLz59XG5cdFx0XHRcdGJ1dHRvblxuXHRcdFx0XHRiYXNpY1xuXHRcdFx0XHRzY3JvbGxpbmdcblx0XHRcdFx0dmFsdWU9e3ZhbHVlfVxuXHRcdFx0XHRvcHRpb25zPXthdmFpbGFibGVZZWFyc31cblx0XHRcdFx0b25DaGFuZ2U9eyhlLCB2YWwpID0+IHtcblx0XHRcdFx0XHRpZiAodHlwZW9mIHZhbC52YWx1ZSA9PT0gJ251bWJlcicgJiYgb25DaGFuZ2UpIG9uQ2hhbmdlKHZhbC52YWx1ZSk7XG5cdFx0XHRcdH19XG5cdFx0XHRcdGVycm9yPXtlcnJvcn1cblx0XHRcdFx0b25CbHVyPXtvbkJsdXJ9XG5cdFx0XHQvPlxuXHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRiYXNpY1xuXHRcdFx0XHRpY29uXG5cdFx0XHRcdHR5cGU9XCJidXR0b25cIlxuXHRcdFx0XHRjb2xvcj17ZXJyb3IgPyAncmVkJyA6ICdncmVlbid9XG5cdFx0XHRcdGRpc2FibGVkPXt2YWx1ZSA+PSBtYXhZZWFyfVxuXHRcdFx0XHRvbkNsaWNrPXsoKSA9PiB7XG5cdFx0XHRcdFx0aWYgKG9uQ2hhbmdlKSBvbkNoYW5nZSh2YWx1ZSArIDEpO1xuXHRcdFx0XHR9fVxuXHRcdFx0XHRvbkJsdXI9e29uQmx1cn1cblx0XHRcdFx0c3R5bGU9e3ttYXJnaW5SaWdodDogMH19XG5cdFx0XHQ+XG5cdFx0XHRcdDxJY29uIG5hbWU9XCJhcnJvdyByaWdodFwiIC8+XG5cdFx0XHQ8L0J1dHRvbj5cblx0XHQ8L1NlZ21lbnQ+XG5cdCk7XG59XG4iLCJleHBvcnQge1llYXJTZWxlY3R9IGZyb20gJy4vWWVhclNlbGVjdCc7XG5leHBvcnQgdHlwZSB7WWVhclNlbGVjdFByb3BzfSBmcm9tICcuL1llYXJTZWxlY3QnO1xuIiwiaW1wb3J0IGRlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCB7Rm9ybWlrVmFsdWVzLCBpc0Z1bmN0aW9uLCBGb3JtaWtQcm92aWRlciwgaXNFbXB0eUNoaWxkcmVufSBmcm9tICdmb3JtaWsnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB0eXBlIHtURm9ybUNvbmZpZywgVEZvcm1Qcm9wc30gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQge3VzZVRGb3JtfSBmcm9tICcuL3VzZVRGb3JtJztcblxuY29uc3QgZCA9IGRlYnVnKCd0aHguY29udHJvbHMuZm9ybS5URm9ybScpO1xuXG5leHBvcnQgZnVuY3Rpb24gVEZvcm08VmFsdWVzIGV4dGVuZHMgRm9ybWlrVmFsdWVzID0gRm9ybWlrVmFsdWVzPihwcm9wczogVEZvcm1Db25maWc8VmFsdWVzPikge1xuXHRjb25zdCB0YmFnID0gdXNlVEZvcm08VmFsdWVzPihwcm9wcyk7XG5cdGNvbnN0IHtjb21wb25lbnQsIHJlbmRlciwgY2hpbGRyZW4sIGlubmVyUmVmfSA9IHByb3BzO1xuXG5cdC8vIFRoaXMgYWxsb3dzIGZvbGtzIHRvIHBhc3MgYSByZWYgdG8gPEZvcm1payAvPlxuXHRSZWFjdC51c2VJbXBlcmF0aXZlSGFuZGxlKGlubmVyUmVmLCAoKSA9PiB0YmFnKTtcblxuXHRsZXQgY2hpbGQgPSBudWxsO1xuXHRpZiAoY29tcG9uZW50KSB7XG5cdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdGNoaWxkID0gUmVhY3QuY3JlYXRlRWxlbWVudChjb21wb25lbnQsIHRiYWcpO1xuXHR9IGVsc2UgaWYgKHJlbmRlcikge1xuXHRcdGNoaWxkID0gcmVuZGVyKHRiYWcpO1xuXHR9IGVsc2UgaWYgKGNoaWxkcmVuKSB7XG5cdFx0aWYgKGlzRnVuY3Rpb24oY2hpbGRyZW4pKSB7XG5cdFx0XHRjaGlsZCA9IChjaGlsZHJlbiBhcyAoYmFnOiBURm9ybVByb3BzPFZhbHVlcz4pID0+IFJlYWN0LlJlYWN0Tm9kZSkodGJhZyBhcyBURm9ybVByb3BzPFZhbHVlcz4pO1xuXHRcdH0gZWxzZSBpZiAoIWlzRW1wdHlDaGlsZHJlbihjaGlsZHJlbikpIHtcblx0XHRcdGNoaWxkID0gUmVhY3QuQ2hpbGRyZW4ub25seShjaGlsZHJlbik7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIDxGb3JtaWtQcm92aWRlciB2YWx1ZT17dGJhZ30+e2NoaWxkfTwvRm9ybWlrUHJvdmlkZXI+O1xufVxuIiwiZXhwb3J0IHtURm9ybX0gZnJvbSAnLi9URm9ybSc7XG5leHBvcnQge3VzZVRGb3JtfSBmcm9tICcuL3VzZVRGb3JtJztcbmV4cG9ydCB0eXBlIHtURm9ybVByb3BzfSBmcm9tICcuL3R5cGVzJztcbiIsImltcG9ydCBmbGF0dGVuIGZyb20gJ2ZsYXQnO1xuaW1wb3J0IHtGb3JtaWtWYWx1ZXMsIHVzZUZvcm1paywgRm9ybWlrRXJyb3JzLCBGb3JtaWtUb3VjaGVkfSBmcm9tICdmb3JtaWsnO1xuaW1wb3J0IGdldCBmcm9tICdsb2Rhc2gvZ2V0JztcbmltcG9ydCBwcm9wZXJ0eSBmcm9tICdsb2Rhc2gvcHJvcGVydHknO1xuaW1wb3J0IHVuaXEgZnJvbSAnbG9kYXNoL3VuaXEnO1xuaW1wb3J0IFJlYWN0LCB7dXNlRWZmZWN0LCB1c2VTdGF0ZX0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtNZXNzYWdlLCBTZWdtZW50fSBmcm9tICdzZW1hbnRpYy11aS1yZWFjdCc7XG5pbXBvcnQgdHlwZSB7VEZvcm1Db25maWd9IGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gdXNlVEZvcm08VmFsdWVzIGV4dGVuZHMgRm9ybWlrVmFsdWVzID0gRm9ybWlrVmFsdWVzLCBJbml0aWFsVmFsdWVzID0gYW55Pihjb25maWc6IFRGb3JtQ29uZmlnPFZhbHVlcywgSW5pdGlhbFZhbHVlcz4pIHtcblx0Y29uc3Qge3JlbmRlciwgY2hpbGRyZW4sIC4uLnJlc3R9ID0gY29uZmlnO1xuXHQvLyBAdHMtaWdub3JlXG5cdGNvbnN0IGZvcm1payA9IHVzZUZvcm1payhyZXN0KTtcblxuXHR1c2VFZmZlY3QoKCkgPT4ge1xuXHRcdGlmIChjb25maWcub25WYWxpZGF0ZSkgY29uZmlnLm9uVmFsaWRhdGUoZm9ybWlrLmlzVmFsaWQpO1xuXHR9LCBbZm9ybWlrLmlzVmFsaWQsIGNvbmZpZy5vblZhbGlkYXRlXSk7XG5cblx0Ly8gR2V0IHN1Ym1pdCBmdW5jdGlvblxuXHR1c2VFZmZlY3QoKCkgPT4ge1xuXHRcdGlmIChjb25maWcuZ2V0U3VibWl0Rm4pIGNvbmZpZy5nZXRTdWJtaXRGbihmb3JtaWsuc3VibWl0Rm9ybSk7XG5cdH0sIFtmb3JtaWsuc3VibWl0Rm9ybSwgY29uZmlnLmdldFN1Ym1pdEZuXSk7XG5cblx0Ly8gT24gY2hhbmdlIGV2ZW50IChpZiB0aGlzIGVuZHMgdXAgY2hhbmdpbmcgdmFsdWVzIGl0IHdpbGwgY3ljbGUpXG5cdHVzZUVmZmVjdCgoKSA9PiB7XG5cdFx0aWYgKGNvbmZpZy5vbkNoYW5nZSkgY29uZmlnLm9uQ2hhbmdlKGZvcm1pay52YWx1ZXMpO1xuXHR9LCBbZm9ybWlrLnZhbHVlc10pO1xuXG5cdC8vIE1hcmsgdGhlIGVycm9yIGNsZWFyZWQgaWYgdGhlIGZvcm0gaGFzIGJlZW4gZWRpdGVkIGFmdGVyIGFuIGVycm9yXG5cdGNvbnN0IFtlcnJvckNsZWFyZWQsIHNldEVycm9yQ2xlYXJlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG5cdHVzZUVmZmVjdCgoKSA9PiB7XG5cdFx0aWYgKGNvbmZpZy5lcnJvciAmJiBjb25maWcuZXJyb3IubWVzc2FnZSAmJiAhZm9ybWlrLmlzU3VibWl0dGluZykge1xuXHRcdFx0c2V0RXJyb3JDbGVhcmVkKHRydWUpO1xuXHRcdH1cblx0fSwgW2Zvcm1pay52YWx1ZXMsIGNvbmZpZy5lcnJvcl0pO1xuXG5cdC8vIEZsYXR0ZW4gdGhlIHdhcm5pbmdzIChmb3JtaWsgZXJyb3JzKSBhbmQgdG91Y2ggb2JqZWN0cy5cblx0Y29uc3QgZmxhdFdhcm5pbmdzID0gZmxhdHRlbjxGb3JtaWtFcnJvcnM8VmFsdWVzPiwge1trZXk6IHN0cmluZ106IHN0cmluZ30+KGZvcm1pay5lcnJvcnMpO1xuXHRjb25zdCBmbGF0VG91Y2hlZCA9IGZsYXR0ZW48Rm9ybWlrVG91Y2hlZDxWYWx1ZXM+LCB7W2tleTogc3RyaW5nXTogc3RyaW5nfT4oZm9ybWlrLnRvdWNoZWQpO1xuXG5cdC8vIENyZWF0ZSBhbiBhcnJheSBvZiBzdHJpbmdzIHRoYXQgYXJlIHdhcm5pbmdzIChmb3JtaWsgZXJyb3JzKS4gSWYgdGhlIHN1Ym1pdCBjb3VudCBpcyBncmVhdGVyIHRoYW4gMFxuXHQvLyB0aGVuIGl0IHdpbGwgc2hvdyBhbGwgd2FybmluZ3MuIE90aGVyd2lzZSBvbmx5IHRvdWNoZWQgZmllbGQgd2FybmluZ3Mgd2lsbCBiZSBhZGRlZCB0byB0aGlzIGFycmF5LlxuXHRjb25zdCB3YXJuaW5nczogc3RyaW5nW10gPSB1bmlxKFxuXHRcdE9iamVjdC5rZXlzKGZsYXRXYXJuaW5ncykucmVkdWNlPHN0cmluZ1tdPigobWVtbywgdmFsdWUpID0+IHtcblx0XHRcdGNvbnN0IGlzVG91Y2hlZCA9IGZsYXRUb3VjaGVkW3ZhbHVlXTtcblx0XHRcdGlmIChpc1RvdWNoZWQgfHwgZm9ybWlrLnN1Ym1pdENvdW50ID4gMCkge1xuXHRcdFx0XHRyZXR1cm4gWy4uLm1lbW8sIGdldChmbGF0V2FybmluZ3MsIHZhbHVlKV07XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbWVtbztcblx0XHR9LCBbXSksXG5cdCk7XG5cblx0Ly8gQ3JlYXRlIGFuIGFycmF5IG9mIHN0cmluZ3MgdGhhdCBhcmUgZXJyb3JzIChncmFwaHFsIGVycm9ycykuXG5cdGxldCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG5cdGxldCBlcnJvckhlYWRlciA9ICcnO1xuXHRpZiAoY29uZmlnLmVycm9yICYmIGNvbmZpZy5lcnJvci5tZXNzYWdlKSB7XG5cdFx0aWYgKGNvbmZpZy5lcnJvci5ncmFwaFFMRXJyb3JzKSB7XG5cdFx0XHRlcnJvcnMgPSBjb25maWcuZXJyb3IuZ3JhcGhRTEVycm9ycy5yZWR1Y2UoKG1lbW8sIHYpID0+IHtcblx0XHRcdFx0aWYgKHYubWVzc2FnZSkgcmV0dXJuIFsuLi5tZW1vLCB2Lm1lc3NhZ2VdO1xuXHRcdFx0XHRyZXR1cm4gbWVtbztcblx0XHRcdH0sIFtdIGFzIHN0cmluZ1tdKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3QgZXJyb3JNZXNzYWdlID0gY29uZmlnLmVycm9yLm1lc3NhZ2Uuc2xpY2UoY29uZmlnLmVycm9yLm1lc3NhZ2UuaW5kZXhPZignOiAnKSArIDEpO1xuXHRcdFx0ZXJyb3JzLnB1c2goZXJyb3JNZXNzYWdlKTtcblx0XHR9XG5cdFx0ZXJyb3JIZWFkZXIgPSBjb25maWcuZXJyb3IubWVzc2FnZS5zbGljZSgwLCBjb25maWcuZXJyb3IubWVzc2FnZS5pbmRleE9mKCc6ICcpKTtcblx0fVxuXHRlcnJvcnMgPSB1bmlxKGVycm9ycyk7XG5cblx0Ly8gQ2hlY2sgaWYgdGhlcmUgYXJlIHdhcm5pbmdzIG9yIGVycm9yc1xuXHRjb25zdCBoYXNXYXJuaW5ncyA9ICEoZm9ybWlrLmlzVmFsaWQgfHwgd2FybmluZ3MubGVuZ3RoID09PSAwKTtcblx0Y29uc3QgaGFzRXJyb3JzID0gZXJyb3JzLmxlbmd0aCA+IDA7XG5cblx0Ly8gUmVuZGVyIHRoZSB3YXJuaW5nc1xuXHRmdW5jdGlvbiByZW5kZXJXYXJuaW5ncygpIHtcblx0XHRpZiAoIWhhc1dhcm5pbmdzICYmICFoYXNFcnJvcnMpIHJldHVybiBudWxsO1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8TWVzc2FnZSB3YXJuaW5nPXtoYXNXYXJuaW5nc30gZXJyb3I9e2hhc0Vycm9ycyAmJiAhaGFzV2FybmluZ3N9PlxuXHRcdFx0XHQ8TWVzc2FnZS5IZWFkZXI+e2hhc1dhcm5pbmdzID8gJ1NvbWUgZmllbGRzIGFyZSBub3QgY29tcGxldGU6JyA6IGAke2Vycm9ySGVhZGVyfTpgfTwvTWVzc2FnZS5IZWFkZXI+XG5cdFx0XHRcdHsvKiBQdXQgaXQgaW4gYSBzZWdtZW50IHRvIG1ha2Ugc3VyZSB0aGUgZXJyb3JNZXNzYWdlIGlzbid0IHRvbyBiaWcgd2hlbiB0aGVyZSBhcmUgYSBsb3Qgb2YgZXJyb3JzICovfVxuXHRcdFx0XHQ8U2VnbWVudCBzdHlsZT17e292ZXJmbG93OiAnYXV0bycsIG1heEhlaWdodDogMTAwfX0+XG5cdFx0XHRcdFx0eyhoYXNXYXJuaW5ncyA/IHdhcm5pbmdzIDogZXJyb3JzKS5tYXAobXNnID0+IChcblx0XHRcdFx0XHRcdDxkaXYga2V5PXttc2d9Pnttc2d9PC9kaXY+XG5cdFx0XHRcdFx0KSl9XG5cdFx0XHRcdDwvU2VnbWVudD5cblx0XHRcdDwvTWVzc2FnZT5cblx0XHQpO1xuXHR9XG5cblx0Ly8gUmV0dXJucyB0cnVlIGlmIHRoZSBmaWVsZCBoYXMgYW4gZXJyb3Jcblx0ZnVuY3Rpb24gZmllbGRFcnJvcihmaWVsZE5hbWU6IGtleW9mIFZhbHVlcyB8IHN0cmluZyB8IG51bWJlcikge1xuXHRcdHJldHVybiAoISFwcm9wZXJ0eShmaWVsZE5hbWUpKGZvcm1pay50b3VjaGVkKSB8fCBmb3JtaWsuc3VibWl0Q291bnQgPiAwKSAmJiAhIXByb3BlcnR5KGZpZWxkTmFtZSkoZm9ybWlrLmVycm9ycyk7XG5cdH1cblxuXHQvLyBIYW5kbGVzIHRoZSBmb3JtIHN1Ym1pdFxuXHRmdW5jdGlvbiBoYW5kbGVTdWJtaXQoZT86IFJlYWN0LkZvcm1FdmVudDxIVE1MRm9ybUVsZW1lbnQ+KSB7XG5cdFx0c2V0RXJyb3JDbGVhcmVkKGZhbHNlKTtcblx0XHRmb3JtaWsuaGFuZGxlU3VibWl0KGUpO1xuXHR9XG5cblx0cmV0dXJuIHtcblx0XHQuLi5mb3JtaWssXG5cdFx0aGFzRXJyb3JzOiBoYXNFcnJvcnMgJiYgIWVycm9yQ2xlYXJlZCxcblx0XHRoYXNXYXJuaW5ncyxcblx0XHRpc1ZhbGlkOiAhaGFzV2FybmluZ3MsXG5cdFx0bG9hZGluZzogY29uZmlnLmxvYWRpbmcgPyBjb25maWcubG9hZGluZyA6IGZhbHNlLFxuXHRcdHN1Ym1pdERpc2FibGVkOiBoYXNXYXJuaW5ncyB8fCBmb3JtaWsuaXNTdWJtaXR0aW5nLFxuXHRcdGVycm9yTWFya2VkQ2xlYXJlZDogZXJyb3JDbGVhcmVkLFxuXHRcdGZvcm1FcnJvcjogaGFzRXJyb3JzICYmICFoYXNXYXJuaW5ncyAmJiAhZXJyb3JDbGVhcmVkICYmICFmb3JtaWsuaXNTdWJtaXR0aW5nLCAvLyBDb252ZW5pZW5jZVxuXHRcdHJlbmRlcldhcm5pbmdzLFxuXHRcdGZpZWxkRXJyb3IsXG5cdFx0aGFuZGxlU3VibWl0LFxuXHR9O1xufVxuIiwiaW1wb3J0IHR5cGUge0xvY2FsRGF0ZX0gZnJvbSAnQGpzLWpvZGEvY29yZSc7XG5pbXBvcnQge2Zvcm1hdERhdGV9IGZyb20gJ0B0aHgvZGF0ZSc7XG5pbXBvcnQgZGVidWcgZnJvbSAnZGVidWcnO1xuaW1wb3J0IFJlYWN0LCB7dXNlU3RhdGV9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBDcmVkaXRDYXJkcywge0ZvY3VzZWR9IGZyb20gJ3JlYWN0LWNyZWRpdC1jYXJkcyc7XG5pbXBvcnQgJ3JlYWN0LWNyZWRpdC1jYXJkcy9lcy9zdHlsZXMtY29tcGlsZWQuY3NzJztcbmltcG9ydCB7Rm9ybSwgR3JpZCwgSW5wdXQsIElucHV0UHJvcHN9IGZyb20gJ3NlbWFudGljLXVpLXJlYWN0JztcbmltcG9ydCB7TW9udGhZZWFyUGlja2VyfSBmcm9tICcuLi8uLi9kYXRlL01vbnRoWWVhclBpY2tlcic7XG5pbXBvcnQge0NyZWRpdENhcmROdW1iZXJJbnB1dH0gZnJvbSAnLi9DcmVkaXRDYXJkTnVtYmVySW5wdXQnO1xuaW1wb3J0ICcuL3N0eWxlcy5jc3MnO1xuXG5jb25zdCBkID0gZGVidWcoJ3RoeC5jb250cm9scy5pbnB1dHMuQ3JlZGl0Q2FyZElucHV0Jyk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlZGl0Q2FyZERhdGEge1xuXHRudW1iZXI/OiBzdHJpbmc7XG5cdG5hbWU/OiBzdHJpbmc7XG5cdGN2Yz86IHN0cmluZztcblx0ZXhwaXJ5PzogTG9jYWxEYXRlO1xufVxuXG5leHBvcnQgdHlwZSBDcmVkaXRDYXJkSW5wdXRQcm9wcyA9IHtcblx0dmFsdWU/OiBDcmVkaXRDYXJkRGF0YTtcblx0b25DaGFuZ2U/OiAoZGF0YTogQ3JlZGl0Q2FyZERhdGEpID0+IHZvaWQ7XG59ICYgUGljazxJbnB1dFByb3BzLCAnZGlzYWJsZWQnIHwgJ29uQmx1cic+O1xuXG5leHBvcnQgZnVuY3Rpb24gQ3JlZGl0Q2FyZElucHV0KHByb3BzOiBDcmVkaXRDYXJkSW5wdXRQcm9wcykge1xuXHRjb25zdCB7b25CbHVyLCBkaXNhYmxlZCwgb25DaGFuZ2UsIHZhbHVlfSA9IHByb3BzO1xuXHRjb25zdCB7bmFtZSwgbnVtYmVyLCBjdmMsIGV4cGlyeX0gPSB2YWx1ZSB8fCB7fTtcblxuXHRjb25zdCBbZm9jdXMsIHNldEZvY3VzXSA9IHVzZVN0YXRlPEZvY3VzZWQ+KCdudW1iZXInKTtcblxuXHRyZXR1cm4gKFxuXHRcdDxHcmlkPlxuXHRcdFx0PEdyaWQuQ29sdW1uIHdpZHRoPXs0fT5cblx0XHRcdFx0PEZvcm0+XG5cdFx0XHRcdFx0PEZvcm0uR3JvdXA+XG5cdFx0XHRcdFx0XHQ8Rm9ybS5GaWVsZCB3aWR0aD17OX0+XG5cdFx0XHRcdFx0XHRcdDxsYWJlbD5OdW1iZXI8L2xhYmVsPlxuXHRcdFx0XHRcdFx0XHQ8Q3JlZGl0Q2FyZE51bWJlcklucHV0XG5cdFx0XHRcdFx0XHRcdFx0b25Gb2N1cz17KCkgPT4gc2V0Rm9jdXMoJ251bWJlcicpfVxuXHRcdFx0XHRcdFx0XHRcdG9uQmx1cj17b25CbHVyfVxuXHRcdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPXt2ID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdG9uQ2hhbmdlICYmIG9uQ2hhbmdlKHtuYW1lLCBudW1iZXI6IHYsIGN2YywgZXhwaXJ5fSk7XG5cdFx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0XHRkaXNhYmxlZD17ZGlzYWJsZWR9XG5cdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHQ8L0Zvcm0uRmllbGQ+XG5cdFx0XHRcdFx0XHQ8Rm9ybS5GaWVsZCB3aWR0aD17NH0+XG5cdFx0XHRcdFx0XHRcdDxsYWJlbD5DVkM8L2xhYmVsPlxuXHRcdFx0XHRcdFx0XHQ8SW5wdXRcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZT17Y3ZjIHx8ICcnfVxuXHRcdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPXsoZXYsIHYpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdG9uQ2hhbmdlICYmIG9uQ2hhbmdlKHtuYW1lLCBudW1iZXIsIGN2Yzogdi52YWx1ZSwgZXhwaXJ5fSk7XG5cdFx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0XHRvbkZvY3VzPXsoKSA9PiBzZXRGb2N1cygnY3ZjJyl9XG5cdFx0XHRcdFx0XHRcdFx0b25CbHVyPXsoKSA9PiBzZXRGb2N1cygnbmFtZScpfVxuXHRcdFx0XHRcdFx0XHRcdGRpc2FibGVkPXtkaXNhYmxlZH1cblx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdDwvRm9ybS5GaWVsZD5cblx0XHRcdFx0XHQ8L0Zvcm0uR3JvdXA+XG5cdFx0XHRcdFx0PEZvcm0uR3JvdXA+XG5cdFx0XHRcdFx0XHQ8Rm9ybS5GaWVsZCB3aWR0aD17OX0+XG5cdFx0XHRcdFx0XHRcdDxsYWJlbD5OYW1lPC9sYWJlbD5cblx0XHRcdFx0XHRcdFx0PElucHV0XG5cdFx0XHRcdFx0XHRcdFx0dmFsdWU9e25hbWUgfHwgJyd9XG5cdFx0XHRcdFx0XHRcdFx0b25DaGFuZ2U9eyhldiwgdikgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0b25DaGFuZ2UgJiYgb25DaGFuZ2Uoe25hbWU6IHYudmFsdWUsIG51bWJlciwgY3ZjLCBleHBpcnl9KTtcblx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHRcdG9uRm9jdXM9eygpID0+IHNldEZvY3VzKCduYW1lJyl9XG5cdFx0XHRcdFx0XHRcdFx0ZGlzYWJsZWQ9e2Rpc2FibGVkfVxuXHRcdFx0XHRcdFx0XHRcdGZsdWlkXG5cdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHQ8L0Zvcm0uRmllbGQ+XG5cdFx0XHRcdFx0XHQ8Rm9ybS5GaWVsZCB3aWR0aD17Nn0+XG5cdFx0XHRcdFx0XHRcdDxsYWJlbD5FeHBpcnk8L2xhYmVsPlxuXHRcdFx0XHRcdFx0XHQ8TW9udGhZZWFyUGlja2VyXG5cdFx0XHRcdFx0XHRcdFx0dmFsdWU9e2V4cGlyeX1cblx0XHRcdFx0XHRcdFx0XHRvbkNoYW5nZT17diA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRvbkNoYW5nZSAmJiBvbkNoYW5nZSh7bmFtZSwgbnVtYmVyLCBjdmMsIGV4cGlyeTogdn0pO1xuXHRcdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRcdFx0b25Gb2N1cz17KCkgPT4gc2V0Rm9jdXMoJ2V4cGlyeScpfVxuXHRcdFx0XHRcdFx0XHRcdGRpc2FibGVkPXtkaXNhYmxlZH1cblx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdDwvRm9ybS5GaWVsZD5cblx0XHRcdFx0XHQ8L0Zvcm0uR3JvdXA+XG5cdFx0XHRcdDwvRm9ybT5cblx0XHRcdDwvR3JpZC5Db2x1bW4+XG5cdFx0XHQ8R3JpZC5Db2x1bW4gd2lkdGg9ezEyfT5cblx0XHRcdFx0PENyZWRpdENhcmRzXG5cdFx0XHRcdFx0Y3ZjPXtjdmMgfHwgJyd9XG5cdFx0XHRcdFx0ZXhwaXJ5PXtmb3JtYXREYXRlKGV4cGlyeSwge2Zvcm1hdDogJ01NdXUnfSkgfHwgJyd9XG5cdFx0XHRcdFx0bmFtZT17bmFtZSB8fCAnJ31cblx0XHRcdFx0XHRudW1iZXI9e251bWJlciB8fCAnJ31cblx0XHRcdFx0XHRmb2N1c2VkPXtmb2N1c31cblx0XHRcdFx0XHRjYWxsYmFjaz17KGEsIGIpID0+IHtcblx0XHRcdFx0XHRcdGQoYSwgYik7XG5cdFx0XHRcdFx0fX1cblx0XHRcdFx0Lz5cblx0XHRcdDwvR3JpZC5Db2x1bW4+XG5cdFx0PC9HcmlkPlxuXHQpO1xufVxuIiwiaW1wb3J0IGNyZWRpdENhcmRUeXBlIGZyb20gJ2NyZWRpdC1jYXJkLXR5cGUnO1xuaW1wb3J0IGRlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCB7dmFsaWRhdGV9IGZyb20gJ2x1aG4nO1xuaW1wb3J0IFJlYWN0LCB7dXNlQ2FsbGJhY2ssIHVzZU1lbW8sIHVzZVN0YXRlfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQge0ljb24sIElucHV0LCBJbnB1dFByb3BzLCBTZW1hbnRpY0lDT05TLCBTZW1hbnRpY0NPTE9SU30gZnJvbSAnc2VtYW50aWMtdWktcmVhY3QnO1xuaW1wb3J0IHR5cGUge01hc2tlZElucHV0UHJvcHN9IGZyb20gJy4uL01hc2tlZElucHV0JztcbmltcG9ydCB7dXNlTWFza2VkSW5wdXR9IGZyb20gJy4uL01hc2tlZElucHV0L3VzZU1hc2tlZElucHV0JztcblxuY29uc3QgZCA9IGRlYnVnKCd0aHguY29udHJvbHMuaW5wdXRzLkNyZWRpdENhcmRJbnB1dC5DcmVkaXRDYXJkTnVtYmVySW5wdXQnKTtcblxuaW50ZXJmYWNlIENyZWRpdENhcmROdW1iZXJJbnB1dFByb3BzIHtcblx0b25DaGFuZ2U/OiAodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkgPT4gdm9pZDtcblx0dmFsdWU/OiBzdHJpbmc7XG59XG5cbmZ1bmN0aW9uIGdldEljb24odHlwZTogc3RyaW5nKTogU2VtYW50aWNJQ09OUyB7XG5cdHN3aXRjaCAodHlwZSkge1xuXHRcdGNhc2UgJ3Zpc2EnOlxuXHRcdFx0cmV0dXJuICdjYyB2aXNhJztcblx0XHRjYXNlICdtYXN0ZXJjYXJkJzpcblx0XHRcdHJldHVybiAnY2MgbWFzdGVyY2FyZCc7XG5cdFx0Y2FzZSAnYW1lcmljYW4tZXhwcmVzcyc6XG5cdFx0XHRyZXR1cm4gJ2NjIGFtZXgnO1xuXHRcdGNhc2UgJ2RpbmVycy1jbHViJzpcblx0XHRcdHJldHVybiAnY2MgZGluZXJzIGNsdWInO1xuXHRcdGNhc2UgJ2pjYic6XG5cdFx0XHRyZXR1cm4gJ2NjIGpjYic7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdHJldHVybiAnY3JlZGl0IGNhcmQnO1xuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBDcmVkaXRDYXJkTnVtYmVySW5wdXQocHJvcHM6IENyZWRpdENhcmROdW1iZXJJbnB1dFByb3BzICYgT21pdDxJbnB1dFByb3BzLCAnb25DaGFuZ2UnPikge1xuXHRjb25zdCB7dmFsdWUsIG9uQ2hhbmdlLCAuLi5yZXN0fSA9IHByb3BzO1xuXHRjb25zdCBbaWNvbiwgc2V0SWNvbl0gPSB1c2VTdGF0ZTxTZW1hbnRpY0lDT05TPignY3JlZGl0IGNhcmQnKTtcblx0Y29uc3QgW2NvbG9yLCBzZXRDb2xvcl0gPSB1c2VTdGF0ZTxTZW1hbnRpY0NPTE9SUz4oJ2JsYWNrJyk7XG5cblx0Y29uc3QgY2hlY2tWYWxpZGF0aW9uID0gdXNlQ2FsbGJhY2soKHZhbHVlQXJyYXk6IHN0cmluZ1tdKSA9PiB7XG5cdFx0Y29uc3QgbnVtID0gdmFsdWVBcnJheS5qb2luKCcnKS5yZXBsYWNlQWxsKC8oX3xcXHMpL2csICcnKTtcblx0XHRjb25zdCB0eXAgPSBjcmVkaXRDYXJkVHlwZShudW0pO1xuXHRcdGNvbnN0IGlzVmFsaWQgPSB2YWxpZGF0ZShudW0pO1xuXG5cdFx0aWYgKHR5cC5sZW5ndGggPT09IDEpIHtcblx0XHRcdHNldEljb24oZ2V0SWNvbih0eXBbMF0udHlwZSkpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzZXRJY29uKCdjcmVkaXQgY2FyZCcpO1xuXHRcdH1cblxuXHRcdGlmIChudW0ubGVuZ3RoID4gMCkge1xuXHRcdFx0aWYgKGlzVmFsaWQpIHtcblx0XHRcdFx0c2V0Q29sb3IoJ2dyZWVuJyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzZXRDb2xvcigncmVkJyk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHNldENvbG9yKCdibGFjaycpO1xuXHRcdH1cblxuXHRcdHJldHVybiBpc1ZhbGlkO1xuXHR9LCBbXSk7XG5cblx0Y29uc3QgY3JlZGl0Q2FyZE1hc2s6IE1hc2tlZElucHV0UHJvcHNbJ21hc2snXSA9IHVzZU1lbW8oXG5cdFx0KCkgPT4gKHtcblx0XHRcdG1hc2s6ICc5OTk5IDk5OTkgOTk5OSA5OTk5Jyxcblx0XHRcdGlzQ29tcGxldGU6IGNoZWNrVmFsaWRhdGlvbixcblx0XHRcdGF1dG9Vbm1hc2s6IHRydWUsXG5cdFx0fSksXG5cdFx0W2NoZWNrVmFsaWRhdGlvbl0sXG5cdCk7XG5cblx0Y29uc3QgY2FyZE51bWJlclJlZiA9IHVzZU1hc2tlZElucHV0KHtcblx0XHRtYXNrOiBjcmVkaXRDYXJkTWFzayxcblx0XHR2YWx1ZSxcblx0XHRvbkNoYW5nZTogdiA9PiB7XG5cdFx0XHRjb25zdCB0eXAgPSBjcmVkaXRDYXJkVHlwZSh2IHx8ICcnKTtcblx0XHRcdGQodiwgdHlwKTtcblx0XHRcdC8vIGNoZWNrVmFsaWRhdGlvbihbdiB8fCAnJ10pO1xuXHRcdFx0b25DaGFuZ2UgJiYgb25DaGFuZ2Uodik7XG5cdFx0fSxcblx0fSk7XG5cblx0cmV0dXJuIChcblx0XHQ8SW5wdXQgey4uLnJlc3R9IGljb24+XG5cdFx0XHQ8aW5wdXQgcmVmPXtjYXJkTnVtYmVyUmVmfSAvPlxuXHRcdFx0PEljb24gbmFtZT17aWNvbn0gY29sb3I9e2NvbG9yfSBzaXplPVwibGFyZ2VcIiAvPlxuXHRcdDwvSW5wdXQ+XG5cdCk7XG59XG4iLCJleHBvcnQge0NyZWRpdENhcmRJbnB1dH0gZnJvbSAnLi9DcmVkaXRDYXJkSW5wdXQnO1xuZXhwb3J0IHR5cGUge0NyZWRpdENhcmRJbnB1dFByb3BzfSBmcm9tICcuL0NyZWRpdENhcmRJbnB1dCc7XG4iLCJpbXBvcnQgZGVidWcgZnJvbSAnZGVidWcnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7SW5wdXQsIElucHV0UHJvcHN9IGZyb20gJ3NlbWFudGljLXVpLXJlYWN0JztcbmltcG9ydCB7dXNlTWFza2VkSW5wdXQsIFVzZU1hc2tlZElucHV0UHJvcHN9IGZyb20gJy4vdXNlTWFza2VkSW5wdXQnO1xuXG5jb25zdCBkID0gZGVidWcoJ3RoeC5jb250cm9scy5pbnB1dHMuTWFza2VkSW5wdXQnKTtcblxuZXhwb3J0IHR5cGUgTWFza2VkSW5wdXRQcm9wcyA9IHtcblx0bmFtZT86IHN0cmluZztcblx0b25CbHVyPzogKGV2ZW50OiBhbnkpID0+IHZvaWQ7XG59ICYgVXNlTWFza2VkSW5wdXRQcm9wcyAmXG5cdE9taXQ8SW5wdXRQcm9wcywgJ29uQ2hhbmdlJz47XG5cbmV4cG9ydCBmdW5jdGlvbiBNYXNrZWRJbnB1dChwcm9wczogTWFza2VkSW5wdXRQcm9wcykge1xuXHRjb25zdCB7bmFtZSwgb25CbHVyLCBkaXNhYmxlZCwgb25DaGFuZ2UsIG1hc2ssIHZhbHVlLCAuLi5yZXN0fSA9IHByb3BzO1xuXG5cdGNvbnN0IGlucHV0UmVmID0gdXNlTWFza2VkSW5wdXQoe21hc2ssIHZhbHVlLCBvbkNoYW5nZX0pO1xuXG5cdHJldHVybiAoXG5cdFx0PElucHV0IHsuLi5yZXN0fT5cblx0XHRcdDxpbnB1dCBkaXNhYmxlZD17ZGlzYWJsZWR9IG5hbWU9e25hbWV9IHJlZj17aW5wdXRSZWZ9IG9uQmx1cj17b25CbHVyfSAvPlxuXHRcdDwvSW5wdXQ+XG5cdCk7XG59XG4iLCJleHBvcnQge01hc2tlZElucHV0fSBmcm9tICcuL01hc2tlZElucHV0JztcbmV4cG9ydCB7dXNlTWFza2VkSW5wdXR9IGZyb20gJy4vdXNlTWFza2VkSW5wdXQnO1xuZXhwb3J0IHR5cGUge01hc2tlZElucHV0UHJvcHN9IGZyb20gJy4vTWFza2VkSW5wdXQnO1xuIiwiaW1wb3J0IGRlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCBJbnB1dG1hc2sgZnJvbSAnaW5wdXRtYXNrJztcbmltcG9ydCB7dXNlRWZmZWN0LCB1c2VSZWZ9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB1c2VEZWVwQ29tcGFyZUVmZmVjdCBmcm9tICd1c2UtZGVlcC1jb21wYXJlLWVmZmVjdCc7XG5cbmNvbnN0IGQgPSBkZWJ1ZygndGh4LmNvbnRyb2xzLmlucHV0cy5NYXNrZWRJbnB1dC51c2VNYXNrZWRJbnB1dCcpO1xuXG5leHBvcnQgaW50ZXJmYWNlIFVzZU1hc2tlZElucHV0UHJvcHMge1xuXHR2YWx1ZT86IHN0cmluZztcblx0b25DaGFuZ2U/OiAodmFsdWU/OiBzdHJpbmcpID0+IHZvaWQ7XG5cdG1hc2s/OiBJbnB1dG1hc2suT3B0aW9ucztcblx0b25TZXQ/OiAodmFsdWU/OiBzdHJpbmcpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VNYXNrZWRJbnB1dChwcm9wczogVXNlTWFza2VkSW5wdXRQcm9wcykge1xuXHRjb25zdCB7dmFsdWUsIG9uQ2hhbmdlLCBvblNldCwgbWFza30gPSBwcm9wcztcblxuXHRjb25zdCBpbnB1dEVsZW1lbnQgPSB1c2VSZWY8SFRNTElucHV0RWxlbWVudCB8IG51bGw+KG51bGwpO1xuXHRjb25zdCBtYXNrSW5zdGFuY2UgPSB1c2VSZWY8SW5wdXRtYXNrLkluc3RhbmNlIHwgbnVsbD4obnVsbCk7XG5cblx0dXNlRGVlcENvbXBhcmVFZmZlY3QoKCkgPT4ge1xuXHRcdGlmICghaW5wdXRFbGVtZW50LmN1cnJlbnQpIHRocm93IG5ldyBFcnJvcignQ291bGQgbm90IGdldCBpbnB1dCBlbGVtZW50Jyk7XG5cblx0XHRkKCdDcmVhdGluZyBpbnB1dCBtYXNrIGluc3RhbmNlJyk7XG5cdFx0bWFza0luc3RhbmNlLmN1cnJlbnQgPSBuZXcgSW5wdXRtYXNrKHtcblx0XHRcdC4uLm1hc2ssXG5cdFx0XHRvbmNvbXBsZXRlKCkge1xuXHRcdFx0XHRpZiAob25DaGFuZ2UpIG9uQ2hhbmdlKGlucHV0RWxlbWVudC5jdXJyZW50Py52YWx1ZSk7XG5cdFx0XHRcdGlmIChtYXNrPy5vbmNvbXBsZXRlKSBtYXNrLm9uY29tcGxldGUoKTtcblx0XHRcdH0sXG5cdFx0XHRvbmNsZWFyZWQoKSB7XG5cdFx0XHRcdGlmIChvbkNoYW5nZSkgb25DaGFuZ2UoKTtcblx0XHRcdFx0aWYgKG1hc2s/Lm9uY2xlYXJlZCkgbWFzay5vbmNsZWFyZWQoKTtcblx0XHRcdH0sXG5cdFx0XHRvbmluY29tcGxldGUoKSB7XG5cdFx0XHRcdGlmIChvbkNoYW5nZSkgb25DaGFuZ2UoaW5wdXRFbGVtZW50LmN1cnJlbnQ/LnZhbHVlKTtcblx0XHRcdFx0aWYgKG1hc2s/Lm9uaW5jb21wbGV0ZSkgbWFzay5vbmluY29tcGxldGUoKTtcblx0XHRcdH0sXG5cdFx0fSk7XG5cdFx0bWFza0luc3RhbmNlLmN1cnJlbnQubWFzayhpbnB1dEVsZW1lbnQuY3VycmVudCk7XG5cblx0XHRyZXR1cm4gKCkgPT4ge1xuXHRcdFx0aWYgKG1hc2tJbnN0YW5jZS5jdXJyZW50KSB7XG5cdFx0XHRcdGQoJ0NsZWFuaW5nIHVwIGlucHV0IG1hc2sgaW5zdGFuY2UnKTtcblx0XHRcdFx0bWFza0luc3RhbmNlLmN1cnJlbnQucmVtb3ZlKCk7XG5cdFx0XHRcdG1hc2tJbnN0YW5jZS5jdXJyZW50ID0gbnVsbDtcblx0XHRcdH1cblx0XHR9O1xuXHR9LCBbbWFza10pO1xuXG5cdC8vIElmIHdlIGNoYW5nZSB0aGUgdmFsdWUgcHJvcCB3ZSBuZWVkIHRvIHN5bmMgdGhlIERPTSB2YWx1ZSB0byBkaXNwbGF5IHRoZSBuZXcgdmFsdWVcblx0dXNlRWZmZWN0KCgpID0+IHtcblx0XHRpZiAoaW5wdXRFbGVtZW50LmN1cnJlbnQgJiYgaW5wdXRFbGVtZW50LmN1cnJlbnQ/LnZhbHVlICE9PSB2YWx1ZSAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRkKCdWYWx1ZSBpcyBjaGFuZ2luZzonLCB2YWx1ZSk7XG5cdFx0XHRpbnB1dEVsZW1lbnQuY3VycmVudC52YWx1ZSA9IHZhbHVlO1xuXHRcdFx0b25TZXQgJiYgb25TZXQodmFsdWUpO1xuXHRcdH1cblx0fSwgW3ZhbHVlXSk7XG5cblx0cmV0dXJuIGlucHV0RWxlbWVudDtcbn1cbiIsImltcG9ydCBkZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtNYXNrZWRJbnB1dCwgTWFza2VkSW5wdXRQcm9wc30gZnJvbSAnLi4vTWFza2VkSW5wdXQnO1xuXG5jb25zdCBkID0gZGVidWcoJ3RoeC5jb250cm9scy5pbnB1dHMuUGhvbmVJbnB1dCcpO1xuXG5leHBvcnQgaW50ZXJmYWNlIFBob25lSW5wdXRQcm9wcyB7XG5cdGV4dGVuc2lvbj86IGJvb2xlYW47XG5cdG9uQ2hhbmdlPzogKHZhbHVlPzogc3RyaW5nKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gUGhvbmVJbnB1dChwcm9wczogUGhvbmVJbnB1dFByb3BzICYgT21pdDxNYXNrZWRJbnB1dFByb3BzLCAnbWFzaycgfCAnb25DaGFuZ2UnPikge1xuXHRjb25zdCB7ZXh0ZW5zaW9uLCAuLi5yZXN0fSA9IHByb3BzO1xuXHRjb25zdCBtYXNrID0ge1xuXHRcdG1hc2s6IGV4dGVuc2lvbiA/ICcoKDk5OSkgOTk5LTk5OTlbIHg5OTk5XSl8KCs5ICg5OTkpIDk5OS05OTk5WyB4OTk5OV0pJyA6ICcoKDk5OSkgOTk5LTk5OTkpfCggKzkgKDk5OSkgOTk5LTk5OTkpJyxcblx0XHRncmVlZHk6IGZhbHNlLFxuXHRcdGF1dG9Vbm1hc2s6IHRydWUsXG5cdH07XG5cblx0cmV0dXJuIDxNYXNrZWRJbnB1dCB7Li4ucmVzdH0gbWFzaz17bWFza30gLz47XG59XG4iLCJleHBvcnQge1Bob25lSW5wdXR9IGZyb20gJy4vUGhvbmVJbnB1dCc7XG5leHBvcnQgdHlwZSB7UGhvbmVJbnB1dFByb3BzfSBmcm9tICcuL1Bob25lSW5wdXQnO1xuIiwiaW1wb3J0IGRlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCBSZWFjdCwge0NoaWxkcmVuLCBjbG9uZUVsZW1lbnR9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7Rm9ybSwgUmFkaW8sIEZvcm1SYWRpbywgRm9ybUdyb3VwUHJvcHN9IGZyb20gJ3NlbWFudGljLXVpLXJlYWN0JztcblxuY29uc3QgZCA9IGRlYnVnKCd0aHguY29udHJvbHMuaW5wdXRzLlJhZGlvR3JvdXAnKTtcblxuZXhwb3J0IGludGVyZmFjZSBSYWRpb0dyb3VwUHJvcHMge1xuXHRjaGlsZHJlbj86IEpTWC5FbGVtZW50W10gfCBKU1guRWxlbWVudDtcblx0b25DaGFuZ2U/OiAodmFsdWU/OiBzdHJpbmcgfCBudW1iZXIpID0+IHZvaWQ7XG5cdHZhbHVlPzogc3RyaW5nIHwgbnVtYmVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gUmFkaW9Hcm91cChwcm9wczogUmFkaW9Hcm91cFByb3BzICYgT21pdDxGb3JtR3JvdXBQcm9wcywgJ2NoaWxkcmVuJz4pIHtcblx0Y29uc3Qge2NoaWxkcmVuLCBvbkNoYW5nZSwgdmFsdWUsIC4uLnJlc3R9ID0gcHJvcHM7XG5cblx0cmV0dXJuIChcblx0XHQ8Rm9ybS5Hcm91cCB7Li4ucmVzdH0+XG5cdFx0XHR7Q2hpbGRyZW4ubWFwKHByb3BzLmNoaWxkcmVuLCBjaGlsZCA9PiB7XG5cdFx0XHRcdGlmIChjaGlsZD8udHlwZSA9PT0gRm9ybVJhZGlvIHx8IGNoaWxkPy50eXBlID09PSBSYWRpbyB8fCBjaGlsZD8udHlwZSA9PT0gRm9ybS5SYWRpbykge1xuXHRcdFx0XHRcdHJldHVybiBjbG9uZUVsZW1lbnQoY2hpbGQsIHtcblx0XHRcdFx0XHRcdG9uQ2hhbmdlOiAoZXY6IGFueSwgYXJnczoge3ZhbHVlPzogc3RyaW5nIHwgbnVtYmVyfSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRpZiAob25DaGFuZ2UpIG9uQ2hhbmdlKGFyZ3MudmFsdWUpO1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGNoZWNrZWQ6IHZhbHVlID09PSBjaGlsZC5wcm9wcy52YWx1ZSxcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gY2hpbGQ7XG5cdFx0XHR9KX1cblx0XHQ8L0Zvcm0uR3JvdXA+XG5cdCk7XG59XG4iLCJleHBvcnQge1JhZGlvR3JvdXB9IGZyb20gJy4vUmFkaW9Hcm91cCc7XG5leHBvcnQgdHlwZSB7UmFkaW9Hcm91cFByb3BzfSBmcm9tICcuL1JhZGlvR3JvdXAnO1xuIiwiaW1wb3J0IGRlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCBSZWFjdCwge3VzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZX0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtTY3JpcHRlbENvbnRleHR9IGZyb20gJy4vU2NyaXB0ZWxDb250ZXh0JztcbmltcG9ydCB7U2NyaXB0ZWxTb2NrZXR9IGZyb20gJy4vc2NyaXB0ZWwnO1xuaW1wb3J0IHR5cGUge1NjcmlwdGVsUGVuU3R5bGV9IGZyb20gJy4vc2NyaXB0ZWwvZW51bXMnO1xuaW1wb3J0IHR5cGUge1JlbmRlcmVkSW1hZ2V9IGZyb20gJy4vc2NyaXB0ZWwvbWVzc2FnZXMnO1xuXG5jb25zdCBkID0gZGVidWcoJ3RoeC5jb250cm9scy5pbnB1dHMuU2NyaXB0ZWwnKTtcblxuZXhwb3J0IGludGVyZmFjZSBTY3JpcHRlbFByb3BzIHtcblx0b21uaXNjcmlwdFVybD86IHN0cmluZzsgLy8gRGVmYXVsdHMgdG8gJ3dzOi8vbG9jYWxob3N0OjgwODAnXG5cdGltYWdlVHlwZT86IHN0cmluZzsgLy8gRGVmYXVsdHMgdG8gJ2ltYWdlL3N2Zyt4bWwnLlxuXHRzY2FsZT86IG51bWJlcjsgLy8gRGVmYXVsdHMgdG8gMVxuXHRjcm9wPzogYm9vbGVhbjsgLy8gRGVmYXVsdHMgdG8gZmFsc2Vcblx0cGVuU3R5bGU/OiBTY3JpcHRlbFBlblN0eWxlOyAvLyBEZWZhdWx0cyB0byAnUGxhaW5QZW5TdHlsZSdcblx0Y2hpbGRyZW46IEpTWC5FbGVtZW50IHwgSlNYLkVsZW1lbnRbXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFNjcmlwdGVsKHtvbW5pc2NyaXB0VXJsLCBpbWFnZVR5cGUsIHNjYWxlLCBjcm9wLCBwZW5TdHlsZSwgY2hpbGRyZW59OiBTY3JpcHRlbFByb3BzKSB7XG5cdGNvbnN0IHNvY2tldCA9IHVzZVJlZjxTY3JpcHRlbFNvY2tldD4oKTtcblx0Y29uc3QgW3JlbmRlciwgc2V0UmVuZGVyXSA9IHVzZVN0YXRlPFJlbmRlcmVkSW1hZ2U+KCk7XG5cdGNvbnN0IFtsb2FkaW5nLCBzZXRMb2FkaW5nXSA9IHVzZVN0YXRlPGJvb2xlYW4+KGZhbHNlKTtcblx0Y29uc3QgW2lzU2lnbmluZywgc2V0SXNTaWduaW5nXSA9IHVzZVN0YXRlPGJvb2xlYW4+KGZhbHNlKTtcblxuXHR1c2VFZmZlY3QoKCkgPT4ge1xuXHRcdHNvY2tldC5jdXJyZW50ID0gbmV3IFNjcmlwdGVsU29ja2V0KHtcblx0XHRcdG9tbmlzY3JpcHRVcmwsXG5cdFx0XHRpbWFnZVR5cGUsXG5cdFx0XHRzY2FsZSxcblx0XHRcdGNyb3AsXG5cdFx0XHRwZW5TdHlsZSxcblx0XHR9KTtcblxuXHRcdHNvY2tldC5jdXJyZW50Lm9uKCdyZW5kZXInLCBtc2cgPT4ge1xuXHRcdFx0c2V0UmVuZGVyKG1zZyk7XG5cdFx0XHRzZXRMb2FkaW5nKGZhbHNlKTtcblx0XHRcdHNldFJlbmRlcih1bmRlZmluZWQpOyAvLyB0b2RvIGxvb2sgYXQgdGhpcyBpbiBmdXR1cmVcblx0XHR9KTtcblx0XHRzb2NrZXQuY3VycmVudC5vbignb2tCdXR0b25Eb3duJywgKCkgPT4ge1xuXHRcdFx0c2V0TG9hZGluZyh0cnVlKTtcblx0XHR9KTtcblx0XHRzb2NrZXQuY3VycmVudC5vbignY2FuY2VsJywgKCkgPT4ge1xuXHRcdFx0c2V0TG9hZGluZyhmYWxzZSk7XG5cdFx0XHRzZXRSZW5kZXIodW5kZWZpbmVkKTtcblx0XHR9KTtcblx0XHRzb2NrZXQuY3VycmVudC5vbigncGVuTW92ZScsICgpID0+IHtcblx0XHRcdHNldElzU2lnbmluZyh0cnVlKTtcblx0XHR9KTtcblx0XHRzb2NrZXQuY3VycmVudC5vbigncGVuVXAnLCAoKSA9PiB7XG5cdFx0XHRzZXRJc1NpZ25pbmcoZmFsc2UpO1xuXHRcdH0pO1xuXG5cdFx0cmV0dXJuICgpID0+IHtcblx0XHRcdGlmIChzb2NrZXQuY3VycmVudCkgc29ja2V0LmN1cnJlbnQuY2xvc2UoKTtcblx0XHR9O1xuXHR9LCBbb21uaXNjcmlwdFVybCwgaW1hZ2VUeXBlLCBzY2FsZSwgY3JvcCwgcGVuU3R5bGVdKTtcblxuXHRyZXR1cm4gPFNjcmlwdGVsQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17e3NvY2tldCwgcmVuZGVySW1hZ2U6IHJlbmRlciwgbG9hZGluZywgaXNTaWduaW5nfX0+e2NoaWxkcmVufTwvU2NyaXB0ZWxDb250ZXh0LlByb3ZpZGVyPjtcbn1cbiIsImltcG9ydCBSZWFjdCwge011dGFibGVSZWZPYmplY3R9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB0eXBlIHtTY3JpcHRlbFNvY2tldH0gZnJvbSAnLi9zY3JpcHRlbCc7XG5pbXBvcnQgdHlwZSB7UmVuZGVyZWRJbWFnZX0gZnJvbSAnLi9zY3JpcHRlbC9tZXNzYWdlcyc7XG5cbmV4cG9ydCBjb25zdCBTY3JpcHRlbENvbnRleHQgPSBSZWFjdC5jcmVhdGVDb250ZXh0PFxuXHR7c29ja2V0OiBNdXRhYmxlUmVmT2JqZWN0PFNjcmlwdGVsU29ja2V0IHwgdW5kZWZpbmVkPjsgcmVuZGVySW1hZ2U6IFJlbmRlcmVkSW1hZ2UgfCB1bmRlZmluZWQ7IGxvYWRpbmc6IGJvb2xlYW47IGlzU2lnbmluZzogYm9vbGVhbn0gfCB1bmRlZmluZWRcbj4odW5kZWZpbmVkKTtcbiIsImV4cG9ydCB7U2NyaXB0ZWx9IGZyb20gJy4vU2NyaXB0ZWwnO1xuZXhwb3J0IHR5cGUge1NjcmlwdGVsUHJvcHN9IGZyb20gJy4vU2NyaXB0ZWwnO1xuZXhwb3J0IHt3aXRoU2NyaXB0ZWx9IGZyb20gJy4vd2l0aFNjcmlwdGVsJztcbmV4cG9ydCB7U2NyaXB0ZWxQZW5TdHlsZSwgU2NyaXB0ZWxNZXNzYWdlQ2xhc3N9IGZyb20gJy4vc2NyaXB0ZWwvZW51bXMnO1xuIiwiZXhwb3J0IGVudW0gU2NyaXB0ZWxQZW5TdHlsZSB7XG5cdFBsYWluID0gJ1BsYWluUGVuU3R5bGUnLFxuXHRDaGlzZWwgPSAnQ2hpc2VsUGVuU3R5bGUnLFxuXHRJbmt3ZWxsID0gJ0lua3dlbGxQZW5TdHlsZScsXG59XG5cbmV4cG9ydCBlbnVtIFNjcmlwdGVsTWVzc2FnZUNsYXNzIHtcblx0Q29ubmVjdGlvbk9wZW4gPSAnQ29ubmVjdGlvbk9wZW4nLFxuXHREZXZpY2VPcGVuUmVxdWVzdCA9ICdEZXZpY2VPcGVuUmVxdWVzdCcsXG5cdERldmljZU9wZW5SZXNwb25zZSA9ICdEZXZpY2VPcGVuUmVzcG9uc2UnLFxuXHRSZW5kZXJlZEltYWdlID0gJ1JlbmRlcmVkSW1hZ2UnLFxuXHRTY3JpcHRlbEV4Y2VwdGlvbiA9ICdTY3JpcHRlbEV4Y2VwdGlvbicsXG5cdEJ1dHRvbkRvd24gPSAnQnV0dG9uRG93bicsXG5cdEJ1dHRvblByZXNzID0gJ0J1dHRvblByZXNzJyxcblx0UGVuTW92ZSA9ICdQZW5Nb3ZlJyxcblx0UGVuVXAgPSAnUGVuVXAnLFxufVxuIiwiLyogZ2xvYmFscyBXZWJTb2NrZXQ6IHRydWUgKi9cbmltcG9ydCBkZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5pbXBvcnQgRXZlbnRFbWl0dGVyIGZyb20gJ2V2ZW50ZW1pdHRlcjMnO1xuaW1wb3J0IHtTY3JpcHRlbE1lc3NhZ2VDbGFzcywgU2NyaXB0ZWxQZW5TdHlsZX0gZnJvbSAnLi9lbnVtcyc7XG5pbXBvcnQgdHlwZSB7Q29ubmVjdGlvbk9wZW4sIERldmljZU9wZW5SZXNwb25zZSwgTWVzc2FnZSwgUmVuZGVyZWRJbWFnZX0gZnJvbSAnLi9tZXNzYWdlcyc7XG5cbmNvbnN0IGQgPSBkZWJ1ZygndGh4LmNvbnRyb2xzLmlucHV0cy5TY3JpcHRlbC5zY3JpcHRlbCcpO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNjcmlwdGVsU29ja2V0QXJncyB7XG5cdG9tbmlzY3JpcHRVcmw/OiBzdHJpbmc7IC8vIERlZmF1bHRzIHRvICd3czovL2xvY2FsaG9zdDo4MDgwJ1xuXHRpbWFnZVR5cGU/OiBzdHJpbmc7IC8vIERlZmF1bHRzIHRvICdpbWFnZS9zdmcreG1sJy5cblx0c2NhbGU/OiBudW1iZXI7IC8vIERlZmF1bHRzIHRvIDFcblx0Y3JvcD86IGJvb2xlYW47IC8vIERlZmF1bHRzIHRvIGZhbHNlXG5cdHBlblN0eWxlPzogU2NyaXB0ZWxQZW5TdHlsZTsgLy8gRGVmYXVsdHMgdG8gJ1BsYWluUGVuU3R5bGUnXG5cdHJlbmRlcj86ICgpID0+IHZvaWQ7XG59XG5cbmZ1bmN0aW9uIHNlcnZlckNvbm5lY3RlZChtc2c6IENvbm5lY3Rpb25PcGVuLCBzb2NrZXQ6IFdlYlNvY2tldCkge1xuXHRkKCdTZXJ2ZXIgY29ubmVjdGVkJyk7XG5cdGlmIChtc2cuc2VydmVySW5mby5kZXZpY2VzLmxlbmd0aCA+IDApIHtcblx0XHQvLyBHcmFiIHRoZSBmaXJzdCBhdmFpbGFibGUgZGV2aWNlXG5cdFx0Y29uc3QgZGV2aWNlID0gbXNnLnNlcnZlckluZm8uZGV2aWNlc1swXTtcblx0XHRzb2NrZXQuc2VuZChcblx0XHRcdEpTT04uc3RyaW5naWZ5KHtcblx0XHRcdFx0X2NsYXNzOiAnRGV2aWNlT3BlblJlcXVlc3QnLFxuXHRcdFx0XHR1dWlkOiBkZXZpY2UudXVpZCxcblx0XHRcdH0pLFxuXHRcdCk7XG5cdH1cbn1cblxuZnVuY3Rpb24gZGV2aWNlQ29ubmVjdGVkKG1zZzogRGV2aWNlT3BlblJlc3BvbnNlLCBzb2NrZXQ6IFdlYlNvY2tldCwgYXJnczogU2NyaXB0ZWxTb2NrZXRBcmdzKSB7XG5cdGQoYERldmljZSBjb25uZWN0ZWQ6ICR7bXNnLmRldmljZS51dWlkfWApO1xuXHRjb25zdCB7aW1hZ2VUeXBlLCBzY2FsZSwgY3JvcCwgcGVuU3R5bGV9ID0gYXJncztcblx0c29ja2V0LnNlbmQoXG5cdFx0SlNPTi5zdHJpbmdpZnkoe1xuXHRcdFx0X2NsYXNzOiAnUmVuZGVyU2V0dGluZ3NVcGRhdGVSZXF1ZXN0Jyxcblx0XHRcdHJlbmRlclNldHRpbmdzOiB7XG5cdFx0XHRcdF9jbGFzczogJ1JlbmRlclNldHRpbmdzJyxcblx0XHRcdFx0dHlwZTogaW1hZ2VUeXBlIHx8ICdpbWFnZS9zdmcreG1sJyxcblx0XHRcdFx0c2NhbGU6IHNjYWxlIHx8IDEsXG5cdFx0XHRcdGNyb3A6IGNyb3AgfHwgZmFsc2UsXG5cdFx0XHRcdHBlblN0eWxlOiBwZW5TdHlsZVxuXHRcdFx0XHRcdD8ge1xuXHRcdFx0XHRcdFx0XHRyZW5kZXJGdW5jdGlvbjogcGVuU3R5bGUsXG5cdFx0XHRcdFx0ICB9XG5cdFx0XHRcdFx0OiB7XG5cdFx0XHRcdFx0XHRcdHJlbmRlckZ1bmN0aW9uOiBTY3JpcHRlbFBlblN0eWxlLlBsYWluLFxuXHRcdFx0XHRcdCAgfSxcblx0XHRcdH0sXG5cdFx0fSksXG5cdCk7XG59XG5cbmZ1bmN0aW9uIHJlbmRlcihtc2c6IFJlbmRlcmVkSW1hZ2UsIGFyZ3M6IFNjcmlwdGVsU29ja2V0QXJncywgZXZlbnRFbWl0dGVyOiBFdmVudEVtaXR0ZXIpIHtcblx0ZChgUmVuZGVyZWQgaW1hZ2U6ICR7bXNnLnR5cGV9ICR7bXNnLndpZHRofXgke21zZy5oZWlnaHR9YCk7XG5cdGV2ZW50RW1pdHRlci5lbWl0KCdyZW5kZXInLCBtc2cpO1xufVxuXG5leHBvcnQgY2xhc3MgU2NyaXB0ZWxTb2NrZXQgZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xuXHRwcml2YXRlIHNvY2tldDogV2ViU29ja2V0O1xuXHRwcml2YXRlIG9wdGlvbnM6IFNjcmlwdGVsU29ja2V0QXJncztcblxuXHRjb25zdHJ1Y3RvcihhcmdzOiBTY3JpcHRlbFNvY2tldEFyZ3MpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy5vcHRpb25zID0gYXJncztcblxuXHRcdHRoaXMuc29ja2V0ID0gbmV3IFdlYlNvY2tldChhcmdzLm9tbmlzY3JpcHRVcmwgfHwgJ3dzOi8vbG9jYWxob3N0OjgwODAnKTtcblxuXHRcdHRoaXMuc29ja2V0Lm9ub3BlbiA9ICgpID0+IHtcblx0XHRcdGQoJ1NvY2tldCBvcGVuJyk7XG5cdFx0fTtcblxuXHRcdHRoaXMuc29ja2V0Lm9uY2xvc2UgPSAoKSA9PiB7XG5cdFx0XHRkKCdTb2NrZXQgY2xvc2VkJyk7XG5cdFx0fTtcblxuXHRcdHRoaXMuc29ja2V0Lm9ubWVzc2FnZSA9IGV2ID0+IHtcblx0XHRcdGNvbnN0IG1zZyA9IEpTT04ucGFyc2UoZXYuZGF0YSkgYXMgTWVzc2FnZTtcblx0XHRcdGlmICghbXNnLl9jbGFzcykgcmV0dXJuOyAvLyBBIG1lc3NhZ2Ugd2l0aCBubyBjbGFzcy5cblxuXHRcdFx0c3dpdGNoIChtc2cuX2NsYXNzKSB7XG5cdFx0XHRcdGNhc2UgU2NyaXB0ZWxNZXNzYWdlQ2xhc3MuQ29ubmVjdGlvbk9wZW46XG5cdFx0XHRcdFx0c2VydmVyQ29ubmVjdGVkKG1zZywgdGhpcy5zb2NrZXQpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFNjcmlwdGVsTWVzc2FnZUNsYXNzLkRldmljZU9wZW5SZXNwb25zZTpcblx0XHRcdFx0XHRkZXZpY2VDb25uZWN0ZWQobXNnLCB0aGlzLnNvY2tldCwgdGhpcy5vcHRpb25zKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBTY3JpcHRlbE1lc3NhZ2VDbGFzcy5SZW5kZXJlZEltYWdlOlxuXHRcdFx0XHRcdHJlbmRlcihtc2csIHRoaXMub3B0aW9ucywgdGhpcyk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgU2NyaXB0ZWxNZXNzYWdlQ2xhc3MuU2NyaXB0ZWxFeGNlcHRpb246XG5cdFx0XHRcdFx0ZChgU2NyaXB0ZWwgRXhjZXB0aW9uIEVycm9yOiAke21zZy5tZXNzYWdlfWApO1xuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgU2NyaXB0ZWxNZXNzYWdlQ2xhc3MuQnV0dG9uUHJlc3M6XG5cdFx0XHRcdFx0aWYgKG1zZy5sYWJlbCA9PT0gJ0NhbmNlbCcpIHRoaXMuZW1pdCgnY2FuY2VsJyk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgU2NyaXB0ZWxNZXNzYWdlQ2xhc3MuQnV0dG9uRG93bjpcblx0XHRcdFx0XHRpZiAobXNnLmxhYmVsID09PSAnT0snKSB0aGlzLmVtaXQoJ29rQnV0dG9uRG93bicpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFNjcmlwdGVsTWVzc2FnZUNsYXNzLlBlbk1vdmU6XG5cdFx0XHRcdFx0dGhpcy5lbWl0KCdwZW5Nb3ZlJyk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgU2NyaXB0ZWxNZXNzYWdlQ2xhc3MuUGVuVXA6XG5cdFx0XHRcdFx0dGhpcy5lbWl0KCdwZW5VcCcpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0fVxuXHRcdH07XG5cdH1cblxuXHRjYWxpYnJhdGUoKSB7XG5cdFx0ZCgnY2FsaWJyYXRlJyk7XG5cdFx0dGhpcy5zb2NrZXQuc2VuZChKU09OLnN0cmluZ2lmeSh7X2NsYXNzOiAnRm9yY2VSZWNhbGlicmF0ZSd9KSk7XG5cdH1cblxuXHRjbG9zZSgpIHtcblx0XHR0aGlzLnNvY2tldC5jbG9zZSgpO1xuXHR9XG59XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtTY3JpcHRlbCwgU2NyaXB0ZWxQcm9wc30gZnJvbSAnLi9TY3JpcHRlbCc7XG5cbi8qKlxuICogQSBIb0MgdGhhdCBwcm92aWRlcyBhIGNvbm5lY3Rpb24gdG8gYSBTY3JpcHRlbCBPbW5pc2NyaXB0IGRldmljZS5cbiAqIFlvdSBjYW4gb25seSBoYXZlIGEgc2luZ2xlIGNvbm5lY3Rpb24gb3BlbiBhdCBhIHRpbWUuXG4gKiBAcGFyYW0gV3JhcHBlZENvbXBvbmVudFxuICogQHJldHVybiB7T2JqZWN0fVxuICovXG5leHBvcnQgZnVuY3Rpb24gd2l0aFNjcmlwdGVsKFdyYXBwZWRDb21wb25lbnQ6IGFueSwgc2NyaXB0ZWxQcm9wczogU2NyaXB0ZWxQcm9wcykge1xuXHRyZXR1cm4gKHByb3BzOiBhbnkpID0+IChcblx0XHQ8U2NyaXB0ZWwgey4uLnNjcmlwdGVsUHJvcHN9PlxuXHRcdFx0PFdyYXBwZWRDb21wb25lbnQgey4uLnByb3BzfSAvPlxuXHRcdDwvU2NyaXB0ZWw+XG5cdCk7XG59XG4iLCJpbXBvcnQgdHlwZSB7U2NyaXB0ZWxTY2hlbWFUeXBlfSBmcm9tICdAdGh4L3l1cC10eXBlcyc7XG5pbXBvcnQgZGVidWcgZnJvbSAnZGVidWcnO1xuaW1wb3J0IFJlYWN0LCB7dXNlQ29udGV4dCwgdXNlRWZmZWN0LCB1c2VTdGF0ZX0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtCdXR0b24sIEltYWdlfSBmcm9tICdzZW1hbnRpYy11aS1yZWFjdCc7XG5pbXBvcnQge1NjcmlwdGVsQ29udGV4dH0gZnJvbSAnLi4vU2NyaXB0ZWwvU2NyaXB0ZWxDb250ZXh0JztcblxuY29uc3QgZCA9IGRlYnVnKCd0aHguY29udHJvbHMuaW5wdXRzLlNjcmlwdGVsSW5wdXQnKTtcblxuZXhwb3J0IGludGVyZmFjZSBTY3JpcHRlbElucHV0UHJvcHMge1xuXHR2YWx1ZT86IFNjcmlwdGVsU2NoZW1hVHlwZTtcblx0b25DaGFuZ2U/OiAodmFsdWU/OiBTY3JpcHRlbFNjaGVtYVR5cGUpID0+IHZvaWQ7XG5cdGJ1dHRvblRleHQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBTY3JpcHRlbElucHV0KHByb3BzOiBTY3JpcHRlbElucHV0UHJvcHMpIHtcblx0Y29uc3Qge3ZhbHVlLCBvbkNoYW5nZSwgYnV0dG9uVGV4dCA9ICdFbnRlciBTaWduYXR1cmUnfSA9IHByb3BzO1xuXHRjb25zdCBjdHggPSB1c2VDb250ZXh0KFNjcmlwdGVsQ29udGV4dCk7XG5cblx0Y29uc3QgW2VudGVyU2lnbmF0dXJlLCBzZXRFbnRlclNpZ25hdHVyZV0gPSB1c2VTdGF0ZShmYWxzZSk7XG5cblx0dXNlRWZmZWN0KCgpID0+IHtcblx0XHRpZiAoZW50ZXJTaWduYXR1cmUpIHtcblx0XHRcdGlmIChvbkNoYW5nZSAmJiBjdHg/LnJlbmRlckltYWdlKSB7XG5cdFx0XHRcdHNldEVudGVyU2lnbmF0dXJlKGZhbHNlKTtcblx0XHRcdFx0aWYgKGN0eC5yZW5kZXJJbWFnZS50eXBlID09PSAnaW1hZ2Uvc3ZnK3htbCcgfHwgY3R4LnJlbmRlckltYWdlLnR5cGUgPT09ICdpbWFnZS9wbmcnKSB7XG5cdFx0XHRcdFx0b25DaGFuZ2Uoe1xuXHRcdFx0XHRcdFx0dHlwZTogY3R4LnJlbmRlckltYWdlLnR5cGUsXG5cdFx0XHRcdFx0XHR3aWR0aDogY3R4LnJlbmRlckltYWdlLndpZHRoLFxuXHRcdFx0XHRcdFx0aGVpZ2h0OiBjdHgucmVuZGVySW1hZ2UuaGVpZ2h0LFxuXHRcdFx0XHRcdFx0dGltZXN0YW1wOiBuZXcgRGF0ZSgpLFxuXHRcdFx0XHRcdFx0ZGF0YTogY3R4LnJlbmRlckltYWdlLmRhdGEsXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChvbkNoYW5nZSAmJiAhY3R4KSB7XG5cdFx0XHRcdG9uQ2hhbmdlKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LCBbY3R4XSk7XG5cblx0aWYgKGVudGVyU2lnbmF0dXJlKSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxkaXY+XG5cdFx0XHRcdDxkaXY+e2N0eD8uaXNTaWduaW5nID8gJ3NpZ25pbmcuLi4nIDogJ0VudGVyIGEgc2lnbmF0dXJlIGFuZCBjbGljayBPSy4nfTwvZGl2PlxuXHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0b25DbGljaz17KCkgPT4ge1xuXHRcdFx0XHRcdFx0c2V0RW50ZXJTaWduYXR1cmUoZmFsc2UpO1xuXHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0Y29sb3I9XCJibGFja1wiXG5cdFx0XHRcdFx0bG9hZGluZz17Y3R4Py5sb2FkaW5nfVxuXHRcdFx0XHRcdGRpc2FibGVkPXtjdHg/LmxvYWRpbmd9XG5cdFx0XHRcdD5cblx0XHRcdFx0XHRDYW5jZWxcblx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHRcdDxCdXR0b24gc2l6ZT1cIm1pbmlcIiBhcz1cImFcIiBiYXNpYyBvbkNsaWNrPXsoKSA9PiBjdHg/LnNvY2tldC5jdXJyZW50Py5jYWxpYnJhdGUoKX0gZGlzYWJsZWQ9e2N0eD8ubG9hZGluZ30+XG5cdFx0XHRcdFx0Q2FsaWJyYXRlXG5cdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0PC9kaXY+XG5cdFx0KTtcblx0fVxuXG5cdGlmICh2YWx1ZSAmJiB2YWx1ZS5kYXRhKSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxkaXY+XG5cdFx0XHRcdDxJbWFnZSBzaXplPVwibWVkaXVtXCIgc3JjPXt2YWx1ZS5kYXRhfSBib3JkZXJlZCAvPlxuXHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0c2l6ZT1cIm1pbmlcIlxuXHRcdFx0XHRcdGNvbXBhY3Rcblx0XHRcdFx0XHRvbkNsaWNrPXsoKSA9PiB7XG5cdFx0XHRcdFx0XHRzZXRFbnRlclNpZ25hdHVyZShmYWxzZSk7XG5cdFx0XHRcdFx0XHRpZiAob25DaGFuZ2UpIG9uQ2hhbmdlKCk7XG5cdFx0XHRcdFx0fX1cblx0XHRcdFx0PlxuXHRcdFx0XHRcdFJlc2V0XG5cdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0PC9kaXY+XG5cdFx0KTtcblx0fVxuXG5cdHJldHVybiA8QnV0dG9uIG9uQ2xpY2s9eygpID0+IHNldEVudGVyU2lnbmF0dXJlKHRydWUpfT57YnV0dG9uVGV4dH08L0J1dHRvbj47XG59XG4iLCJleHBvcnQge1NjcmlwdGVsSW5wdXR9IGZyb20gJy4vU2NyaXB0ZWxJbnB1dCc7XG5leHBvcnQgdHlwZSB7U2NyaXB0ZWxJbnB1dFByb3BzfSBmcm9tICcuL1NjcmlwdGVsSW5wdXQnO1xuIiwiaW1wb3J0IGRlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCBSZWFjdCwge3VzZUNhbGxiYWNrLCB1c2VNZW1vLCB1c2VTdGF0ZX0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtJY29uLCBJbnB1dCwgU2VtYW50aWNDT0xPUlN9IGZyb20gJ3NlbWFudGljLXVpLXJlYWN0JztcbmltcG9ydCBTSU4gZnJvbSAnc29jaWFsLWluc3VyYW5jZS1udW1iZXInO1xuaW1wb3J0IHR5cGUge01hc2tlZElucHV0UHJvcHN9IGZyb20gJy4uL01hc2tlZElucHV0JztcbmltcG9ydCB7dXNlTWFza2VkSW5wdXR9IGZyb20gJy4uL01hc2tlZElucHV0L3VzZU1hc2tlZElucHV0JztcblxuY29uc3QgZCA9IGRlYnVnKCd0aHguY29udHJvbHMuaW5wdXRzLlNpbklucHV0Jyk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2luSW5wdXRQcm9wcyBleHRlbmRzIE9taXQ8TWFza2VkSW5wdXRQcm9wcywgJ21hc2snPiB7XG5cdHZhbHVlPzogc3RyaW5nO1xuXHRvbkNoYW5nZSh2YWx1ZT86IHN0cmluZyk6IHZvaWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBTaW5JbnB1dChwcm9wczogU2luSW5wdXRQcm9wcykge1xuXHRjb25zdCB7dmFsdWUsIG9uQ2hhbmdlLCAuLi5yZXN0fSA9IHByb3BzO1xuXHRjb25zdCBbY29sb3IsIHNldENvbG9yXSA9IHVzZVN0YXRlPFNlbWFudGljQ09MT1JTPignYmxhY2snKTtcblxuXHRjb25zdCBjaGVja1ZhbGlkYXRpb24gPSB1c2VDYWxsYmFjaygodmFsdWVBcnJheTogc3RyaW5nW10pID0+IHtcblx0XHRjb25zdCBudW0gPSB2YWx1ZUFycmF5LmpvaW4oJycpLnJlcGxhY2VBbGwoLyhffFxcc3wtKS9nLCAnJyk7XG5cdFx0Y29uc3QgdmFsaWRhdGUgPSBuZXcgU0lOKG51bSk7XG5cdFx0aWYgKG51bS5sZW5ndGggPiAwKSB7XG5cdFx0XHRpZiAodmFsaWRhdGUuaXNWYWxpZCgpKSB7XG5cdFx0XHRcdHNldENvbG9yKCdncmVlbicpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c2V0Q29sb3IoJ3JlZCcpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRzZXRDb2xvcignYmxhY2snKTtcblx0XHR9XG5cdFx0cmV0dXJuIHZhbGlkYXRlLmlzVmFsaWQoKTtcblx0fSwgW10pO1xuXG5cdGNvbnN0IG1hc2s6IE1hc2tlZElucHV0UHJvcHNbJ21hc2snXSA9IHVzZU1lbW8oXG5cdFx0KCkgPT4gKHtcblx0XHRcdG1hc2s6ICc5OTktOTk5LTk5OScsXG5cdFx0XHRpc0NvbXBsZXRlOiBjaGVja1ZhbGlkYXRpb24sXG5cdFx0XHRncmVlZHk6IGZhbHNlLFxuXHRcdFx0YXV0b1VubWFzazogdHJ1ZSxcblx0XHR9KSxcblx0XHRbY2hlY2tWYWxpZGF0aW9uXSxcblx0KTtcblxuXHRjb25zdCBjYXJkTnVtYmVyUmVmID0gdXNlTWFza2VkSW5wdXQoe1xuXHRcdG1hc2ssXG5cdFx0dmFsdWUsXG5cdFx0b25DaGFuZ2U6IHYgPT4ge1xuXHRcdFx0b25DaGFuZ2UgJiYgb25DaGFuZ2Uodik7XG5cdFx0fSxcblx0XHRvblNldDogdiA9PiB7XG5cdFx0XHRjaGVja1ZhbGlkYXRpb24oW3YgfHwgJyddKTtcblx0XHR9LFxuXHR9KTtcblxuXHRyZXR1cm4gKFxuXHRcdDxJbnB1dCB7Li4ucmVzdH0gaWNvbj5cblx0XHRcdDxpbnB1dCByZWY9e2NhcmROdW1iZXJSZWZ9IC8+XG5cdFx0XHQ8SWNvbiBuYW1lPVwiaWQgYmFkZ2VcIiBjb2xvcj17Y29sb3J9IHNpemU9XCJsYXJnZVwiIC8+XG5cdFx0PC9JbnB1dD5cblx0KTtcbn1cbiIsImV4cG9ydCB7U2luSW5wdXR9IGZyb20gJy4vU2luSW5wdXQnO1xuZXhwb3J0IHR5cGUge1NpbklucHV0UHJvcHN9IGZyb20gJy4vU2luSW5wdXQnO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7RHJvcGRvd259IGZyb20gJ3NlbWFudGljLXVpLXJlYWN0JztcbmltcG9ydCB0eXBlIHtEcm9wZG93blByb3BzfSBmcm9tICdzZW1hbnRpYy11aS1yZWFjdCc7XG5pbXBvcnQgdHlwZSB7VGFibGVDZWxsUHJvcHN9IGZyb20gJy4vVGFibGVJbnB1dCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBEcm9wZG93bkNlbGw8RCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+Pihkcm9wZG93blByb3BzOiBEcm9wZG93blByb3BzKSB7XG5cdHJldHVybiBmdW5jdGlvbiBEcm9wZG93bkNlbGxGbihwcm9wczogVGFibGVDZWxsUHJvcHM8RD4pIHtcblx0XHRjb25zdCB7XG5cdFx0XHR2YWx1ZSxcblx0XHRcdHJvdzoge2luZGV4OiByb3dJbmRleH0sXG5cdFx0XHRjb2x1bW46IHtpZH0sXG5cdFx0XHR1cGRhdGVEYXRhLFxuXHRcdH0gPSBwcm9wcztcblxuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycyxAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0XHRjb25zdCB7dmFsdWU6IHYsIG9uQ2hhbmdlLCAuLi5yZXN0fSA9IGRyb3Bkb3duUHJvcHM7XG5cblx0XHRyZXR1cm4gKFxuXHRcdFx0PERyb3Bkb3duXG5cdFx0XHRcdHsuLi5yZXN0fVxuXHRcdFx0XHR2YWx1ZT17dmFsdWV9XG5cdFx0XHRcdG9uQ2hhbmdlPXsoZXZlbnQsIHZhbCkgPT4ge1xuXHRcdFx0XHRcdHVwZGF0ZURhdGEocm93SW5kZXgsIGlkLCB2YWwudmFsdWUpO1xuXHRcdFx0XHRcdGlmIChvbkNoYW5nZSkgb25DaGFuZ2UoZXZlbnQsIHZhbCk7XG5cdFx0XHRcdH19XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH07XG59XG4iLCJpbXBvcnQgZGVidWcgZnJvbSAnZGVidWcnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB0eXBlIHtDZWxsUHJvcHMsIFJlbmRlcmVyfSBmcm9tICdyZWFjdC10YWJsZSc7XG5cbmNvbnN0IGQgPSBkZWJ1ZygndGh4LmNvbnRyb2xzLmlucHV0cy5UYWJsZUlucHV0LkhvdmVyQ2VsbCcpO1xuXG5pbnRlcmZhY2UgSG92ZXJDZWxsT3B0aW9uczxEIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+IHtcblx0QWN0aW9uOiBSZW5kZXJlcjxDZWxsUHJvcHM8RD4+O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gSG92ZXJDZWxsPEQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4ob3B0aW9uczogSG92ZXJDZWxsT3B0aW9uczxEPikge1xuXHRyZXR1cm4gZnVuY3Rpb24gSG92ZXJDZWxsRm4ocHJvcHM6IENlbGxQcm9wczxEPikge1xuXHRcdGNvbnN0IHtBY3Rpb259ID0gb3B0aW9ucztcblxuXHRcdC8vIEB0cy1leHBlY3QtZXJyb3Jcblx0XHRpZiAocHJvcHMuaG92ZXJSb3cgPT09IHByb3BzLnJvdy5pZCkge1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0PGRpdiBzdHlsZT17e3RleHRBbGlnbjogJ3JpZ2h0J319PlxuXHRcdFx0XHRcdHsvKiBAdHMtZXhwZWN0LWVycm9yICovfVxuXHRcdFx0XHRcdDxBY3Rpb24gey4uLnByb3BzfSAvPlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdCk7XG5cdFx0fVxuXHRcdHJldHVybiBudWxsO1xuXHR9O1xufVxuIiwiaW1wb3J0IHtmb3JtYXRNb25leX0gZnJvbSAnQHRoeC9tb25leSc7XG5pbXBvcnQgdHlwZSBNb25leSBmcm9tICdqcy1tb25leSc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHR5cGUge0NlbGxQcm9wc30gZnJvbSAncmVhY3QtdGFibGUnO1xuXG5pbnRlcmZhY2UgTW9uZXlDZWxsT3B0aW9uczxEIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+IHtcblx0LyoqIElmIHByb3ZpZGVkLCB0aGlzIGZ1bmN0aW9uIHdpbGwgb3ZlcnJpZGUgdGhlIE1vbmV5IHZhbHVlIGRpc3BsYXllZCAqL1xuXHRvdmVycmlkZVZhbHVlPzogKHByb3BzOiBDZWxsUHJvcHM8RCwgTW9uZXk+KSA9PiBNb25leTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE1vbmV5Q2VsbDxEIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KG9wdGlvbnM/OiBNb25leUNlbGxPcHRpb25zPEQ+KSB7XG5cdHJldHVybiBmdW5jdGlvbiBNb25leUNlbGxGbihwcm9wczogQ2VsbFByb3BzPEQsIE1vbmV5Pikge1xuXHRcdHJldHVybiA8ZGl2IHN0eWxlPXt7dGV4dEFsaWduOiAncmlnaHQnfX0+e2Zvcm1hdE1vbmV5KG9wdGlvbnM/Lm92ZXJyaWRlVmFsdWUgPyBvcHRpb25zLm92ZXJyaWRlVmFsdWUocHJvcHMpIDogcHJvcHMudmFsdWUpfTwvZGl2Pjtcblx0fTtcbn1cbiIsImltcG9ydCBkZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5pbXBvcnQgdHlwZSBNb25leSBmcm9tICdqcy1tb25leSc7XG5pbXBvcnQgUmVhY3QsIHt1c2VTdGF0ZX0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtNb25leUlucHV0fSBmcm9tICcuLi8uLi9tb25leS9Nb25leUlucHV0JztcbmltcG9ydCB0eXBlIHtUYWJsZUNlbGxQcm9wc30gZnJvbSAnLi9UYWJsZUlucHV0JztcbmltcG9ydCB0eXBlIHtBZGRSb3dPblRhYklmfSBmcm9tICcuL2FkZFJvd09uVGFiJztcbmltcG9ydCB7YWRkUm93T25UYWJ9IGZyb20gJy4vYWRkUm93T25UYWInO1xuXG5jb25zdCBkID0gZGVidWcoJ3RoeC5jb250cm9scy5pbnB1dHMuVGFibGVJbnB1dC5Nb25leUVkaXRDZWxsJyk7XG5cbmludGVyZmFjZSBNb25leUVkaXRDZWxsT3B0aW9uczxEIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+IHtcblx0LyoqIElmIGZ1bmN0aW9uIGlzIHByZXNlbnQsIGFuZCByZXR1cm5zIHRydWUsIHdpbGwgYWRkIGEgbmV3IHJvdyBpZiB0YWIgaXMgcHJlc3NlZCBvbiB0aGUgbGFzdCByb3cgKi9cblx0YWRkUm93T25UYWJJZj86IEFkZFJvd09uVGFiSWY8RCwgTW9uZXk+O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gTW9uZXlFZGl0Q2VsbDxEIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KG9wdHM/OiBNb25leUVkaXRDZWxsT3B0aW9uczxEPikge1xuXHRyZXR1cm4gZnVuY3Rpb24gTW9uZXlFZGl0Q2VsbEZuKHByb3BzOiBUYWJsZUNlbGxQcm9wczxELCBNb25leT4pIHtcblx0XHRjb25zdCB7XG5cdFx0XHR2YWx1ZTogaW5pdGlhbFZhbHVlLFxuXHRcdFx0cm93OiB7aW5kZXg6IHJvd0luZGV4fSxcblx0XHRcdGNvbHVtbjoge2lkfSxcblx0XHRcdHVwZGF0ZURhdGEsXG5cdFx0fSA9IHByb3BzO1xuXG5cdFx0Y29uc3QgW3ZhbHVlLCBzZXRWYWx1ZV0gPSB1c2VTdGF0ZShpbml0aWFsVmFsdWUpO1xuXG5cdFx0cmV0dXJuIChcblx0XHRcdDxNb25leUlucHV0XG5cdFx0XHRcdGZsdWlkXG5cdFx0XHRcdHRyYW5zcGFyZW50XG5cdFx0XHRcdHZhbHVlPXt2YWx1ZX1cblx0XHRcdFx0b25DaGFuZ2U9e3NldFZhbHVlfVxuXHRcdFx0XHRvbkJsdXI9eygpID0+IHtcblx0XHRcdFx0XHR1cGRhdGVEYXRhKHJvd0luZGV4LCBpZCwgdmFsdWUpO1xuXHRcdFx0XHR9fVxuXHRcdFx0XHRvbktleURvd249eyhldmVudDogS2V5Ym9hcmRFdmVudCkgPT4gYWRkUm93T25UYWIoZXZlbnQsIHZhbHVlLCBwcm9wcywgb3B0cz8uYWRkUm93T25UYWJJZil9XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH07XG59XG4iLCJpbXBvcnQge2Zvcm1hdE1vbmV5LCB0b01vbmV5fSBmcm9tICdAdGh4L21vbmV5JztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgdHlwZSB7SWRUeXBlLCBUYWJsZUluc3RhbmNlfSBmcm9tICdyZWFjdC10YWJsZSc7XG5cbmludGVyZmFjZSBNb25leVN1bUZvb3Rlck9wdGlvbnM8QSBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+PiB7XG5cdGlkOiBJZFR5cGU8QT47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBNb25leVN1bUZvb3RlcjxBIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KG9wdGlvbnM6IE1vbmV5U3VtRm9vdGVyT3B0aW9uczxBPikge1xuXHRjb25zdCB7aWR9ID0gb3B0aW9ucyB8fCB7fTtcblxuXHRyZXR1cm4gKGluZm86IFRhYmxlSW5zdGFuY2U8QT4pID0+IHtcblx0XHRjb25zdCBzdW0gPSBpbmZvLnJvd3MucmVkdWNlKChtZW1vLCByb3cpID0+IG1lbW8uYWRkKHJvdy52YWx1ZXNbaWRdKSwgdG9Nb25leSgpKTtcblx0XHRyZXR1cm4gPGRpdiBzdHlsZT17e3RleHRBbGlnbjogJ3JpZ2h0J319Pntmb3JtYXRNb25leShzdW0pfTwvZGl2Pjtcblx0fTtcbn1cbiIsImltcG9ydCBkZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5pbXBvcnQgUmVhY3QsIHt1c2VTdGF0ZX0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtJbnB1dCwgSW5wdXRQcm9wc30gZnJvbSAnc2VtYW50aWMtdWktcmVhY3QnO1xuaW1wb3J0IHR5cGUge1RhYmxlQ2VsbFByb3BzfSBmcm9tICcuL1RhYmxlSW5wdXQnO1xuaW1wb3J0IHR5cGUge0FkZFJvd09uVGFiSWZ9IGZyb20gJy4vYWRkUm93T25UYWInO1xuaW1wb3J0IHthZGRSb3dPblRhYn0gZnJvbSAnLi9hZGRSb3dPblRhYic7XG5cbmNvbnN0IGQgPSBkZWJ1ZygndGh4LmNvbnRyb2xzLmlucHV0cy5UYWJsZUlucHV0LlN0cmluZ0VkaXRDZWxsJyk7XG5cbmludGVyZmFjZSBTdHJpbmdFZGl0Q2VsbE9wdGlvbnM8RCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+PiB7XG5cdC8qKiBPdmVycmlkZSBTZW1hbnRpY1VJIElucHV0IHByb3BzICovXG5cdGlucHV0UHJvcHM/OiBJbnB1dFByb3BzO1xuXHQvKiogSWYgZnVuY3Rpb24gaXMgcHJlc2VudCwgYW5kIHJldHVybnMgdHJ1ZSwgd2lsbCBhZGQgYSBuZXcgcm93IGlmIHRhYiBpcyBwcmVzc2VkIG9uIHRoZSBsYXN0IHJvdyAqL1xuXHRhZGRSb3dPblRhYklmPzogQWRkUm93T25UYWJJZjxELCBzdHJpbmc+O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gU3RyaW5nRWRpdENlbGw8RCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+PihvcHRpb25zPzogU3RyaW5nRWRpdENlbGxPcHRpb25zPEQ+KSB7XG5cdGNvbnN0IHtpbnB1dFByb3BzLCBhZGRSb3dPblRhYklmfSA9IG9wdGlvbnMgfHwge307XG5cblx0cmV0dXJuIGZ1bmN0aW9uIFN0cmluZ0VkaXRDZWxsRm4ocHJvcHM6IFRhYmxlQ2VsbFByb3BzPEQsIHN0cmluZz4pIHtcblx0XHRjb25zdCB7XG5cdFx0XHR2YWx1ZTogaW5pdGlhbFZhbHVlLFxuXHRcdFx0cm93OiB7aW5kZXh9LFxuXHRcdFx0Y29sdW1uOiB7aWR9LFxuXHRcdFx0dXBkYXRlRGF0YSxcblx0XHR9ID0gcHJvcHM7XG5cblx0XHRjb25zdCBbdmFsdWUsIHNldFZhbHVlXSA9IHVzZVN0YXRlKGluaXRpYWxWYWx1ZSk7XG5cblx0XHRyZXR1cm4gKFxuXHRcdFx0PElucHV0XG5cdFx0XHRcdGZsdWlkXG5cdFx0XHRcdHRyYW5zcGFyZW50XG5cdFx0XHRcdHsuLi5pbnB1dFByb3BzfVxuXHRcdFx0XHR2YWx1ZT17dmFsdWV9XG5cdFx0XHRcdG9uQ2hhbmdlPXsoZXYsIHYpID0+IHtcblx0XHRcdFx0XHRzZXRWYWx1ZSh2LnZhbHVlKTtcblx0XHRcdFx0fX1cblx0XHRcdFx0b25CbHVyPXsoKSA9PiB7XG5cdFx0XHRcdFx0dXBkYXRlRGF0YShpbmRleCwgaWQsIHZhbHVlKTtcblx0XHRcdFx0fX1cblx0XHRcdFx0b25LZXlEb3duPXsoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IGFkZFJvd09uVGFiKGV2ZW50LCB2YWx1ZSwgcHJvcHMsIGFkZFJvd09uVGFiSWYpfVxuXHRcdFx0Lz5cblx0XHQpO1xuXHR9O1xufVxuIiwiaW1wb3J0IGRlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCB7RmllbGRBcnJheSwgRmllbGRBcnJheVJlbmRlclByb3BzfSBmcm9tICdmb3JtaWsnO1xuLyogZXNsaW50LWRpc2FibGUgcmVhY3QvanN4LWtleSAqL1xuaW1wb3J0IFJlYWN0LCB7dXNlTWVtbywgdXNlU3RhdGV9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7XG5cdENlbGxQcm9wR2V0dGVyLFxuXHRDZWxsUHJvcHMsXG5cdENvbHVtbixcblx0Rm9vdGVyR3JvdXBQcm9wR2V0dGVyLFxuXHRGb290ZXJQcm9wR2V0dGVyLFxuXHRIZWFkZXJHcm91cFByb3BHZXR0ZXIsXG5cdEhlYWRlclByb3BHZXR0ZXIsXG5cdFJvd1Byb3BHZXR0ZXIsXG5cdFRhYmxlQm9keVByb3BHZXR0ZXIsXG5cdHVzZVRhYmxlLFxufSBmcm9tICdyZWFjdC10YWJsZSc7XG5pbXBvcnQge1RhYmxlLCBUYWJsZVByb3BzfSBmcm9tICdzZW1hbnRpYy11aS1yZWFjdCc7XG5cbmNvbnN0IGQgPSBkZWJ1ZygndGh4LmNvbnRyb2xzLmlucHV0cy5UYWJsZUlucHV0Jyk7XG5cbnR5cGUgRGVmYXVsdFRhYmxlVHlwZSA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG5pbnRlcmZhY2UgVGFibGVJbnB1dFByb3BzPEEgZXh0ZW5kcyBEZWZhdWx0VGFibGVUeXBlPiB7XG5cdG5hbWU6IHN0cmluZztcblx0dmFsdWVzOiBBW107XG5cdGNvbHVtbnM6IENvbHVtbjxBPltdO1xuXHRzZXRGaWVsZFZhbHVlOiAoZmllbGQ6IHN0cmluZywgdmFsdWU6IGFueSwgc2hvdWxkVmFsaWRhdGU/OiBib29sZWFuIHwgdW5kZWZpbmVkKSA9PiB2b2lkO1xuXHRjcmVhdGVSb3c6ICgpID0+IEE7XG5cdHRhYmxlUHJvcHM/OiBUYWJsZVByb3BzO1xuXHRoZWFkZXJSb3dQcm9wcz86IEhlYWRlckdyb3VwUHJvcEdldHRlcjxBPjtcblx0aGVhZGVyQ2VsbFByb3BzPzogSGVhZGVyUHJvcEdldHRlcjxBPjtcblx0Zm9vdGVyUm93UHJvcHM/OiBGb290ZXJHcm91cFByb3BHZXR0ZXI8QT47XG5cdGZvb3RlckNlbGxQcm9wcz86IEZvb3RlclByb3BHZXR0ZXI8QT47XG5cdGJvZHlQcm9wcz86IFRhYmxlQm9keVByb3BHZXR0ZXI8QT47XG5cdHJvd1Byb3BzPzogUm93UHJvcEdldHRlcjxBPjtcblx0Y2VsbFByb3BzPzogQ2VsbFByb3BHZXR0ZXI8QT47XG59XG5cbmludGVyZmFjZSBUYWJsZUlucHV0VGFibGVQcm9wczxBIGV4dGVuZHMgRGVmYXVsdFRhYmxlVHlwZT4gZXh0ZW5kcyBUYWJsZUlucHV0UHJvcHM8QT4ge1xuXHRhcnJheUhlbHBlcnM6IEZpZWxkQXJyYXlSZW5kZXJQcm9wcztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUYWJsZUNlbGxQcm9wczxEIGV4dGVuZHMgRGVmYXVsdFRhYmxlVHlwZSwgViA9IGFueT4gZXh0ZW5kcyBDZWxsUHJvcHM8RCwgVj4ge1xuXHRhcnJheUhlbHBlcnM6IEZpZWxkQXJyYXlSZW5kZXJQcm9wcztcblx0YWRkUm93OiAoKSA9PiB2b2lkO1xuXHR1cGRhdGVEYXRhOiAoaW5kZXg6IG51bWJlciwgaWQ6IHN0cmluZywgdmFsdWU6IFYpID0+IHZvaWQ7XG59XG5cbmZ1bmN0aW9uIFRhYmxlSW5wdXRUYWJsZTxBIGV4dGVuZHMgRGVmYXVsdFRhYmxlVHlwZT4ocHJvcHM6IFRhYmxlSW5wdXRUYWJsZVByb3BzPEE+KSB7XG5cdGNvbnN0IHtcblx0XHRuYW1lLFxuXHRcdGNvbHVtbnMsXG5cdFx0dmFsdWVzLFxuXHRcdGFycmF5SGVscGVycyxcblx0XHRzZXRGaWVsZFZhbHVlLFxuXHRcdGNyZWF0ZVJvdyxcblx0XHR0YWJsZVByb3BzLFxuXHRcdGhlYWRlclJvd1Byb3BzLFxuXHRcdGhlYWRlckNlbGxQcm9wcyxcblx0XHRib2R5UHJvcHMsXG5cdFx0cm93UHJvcHMsXG5cdFx0Y2VsbFByb3BzLFxuXHRcdGZvb3RlckNlbGxQcm9wcyxcblx0XHRmb290ZXJSb3dQcm9wcyxcblx0fSA9IHByb3BzO1xuXHRjb25zdCBjb2xzID0gdXNlTWVtbygoKSA9PiBjb2x1bW5zLCBbY29sdW1uc10pO1xuXHRjb25zdCB2YWxzID0gdXNlTWVtbygoKSA9PiB2YWx1ZXMsIFt2YWx1ZXNdKTtcblx0Y29uc3QgW2hvdmVyUm93LCBzZXRIb3ZlclJvd10gPSB1c2VTdGF0ZSgnJyk7XG5cblx0Ly8gUmVhY3QtVGFibGUgaG9va1xuXHRjb25zdCB7Z2V0VGFibGVQcm9wcywgZ2V0VGFibGVCb2R5UHJvcHMsIGhlYWRlckdyb3VwcywgcHJlcGFyZVJvdywgcm93cywgZm9vdGVyR3JvdXBzfSA9IHVzZVRhYmxlPEE+KHtcblx0XHRjb2x1bW5zOiBjb2xzLFxuXHRcdGRhdGE6IHZhbHMsXG5cdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdHVwZGF0ZURhdGEocm93SW5kZXgsIGNvbHVtbklkLCB2YWx1ZSkge1xuXHRcdFx0c2V0RmllbGRWYWx1ZShgJHtuYW1lfVske3Jvd0luZGV4fV0uJHtjb2x1bW5JZH1gLCB2YWx1ZSk7XG5cdFx0fSxcblx0XHRhZGRSb3coKSB7XG5cdFx0XHRhcnJheUhlbHBlcnMucHVzaChjcmVhdGVSb3coKSk7XG5cdFx0fSxcblx0XHRhcnJheUhlbHBlcnMsXG5cdH0pO1xuXG5cdC8vIEB0cy1pZ25vcmUgQ2hlY2sgZm9yIHRoZSBleGlzdGVuY2Ugb2YgYSBGb290ZXIgdGhhdCBpcyBub3QgdGhlIGRlZmF1bHQgZW1wdHlSZW5kZXJlcigpXG5cdGNvbnN0IGhhc0Zvb3RlciA9IGZvb3Rlckdyb3Vwcy5zb21lKGZnID0+IGZnLmhlYWRlcnMuc29tZShmZ2ggPT4gZmdoLkZvb3Rlci5uYW1lICE9PSAnZW1wdHlSZW5kZXJlcicpKTtcblxuXHQvLyBCdWlsZCBGb290ZXIgaWYgYW55IGZvb3RlciByZW5kZXJlcnMgZXhpc3Rcblx0Y29uc3QgZm9vdGVyID0gaGFzRm9vdGVyID8gKFxuXHRcdDxUYWJsZS5Gb290ZXI+XG5cdFx0XHR7Zm9vdGVyR3JvdXBzLm1hcChncm91cCA9PiAoXG5cdFx0XHRcdDxUYWJsZS5Sb3cgey4uLnsuLi5ncm91cC5nZXRGb290ZXJHcm91cFByb3BzKCksIC4uLmdyb3VwLmdldEZvb3Rlckdyb3VwUHJvcHMoZm9vdGVyUm93UHJvcHMpfX0+XG5cdFx0XHRcdFx0e2dyb3VwLmhlYWRlcnMubWFwKGNvbHVtbiA9PiAoXG5cdFx0XHRcdFx0XHQ8VGFibGUuSGVhZGVyQ2VsbCB7Li4uey4uLmNvbHVtbi5nZXRGb290ZXJQcm9wcygpLCAuLi5jb2x1bW4uZ2V0Rm9vdGVyUHJvcHMoZm9vdGVyQ2VsbFByb3BzKX19PlxuXHRcdFx0XHRcdFx0XHR7Y29sdW1uLnJlbmRlcignRm9vdGVyJyl9XG5cdFx0XHRcdFx0XHQ8L1RhYmxlLkhlYWRlckNlbGw+XG5cdFx0XHRcdFx0KSl9XG5cdFx0XHRcdDwvVGFibGUuUm93PlxuXHRcdFx0KSl9XG5cdFx0PC9UYWJsZS5Gb290ZXI+XG5cdCkgOiBudWxsO1xuXG5cdHJldHVybiAoXG5cdFx0PD5cblx0XHRcdDxUYWJsZSB7Li4uey4uLmdldFRhYmxlUHJvcHMoKSwgLi4uZ2V0VGFibGVQcm9wcyh0YWJsZVByb3BzKX19PlxuXHRcdFx0XHQ8VGFibGUuSGVhZGVyPlxuXHRcdFx0XHRcdHtoZWFkZXJHcm91cHMubWFwKGhlYWRlckdyb3VwID0+IChcblx0XHRcdFx0XHRcdDxUYWJsZS5Sb3cgey4uLnsuLi5oZWFkZXJHcm91cC5nZXRIZWFkZXJHcm91cFByb3BzKCksIC4uLmhlYWRlckdyb3VwLmdldEhlYWRlckdyb3VwUHJvcHMoaGVhZGVyUm93UHJvcHMpfX0+XG5cdFx0XHRcdFx0XHRcdHtoZWFkZXJHcm91cC5oZWFkZXJzLm1hcChjb2x1bW4gPT4gKFxuXHRcdFx0XHRcdFx0XHRcdDxUYWJsZS5IZWFkZXJDZWxsIHsuLi57Li4uY29sdW1uLmdldEhlYWRlclByb3BzKCksIC4uLmNvbHVtbi5nZXRIZWFkZXJQcm9wcyhoZWFkZXJDZWxsUHJvcHMpfX0+XG5cdFx0XHRcdFx0XHRcdFx0XHR7Y29sdW1uLnJlbmRlcignSGVhZGVyJyl9XG5cdFx0XHRcdFx0XHRcdFx0PC9UYWJsZS5IZWFkZXJDZWxsPlxuXHRcdFx0XHRcdFx0XHQpKX1cblx0XHRcdFx0XHRcdDwvVGFibGUuUm93PlxuXHRcdFx0XHRcdCkpfVxuXHRcdFx0XHQ8L1RhYmxlLkhlYWRlcj5cblx0XHRcdFx0PFRhYmxlLkJvZHkgey4uLnsuLi5nZXRUYWJsZUJvZHlQcm9wcygpLCAuLi5nZXRUYWJsZUJvZHlQcm9wcyhib2R5UHJvcHMpfX0+XG5cdFx0XHRcdFx0e3Jvd3MubWFwKHJvdyA9PiB7XG5cdFx0XHRcdFx0XHRwcmVwYXJlUm93KHJvdyk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHQ8VGFibGUuUm93XG5cdFx0XHRcdFx0XHRcdFx0ey4uLnsuLi5yb3cuZ2V0Um93UHJvcHMoKSwgLi4ucm93LmdldFJvd1Byb3BzKHJvd1Byb3BzKX19XG5cdFx0XHRcdFx0XHRcdFx0b25Nb3VzZUVudGVyPXsoKSA9PiBzZXRIb3ZlclJvdyhyb3cuaWQpfVxuXHRcdFx0XHRcdFx0XHRcdG9uTW91c2VMZWF2ZT17KCkgPT4gc2V0SG92ZXJSb3coJycpfVxuXHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0e3Jvdy5jZWxscy5tYXAoY2VsbCA9PiAoXG5cdFx0XHRcdFx0XHRcdFx0XHQ8VGFibGUuQ2VsbCB7Li4uey4uLmNlbGwuZ2V0Q2VsbFByb3BzKCksIC4uLmNlbGwuZ2V0Q2VsbFByb3BzKGNlbGxQcm9wcyl9fT57Y2VsbC5yZW5kZXIoJ0NlbGwnLCB7aG92ZXJSb3d9KX08L1RhYmxlLkNlbGw+XG5cdFx0XHRcdFx0XHRcdFx0KSl9XG5cdFx0XHRcdFx0XHRcdDwvVGFibGUuUm93PlxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9KX1cblx0XHRcdFx0PC9UYWJsZS5Cb2R5PlxuXHRcdFx0XHR7Zm9vdGVyfVxuXHRcdFx0PC9UYWJsZT5cblx0XHQ8Lz5cblx0KTtcbn1cblxuLyoqXG4gKiBDYW4gYmUgdXNlZCBpbiBhIFRGb3JtIGFzIGEgVGFibGUgSW5wdXQuXG4gKiBAcGFyYW0gcHJvcHNcbiAqIEBjb25zdHJ1Y3RvclxuICovXG5leHBvcnQgZnVuY3Rpb24gVGFibGVJbnB1dDxBIGV4dGVuZHMgRGVmYXVsdFRhYmxlVHlwZT4ocHJvcHM6IFRhYmxlSW5wdXRQcm9wczxBPikge1xuXHRyZXR1cm4gPEZpZWxkQXJyYXkgbmFtZT17cHJvcHMubmFtZX0gcmVuZGVyPXthcnJheUhlbHBlcnMgPT4gPFRhYmxlSW5wdXRUYWJsZSBhcnJheUhlbHBlcnM9e2FycmF5SGVscGVyc30gey4uLnByb3BzfSAvPn0gLz47XG59XG4iLCJpbXBvcnQgdHlwZSB7VGFibGVDZWxsUHJvcHN9IGZyb20gJy4vVGFibGVJbnB1dCc7XG5cbmV4cG9ydCB0eXBlIEFkZFJvd09uVGFiSWY8RCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBWID0gYW55PiA9IChwcm9wczogVGFibGVDZWxsUHJvcHM8RCwgVj4sIG5ld1ZhbHVlOiBWKSA9PiBib29sZWFuO1xuXG4vKipcbiAqIFVzZSBhcyBhbiBvbktleURvd24gZXZlbnQgaGFuZGxlciB0byBhZGQgYSBuZXcgcm93IHdoZW4gdGFiIGlzIHByZXNzZWQsIGRlcGVuZGluZyBvbiBjZXJ0YWluIGNyaXRlcmlhLlxuICogQHBhcmFtIGV2ZW50XG4gKiBAcGFyYW0gdmFsdWVcbiAqIEBwYXJhbSBwcm9wc1xuICogQHBhcmFtIGFkZFJvd09uVGFiSWZcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZFJvd09uVGFiPEQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgViA9IGFueT4oXG5cdGV2ZW50OiBLZXlib2FyZEV2ZW50LFxuXHR2YWx1ZTogVixcblx0cHJvcHM6IFRhYmxlQ2VsbFByb3BzPEQsIFY+LFxuXHRhZGRSb3dPblRhYklmPzogQWRkUm93T25UYWJJZjxELCBWPixcbikge1xuXHRjb25zdCB7XG5cdFx0cm93OiB7aW5kZXg6IHJvd0luZGV4fSxcblx0XHRyb3dzOiB7bGVuZ3RoOiByb3dzTGVuZ3RofSxcblx0XHRhZGRSb3csXG5cdH0gPSBwcm9wcztcblxuXHRpZiAoZXZlbnQua2V5ID09PSAnVGFiJyAmJiAhZXZlbnQuc2hpZnRLZXkgJiYgcm93SW5kZXggKyAxID09PSByb3dzTGVuZ3RoICYmIChhZGRSb3dPblRhYklmID8gYWRkUm93T25UYWJJZihwcm9wcywgdmFsdWUpIDogZmFsc2UpKSB7XG5cdFx0YWRkUm93KCk7XG5cdH1cbn1cbiIsImV4cG9ydCB7VGFibGVJbnB1dH0gZnJvbSAnLi9UYWJsZUlucHV0JztcbmV4cG9ydCB7TW9uZXlDZWxsfSBmcm9tICcuL01vbmV5Q2VsbCc7XG5leHBvcnQge01vbmV5RWRpdENlbGx9IGZyb20gJy4vTW9uZXlFZGl0Q2VsbCc7XG5leHBvcnQge01vbmV5U3VtRm9vdGVyfSBmcm9tICcuL01vbmV5U3VtRm9vdGVyJztcbmV4cG9ydCB7U3RyaW5nRWRpdENlbGx9IGZyb20gJy4vU3RyaW5nRWRpdENlbGwnO1xuZXhwb3J0IHtEcm9wZG93bkNlbGx9IGZyb20gJy4vRHJvcGRvd25DZWxsJztcbmV4cG9ydCB7SG92ZXJDZWxsfSBmcm9tICcuL0hvdmVyQ2VsbCc7XG5leHBvcnQge2FkZFJvd09uVGFifSBmcm9tICcuL2FkZFJvd09uVGFiJztcbmV4cG9ydCB0eXBlIHtBZGRSb3dPblRhYklmfSBmcm9tICcuL2FkZFJvd09uVGFiJztcbiIsImltcG9ydCB7dG9Nb25leX0gZnJvbSAnQHRoeC9tb25leSc7XG4vKiBlc2xpbnQtZGlzYWJsZSBqc3gtYTExeS9uby1zdGF0aWMtZWxlbWVudC1pbnRlcmFjdGlvbnMgKi9cbmltcG9ydCBkZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5pbXBvcnQgTW9uZXksIHtDdXJyZW5jeVN0cmluZ30gZnJvbSAnanMtbW9uZXknO1xuaW1wb3J0IFJlYWN0LCB7U3ludGhldGljRXZlbnQsIHVzZUNhbGxiYWNrfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQge0Ryb3Bkb3duLCBEcm9wZG93blByb3BzLCBJbnB1dCwgSW5wdXRQcm9wcywgTGFiZWx9IGZyb20gJ3NlbWFudGljLXVpLXJlYWN0JztcbmltcG9ydCB0eXBlIHtNb25leUlucHV0UHJvcHN9IGZyb20gJy4uL01vbmV5SW5wdXQnO1xuaW1wb3J0IHt1c2VNb25leUlucHV0fSBmcm9tICcuLi91c2VNb25leUlucHV0JztcblxuY29uc3QgZCA9IGRlYnVnKCd0aHguY29udHJvbHMubW9uZXkuTW9uZXlDdXJyZW5jeUlucHV0Jyk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTW9uZXlDdXJyZW5jeUlucHV0UHJvcHMgZXh0ZW5kcyBNb25leUlucHV0UHJvcHMge1xuXHRjdXJyZW5jaWVzPzoge2tleTogc3RyaW5nOyB2YWx1ZTogc3RyaW5nOyB0ZXh0OiBzdHJpbmd9W107XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBNb25leUN1cnJlbmN5SW5wdXQocHJvcHM6IE1vbmV5Q3VycmVuY3lJbnB1dFByb3BzICYgT21pdDxJbnB1dFByb3BzLCAnb25DaGFuZ2UnPikge1xuXHRjb25zdCB7bmFtZSwgb25CbHVyLCBwcmVmaXgsIGRlZmF1bHRDdXJyZW5jeSwgb25DaGFuZ2UsIHNob3dQcmVmaXgsIHZhbHVlLCB3aG9sZU51bWJlciwgY3VycmVuY2llcywgbG9ja2VkLCAuLi5yZXN0fSA9IHByb3BzO1xuXG5cdGNvbnN0IG9wdGlvbnMgPSBjdXJyZW5jaWVzIHx8IFtcblx0XHR7a2V5OiAnQ0FEJywgdGV4dDogJ0NBRCcsIHZhbHVlOiAnQ0FEJ30sXG5cdFx0e2tleTogJ1VTRCcsIHRleHQ6ICdVU0QnLCB2YWx1ZTogJ1VTRCd9LFxuXHRdO1xuXG5cdGNvbnN0IGhhbmRsZUNoYW5nZSA9IHVzZUNhbGxiYWNrKFxuXHRcdCh2PzogTW9uZXkpID0+IHtcblx0XHRcdGlmICghdikge1xuXHRcdFx0XHRvbkNoYW5nZSAmJiBvbkNoYW5nZSh0b01vbmV5KDAsIGRlZmF1bHRDdXJyZW5jeSkpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b25DaGFuZ2UgJiYgb25DaGFuZ2Uodik7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRbZGVmYXVsdEN1cnJlbmN5LCBvbkNoYW5nZV0sXG5cdCk7XG5cblx0Y29uc3QgdmFsID0gISh2YWx1ZSBpbnN0YW5jZW9mIE1vbmV5KSAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkID8gdG9Nb25leSh2YWx1ZSkgOiB2YWx1ZTtcblxuXHRjb25zdCBbaW5wdXRFbGVtZW50XSA9IHVzZU1vbmV5SW5wdXQoe29uQ2hhbmdlOiBoYW5kbGVDaGFuZ2UsIHByZWZpeCwgc2hvd1ByZWZpeCwgdmFsdWU6IHZhbCwgd2hvbGVOdW1iZXJ9KTtcblxuXHRjb25zdCBoYW5kbGVEcm9wZG93bkNoYW5nZSA9IHVzZUNhbGxiYWNrKFxuXHRcdChlOiBTeW50aGV0aWNFdmVudDxIVE1MRWxlbWVudCwgRXZlbnQ+LCB2OiBEcm9wZG93blByb3BzKSA9PiB7XG5cdFx0XHRjb25zdCBuZXdDdXJyZW5jeUNvZGUgPSB2LnZhbHVlIGFzIEN1cnJlbmN5U3RyaW5nO1xuXHRcdFx0Y29uc3QgbmV3TW9uZXkgPSBuZXcgTW9uZXkodmFsdWU/LmFtb3VudCB8fCAwLCBuZXdDdXJyZW5jeUNvZGUpO1xuXG5cdFx0XHRkKCdDaGFuZ2UnLCB2YWx1ZSwgbmV3Q3VycmVuY3lDb2RlLCBuZXdNb25leSk7XG5cdFx0XHQvLyBzZXRJbnB1dFZhbHVlKG5ld01vbmV5KTtcblx0XHRcdG9uQ2hhbmdlICYmIG9uQ2hhbmdlKG5ld01vbmV5KTtcblx0XHRcdC8vIGZvcmNlVXBkYXRlKCk7XG5cdFx0fSxcblx0XHRbb25DaGFuZ2UsIHZhbHVlXSxcblx0KTtcblxuXHRjb25zdCBjdXJyZW5jeUNvZGUgPSB2YWx1ZT8uY3VycmVuY3kgfHwgZGVmYXVsdEN1cnJlbmN5Py5jb2RlIHx8ICdDQUQnO1xuXHRkKCdSZW5kZXInLCB2YWx1ZSwgY3VycmVuY3lDb2RlKTtcblxuXHRyZXR1cm4gKFxuXHRcdDxJbnB1dCB7Li4ucmVzdH0gbGFiZWxQb3NpdGlvbj1cInJpZ2h0XCI+XG5cdFx0XHQ8aW5wdXQgbmFtZT17bmFtZX0gcmVmPXtpbnB1dEVsZW1lbnR9IG9uQmx1cj17b25CbHVyfSByZWFkT25seT17bG9ja2VkfSAvPlxuXHRcdFx0PExhYmVsIGJhc2ljPlxuXHRcdFx0XHQ8RHJvcGRvd24gZGlzYWJsZWQ9e2xvY2tlZH0gb3B0aW9ucz17b3B0aW9uc30gdmFsdWU9e2N1cnJlbmN5Q29kZX0gb25DaGFuZ2U9e2hhbmRsZURyb3Bkb3duQ2hhbmdlfSAvPlxuXHRcdFx0PC9MYWJlbD5cblx0XHQ8L0lucHV0PlxuXHQpO1xufVxuIiwiZXhwb3J0IHtNb25leUN1cnJlbmN5SW5wdXR9IGZyb20gJy4vTW9uZXlDdXJyZW5jeUlucHV0JztcbmV4cG9ydCB0eXBlIHtNb25leUN1cnJlbmN5SW5wdXRQcm9wc30gZnJvbSAnLi9Nb25leUN1cnJlbmN5SW5wdXQnO1xuIiwiaW1wb3J0IHt0b01vbmV5fSBmcm9tICdAdGh4L21vbmV5Jztcbi8qIGVzbGludC1kaXNhYmxlIGpzeC1hMTF5L25vLXN0YXRpYy1lbGVtZW50LWludGVyYWN0aW9ucyAqL1xuaW1wb3J0IGRlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCBNb25leSwge0N1cnJlbmN5LCBNb25leU9iamVjdH0gZnJvbSAnanMtbW9uZXknO1xuaW1wb3J0IFJlYWN0LCB7dXNlQ2FsbGJhY2t9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7SW5wdXQsIElucHV0UHJvcHN9IGZyb20gJ3NlbWFudGljLXVpLXJlYWN0JztcbmltcG9ydCB7dXNlTW9uZXlJbnB1dH0gZnJvbSAnLi4vdXNlTW9uZXlJbnB1dCc7XG5cbmNvbnN0IGQgPSBkZWJ1ZygndGh4LmNvbnRyb2xzLm1vbmV5Lk1vbmV5SW5wdXQnKTtcblxuZXhwb3J0IGludGVyZmFjZSBNb25leUlucHV0UHJvcHMge1xuXHRuYW1lPzogc3RyaW5nO1xuXHRvbkNoYW5nZT86ICh2YWx1ZTogTW9uZXkpID0+IHZvaWQ7XG5cdHZhbHVlPzogTW9uZXkgfCBNb25leU9iamVjdDtcblx0ZGVmYXVsdEN1cnJlbmN5PzogQ3VycmVuY3k7IC8vIERlZmF1bHRzIHRvIE1vbmV5LkNBRFxuXHRvbkJsdXI/OiAoZXY6IGFueSkgPT4gdm9pZDtcblx0cHJlZml4Pzogc3RyaW5nOyAvLyBEZWZhdWx0cyB0byBjdXJyZW5jeSBzeW1ib2xcblx0c2hvd1ByZWZpeD86IGJvb2xlYW47IC8vIERlZmF1bHRzIHRvIGZhbHNlXG5cdGxvY2tlZD86IGJvb2xlYW47IC8vIERlZmF1bHRzIHRvIGZhbHNlXG5cdHdob2xlTnVtYmVyPzogYm9vbGVhbjsgLy8gRGVmYXVsdHMgdG8gZmFsc2Vcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE1vbmV5SW5wdXQocHJvcHM6IE1vbmV5SW5wdXRQcm9wcyAmIE9taXQ8SW5wdXRQcm9wcywgJ29uQ2hhbmdlJz4pIHtcblx0Y29uc3Qge25hbWUsIG9uQmx1ciwgbG9ja2VkLCBwcmVmaXgsIGRlZmF1bHRDdXJyZW5jeSwgb25DaGFuZ2UsIHNob3dQcmVmaXgsIHZhbHVlLCB3aG9sZU51bWJlciwgLi4ucmVzdH0gPSBwcm9wcztcblxuXHRjb25zdCBoYW5kbGVDaGFuZ2UgPSB1c2VDYWxsYmFjayhcblx0XHQodj86IE1vbmV5KSA9PiB7XG5cdFx0XHRpZiAoIXYpIHtcblx0XHRcdFx0b25DaGFuZ2UgJiYgb25DaGFuZ2UodG9Nb25leSgwLCBkZWZhdWx0Q3VycmVuY3kpKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG9uQ2hhbmdlICYmIG9uQ2hhbmdlKHYpO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0W2RlZmF1bHRDdXJyZW5jeSwgb25DaGFuZ2VdLFxuXHQpO1xuXG5cdGNvbnN0IHZhbCA9ICEodmFsdWUgaW5zdGFuY2VvZiBNb25leSkgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCA/IHRvTW9uZXkodmFsdWUpIDogdmFsdWU7XG5cblx0Y29uc3QgW2lucHV0RWxlbWVudF0gPSB1c2VNb25leUlucHV0KHtvbkNoYW5nZTogaGFuZGxlQ2hhbmdlLCBwcmVmaXgsIHNob3dQcmVmaXgsIHZhbHVlOiB2YWwsIHdob2xlTnVtYmVyfSk7XG5cblx0cmV0dXJuIChcblx0XHQ8SW5wdXQgey4uLnJlc3R9PlxuXHRcdFx0PGlucHV0IG5hbWU9e25hbWV9IHJlZj17aW5wdXRFbGVtZW50fSBvbkJsdXI9e29uQmx1cn0gcmVhZE9ubHk9e2xvY2tlZH0gLz5cblx0XHQ8L0lucHV0PlxuXHQpO1xufVxuIiwiZXhwb3J0IHtNb25leUlucHV0fSBmcm9tICcuL01vbmV5SW5wdXQnO1xuZXhwb3J0IHR5cGUge01vbmV5SW5wdXRQcm9wc30gZnJvbSAnLi9Nb25leUlucHV0JztcbiIsImltcG9ydCB7dG9Nb25leX0gZnJvbSAnQHRoeC9tb25leSc7XG5pbXBvcnQgZGVidWcgZnJvbSAnZGVidWcnO1xuaW1wb3J0IElucHV0bWFzayBmcm9tICdpbnB1dG1hc2snO1xuaW1wb3J0IE1vbmV5IGZyb20gJ2pzLW1vbmV5JztcbmltcG9ydCB7TXV0YWJsZVJlZk9iamVjdCwgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlUmVmfSBmcm9tICdyZWFjdCc7XG5cbmNvbnN0IGQgPSBkZWJ1ZygndGh4LmNvbnRyb2xzLm1vbmV5LnVzZU1vbmV5SW5wdXQnKTtcblxuaW50ZXJmYWNlIFVzZU1vbmV5SW5wdXRQcm9wcyB7XG5cdHZhbHVlPzogTW9uZXk7XG5cdG9uQ2hhbmdlPzogKHZhbHVlPzogTW9uZXkpID0+IHZvaWQ7XG5cdG9uU2V0PzogKHZhbHVlPzogTW9uZXkpID0+IHZvaWQ7XG5cdC8vIGRlZmF1bHRDdXJyZW5jeT86IEN1cnJlbmN5OyAvLyBEZWZhdWx0cyB0byBNb25leS5DQURcblx0cHJlZml4Pzogc3RyaW5nOyAvLyBEZWZhdWx0cyB0byBjdXJyZW5jeSBzeW1ib2xcblx0c2hvd1ByZWZpeD86IGJvb2xlYW47IC8vIERlZmF1bHRzIHRvIGZhbHNlXG5cdHdob2xlTnVtYmVyPzogYm9vbGVhbjsgLy8gRGVmYXVsdHMgdG8gZmFsc2Vcbn1cblxudHlwZSBTZXRWYWx1ZUZuID0gKHZhbHVlPzogTW9uZXkpID0+IHZvaWQ7XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VNb25leUlucHV0KHByb3BzOiBVc2VNb25leUlucHV0UHJvcHMpOiBbTXV0YWJsZVJlZk9iamVjdDxIVE1MSW5wdXRFbGVtZW50IHwgbnVsbD4sIFNldFZhbHVlRm5dIHtcblx0Y29uc3Qge3ZhbHVlLCBvbkNoYW5nZSwgb25TZXQsIHNob3dQcmVmaXgsIHByZWZpeCwgd2hvbGVOdW1iZXJ9ID0gcHJvcHM7XG5cblx0Y29uc3QgaW5wdXRFbGVtZW50ID0gdXNlUmVmPEhUTUxJbnB1dEVsZW1lbnQgfCBudWxsPihudWxsKTtcblx0Y29uc3QgbWFza0luc3RhbmNlID0gdXNlUmVmPElucHV0bWFzay5JbnN0YW5jZSB8IG51bGw+KG51bGwpO1xuXG5cdC8vIHNldCB0aGUgYWRqQ3VycmVuY3lcblx0Ly8gbGV0IGFkakN1cnJlbmN5ID0gTW9uZXkuQ0FEO1xuXHQvLyBpZiAodmFsdWU/LmN1cnJlbmN5ICYmIE1vbmV5W3ZhbHVlPy5jdXJyZW5jeV0pIGFkakN1cnJlbmN5ID0gTW9uZXlbdmFsdWU/LmN1cnJlbmN5XTtcblx0Ly8gaWYgKGRlZmF1bHRDdXJyZW5jeSkgYWRqQ3VycmVuY3kgPSBkZWZhdWx0Q3VycmVuY3k7XG5cdGNvbnN0IGN1cnJlbmN5Q29kZSA9IHZhbHVlPy5jdXJyZW5jeSB8fCAnQ0FEJztcblxuXHR1c2VFZmZlY3QoKCkgPT4ge1xuXHRcdGlmICghaW5wdXRFbGVtZW50LmN1cnJlbnQpIHRocm93IG5ldyBFcnJvcignQ291bGQgbm90IGdldCBpbnB1dCBlbGVtZW50Jyk7XG5cblx0XHRkKCdDcmVhdGluZyBpbnB1dCBtYXNrIGluc3RhbmNlJyk7XG5cdFx0bWFza0luc3RhbmNlLmN1cnJlbnQgPSBuZXcgSW5wdXRtYXNrKHtcblx0XHRcdGFsaWFzOiAnbnVtZXJpYycsXG5cdFx0XHRncm91cFNlcGFyYXRvcjogJywnLFxuXHRcdFx0ZGlnaXRzOiB3aG9sZU51bWJlciA/ICcwJyA6IE1vbmV5W2N1cnJlbmN5Q29kZV0uZGVjaW1hbF9kaWdpdHMudG9TdHJpbmcoKSxcblx0XHRcdGRpZ2l0c09wdGlvbmFsOiBmYWxzZSxcblx0XHRcdHByZWZpeDogc2hvd1ByZWZpeCA/IHByZWZpeCB8fCBNb25leVtjdXJyZW5jeUNvZGVdLnN5bWJvbCA6IHVuZGVmaW5lZCxcblx0XHRcdHBsYWNlaG9sZGVyOiAnMCcsXG5cdFx0XHRhdXRvVW5tYXNrOiB0cnVlLFxuXHRcdFx0b25jb21wbGV0ZSgpIHtcblx0XHRcdFx0aWYgKG9uQ2hhbmdlKSB7XG5cdFx0XHRcdFx0aWYgKGlucHV0RWxlbWVudC5jdXJyZW50Py52YWx1ZSkge1xuXHRcdFx0XHRcdFx0b25DaGFuZ2UodG9Nb25leShpbnB1dEVsZW1lbnQuY3VycmVudD8udmFsdWUsIGN1cnJlbmN5Q29kZSkpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRvbkNoYW5nZSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdG9uY2xlYXJlZCgpIHtcblx0XHRcdFx0aWYgKG9uQ2hhbmdlKSBvbkNoYW5nZSgpO1xuXHRcdFx0fSxcblx0XHRcdG9uaW5jb21wbGV0ZSgpIHtcblx0XHRcdFx0aWYgKG9uQ2hhbmdlKSBvbkNoYW5nZSh0b01vbmV5KGlucHV0RWxlbWVudC5jdXJyZW50Py52YWx1ZSwgY3VycmVuY3lDb2RlKSk7XG5cdFx0XHR9LFxuXHRcdH0pO1xuXHRcdG1hc2tJbnN0YW5jZS5jdXJyZW50Lm1hc2soaW5wdXRFbGVtZW50LmN1cnJlbnQpO1xuXG5cdFx0cmV0dXJuICgpID0+IHtcblx0XHRcdGlmIChtYXNrSW5zdGFuY2UuY3VycmVudCkge1xuXHRcdFx0XHRkKCdDbGVhbmluZyB1cCBpbnB1dCBtYXNrIGluc3RhbmNlJyk7XG5cdFx0XHRcdG1hc2tJbnN0YW5jZS5jdXJyZW50LnJlbW92ZSgpO1xuXHRcdFx0XHRtYXNrSW5zdGFuY2UuY3VycmVudCA9IG51bGw7XG5cdFx0XHR9XG5cdFx0fTtcblx0fSwgW2N1cnJlbmN5Q29kZSwgcHJlZml4LCBzaG93UHJlZml4LCB3aG9sZU51bWJlcl0pO1xuXG5cdGNvbnN0IHNldFZhbCA9IHVzZUNhbGxiYWNrPFNldFZhbHVlRm4+KFxuXHRcdCh2PzogTW9uZXkpID0+IHtcblx0XHRcdGlmIChpbnB1dEVsZW1lbnQuY3VycmVudCkge1xuXHRcdFx0XHRkKCdWYWx1ZSBpcyBiZWluZyBzZXQ6Jywgdik7XG5cdFx0XHRcdGlmICh2KSB7XG5cdFx0XHRcdFx0aW5wdXRFbGVtZW50LmN1cnJlbnQudmFsdWUgPSB2LnRvRGVjaW1hbCgpLnRvU3RyaW5nKCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0aW5wdXRFbGVtZW50LmN1cnJlbnQudmFsdWUgPSAnJztcblx0XHRcdFx0fVxuXHRcdFx0XHRvblNldCAmJiBvblNldCh2KTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdFtvblNldF0sXG5cdCk7XG5cblx0Ly8gSWYgd2UgY2hhbmdlIHRoZSB2YWx1ZSBwcm9wIHdlIG5lZWQgdG8gc3luYyB0aGUgRE9NIHZhbHVlIHRvIGRpc3BsYXkgdGhlIG5ldyB2YWx1ZVxuXHR1c2VFZmZlY3QoKCkgPT4ge1xuXHRcdGNvbnN0IHdoYXRDdXJyZW50bHlJc0Rpc3BsYXllZCA9IGlucHV0RWxlbWVudC5jdXJyZW50Py52YWx1ZSB8fCAnJzsgLy8gc3RyaW5nIHwgdW5kZWZcblx0XHRjb25zdCB3aGF0V2VBcmVTZXR0aW5nID0gdmFsdWUgPyB2YWx1ZS50b1N0cmluZygpIDogJyc7IC8vIG1vbmV5IHwgdW5kZWZcblxuXHRcdGlmICh3aGF0Q3VycmVudGx5SXNEaXNwbGF5ZWQgIT09IHdoYXRXZUFyZVNldHRpbmcpIHtcblx0XHRcdHNldFZhbCh2YWx1ZSk7XG5cdFx0fVxuXHR9LCBbc2V0VmFsLCB2YWx1ZV0pO1xuXG5cdHJldHVybiBbaW5wdXRFbGVtZW50LCBzZXRWYWxdO1xufVxuIiwiaW1wb3J0IGRlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCBSZWFjdCwge0NoaWxkcmVufSBmcm9tICdyZWFjdCc7XG5pbXBvcnQge3VzZVN0ZXB9IGZyb20gJy4vdXNlU3RlcCc7XG5cbmNvbnN0IGQgPSBkZWJ1ZygndGh4LmNvbnRyb2xzLnN0ZXAuRm9ybVN0ZXAnKTtcblxuaW50ZXJmYWNlIEZvcm1TdGVwUHJvcHMge1xuXHRjaGlsZHJlbjogSlNYLkVsZW1lbnQ7XG5cdHRpdGxlPzogc3RyaW5nO1xuXHRzdGVwS2V5OiBzdHJpbmc7XG5cdGhpZGRlbj86IGJvb2xlYW4gfCAoKHN0YXRlOiBhbnksIHN0ZXA6IG51bWJlcikgPT4gYm9vbGVhbik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBGb3JtU3RlcChwcm9wczogRm9ybVN0ZXBQcm9wcykge1xuXHRjb25zdCBbc3RhdGUsIGhhbmRsZVN1Ym1pdF0gPSB1c2VTdGVwKCk7XG5cdGNvbnN0IHZhbHVlcyA9IHN0YXRlW3Byb3BzLnN0ZXBLZXldIHx8IHt9O1xuXG5cdGNvbnN0IGZvcm0gPSBSZWFjdC5jbG9uZUVsZW1lbnQoQ2hpbGRyZW4ub25seShwcm9wcy5jaGlsZHJlbiksIHtcblx0XHR2YWx1ZXM6IHZhbHVlcyB8fCB7fSxcblx0XHRvblN1Ym1pdDogKHZhbHM6IHVua25vd24pID0+IGhhbmRsZVN1Ym1pdCh2YWxzLCBwcm9wcy5zdGVwS2V5KSxcblx0fSk7XG5cblx0cmV0dXJuIChcblx0XHQ8PlxuXHRcdFx0PGgxPntwcm9wcy50aXRsZX08L2gxPlxuXHRcdFx0e2Zvcm19XG5cdFx0PC8+XG5cdCk7XG59XG4iLCJpbXBvcnQgZGVidWcgZnJvbSAnZGVidWcnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuY29uc3QgZCA9IGRlYnVnKCd0aHguY29udHJvbHMuc3RlcC5TdGVwJyk7XG5cbmludGVyZmFjZSBTdGVwUHJvcHMge1xuXHRjaGlsZHJlbj86IEpTWC5FbGVtZW50IHwgSlNYLkVsZW1lbnRbXTtcblx0dGl0bGU/OiBzdHJpbmc7XG5cdHN0ZXA/OiBudW1iZXI7XG5cdGhpZGRlbj86IGJvb2xlYW4gfCAoKHN0YXRlOiBhbnksIHN0ZXA6IG51bWJlcikgPT4gYm9vbGVhbik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBTdGVwKHByb3BzOiBTdGVwUHJvcHMpIHtcblx0cmV0dXJuIChcblx0XHQ8PlxuXHRcdFx0PGgxPntwcm9wcy50aXRsZX08L2gxPlxuXHRcdFx0e3Byb3BzLmNoaWxkcmVufVxuXHRcdDwvPlxuXHQpO1xufVxuIiwiaW1wb3J0IGRlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCBSZWFjdCwge3VzZVN0YXRlLCBDaGlsZHJlbn0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtQcm9tcHR9IGZyb20gJ3JlYWN0LXJvdXRlci1kb20nO1xuaW1wb3J0IHtHcmlkLCBTdGVwIGFzIFNlbWFudGljU3RlcH0gZnJvbSAnc2VtYW50aWMtdWktcmVhY3QnO1xuaW1wb3J0IHtGb3JtU3RlcH0gZnJvbSAnLi9Gb3JtU3RlcCc7XG5pbXBvcnQge1N0ZXB9IGZyb20gJy4vU3RlcCc7XG5pbXBvcnQge1N0ZXBDb250ZXh0fSBmcm9tICcuL3N0ZXBDb250ZXh0JztcblxuY29uc3QgZCA9IGRlYnVnKCd0aHguY29udHJvbHMuc3RlcC5TdGVwUHJvdmlkZXInKTtcblxuaW50ZXJmYWNlIFN0ZXBQcm92aWRlclByb3BzIHtcblx0Y2hpbGRyZW46IChKU1guRWxlbWVudCB8IG51bGwgfCBmYWxzZSlbXTtcblx0b25TdWJtaXQ6ICh2YWx1ZXM6IGFueSkgPT4gdm9pZDtcblx0dmFsdWVzPzogYW55O1xuXHR3YXJuT25SZXJvdXRlPzogYm9vbGVhbjtcblx0dmVydGljYWw/OiBib29sZWFuO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gU3RlcFByb3ZpZGVyKHByb3BzOiBTdGVwUHJvdmlkZXJQcm9wcykge1xuXHRjb25zdCBbc3RhdGUsIHNldFN0YXRlXSA9IHVzZVN0YXRlKHByb3BzLnZhbHVlcyB8fCB7fSk7XG5cdGNvbnN0IFtjdXJyZW50U3RlcCwgc2V0Q3VycmVudFN0ZXBdID0gdXNlU3RhdGUoMCk7XG5cdGNvbnN0IFtpc1N1Ym1pdHRpbmcsIHNldElzU3VibWl0dGluZ10gPSB1c2VTdGF0ZShmYWxzZSk7XG5cblx0Y29uc3QgdGl0bGVzOiBzdHJpbmdbXSA9IFtdO1xuXHRjb25zdCBjaGlsZHJlbjogSlNYLkVsZW1lbnRbXSA9IFtdO1xuXG5cdENoaWxkcmVuLmZvckVhY2gocHJvcHM/LmNoaWxkcmVuLCAoY2hpbGQsIGluZGV4KSA9PiB7XG5cdFx0aWYgKCFjaGlsZCkgcmV0dXJuO1xuXHRcdGlmIChjaGlsZD8udHlwZSAhPT0gU3RlcCAmJiBjaGlsZD8udHlwZSAhPT0gRm9ybVN0ZXApIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihgQ2FuIG5vdCByZW5kZXIgJyR7Y2hpbGQ/LnR5cGV9JyBhcyBjaGlsZCBvZiAnU3RlcFByb3ZpZGVyJy4gTXVzdCBiZSBvZiB0eXBlICdTdGVwJyBvciAnRm9ybVN0ZXAnYCk7XG5cdFx0fVxuXHRcdGlmIChjaGlsZC5wcm9wcy5oaWRkZW4pIHtcblx0XHRcdGlmICh0eXBlb2YgY2hpbGQucHJvcHMuaGlkZGVuID09PSAnZnVuY3Rpb24nICYmICFjaGlsZC5wcm9wcy5oaWRkZW4oc3RhdGUsIGluZGV4KSkge1xuXHRcdFx0XHR0aXRsZXMucHVzaChjaGlsZD8ucHJvcHM/LnRpdGxlIHx8ICcnKTtcblx0XHRcdFx0Y2hpbGRyZW4ucHVzaChSZWFjdC5jbG9uZUVsZW1lbnQoY2hpbGQsIHtzdGVwOiBpbmRleCwga2V5OiBjaGlsZD8ua2V5IHx8IGluZGV4LnRvU3RyaW5nKCl9KSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRpdGxlcy5wdXNoKGNoaWxkPy5wcm9wcz8udGl0bGUgfHwgJycpO1xuXHRcdFx0Y2hpbGRyZW4ucHVzaChSZWFjdC5jbG9uZUVsZW1lbnQoY2hpbGQsIHtzdGVwOiBpbmRleCwga2V5OiBjaGlsZD8ua2V5IHx8IGluZGV4LnRvU3RyaW5nKCl9KSk7XG5cdFx0fVxuXHR9KTtcblxuXHRjb25zdCBvbk5hdmlnYXRlID0gKCkgPT4gJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBlbmQgdGhpcyBwcm9jZXNzPyBBbGwgdGhlIGVudGVyZWQgZGF0YSB3aWxsIGJlIGxvc3QhJztcblxuXHRjb25zdCBoYW5kbGVTdWJtaXQgPSAodmFsdWVzOiBhbnksIHN0ZXBLZXk6IHN0cmluZykgPT4ge1xuXHRcdGlmIChjdXJyZW50U3RlcCArIDEgPT09IGNoaWxkcmVuPy5sZW5ndGgpIHtcblx0XHRcdHNldFN0YXRlKHsuLi5zdGF0ZSwgW3N0ZXBLZXldOiB2YWx1ZXN9KTtcblx0XHRcdHNldElzU3VibWl0dGluZyh0cnVlKTtcblx0XHRcdHByb3BzLm9uU3VibWl0KHsuLi5zdGF0ZSwgW3N0ZXBLZXldOiB2YWx1ZXN9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0c2V0U3RhdGUoey4uLnN0YXRlLCBbc3RlcEtleV06IHZhbHVlc30pO1xuXHRcdFx0c2V0Q3VycmVudFN0ZXAoY3VycmVudFN0ZXAgKyAxKTtcblx0XHR9XG5cdH07XG5cblx0aWYgKHByb3BzLnZlcnRpY2FsKSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxTdGVwQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17e3N0YXRlLCBoYW5kbGVTdWJtaXR9fT5cblx0XHRcdFx0e3Byb3BzLndhcm5PblJlcm91dGUgJiYgPFByb21wdCBtZXNzYWdlPXtvbk5hdmlnYXRlfSB3aGVuPXshaXNTdWJtaXR0aW5nfSAvPn1cblx0XHRcdFx0PEdyaWQgZGl2aWRlZCBzdGFja2FibGU+XG5cdFx0XHRcdFx0PEdyaWQuUm93PlxuXHRcdFx0XHRcdFx0PEdyaWQuQ29sdW1uIHdpZHRoPXszfT5cblx0XHRcdFx0XHRcdFx0PFNlbWFudGljU3RlcC5Hcm91cCBvcmRlcmVkIHNpemU9XCJtaW5pXCIgdmVydGljYWwgd2lkdGhzPXsxfT5cblx0XHRcdFx0XHRcdFx0XHR7dGl0bGVzPy5tYXAoKHRpdGxlLCBpbmRleCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0XHRcdFx0PFNlbWFudGljU3RlcFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGtleT17aW5kZXgudG9TdHJpbmcoKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb21wbGV0ZWQ9e2luZGV4IDwgT2JqZWN0LmtleXMoc3RhdGUpLmxlbmd0aH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhY3RpdmU9e2N1cnJlbnRTdGVwID09PSBpbmRleH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbkNsaWNrPXsoKSA9PiBzZXRDdXJyZW50U3RlcChpbmRleCl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGlzYWJsZWQ9e2luZGV4ID4gT2JqZWN0LmtleXMoc3RhdGUpLmxlbmd0aH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxTZW1hbnRpY1N0ZXAuQ29udGVudD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxTZW1hbnRpY1N0ZXAuVGl0bGU+e3RpdGxlfTwvU2VtYW50aWNTdGVwLlRpdGxlPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvU2VtYW50aWNTdGVwLkNvbnRlbnQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDwvU2VtYW50aWNTdGVwPlxuXHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHR9KX1cblx0XHRcdFx0XHRcdFx0PC9TZW1hbnRpY1N0ZXAuR3JvdXA+XG5cdFx0XHRcdFx0XHQ8L0dyaWQuQ29sdW1uPlxuXHRcdFx0XHRcdFx0PEdyaWQuQ29sdW1uIHdpZHRoPXsxM30+e2NoaWxkcmVuPy5bY3VycmVudFN0ZXBdfTwvR3JpZC5Db2x1bW4+XG5cdFx0XHRcdFx0PC9HcmlkLlJvdz5cblx0XHRcdFx0PC9HcmlkPlxuXHRcdFx0PC9TdGVwQ29udGV4dC5Qcm92aWRlcj5cblx0XHQpO1xuXHR9XG5cblx0cmV0dXJuIChcblx0XHQ8U3RlcENvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3tzdGF0ZSwgaGFuZGxlU3VibWl0fX0+XG5cdFx0XHR7cHJvcHMud2Fybk9uUmVyb3V0ZSAmJiA8UHJvbXB0IG1lc3NhZ2U9e29uTmF2aWdhdGV9IC8+fVxuXHRcdFx0PFNlbWFudGljU3RlcC5Hcm91cCBvcmRlcmVkIHNpemU9XCJtaW5pXCI+XG5cdFx0XHRcdHt0aXRsZXM/Lm1hcCgodGl0bGUsIGluZGV4KSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdDxTZW1hbnRpY1N0ZXBcblx0XHRcdFx0XHRcdFx0a2V5PXtpbmRleC50b1N0cmluZygpfVxuXHRcdFx0XHRcdFx0XHRjb21wbGV0ZWQ9e2luZGV4IDwgT2JqZWN0LmtleXMoc3RhdGUpLmxlbmd0aH1cblx0XHRcdFx0XHRcdFx0YWN0aXZlPXtjdXJyZW50U3RlcCA9PT0gaW5kZXh9XG5cdFx0XHRcdFx0XHRcdG9uQ2xpY2s9eygpID0+IHNldEN1cnJlbnRTdGVwKGluZGV4KX1cblx0XHRcdFx0XHRcdFx0ZGlzYWJsZWQ9e2luZGV4ID4gT2JqZWN0LmtleXMoc3RhdGUpLmxlbmd0aH1cblx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0PFNlbWFudGljU3RlcC5Db250ZW50PlxuXHRcdFx0XHRcdFx0XHRcdDxTZW1hbnRpY1N0ZXAuVGl0bGU+e3RpdGxlfTwvU2VtYW50aWNTdGVwLlRpdGxlPlxuXHRcdFx0XHRcdFx0XHQ8L1NlbWFudGljU3RlcC5Db250ZW50PlxuXHRcdFx0XHRcdFx0PC9TZW1hbnRpY1N0ZXA+XG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSl9XG5cdFx0XHQ8L1NlbWFudGljU3RlcC5Hcm91cD5cblx0XHRcdHtjaGlsZHJlbj8uW2N1cnJlbnRTdGVwXX1cblx0XHQ8L1N0ZXBDb250ZXh0LlByb3ZpZGVyPlxuXHQpO1xufVxuIiwiZXhwb3J0IHtTdGVwfSBmcm9tICcuL1N0ZXAnO1xuZXhwb3J0IHt1c2VTdGVwfSBmcm9tICcuL3VzZVN0ZXAnO1xuZXhwb3J0IHtGb3JtU3RlcH0gZnJvbSAnLi9Gb3JtU3RlcCc7XG5leHBvcnQge1N0ZXBQcm92aWRlcn0gZnJvbSAnLi9TdGVwUHJvdmlkZXInO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuZXhwb3J0IGNvbnN0IFN0ZXBDb250ZXh0ID0gUmVhY3QuY3JlYXRlQ29udGV4dDx7aGFuZGxlU3VibWl0OiAodmFsdWVzOiB1bmtub3duLCBzdGVwS2V5OiBzdHJpbmcpID0+IHZvaWQ7IHN0YXRlOiBSZWNvcmQ8c3RyaW5nLCBhbnk+fT4oe1xuXHRoYW5kbGVTdWJtaXQ6ICgpID0+IHt9LFxuXHRzdGF0ZToge30sXG59KTtcbiIsImltcG9ydCB7dXNlQ29udGV4dH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtTdGVwQ29udGV4dH0gZnJvbSAnLi9zdGVwQ29udGV4dCc7XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VTdGVwKCk6IFthbnksICh2YWx1ZXM6IHVua25vd24sIHN0ZXBLZXk6IHN0cmluZykgPT4gdm9pZF0ge1xuXHRjb25zdCB7c3RhdGUsIGhhbmRsZVN1Ym1pdH0gPSB1c2VDb250ZXh0KFN0ZXBDb250ZXh0KTtcblxuXHRyZXR1cm4gW3N0YXRlLCBoYW5kbGVTdWJtaXRdO1xufVxuIiwiXG4gICAgICBpbXBvcnQgQVBJIGZyb20gXCIhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5qZWN0U3R5bGVzSW50b1N0eWxlVGFnLmpzXCI7XG4gICAgICBpbXBvcnQgZG9tQVBJIGZyb20gXCIhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc3R5bGVEb21BUEkuanNcIjtcbiAgICAgIGltcG9ydCBpbnNlcnRGbiBmcm9tIFwiIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luc2VydEJ5U2VsZWN0b3IuanNcIjtcbiAgICAgIGltcG9ydCBzZXRBdHRyaWJ1dGVzIGZyb20gXCIhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc2V0QXR0cmlidXRlc1dpdGhvdXRBdHRyaWJ1dGVzLmpzXCI7XG4gICAgICBpbXBvcnQgaW5zZXJ0U3R5bGVFbGVtZW50IGZyb20gXCIhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5zZXJ0U3R5bGVFbGVtZW50LmpzXCI7XG4gICAgICBpbXBvcnQgc3R5bGVUYWdUcmFuc2Zvcm1GbiBmcm9tIFwiIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlVGFnVHJhbnNmb3JtLmpzXCI7XG4gICAgICBpbXBvcnQgY29udGVudCwgKiBhcyBuYW1lZEV4cG9ydCBmcm9tIFwiISEuLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcz8/cnVsZVNldFsxXS5ydWxlc1syXS51c2VbMl0hLi9zdHlsZXMuY3NzXCI7XG4gICAgICBcbiAgICAgIFxuXG52YXIgb3B0aW9ucyA9IHt9O1xuXG5vcHRpb25zLnN0eWxlVGFnVHJhbnNmb3JtID0gc3R5bGVUYWdUcmFuc2Zvcm1Gbjtcbm9wdGlvbnMuc2V0QXR0cmlidXRlcyA9IHNldEF0dHJpYnV0ZXM7XG5cbiAgICAgIG9wdGlvbnMuaW5zZXJ0ID0gaW5zZXJ0Rm4uYmluZChudWxsLCBcImhlYWRcIik7XG4gICAgXG5vcHRpb25zLmRvbUFQSSA9IGRvbUFQSTtcbm9wdGlvbnMuaW5zZXJ0U3R5bGVFbGVtZW50ID0gaW5zZXJ0U3R5bGVFbGVtZW50O1xuXG52YXIgdXBkYXRlID0gQVBJKGNvbnRlbnQsIG9wdGlvbnMpO1xuXG5cblxuZXhwb3J0ICogZnJvbSBcIiEhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanM/P3J1bGVTZXRbMV0ucnVsZXNbMl0udXNlWzJdIS4vc3R5bGVzLmNzc1wiO1xuICAgICAgIGV4cG9ydCBkZWZhdWx0IGNvbnRlbnQgJiYgY29udGVudC5sb2NhbHMgPyBjb250ZW50LmxvY2FscyA6IHVuZGVmaW5lZDtcbiIsIlxuICAgICAgaW1wb3J0IEFQSSBmcm9tIFwiIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luamVjdFN0eWxlc0ludG9TdHlsZVRhZy5qc1wiO1xuICAgICAgaW1wb3J0IGRvbUFQSSBmcm9tIFwiIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlRG9tQVBJLmpzXCI7XG4gICAgICBpbXBvcnQgaW5zZXJ0Rm4gZnJvbSBcIiEuLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbnNlcnRCeVNlbGVjdG9yLmpzXCI7XG4gICAgICBpbXBvcnQgc2V0QXR0cmlidXRlcyBmcm9tIFwiIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3NldEF0dHJpYnV0ZXNXaXRob3V0QXR0cmlidXRlcy5qc1wiO1xuICAgICAgaW1wb3J0IGluc2VydFN0eWxlRWxlbWVudCBmcm9tIFwiIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luc2VydFN0eWxlRWxlbWVudC5qc1wiO1xuICAgICAgaW1wb3J0IHN0eWxlVGFnVHJhbnNmb3JtRm4gZnJvbSBcIiEuLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zdHlsZVRhZ1RyYW5zZm9ybS5qc1wiO1xuICAgICAgaW1wb3J0IGNvbnRlbnQsICogYXMgbmFtZWRFeHBvcnQgZnJvbSBcIiEhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanM/P3J1bGVTZXRbMV0ucnVsZXNbMl0udXNlWzJdIS4vc3R5bGVzLmNzc1wiO1xuICAgICAgXG4gICAgICBcblxudmFyIG9wdGlvbnMgPSB7fTtcblxub3B0aW9ucy5zdHlsZVRhZ1RyYW5zZm9ybSA9IHN0eWxlVGFnVHJhbnNmb3JtRm47XG5vcHRpb25zLnNldEF0dHJpYnV0ZXMgPSBzZXRBdHRyaWJ1dGVzO1xuXG4gICAgICBvcHRpb25zLmluc2VydCA9IGluc2VydEZuLmJpbmQobnVsbCwgXCJoZWFkXCIpO1xuICAgIFxub3B0aW9ucy5kb21BUEkgPSBkb21BUEk7XG5vcHRpb25zLmluc2VydFN0eWxlRWxlbWVudCA9IGluc2VydFN0eWxlRWxlbWVudDtcblxudmFyIHVwZGF0ZSA9IEFQSShjb250ZW50LCBvcHRpb25zKTtcblxuXG5cbmV4cG9ydCAqIGZyb20gXCIhIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9ydWxlU2V0WzFdLnJ1bGVzWzJdLnVzZVsyXSEuL3N0eWxlcy5jc3NcIjtcbiAgICAgICBleHBvcnQgZGVmYXVsdCBjb250ZW50ICYmIGNvbnRlbnQubG9jYWxzID8gY29udGVudC5sb2NhbHMgOiB1bmRlZmluZWQ7XG4iLCIvLyBJbXBvcnRzXG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL3NvdXJjZU1hcHMuanNcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18gZnJvbSBcIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIjtcbnZhciBfX19DU1NfTE9BREVSX0VYUE9SVF9fXyA9IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fKTtcbi8vIE1vZHVsZVxuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18ucHVzaChbbW9kdWxlLmlkLCBcIi5ydy1kYXRldGltZXBpY2tlciA+IGlucHV0IHtcXG5cXHRib3JkZXI6IG5vbmUgIWltcG9ydGFudDtcXG59XFxuXFxuLnJ3LWRhdGV0aW1lcGlja2VyIC5ydy1jYWxlbmRhci1ncmlkLnJ3LW5hdi12aWV3IC5ydy1idG4ge1xcblxcdHBhZGRpbmc6IDAgIWltcG9ydGFudDtcXG59XFxuXFxuLmRhdGVUaW1lUGlja2VyQXV0b1dpZHRoIHtcXG5cXHR3aWR0aDogYXV0bztcXG5cXHRkaXNwbGF5OiBpbmxpbmUtZmxleDtcXG59XFxuXFxuLmRhdGVUaW1lUGlja2VyQXV0b1dpZHRoID4gaW5wdXQge1xcblxcdHdpZHRoOiBhdXRvO1xcbn1cXG5cXG4ucmVhY3QtZGF0ZXBpY2tlci13cmFwcGVyIHtcXG5cXHR3aWR0aDogMTAwJTtcXG5cXHRkaXNwbGF5OiBpbmxpbmUgIWltcG9ydGFudDtcXG59XFxuXFxuLnJlYWN0LWRhdGVwaWNrZXJfX2lucHV0LWNvbnRhaW5lciB7XFxuXFx0ZGlzcGxheTogaW5saW5lICFpbXBvcnRhbnQ7XFxufVxcblxcbi5yZWFjdC1kYXRlcGlja2VyLXBvcHBlciB7XFxuXFx0ei1pbmRleDogNSAhaW1wb3J0YW50O1xcbn1cXG5cIiwgXCJcIix7XCJ2ZXJzaW9uXCI6MyxcInNvdXJjZXNcIjpbXCJ3ZWJwYWNrOi8vLi9kYXRlL0RhdGVQaWNrZXIvc3R5bGVzLmNzc1wiXSxcIm5hbWVzXCI6W10sXCJtYXBwaW5nc1wiOlwiQUFBQTtDQUNDLHVCQUF1QjtBQUN4Qjs7QUFFQTtDQUNDLHFCQUFxQjtBQUN0Qjs7QUFFQTtDQUNDLFdBQVc7Q0FDWCxvQkFBb0I7QUFDckI7O0FBRUE7Q0FDQyxXQUFXO0FBQ1o7O0FBRUE7Q0FDQyxXQUFXO0NBQ1gsMEJBQTBCO0FBQzNCOztBQUVBO0NBQ0MsMEJBQTBCO0FBQzNCOztBQUVBO0NBQ0MscUJBQXFCO0FBQ3RCXCIsXCJzb3VyY2VzQ29udGVudFwiOltcIjpnbG9iYWwoLnJ3LWRhdGV0aW1lcGlja2VyKSA+IGlucHV0IHtcXG5cXHRib3JkZXI6IG5vbmUgIWltcG9ydGFudDtcXG59XFxuXFxuOmdsb2JhbCgucnctZGF0ZXRpbWVwaWNrZXIpIDpnbG9iYWwoLnJ3LWNhbGVuZGFyLWdyaWQucnctbmF2LXZpZXcpIDpnbG9iYWwoLnJ3LWJ0bikge1xcblxcdHBhZGRpbmc6IDAgIWltcG9ydGFudDtcXG59XFxuXFxuOmdsb2JhbCguZGF0ZVRpbWVQaWNrZXJBdXRvV2lkdGgpIHtcXG5cXHR3aWR0aDogYXV0bztcXG5cXHRkaXNwbGF5OiBpbmxpbmUtZmxleDtcXG59XFxuXFxuOmdsb2JhbCguZGF0ZVRpbWVQaWNrZXJBdXRvV2lkdGgpID4gaW5wdXQge1xcblxcdHdpZHRoOiBhdXRvO1xcbn1cXG5cXG46Z2xvYmFsKC5yZWFjdC1kYXRlcGlja2VyLXdyYXBwZXIpIHtcXG5cXHR3aWR0aDogMTAwJTtcXG5cXHRkaXNwbGF5OiBpbmxpbmUgIWltcG9ydGFudDtcXG59XFxuXFxuOmdsb2JhbCgucmVhY3QtZGF0ZXBpY2tlcl9faW5wdXQtY29udGFpbmVyKSB7XFxuXFx0ZGlzcGxheTogaW5saW5lICFpbXBvcnRhbnQ7XFxufVxcblxcbjpnbG9iYWwoLnJlYWN0LWRhdGVwaWNrZXItcG9wcGVyKSB7XFxuXFx0ei1pbmRleDogNSAhaW1wb3J0YW50O1xcbn1cXG5cIl0sXCJzb3VyY2VSb290XCI6XCJcIn1dKTtcbi8vIEV4cG9ydHNcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLmxvY2FscyA9IHt9O1xuZXhwb3J0IGRlZmF1bHQgX19fQ1NTX0xPQURFUl9FWFBPUlRfX187XG4iLCIvLyBJbXBvcnRzXG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL3NvdXJjZU1hcHMuanNcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18gZnJvbSBcIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIjtcbnZhciBfX19DU1NfTE9BREVSX0VYUE9SVF9fXyA9IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fKTtcbi8vIE1vZHVsZVxuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18ucHVzaChbbW9kdWxlLmlkLCBcIi5yY2NzIHtcXG5cXHRtYXJnaW46IDAgIWltcG9ydGFudDtcXG59XFxuXCIsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wid2VicGFjazovLy4vaW5wdXRzL0NyZWRpdENhcmRJbnB1dC9zdHlsZXMuY3NzXCJdLFwibmFtZXNcIjpbXSxcIm1hcHBpbmdzXCI6XCJBQUFBO0NBQ0Msb0JBQW9CO0FBQ3JCXCIsXCJzb3VyY2VzQ29udGVudFwiOltcIjpnbG9iYWwgLnJjY3Mge1xcblxcdG1hcmdpbjogMCAhaW1wb3J0YW50O1xcbn1cXG5cIl0sXCJzb3VyY2VSb290XCI6XCJcIn1dKTtcbi8vIEV4cG9ydHNcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLmxvY2FscyA9IHt9O1xuZXhwb3J0IGRlZmF1bHQgX19fQ1NTX0xPQURFUl9FWFBPUlRfX187XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuLypcbiAgTUlUIExpY2Vuc2UgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHBcbiAgQXV0aG9yIFRvYmlhcyBLb3BwZXJzIEBzb2tyYVxuKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGNzc1dpdGhNYXBwaW5nVG9TdHJpbmcpIHtcbiAgdmFyIGxpc3QgPSBbXTsgLy8gcmV0dXJuIHRoZSBsaXN0IG9mIG1vZHVsZXMgYXMgY3NzIHN0cmluZ1xuXG4gIGxpc3QudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHZhciBjb250ZW50ID0gXCJcIjtcbiAgICAgIHZhciBuZWVkTGF5ZXIgPSB0eXBlb2YgaXRlbVs1XSAhPT0gXCJ1bmRlZmluZWRcIjtcblxuICAgICAgaWYgKGl0ZW1bNF0pIHtcbiAgICAgICAgY29udGVudCArPSBcIkBzdXBwb3J0cyAoXCIuY29uY2F0KGl0ZW1bNF0sIFwiKSB7XCIpO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXRlbVsyXSkge1xuICAgICAgICBjb250ZW50ICs9IFwiQG1lZGlhIFwiLmNvbmNhdChpdGVtWzJdLCBcIiB7XCIpO1xuICAgICAgfVxuXG4gICAgICBpZiAobmVlZExheWVyKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJAbGF5ZXJcIi5jb25jYXQoaXRlbVs1XS5sZW5ndGggPiAwID8gXCIgXCIuY29uY2F0KGl0ZW1bNV0pIDogXCJcIiwgXCIge1wiKTtcbiAgICAgIH1cblxuICAgICAgY29udGVudCArPSBjc3NXaXRoTWFwcGluZ1RvU3RyaW5nKGl0ZW0pO1xuXG4gICAgICBpZiAobmVlZExheWVyKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJ9XCI7XG4gICAgICB9XG5cbiAgICAgIGlmIChpdGVtWzJdKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJ9XCI7XG4gICAgICB9XG5cbiAgICAgIGlmIChpdGVtWzRdKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJ9XCI7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb250ZW50O1xuICAgIH0pLmpvaW4oXCJcIik7XG4gIH07IC8vIGltcG9ydCBhIGxpc3Qgb2YgbW9kdWxlcyBpbnRvIHRoZSBsaXN0XG5cblxuICBsaXN0LmkgPSBmdW5jdGlvbiBpKG1vZHVsZXMsIG1lZGlhLCBkZWR1cGUsIHN1cHBvcnRzLCBsYXllcikge1xuICAgIGlmICh0eXBlb2YgbW9kdWxlcyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgbW9kdWxlcyA9IFtbbnVsbCwgbW9kdWxlcywgdW5kZWZpbmVkXV07XG4gICAgfVxuXG4gICAgdmFyIGFscmVhZHlJbXBvcnRlZE1vZHVsZXMgPSB7fTtcblxuICAgIGlmIChkZWR1cGUpIHtcbiAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCB0aGlzLmxlbmd0aDsgX2krKykge1xuICAgICAgICB2YXIgaWQgPSB0aGlzW19pXVswXTtcblxuICAgICAgICBpZiAoaWQgIT0gbnVsbCkge1xuICAgICAgICAgIGFscmVhZHlJbXBvcnRlZE1vZHVsZXNbaWRdID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAodmFyIF9pMiA9IDA7IF9pMiA8IG1vZHVsZXMubGVuZ3RoOyBfaTIrKykge1xuICAgICAgdmFyIGl0ZW0gPSBbXS5jb25jYXQobW9kdWxlc1tfaTJdKTtcblxuICAgICAgaWYgKGRlZHVwZSAmJiBhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzW2l0ZW1bMF1dKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGxheWVyICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgaXRlbVs1XSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgIGl0ZW1bNV0gPSBsYXllcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpdGVtWzFdID0gXCJAbGF5ZXJcIi5jb25jYXQoaXRlbVs1XS5sZW5ndGggPiAwID8gXCIgXCIuY29uY2F0KGl0ZW1bNV0pIDogXCJcIiwgXCIge1wiKS5jb25jYXQoaXRlbVsxXSwgXCJ9XCIpO1xuICAgICAgICAgIGl0ZW1bNV0gPSBsYXllcjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAobWVkaWEpIHtcbiAgICAgICAgaWYgKCFpdGVtWzJdKSB7XG4gICAgICAgICAgaXRlbVsyXSA9IG1lZGlhO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGl0ZW1bMV0gPSBcIkBtZWRpYSBcIi5jb25jYXQoaXRlbVsyXSwgXCIge1wiKS5jb25jYXQoaXRlbVsxXSwgXCJ9XCIpO1xuICAgICAgICAgIGl0ZW1bMl0gPSBtZWRpYTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoc3VwcG9ydHMpIHtcbiAgICAgICAgaWYgKCFpdGVtWzRdKSB7XG4gICAgICAgICAgaXRlbVs0XSA9IFwiXCIuY29uY2F0KHN1cHBvcnRzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpdGVtWzFdID0gXCJAc3VwcG9ydHMgKFwiLmNvbmNhdChpdGVtWzRdLCBcIikge1wiKS5jb25jYXQoaXRlbVsxXSwgXCJ9XCIpO1xuICAgICAgICAgIGl0ZW1bNF0gPSBzdXBwb3J0cztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBsaXN0LnB1c2goaXRlbSk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBsaXN0O1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlbSkge1xuICB2YXIgY29udGVudCA9IGl0ZW1bMV07XG4gIHZhciBjc3NNYXBwaW5nID0gaXRlbVszXTtcblxuICBpZiAoIWNzc01hcHBpbmcpIHtcbiAgICByZXR1cm4gY29udGVudDtcbiAgfVxuXG4gIGlmICh0eXBlb2YgYnRvYSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgdmFyIGJhc2U2NCA9IGJ0b2EodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KGNzc01hcHBpbmcpKSkpO1xuICAgIHZhciBkYXRhID0gXCJzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxcIi5jb25jYXQoYmFzZTY0KTtcbiAgICB2YXIgc291cmNlTWFwcGluZyA9IFwiLyojIFwiLmNvbmNhdChkYXRhLCBcIiAqL1wiKTtcbiAgICB2YXIgc291cmNlVVJMcyA9IGNzc01hcHBpbmcuc291cmNlcy5tYXAoZnVuY3Rpb24gKHNvdXJjZSkge1xuICAgICAgcmV0dXJuIFwiLyojIHNvdXJjZVVSTD1cIi5jb25jYXQoY3NzTWFwcGluZy5zb3VyY2VSb290IHx8IFwiXCIpLmNvbmNhdChzb3VyY2UsIFwiICovXCIpO1xuICAgIH0pO1xuICAgIHJldHVybiBbY29udGVudF0uY29uY2F0KHNvdXJjZVVSTHMpLmNvbmNhdChbc291cmNlTWFwcGluZ10pLmpvaW4oXCJcXG5cIik7XG4gIH1cblxuICByZXR1cm4gW2NvbnRlbnRdLmpvaW4oXCJcXG5cIik7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgc3R5bGVzSW5ET00gPSBbXTtcblxuZnVuY3Rpb24gZ2V0SW5kZXhCeUlkZW50aWZpZXIoaWRlbnRpZmllcikge1xuICB2YXIgcmVzdWx0ID0gLTE7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHlsZXNJbkRPTS5sZW5ndGg7IGkrKykge1xuICAgIGlmIChzdHlsZXNJbkRPTVtpXS5pZGVudGlmaWVyID09PSBpZGVudGlmaWVyKSB7XG4gICAgICByZXN1bHQgPSBpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gbW9kdWxlc1RvRG9tKGxpc3QsIG9wdGlvbnMpIHtcbiAgdmFyIGlkQ291bnRNYXAgPSB7fTtcbiAgdmFyIGlkZW50aWZpZXJzID0gW107XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGl0ZW0gPSBsaXN0W2ldO1xuICAgIHZhciBpZCA9IG9wdGlvbnMuYmFzZSA/IGl0ZW1bMF0gKyBvcHRpb25zLmJhc2UgOiBpdGVtWzBdO1xuICAgIHZhciBjb3VudCA9IGlkQ291bnRNYXBbaWRdIHx8IDA7XG4gICAgdmFyIGlkZW50aWZpZXIgPSBcIlwiLmNvbmNhdChpZCwgXCIgXCIpLmNvbmNhdChjb3VudCk7XG4gICAgaWRDb3VudE1hcFtpZF0gPSBjb3VudCArIDE7XG4gICAgdmFyIGluZGV4QnlJZGVudGlmaWVyID0gZ2V0SW5kZXhCeUlkZW50aWZpZXIoaWRlbnRpZmllcik7XG4gICAgdmFyIG9iaiA9IHtcbiAgICAgIGNzczogaXRlbVsxXSxcbiAgICAgIG1lZGlhOiBpdGVtWzJdLFxuICAgICAgc291cmNlTWFwOiBpdGVtWzNdLFxuICAgICAgc3VwcG9ydHM6IGl0ZW1bNF0sXG4gICAgICBsYXllcjogaXRlbVs1XVxuICAgIH07XG5cbiAgICBpZiAoaW5kZXhCeUlkZW50aWZpZXIgIT09IC0xKSB7XG4gICAgICBzdHlsZXNJbkRPTVtpbmRleEJ5SWRlbnRpZmllcl0ucmVmZXJlbmNlcysrO1xuICAgICAgc3R5bGVzSW5ET01baW5kZXhCeUlkZW50aWZpZXJdLnVwZGF0ZXIob2JqKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHVwZGF0ZXIgPSBhZGRFbGVtZW50U3R5bGUob2JqLCBvcHRpb25zKTtcbiAgICAgIG9wdGlvbnMuYnlJbmRleCA9IGk7XG4gICAgICBzdHlsZXNJbkRPTS5zcGxpY2UoaSwgMCwge1xuICAgICAgICBpZGVudGlmaWVyOiBpZGVudGlmaWVyLFxuICAgICAgICB1cGRhdGVyOiB1cGRhdGVyLFxuICAgICAgICByZWZlcmVuY2VzOiAxXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZGVudGlmaWVycy5wdXNoKGlkZW50aWZpZXIpO1xuICB9XG5cbiAgcmV0dXJuIGlkZW50aWZpZXJzO1xufVxuXG5mdW5jdGlvbiBhZGRFbGVtZW50U3R5bGUob2JqLCBvcHRpb25zKSB7XG4gIHZhciBhcGkgPSBvcHRpb25zLmRvbUFQSShvcHRpb25zKTtcbiAgYXBpLnVwZGF0ZShvYmopO1xuXG4gIHZhciB1cGRhdGVyID0gZnVuY3Rpb24gdXBkYXRlcihuZXdPYmopIHtcbiAgICBpZiAobmV3T2JqKSB7XG4gICAgICBpZiAobmV3T2JqLmNzcyA9PT0gb2JqLmNzcyAmJiBuZXdPYmoubWVkaWEgPT09IG9iai5tZWRpYSAmJiBuZXdPYmouc291cmNlTWFwID09PSBvYmouc291cmNlTWFwICYmIG5ld09iai5zdXBwb3J0cyA9PT0gb2JqLnN1cHBvcnRzICYmIG5ld09iai5sYXllciA9PT0gb2JqLmxheWVyKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgYXBpLnVwZGF0ZShvYmogPSBuZXdPYmopO1xuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVtb3ZlKCk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiB1cGRhdGVyO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChsaXN0LCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBsaXN0ID0gbGlzdCB8fCBbXTtcbiAgdmFyIGxhc3RJZGVudGlmaWVycyA9IG1vZHVsZXNUb0RvbShsaXN0LCBvcHRpb25zKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIHVwZGF0ZShuZXdMaXN0KSB7XG4gICAgbmV3TGlzdCA9IG5ld0xpc3QgfHwgW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxhc3RJZGVudGlmaWVycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGlkZW50aWZpZXIgPSBsYXN0SWRlbnRpZmllcnNbaV07XG4gICAgICB2YXIgaW5kZXggPSBnZXRJbmRleEJ5SWRlbnRpZmllcihpZGVudGlmaWVyKTtcbiAgICAgIHN0eWxlc0luRE9NW2luZGV4XS5yZWZlcmVuY2VzLS07XG4gICAgfVxuXG4gICAgdmFyIG5ld0xhc3RJZGVudGlmaWVycyA9IG1vZHVsZXNUb0RvbShuZXdMaXN0LCBvcHRpb25zKTtcblxuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBsYXN0SWRlbnRpZmllcnMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICB2YXIgX2lkZW50aWZpZXIgPSBsYXN0SWRlbnRpZmllcnNbX2ldO1xuXG4gICAgICB2YXIgX2luZGV4ID0gZ2V0SW5kZXhCeUlkZW50aWZpZXIoX2lkZW50aWZpZXIpO1xuXG4gICAgICBpZiAoc3R5bGVzSW5ET01bX2luZGV4XS5yZWZlcmVuY2VzID09PSAwKSB7XG4gICAgICAgIHN0eWxlc0luRE9NW19pbmRleF0udXBkYXRlcigpO1xuXG4gICAgICAgIHN0eWxlc0luRE9NLnNwbGljZShfaW5kZXgsIDEpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxhc3RJZGVudGlmaWVycyA9IG5ld0xhc3RJZGVudGlmaWVycztcbiAgfTtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBtZW1vID0ge307XG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cblxuZnVuY3Rpb24gZ2V0VGFyZ2V0KHRhcmdldCkge1xuICBpZiAodHlwZW9mIG1lbW9bdGFyZ2V0XSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHZhciBzdHlsZVRhcmdldCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGFyZ2V0KTsgLy8gU3BlY2lhbCBjYXNlIHRvIHJldHVybiBoZWFkIG9mIGlmcmFtZSBpbnN0ZWFkIG9mIGlmcmFtZSBpdHNlbGZcblxuICAgIGlmICh3aW5kb3cuSFRNTElGcmFtZUVsZW1lbnQgJiYgc3R5bGVUYXJnZXQgaW5zdGFuY2VvZiB3aW5kb3cuSFRNTElGcmFtZUVsZW1lbnQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIFRoaXMgd2lsbCB0aHJvdyBhbiBleGNlcHRpb24gaWYgYWNjZXNzIHRvIGlmcmFtZSBpcyBibG9ja2VkXG4gICAgICAgIC8vIGR1ZSB0byBjcm9zcy1vcmlnaW4gcmVzdHJpY3Rpb25zXG4gICAgICAgIHN0eWxlVGFyZ2V0ID0gc3R5bGVUYXJnZXQuY29udGVudERvY3VtZW50LmhlYWQ7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gICAgICAgIHN0eWxlVGFyZ2V0ID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBtZW1vW3RhcmdldF0gPSBzdHlsZVRhcmdldDtcbiAgfVxuXG4gIHJldHVybiBtZW1vW3RhcmdldF07XG59XG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cblxuXG5mdW5jdGlvbiBpbnNlcnRCeVNlbGVjdG9yKGluc2VydCwgc3R5bGUpIHtcbiAgdmFyIHRhcmdldCA9IGdldFRhcmdldChpbnNlcnQpO1xuXG4gIGlmICghdGFyZ2V0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQ291bGRuJ3QgZmluZCBhIHN0eWxlIHRhcmdldC4gVGhpcyBwcm9iYWJseSBtZWFucyB0aGF0IHRoZSB2YWx1ZSBmb3IgdGhlICdpbnNlcnQnIHBhcmFtZXRlciBpcyBpbnZhbGlkLlwiKTtcbiAgfVxuXG4gIHRhcmdldC5hcHBlbmRDaGlsZChzdHlsZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaW5zZXJ0QnlTZWxlY3RvcjsiLCJcInVzZSBzdHJpY3RcIjtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5mdW5jdGlvbiBpbnNlcnRTdHlsZUVsZW1lbnQob3B0aW9ucykge1xuICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtcbiAgb3B0aW9ucy5zZXRBdHRyaWJ1dGVzKGVsZW1lbnQsIG9wdGlvbnMuYXR0cmlidXRlcyk7XG4gIG9wdGlvbnMuaW5zZXJ0KGVsZW1lbnQsIG9wdGlvbnMub3B0aW9ucyk7XG4gIHJldHVybiBlbGVtZW50O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGluc2VydFN0eWxlRWxlbWVudDsiLCJcInVzZSBzdHJpY3RcIjtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5mdW5jdGlvbiBzZXRBdHRyaWJ1dGVzV2l0aG91dEF0dHJpYnV0ZXMoc3R5bGVFbGVtZW50KSB7XG4gIHZhciBub25jZSA9IHR5cGVvZiBfX3dlYnBhY2tfbm9uY2VfXyAhPT0gXCJ1bmRlZmluZWRcIiA/IF9fd2VicGFja19ub25jZV9fIDogbnVsbDtcblxuICBpZiAobm9uY2UpIHtcbiAgICBzdHlsZUVsZW1lbnQuc2V0QXR0cmlidXRlKFwibm9uY2VcIiwgbm9uY2UpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0QXR0cmlidXRlc1dpdGhvdXRBdHRyaWJ1dGVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cbmZ1bmN0aW9uIGFwcGx5KHN0eWxlRWxlbWVudCwgb3B0aW9ucywgb2JqKSB7XG4gIHZhciBjc3MgPSBcIlwiO1xuXG4gIGlmIChvYmouc3VwcG9ydHMpIHtcbiAgICBjc3MgKz0gXCJAc3VwcG9ydHMgKFwiLmNvbmNhdChvYmouc3VwcG9ydHMsIFwiKSB7XCIpO1xuICB9XG5cbiAgaWYgKG9iai5tZWRpYSkge1xuICAgIGNzcyArPSBcIkBtZWRpYSBcIi5jb25jYXQob2JqLm1lZGlhLCBcIiB7XCIpO1xuICB9XG5cbiAgdmFyIG5lZWRMYXllciA9IHR5cGVvZiBvYmoubGF5ZXIgIT09IFwidW5kZWZpbmVkXCI7XG5cbiAgaWYgKG5lZWRMYXllcikge1xuICAgIGNzcyArPSBcIkBsYXllclwiLmNvbmNhdChvYmoubGF5ZXIubGVuZ3RoID4gMCA/IFwiIFwiLmNvbmNhdChvYmoubGF5ZXIpIDogXCJcIiwgXCIge1wiKTtcbiAgfVxuXG4gIGNzcyArPSBvYmouY3NzO1xuXG4gIGlmIChuZWVkTGF5ZXIpIHtcbiAgICBjc3MgKz0gXCJ9XCI7XG4gIH1cblxuICBpZiAob2JqLm1lZGlhKSB7XG4gICAgY3NzICs9IFwifVwiO1xuICB9XG5cbiAgaWYgKG9iai5zdXBwb3J0cykge1xuICAgIGNzcyArPSBcIn1cIjtcbiAgfVxuXG4gIHZhciBzb3VyY2VNYXAgPSBvYmouc291cmNlTWFwO1xuXG4gIGlmIChzb3VyY2VNYXAgJiYgdHlwZW9mIGJ0b2EgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBjc3MgKz0gXCJcXG4vKiMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LFwiLmNvbmNhdChidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShzb3VyY2VNYXApKSkpLCBcIiAqL1wiKTtcbiAgfSAvLyBGb3Igb2xkIElFXG5cbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICAqL1xuXG5cbiAgb3B0aW9ucy5zdHlsZVRhZ1RyYW5zZm9ybShjc3MsIHN0eWxlRWxlbWVudCwgb3B0aW9ucy5vcHRpb25zKTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlU3R5bGVFbGVtZW50KHN0eWxlRWxlbWVudCkge1xuICAvLyBpc3RhbmJ1bCBpZ25vcmUgaWZcbiAgaWYgKHN0eWxlRWxlbWVudC5wYXJlbnROb2RlID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgc3R5bGVFbGVtZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc3R5bGVFbGVtZW50KTtcbn1cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuXG5cbmZ1bmN0aW9uIGRvbUFQSShvcHRpb25zKSB7XG4gIHZhciBzdHlsZUVsZW1lbnQgPSBvcHRpb25zLmluc2VydFN0eWxlRWxlbWVudChvcHRpb25zKTtcbiAgcmV0dXJuIHtcbiAgICB1cGRhdGU6IGZ1bmN0aW9uIHVwZGF0ZShvYmopIHtcbiAgICAgIGFwcGx5KHN0eWxlRWxlbWVudCwgb3B0aW9ucywgb2JqKTtcbiAgICB9LFxuICAgIHJlbW92ZTogZnVuY3Rpb24gcmVtb3ZlKCkge1xuICAgICAgcmVtb3ZlU3R5bGVFbGVtZW50KHN0eWxlRWxlbWVudCk7XG4gICAgfVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGRvbUFQSTsiLCJcInVzZSBzdHJpY3RcIjtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5mdW5jdGlvbiBzdHlsZVRhZ1RyYW5zZm9ybShjc3MsIHN0eWxlRWxlbWVudCkge1xuICBpZiAoc3R5bGVFbGVtZW50LnN0eWxlU2hlZXQpIHtcbiAgICBzdHlsZUVsZW1lbnQuc3R5bGVTaGVldC5jc3NUZXh0ID0gY3NzO1xuICB9IGVsc2Uge1xuICAgIHdoaWxlIChzdHlsZUVsZW1lbnQuZmlyc3RDaGlsZCkge1xuICAgICAgc3R5bGVFbGVtZW50LnJlbW92ZUNoaWxkKHN0eWxlRWxlbWVudC5maXJzdENoaWxkKTtcbiAgICB9XG5cbiAgICBzdHlsZUVsZW1lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY3NzKSk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdHlsZVRhZ1RyYW5zZm9ybTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2Fzc2VydFRoaXNJbml0aWFsaXplZFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3NcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9kZWZpbmVQcm9wZXJ0eVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2dldFByb3RvdHlwZU9mXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHNcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9vYmplY3RXaXRob3V0UHJvcGVydGllc1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm5cIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9zbGljZWRUb0FycmF5XCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvdG9Db25zdW1hYmxlQXJyYXlcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQGpzLWpvZGEvY29yZVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAdGh4L2RhdGVcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQHRoeC9tb25leVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjcmVkaXQtY2FyZC10eXBlXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImRlYnVnXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImV2ZW50ZW1pdHRlcjNcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZmxhdFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJmb3JtaWtcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiaW5wdXRtYXNrXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImpzLW1vbmV5XCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImxvZGFzaC9nZXRcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwibG9kYXNoL3Byb3BlcnR5XCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImxvZGFzaC91bmlxXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImx1aG5cIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3RcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3QtY3JlZGl0LWNhcmRzXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlYWN0LWNyZWRpdC1jYXJkcy9lcy9zdHlsZXMtY29tcGlsZWQuY3NzXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlYWN0LWRhdGVwaWNrZXJcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3Qtcm91dGVyLWRvbVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdC10YWJsZVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdC9qc3gtZGV2LXJ1bnRpbWVcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwic2VtYW50aWMtdWktcmVhY3RcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwic29jaWFsLWluc3VyYW5jZS1udW1iZXJcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwidXNlLWRlZXAtY29tcGFyZS1lZmZlY3RcIik7IiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHRpZDogbW9kdWxlSWQsXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXShtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIi8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSAobW9kdWxlKSA9PiB7XG5cdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuXHRcdCgpID0+IChtb2R1bGVbJ2RlZmF1bHQnXSkgOlxuXHRcdCgpID0+IChtb2R1bGUpO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCB7IGE6IGdldHRlciB9KTtcblx0cmV0dXJuIGdldHRlcjtcbn07IiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKSIsIi8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uciA9IChleHBvcnRzKSA9PiB7XG5cdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuXHR9XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG59OyIsIi8vIERhdGVcbmV4cG9ydCB0eXBlIHtEYXRlUGlja2VyfSBmcm9tICcuL2RhdGUvRGF0ZVBpY2tlcic7XG5leHBvcnQge0xvY2FsRGF0ZVBpY2tlcn0gZnJvbSAnLi9kYXRlL0xvY2FsRGF0ZVBpY2tlcic7XG5leHBvcnQgdHlwZSB7TG9jYWxEYXRlUGlja2VyUHJvcHN9IGZyb20gJy4vZGF0ZS9Mb2NhbERhdGVQaWNrZXInO1xuZXhwb3J0IHtMb2NhbE1vbnRoU2VsZWN0fSBmcm9tICcuL2RhdGUvTG9jYWxNb250aFNlbGVjdCc7XG5leHBvcnQgdHlwZSB7TG9jYWxNb250aFNlbGVjdFByb3BzfSBmcm9tICcuL2RhdGUvTG9jYWxNb250aFNlbGVjdCc7XG5leHBvcnQge0xvY2FsVGltZVBpY2tlcn0gZnJvbSAnLi9kYXRlL0xvY2FsVGltZVBpY2tlcic7XG5leHBvcnQgdHlwZSB7TG9jYWxUaW1lUGlja2VyUHJvcHN9IGZyb20gJy4vZGF0ZS9Mb2NhbFRpbWVQaWNrZXInO1xuZXhwb3J0IHtNb250aERheVBpY2tlcn0gZnJvbSAnLi9kYXRlL01vbnRoRGF5UGlja2VyJztcbmV4cG9ydCB0eXBlIHtNb250aERheVBpY2tlclByb3BzfSBmcm9tICcuL2RhdGUvTW9udGhEYXlQaWNrZXInO1xuZXhwb3J0IHtNb250aFllYXJQaWNrZXJ9IGZyb20gJy4vZGF0ZS9Nb250aFllYXJQaWNrZXInO1xuZXhwb3J0IHR5cGUge01vbnRoWWVhclBpY2tlclByb3BzfSBmcm9tICcuL2RhdGUvTW9udGhZZWFyUGlja2VyJztcbmV4cG9ydCB7WWVhclNlbGVjdH0gZnJvbSAnLi9kYXRlL1llYXJTZWxlY3QnO1xuZXhwb3J0IHR5cGUge1llYXJTZWxlY3RQcm9wc30gZnJvbSAnLi9kYXRlL1llYXJTZWxlY3QnO1xuXG4vLyBGb3JtXG5leHBvcnQge3VzZVRGb3JtLCBURm9ybX0gZnJvbSAnLi9mb3JtL1RGb3JtJztcbmV4cG9ydCB0eXBlIHtURm9ybVByb3BzfSBmcm9tICcuL2Zvcm0vVEZvcm0nO1xuXG4vLyBJbnB1dHNcbmV4cG9ydCB7TWFza2VkSW5wdXR9IGZyb20gJy4vaW5wdXRzL01hc2tlZElucHV0JztcbmV4cG9ydCB0eXBlIHtNYXNrZWRJbnB1dFByb3BzfSBmcm9tICcuL2lucHV0cy9NYXNrZWRJbnB1dCc7XG5leHBvcnQge1JhZGlvR3JvdXB9IGZyb20gJy4vaW5wdXRzL1JhZGlvR3JvdXAnO1xuZXhwb3J0IHR5cGUge1JhZGlvR3JvdXBQcm9wc30gZnJvbSAnLi9pbnB1dHMvUmFkaW9Hcm91cCc7XG5leHBvcnQge1NjcmlwdGVsLCB3aXRoU2NyaXB0ZWx9IGZyb20gJy4vaW5wdXRzL1NjcmlwdGVsJztcbmV4cG9ydCB0eXBlIHtTY3JpcHRlbFByb3BzLCBTY3JpcHRlbE1lc3NhZ2VDbGFzcywgU2NyaXB0ZWxQZW5TdHlsZX0gZnJvbSAnLi9pbnB1dHMvU2NyaXB0ZWwnO1xuZXhwb3J0IHtTY3JpcHRlbElucHV0fSBmcm9tICcuL2lucHV0cy9TY3JpcHRlbElucHV0JztcbmV4cG9ydCB0eXBlIHtTY3JpcHRlbElucHV0UHJvcHN9IGZyb20gJy4vaW5wdXRzL1NjcmlwdGVsSW5wdXQnO1xuZXhwb3J0IHtQaG9uZUlucHV0fSBmcm9tICcuL2lucHV0cy9QaG9uZUlucHV0JztcbmV4cG9ydCB0eXBlIHtQaG9uZUlucHV0UHJvcHN9IGZyb20gJy4vaW5wdXRzL1Bob25lSW5wdXQnO1xuZXhwb3J0IHtDcmVkaXRDYXJkSW5wdXR9IGZyb20gJy4vaW5wdXRzL0NyZWRpdENhcmRJbnB1dCc7XG5leHBvcnQgdHlwZSB7Q3JlZGl0Q2FyZElucHV0UHJvcHN9IGZyb20gJy4vaW5wdXRzL0NyZWRpdENhcmRJbnB1dCc7XG5leHBvcnQge1NpbklucHV0fSBmcm9tICcuL2lucHV0cy9TaW5JbnB1dCc7XG5leHBvcnQgdHlwZSB7U2luSW5wdXRQcm9wc30gZnJvbSAnLi9pbnB1dHMvU2luSW5wdXQnO1xuXG4vLyBUYWJsZVxuZXhwb3J0IHthZGRSb3dPblRhYiwgTW9uZXlFZGl0Q2VsbCwgU3RyaW5nRWRpdENlbGwsIE1vbmV5U3VtRm9vdGVyLCBNb25leUNlbGwsIFRhYmxlSW5wdXQsIEhvdmVyQ2VsbCwgRHJvcGRvd25DZWxsfSBmcm9tICcuL2lucHV0cy9UYWJsZUlucHV0JztcbmV4cG9ydCB0eXBlIHtBZGRSb3dPblRhYklmfSBmcm9tICcuL2lucHV0cy9UYWJsZUlucHV0JztcblxuLy8gTW9uZXlcbmV4cG9ydCB7TW9uZXlJbnB1dH0gZnJvbSAnLi9tb25leS9Nb25leUlucHV0JztcbmV4cG9ydCB0eXBlIHtNb25leUlucHV0UHJvcHN9IGZyb20gJy4vbW9uZXkvTW9uZXlJbnB1dCc7XG5leHBvcnQge01vbmV5Q3VycmVuY3lJbnB1dH0gZnJvbSAnLi9tb25leS9Nb25leUN1cnJlbmN5SW5wdXQnO1xuZXhwb3J0IHR5cGUge01vbmV5Q3VycmVuY3lJbnB1dFByb3BzfSBmcm9tICcuL21vbmV5L01vbmV5Q3VycmVuY3lJbnB1dCc7XG5cbi8vIFN0ZXBcbmV4cG9ydCB7Rm9ybVN0ZXAsIFN0ZXBQcm92aWRlciwgdXNlU3RlcCwgU3RlcH0gZnJvbSAnLi9zdGVwJztcbiJdLCJuYW1lcyI6WyJEYXRlUGlja2VyIiwidG9EYXRlIiwidG9Mb2NhbERhdGUiLCJkZWJ1ZyIsIlJlYWN0IiwiTWFza2VkRGF0ZUlucHV0IiwiZCIsIkxvY2FsRGF0ZVBpY2tlciIsInByb3BzIiwibWluRGF0ZSIsIm1heERhdGUiLCJ2YWx1ZSIsIm9uQ2hhbmdlIiwib25CbHVyIiwiYXMiLCJhY3Rpb24iLCJhY3Rpb25Qb3NpdGlvbiIsImNsYXNzTmFtZSIsImVycm9yIiwiZmx1aWQiLCJmb2N1cyIsImljb24iLCJpY29uUG9zaXRpb24iLCJpbnZlcnRlZCIsImxhYmVsIiwibGFiZWxQb3NpdGlvbiIsImxvYWRpbmciLCJzaXplIiwidGFiSW5kZXgiLCJ0cmFuc3BhcmVudCIsInJlc3QiLCJzZWxlY3RlZCIsImlucHV0UHJvcHMiLCJkYXRlIiwiZm9yd2FyZFJlZiIsIk1hc2tlZElucHV0IiwiTWFza2VkRGF0ZUlucHV0SW5uZXIiLCJyZWYiLCJuYW1lIiwiYWxpYXMiLCJpbnB1dEZvcm1hdCIsInRhcmdldCIsIkxvY2FsRGF0ZSIsIlNlbGVjdCIsIm1vbnRoT3B0aW9ucyIsInRleHQiLCJrZXkiLCJMb2NhbE1vbnRoU2VsZWN0IiwieWVhciIsImhhbmRsZUJsdXIiLCJ0aGVZZWFyIiwibm93IiwibW9udGhWYWx1ZSIsImV2IiwidiIsIm9mIiwiTG9jYWxUaW1lIiwidG9Mb2NhbFRpbWUiLCJNYXNrZWRUaW1lSW5wdXQiLCJMb2NhbFRpbWVQaWNrZXIiLCJkaXNhYmxlZCIsIm9mU2Vjb25kT2ZEYXkiLCJNYXNrZWRUaW1lSW5wdXRJbm5lciIsIklucHV0IiwibW9udGhzIiwiTW9udGhEYXlIZWFkZXIiLCJnZXRNb250aCIsImRlY3JlYXNlTW9udGgiLCJwcmV2TW9udGhCdXR0b25EaXNhYmxlZCIsImluY3JlYXNlTW9udGgiLCJuZXh0TW9udGhCdXR0b25EaXNhYmxlZCIsIk1vbnRoRGF5UGlja2VyIiwiTW9udGhZZWFyUGlja2VyIiwidW5kZWZpbmVkIiwid2l0aERheU9mTW9udGgiLCJvZkVwb2NoRGF5IiwicGx1c01vbnRocyIsIm1pbnVzRGF5cyIsInBsdXNZZWFycyIsIkljb24iLCJCdXR0b24iLCJEcm9wZG93biIsIlNlZ21lbnQiLCJZZWFyU2VsZWN0IiwidGhpc1llYXIiLCJEYXRlIiwiZ2V0RnVsbFllYXIiLCJtaW5ZZWFyIiwibWF4WWVhciIsImF2YWlsYWJsZVllYXJzIiwiaSIsInB1c2giLCJ0b1N0cmluZyIsInBhZGRpbmciLCJtYXJnaW4iLCJlIiwidmFsIiwibWFyZ2luUmlnaHQiLCJpc0Z1bmN0aW9uIiwiRm9ybWlrUHJvdmlkZXIiLCJpc0VtcHR5Q2hpbGRyZW4iLCJ1c2VURm9ybSIsIlRGb3JtIiwidGJhZyIsImNvbXBvbmVudCIsInJlbmRlciIsImNoaWxkcmVuIiwiaW5uZXJSZWYiLCJ1c2VJbXBlcmF0aXZlSGFuZGxlIiwiY2hpbGQiLCJjcmVhdGVFbGVtZW50IiwiQ2hpbGRyZW4iLCJvbmx5IiwiZmxhdHRlbiIsInVzZUZvcm1payIsImdldCIsInByb3BlcnR5IiwidW5pcSIsInVzZUVmZmVjdCIsInVzZVN0YXRlIiwiTWVzc2FnZSIsImNvbmZpZyIsImZvcm1payIsIm9uVmFsaWRhdGUiLCJpc1ZhbGlkIiwiZ2V0U3VibWl0Rm4iLCJzdWJtaXRGb3JtIiwidmFsdWVzIiwiZXJyb3JDbGVhcmVkIiwic2V0RXJyb3JDbGVhcmVkIiwibWVzc2FnZSIsImlzU3VibWl0dGluZyIsImZsYXRXYXJuaW5ncyIsImVycm9ycyIsImZsYXRUb3VjaGVkIiwidG91Y2hlZCIsIndhcm5pbmdzIiwiT2JqZWN0Iiwia2V5cyIsInJlZHVjZSIsIm1lbW8iLCJpc1RvdWNoZWQiLCJzdWJtaXRDb3VudCIsImVycm9ySGVhZGVyIiwiZ3JhcGhRTEVycm9ycyIsImVycm9yTWVzc2FnZSIsInNsaWNlIiwiaW5kZXhPZiIsImhhc1dhcm5pbmdzIiwibGVuZ3RoIiwiaGFzRXJyb3JzIiwicmVuZGVyV2FybmluZ3MiLCJvdmVyZmxvdyIsIm1heEhlaWdodCIsIm1hcCIsIm1zZyIsImZpZWxkRXJyb3IiLCJmaWVsZE5hbWUiLCJoYW5kbGVTdWJtaXQiLCJzdWJtaXREaXNhYmxlZCIsImVycm9yTWFya2VkQ2xlYXJlZCIsImZvcm1FcnJvciIsImZvcm1hdERhdGUiLCJDcmVkaXRDYXJkcyIsIkZvcm0iLCJHcmlkIiwiQ3JlZGl0Q2FyZE51bWJlcklucHV0IiwiQ3JlZGl0Q2FyZElucHV0IiwibnVtYmVyIiwiY3ZjIiwiZXhwaXJ5Iiwic2V0Rm9jdXMiLCJmb3JtYXQiLCJhIiwiYiIsImNyZWRpdENhcmRUeXBlIiwidmFsaWRhdGUiLCJ1c2VDYWxsYmFjayIsInVzZU1lbW8iLCJ1c2VNYXNrZWRJbnB1dCIsImdldEljb24iLCJ0eXBlIiwic2V0SWNvbiIsImNvbG9yIiwic2V0Q29sb3IiLCJjaGVja1ZhbGlkYXRpb24iLCJ2YWx1ZUFycmF5IiwibnVtIiwiam9pbiIsInJlcGxhY2VBbGwiLCJ0eXAiLCJjcmVkaXRDYXJkTWFzayIsIm1hc2siLCJpc0NvbXBsZXRlIiwiYXV0b1VubWFzayIsImNhcmROdW1iZXJSZWYiLCJpbnB1dFJlZiIsIklucHV0bWFzayIsInVzZVJlZiIsInVzZURlZXBDb21wYXJlRWZmZWN0Iiwib25TZXQiLCJpbnB1dEVsZW1lbnQiLCJtYXNrSW5zdGFuY2UiLCJjdXJyZW50IiwiRXJyb3IiLCJvbmNvbXBsZXRlIiwib25jbGVhcmVkIiwib25pbmNvbXBsZXRlIiwicmVtb3ZlIiwiUGhvbmVJbnB1dCIsImV4dGVuc2lvbiIsImdyZWVkeSIsImNsb25lRWxlbWVudCIsIlJhZGlvIiwiRm9ybVJhZGlvIiwiUmFkaW9Hcm91cCIsImFyZ3MiLCJjaGVja2VkIiwiU2NyaXB0ZWxDb250ZXh0IiwiU2NyaXB0ZWxTb2NrZXQiLCJTY3JpcHRlbCIsIm9tbmlzY3JpcHRVcmwiLCJpbWFnZVR5cGUiLCJzY2FsZSIsImNyb3AiLCJwZW5TdHlsZSIsInNvY2tldCIsInNldFJlbmRlciIsInNldExvYWRpbmciLCJpc1NpZ25pbmciLCJzZXRJc1NpZ25pbmciLCJvbiIsImNsb3NlIiwicmVuZGVySW1hZ2UiLCJjcmVhdGVDb250ZXh0Iiwid2l0aFNjcmlwdGVsIiwiU2NyaXB0ZWxQZW5TdHlsZSIsIlNjcmlwdGVsTWVzc2FnZUNsYXNzIiwiRXZlbnRFbWl0dGVyIiwic2VydmVyQ29ubmVjdGVkIiwic2VydmVySW5mbyIsImRldmljZXMiLCJkZXZpY2UiLCJzZW5kIiwiSlNPTiIsInN0cmluZ2lmeSIsIl9jbGFzcyIsInV1aWQiLCJkZXZpY2VDb25uZWN0ZWQiLCJyZW5kZXJTZXR0aW5ncyIsInJlbmRlckZ1bmN0aW9uIiwiUGxhaW4iLCJldmVudEVtaXR0ZXIiLCJ3aWR0aCIsImhlaWdodCIsImVtaXQiLCJvcHRpb25zIiwiV2ViU29ja2V0Iiwib25vcGVuIiwib25jbG9zZSIsIm9ubWVzc2FnZSIsInBhcnNlIiwiZGF0YSIsIkNvbm5lY3Rpb25PcGVuIiwiRGV2aWNlT3BlblJlc3BvbnNlIiwiUmVuZGVyZWRJbWFnZSIsIlNjcmlwdGVsRXhjZXB0aW9uIiwiQnV0dG9uUHJlc3MiLCJCdXR0b25Eb3duIiwiUGVuTW92ZSIsIlBlblVwIiwiV3JhcHBlZENvbXBvbmVudCIsInNjcmlwdGVsUHJvcHMiLCJ1c2VDb250ZXh0IiwiSW1hZ2UiLCJTY3JpcHRlbElucHV0IiwiYnV0dG9uVGV4dCIsImN0eCIsImVudGVyU2lnbmF0dXJlIiwic2V0RW50ZXJTaWduYXR1cmUiLCJ0aW1lc3RhbXAiLCJjYWxpYnJhdGUiLCJTSU4iLCJTaW5JbnB1dCIsIkRyb3Bkb3duQ2VsbCIsImRyb3Bkb3duUHJvcHMiLCJEcm9wZG93bkNlbGxGbiIsInJvd0luZGV4Iiwicm93IiwiaW5kZXgiLCJpZCIsImNvbHVtbiIsInVwZGF0ZURhdGEiLCJldmVudCIsIkhvdmVyQ2VsbCIsIkhvdmVyQ2VsbEZuIiwiQWN0aW9uIiwiaG92ZXJSb3ciLCJ0ZXh0QWxpZ24iLCJmb3JtYXRNb25leSIsIk1vbmV5Q2VsbCIsIk1vbmV5Q2VsbEZuIiwib3ZlcnJpZGVWYWx1ZSIsIk1vbmV5SW5wdXQiLCJhZGRSb3dPblRhYiIsIk1vbmV5RWRpdENlbGwiLCJvcHRzIiwiTW9uZXlFZGl0Q2VsbEZuIiwiaW5pdGlhbFZhbHVlIiwic2V0VmFsdWUiLCJhZGRSb3dPblRhYklmIiwidG9Nb25leSIsIk1vbmV5U3VtRm9vdGVyIiwiaW5mbyIsInN1bSIsInJvd3MiLCJhZGQiLCJTdHJpbmdFZGl0Q2VsbCIsIlN0cmluZ0VkaXRDZWxsRm4iLCJGaWVsZEFycmF5IiwidXNlVGFibGUiLCJUYWJsZSIsIlRhYmxlSW5wdXRUYWJsZSIsImNvbHVtbnMiLCJhcnJheUhlbHBlcnMiLCJzZXRGaWVsZFZhbHVlIiwiY3JlYXRlUm93IiwidGFibGVQcm9wcyIsImhlYWRlclJvd1Byb3BzIiwiaGVhZGVyQ2VsbFByb3BzIiwiYm9keVByb3BzIiwicm93UHJvcHMiLCJjZWxsUHJvcHMiLCJmb290ZXJDZWxsUHJvcHMiLCJmb290ZXJSb3dQcm9wcyIsImNvbHMiLCJ2YWxzIiwic2V0SG92ZXJSb3ciLCJjb2x1bW5JZCIsImFkZFJvdyIsImdldFRhYmxlUHJvcHMiLCJnZXRUYWJsZUJvZHlQcm9wcyIsImhlYWRlckdyb3VwcyIsInByZXBhcmVSb3ciLCJmb290ZXJHcm91cHMiLCJoYXNGb290ZXIiLCJzb21lIiwiZmciLCJoZWFkZXJzIiwiZmdoIiwiRm9vdGVyIiwiZm9vdGVyIiwiZ3JvdXAiLCJnZXRGb290ZXJHcm91cFByb3BzIiwiZ2V0Rm9vdGVyUHJvcHMiLCJoZWFkZXJHcm91cCIsImdldEhlYWRlckdyb3VwUHJvcHMiLCJnZXRIZWFkZXJQcm9wcyIsImdldFJvd1Byb3BzIiwiY2VsbHMiLCJjZWxsIiwiZ2V0Q2VsbFByb3BzIiwiVGFibGVJbnB1dCIsInJvd3NMZW5ndGgiLCJzaGlmdEtleSIsIk1vbmV5IiwiTGFiZWwiLCJ1c2VNb25leUlucHV0IiwiTW9uZXlDdXJyZW5jeUlucHV0IiwicHJlZml4IiwiZGVmYXVsdEN1cnJlbmN5Iiwic2hvd1ByZWZpeCIsIndob2xlTnVtYmVyIiwiY3VycmVuY2llcyIsImxvY2tlZCIsImhhbmRsZUNoYW5nZSIsImhhbmRsZURyb3Bkb3duQ2hhbmdlIiwibmV3Q3VycmVuY3lDb2RlIiwibmV3TW9uZXkiLCJhbW91bnQiLCJjdXJyZW5jeUNvZGUiLCJjdXJyZW5jeSIsImNvZGUiLCJncm91cFNlcGFyYXRvciIsImRpZ2l0cyIsImRlY2ltYWxfZGlnaXRzIiwiZGlnaXRzT3B0aW9uYWwiLCJzeW1ib2wiLCJwbGFjZWhvbGRlciIsInNldFZhbCIsInRvRGVjaW1hbCIsIndoYXRDdXJyZW50bHlJc0Rpc3BsYXllZCIsIndoYXRXZUFyZVNldHRpbmciLCJ1c2VTdGVwIiwiRm9ybVN0ZXAiLCJzdGF0ZSIsInN0ZXBLZXkiLCJmb3JtIiwib25TdWJtaXQiLCJ0aXRsZSIsIlN0ZXAiLCJQcm9tcHQiLCJTZW1hbnRpY1N0ZXAiLCJTdGVwQ29udGV4dCIsIlN0ZXBQcm92aWRlciIsInNldFN0YXRlIiwiY3VycmVudFN0ZXAiLCJzZXRDdXJyZW50U3RlcCIsInNldElzU3VibWl0dGluZyIsInRpdGxlcyIsImZvckVhY2giLCJoaWRkZW4iLCJzdGVwIiwib25OYXZpZ2F0ZSIsInZlcnRpY2FsIiwid2Fybk9uUmVyb3V0ZSJdLCJzb3VyY2VSb290IjoiIn0=