single-scripture-rcl 3.4.8 → 3.4.9-beta.9
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.
|
@@ -77,6 +77,7 @@ import { areMapsTheSame } from '../../utils/maps';
|
|
|
77
77
|
import { Title } from '../ScripturePane/styled';
|
|
78
78
|
import { NT_ORIG_LANG, ORIGINAL_SOURCE, OT_ORIG_LANG } from '../../utils';
|
|
79
79
|
import { VerseSelectorPopup } from '../VerseSelectorPopup';
|
|
80
|
+
import { getPatch } from '../../utils/files';
|
|
80
81
|
var KEY_FONT_SIZE_BASE = 'scripturePaneFontSize_';
|
|
81
82
|
var label = 'Version';
|
|
82
83
|
var style = {
|
|
@@ -171,7 +172,7 @@ export var getCurrentBook = function getCurrentBook(scriptureConfig, bookId) {
|
|
|
171
172
|
return null;
|
|
172
173
|
};
|
|
173
174
|
export default function ScriptureCard(_ref2) {
|
|
174
|
-
var _scriptureConfig$reso5, _scriptureConfig$reso6, _scriptureConfig$reso7, _scriptureConfig$reso8, _authentication$token, _scriptureConfig$reso10, _scriptureConfig$reso11, _scriptureConfig$reso12, _httpConfig, _httpConfig2, _versesForRef3, _versesForRef4;
|
|
175
|
+
var _scriptureConfig$reso5, _scriptureConfig$reso6, _scriptureConfig$reso7, _scriptureConfig$reso8, _authentication$token, _scriptureConfig$reso10, _scriptureConfig$reso11, _scriptureConfig$reso12, _httpConfig, _httpConfig2, _authentication$user, _versesForRef3, _versesForRef4;
|
|
175
176
|
|
|
176
177
|
var appRef = _ref2.appRef,
|
|
177
178
|
authentication = _ref2.authentication,
|
|
@@ -220,6 +221,7 @@ export default function ScriptureCard(_ref2) {
|
|
|
220
221
|
ref: appRef,
|
|
221
222
|
saveClicked: false,
|
|
222
223
|
saveContent: null,
|
|
224
|
+
saveDiffPatch: false,
|
|
223
225
|
selections: new Map(),
|
|
224
226
|
showAlignmentPopup: false,
|
|
225
227
|
startSave: false,
|
|
@@ -244,6 +246,7 @@ export default function ScriptureCard(_ref2) {
|
|
|
244
246
|
ref = state.ref,
|
|
245
247
|
saveClicked = state.saveClicked,
|
|
246
248
|
saveContent = state.saveContent,
|
|
249
|
+
saveDiffPatch = state.saveDiffPatch,
|
|
247
250
|
selections = state.selections,
|
|
248
251
|
showAlignmentPopup = state.showAlignmentPopup,
|
|
249
252
|
startSave = state.startSave,
|
|
@@ -696,6 +699,7 @@ export default function ScriptureCard(_ref2) {
|
|
|
696
699
|
server: server
|
|
697
700
|
}),
|
|
698
701
|
author: loggedInUser,
|
|
702
|
+
email: authentication === null || authentication === void 0 ? void 0 : (_authentication$user = authentication.user) === null || _authentication$user === void 0 ? void 0 : _authentication$user.email,
|
|
699
703
|
token: authentication === null || authentication === void 0 ? void 0 : authentication.token,
|
|
700
704
|
branch: workingResourceBranch,
|
|
701
705
|
filepath: filepath,
|
|
@@ -703,7 +707,8 @@ export default function ScriptureCard(_ref2) {
|
|
|
703
707
|
}),
|
|
704
708
|
saveError = _useEdit.error,
|
|
705
709
|
isSaveError = _useEdit.isError,
|
|
706
|
-
onSaveEdit = _useEdit.onSaveEdit
|
|
710
|
+
onSaveEdit = _useEdit.onSaveEdit,
|
|
711
|
+
onSaveEditPatch = _useEdit.onSaveEditPatch;
|
|
707
712
|
|
|
708
713
|
React.useEffect(function () {
|
|
709
714
|
// when we get a save saveError
|
|
@@ -716,14 +721,21 @@ export default function ScriptureCard(_ref2) {
|
|
|
716
721
|
// when startSave goes true, save edits to user branch and then clear startSave
|
|
717
722
|
var _saveEdit = /*#__PURE__*/function () {
|
|
718
723
|
var _ref4 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() {
|
|
724
|
+
var saveFunction;
|
|
719
725
|
return regeneratorRuntime.wrap(function _callee$(_context) {
|
|
720
726
|
while (1) {
|
|
721
727
|
switch (_context.prev = _context.next) {
|
|
722
728
|
case 0:
|
|
723
729
|
// begin uploading new USFM
|
|
724
730
|
console.info("saveChangesToCloud() - Using sha: ".concat(sha));
|
|
725
|
-
|
|
726
|
-
|
|
731
|
+
saveFunction = onSaveEdit;
|
|
732
|
+
|
|
733
|
+
if (saveDiffPatch) {
|
|
734
|
+
saveFunction = onSaveEditPatch; // if we are sending up a diffpatch, we will use this method
|
|
735
|
+
}
|
|
736
|
+
|
|
737
|
+
_context.next = 5;
|
|
738
|
+
return saveFunction(userEditBranchName).then(function (success) {
|
|
727
739
|
// push change to server
|
|
728
740
|
if (success) {
|
|
729
741
|
console.log("saveChangesToCloud() - save scripture edits success");
|
|
@@ -781,7 +793,7 @@ export default function ScriptureCard(_ref2) {
|
|
|
781
793
|
}
|
|
782
794
|
});
|
|
783
795
|
|
|
784
|
-
case
|
|
796
|
+
case 5:
|
|
785
797
|
case "end":
|
|
786
798
|
return _context.stop();
|
|
787
799
|
}
|
|
@@ -848,14 +860,14 @@ export default function ScriptureCard(_ref2) {
|
|
|
848
860
|
|
|
849
861
|
function _getReadyForSave() {
|
|
850
862
|
_getReadyForSave = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2() {
|
|
851
|
-
var createEditBranch, branch, unsavedCardIndices, bibleUsfm, mergeFail, _cardNum, _iterator2, _step2, cardIndex, _unsavedChangesList$_, getChanges, _state, newUsfm, _getChanges, _ref5, updatedVerseObjects, newBookJson, _iterator3, _step3, _cardIndex, _cardNum2, _unsavedChangesList$_2, _getChanges2, _state2, _newUsfm, _getChanges3, newVerseText, _ref6, _updatedVerseObjects, targetVerseObjects_, _AlignmentHelpers$upd, targetVerseObjects;
|
|
863
|
+
var createEditBranch, branch, unsavedCardIndices, bibleUsfm_, bibleUsfm, mergeFail, _cardNum, _iterator2, _step2, cardIndex, _unsavedChangesList$_, getChanges, _state, newUsfm, _getChanges, _ref5, updatedVerseObjects, _saveDiffPatch, newBookJson, _iterator3, _step3, _cardIndex, _cardNum2, _unsavedChangesList$_2, _getChanges2, _state2, _newUsfm, _getChanges3, newVerseText, _ref6, _updatedVerseObjects, targetVerseObjects_, _AlignmentHelpers$upd, targetVerseObjects, _scriptureConfig$reso13, _scriptureConfig$reso14, filename, diffPatch;
|
|
852
864
|
|
|
853
865
|
return regeneratorRuntime.wrap(function _callee2$(_context2) {
|
|
854
866
|
while (1) {
|
|
855
867
|
switch (_context2.prev = _context2.next) {
|
|
856
868
|
case 0:
|
|
857
869
|
if (!saveClicked) {
|
|
858
|
-
_context2.next =
|
|
870
|
+
_context2.next = 56;
|
|
859
871
|
break;
|
|
860
872
|
}
|
|
861
873
|
|
|
@@ -920,27 +932,30 @@ export default function ScriptureCard(_ref2) {
|
|
|
920
932
|
unsavedCardIndices = Object.keys(unsavedChangesList);
|
|
921
933
|
|
|
922
934
|
if (!(unsavedCardIndices !== null && unsavedCardIndices !== void 0 && unsavedCardIndices.length)) {
|
|
923
|
-
_context2.next =
|
|
935
|
+
_context2.next = 56;
|
|
924
936
|
break;
|
|
925
937
|
}
|
|
926
938
|
|
|
927
|
-
|
|
939
|
+
bibleUsfm_ = getCurrentBook(scriptureConfig, bookId); // get original USFM
|
|
940
|
+
|
|
941
|
+
bibleUsfm = bibleUsfm_; // make a copy to edit
|
|
942
|
+
|
|
928
943
|
mergeFail = false;
|
|
929
944
|
|
|
930
|
-
if (!
|
|
931
|
-
_context2.next =
|
|
945
|
+
if (!bibleUsfm_) {
|
|
946
|
+
_context2.next = 53;
|
|
932
947
|
break;
|
|
933
948
|
}
|
|
934
949
|
|
|
935
950
|
_cardNum = 0;
|
|
936
951
|
_iterator2 = _createForOfIteratorHelper(unsavedCardIndices);
|
|
937
|
-
_context2.prev =
|
|
952
|
+
_context2.prev = 27;
|
|
938
953
|
|
|
939
954
|
_iterator2.s();
|
|
940
955
|
|
|
941
|
-
case
|
|
956
|
+
case 29:
|
|
942
957
|
if ((_step2 = _iterator2.n()).done) {
|
|
943
|
-
_context2.next =
|
|
958
|
+
_context2.next = 45;
|
|
944
959
|
break;
|
|
945
960
|
}
|
|
946
961
|
|
|
@@ -949,7 +964,7 @@ export default function ScriptureCard(_ref2) {
|
|
|
949
964
|
_unsavedChangesList$_ = unsavedChangesList[_cardNum], getChanges = _unsavedChangesList$_.getChanges, _state = _unsavedChangesList$_.state;
|
|
950
965
|
|
|
951
966
|
if (!getChanges) {
|
|
952
|
-
_context2.next =
|
|
967
|
+
_context2.next = 43;
|
|
953
968
|
break;
|
|
954
969
|
}
|
|
955
970
|
|
|
@@ -962,40 +977,42 @@ export default function ScriptureCard(_ref2) {
|
|
|
962
977
|
}
|
|
963
978
|
|
|
964
979
|
if (!newUsfm) {
|
|
965
|
-
_context2.next =
|
|
980
|
+
_context2.next = 41;
|
|
966
981
|
break;
|
|
967
982
|
}
|
|
968
983
|
|
|
969
984
|
bibleUsfm = newUsfm;
|
|
970
|
-
_context2.next =
|
|
985
|
+
_context2.next = 43;
|
|
971
986
|
break;
|
|
972
987
|
|
|
973
|
-
case
|
|
988
|
+
case 41:
|
|
974
989
|
mergeFail = true;
|
|
975
|
-
return _context2.abrupt("break",
|
|
990
|
+
return _context2.abrupt("break", 45);
|
|
976
991
|
|
|
977
|
-
case
|
|
978
|
-
_context2.next =
|
|
992
|
+
case 43:
|
|
993
|
+
_context2.next = 29;
|
|
979
994
|
break;
|
|
980
995
|
|
|
981
|
-
case
|
|
982
|
-
_context2.next =
|
|
996
|
+
case 45:
|
|
997
|
+
_context2.next = 50;
|
|
983
998
|
break;
|
|
984
999
|
|
|
985
|
-
case
|
|
986
|
-
_context2.prev =
|
|
987
|
-
_context2.t0 = _context2["catch"](
|
|
1000
|
+
case 47:
|
|
1001
|
+
_context2.prev = 47;
|
|
1002
|
+
_context2.t0 = _context2["catch"](27);
|
|
988
1003
|
|
|
989
1004
|
_iterator2.e(_context2.t0);
|
|
990
1005
|
|
|
991
|
-
case
|
|
992
|
-
_context2.prev =
|
|
1006
|
+
case 50:
|
|
1007
|
+
_context2.prev = 50;
|
|
993
1008
|
|
|
994
1009
|
_iterator2.f();
|
|
995
1010
|
|
|
996
|
-
return _context2.finish(
|
|
1011
|
+
return _context2.finish(50);
|
|
1012
|
+
|
|
1013
|
+
case 53:
|
|
1014
|
+
_saveDiffPatch = false; // if true then we will send up a diffpatch instead of the whole book
|
|
997
1015
|
|
|
998
|
-
case 52:
|
|
999
1016
|
if (mergeFail) {
|
|
1000
1017
|
// if we failed to merge, fallback to brute force verse objects to USFM
|
|
1001
1018
|
console.log("saveChangesToCloud(".concat(cardNum, ") - verse not found, falling back to inserting verse object"));
|
|
@@ -1038,6 +1055,17 @@ export default function ScriptureCard(_ref2) {
|
|
|
1038
1055
|
bibleUsfm = usfmjs.toUSFM(newBookJson, {
|
|
1039
1056
|
forcedNewLines: true
|
|
1040
1057
|
});
|
|
1058
|
+
} else {
|
|
1059
|
+
// if only changed a few verses, we will just make a diffpatch instead of sending the whole book
|
|
1060
|
+
filename = scriptureConfig === null || scriptureConfig === void 0 ? void 0 : (_scriptureConfig$reso13 = scriptureConfig.resourceState) === null || _scriptureConfig$reso13 === void 0 ? void 0 : (_scriptureConfig$reso14 = _scriptureConfig$reso13.resource) === null || _scriptureConfig$reso14 === void 0 ? void 0 : _scriptureConfig$reso14.name; // Like "57-TIT.usfm"
|
|
1061
|
+
|
|
1062
|
+
if (filename && bibleUsfm && bibleUsfm_) {
|
|
1063
|
+
// make sure we have everything needed to make a patch
|
|
1064
|
+
diffPatch = getPatch(filename, bibleUsfm_, bibleUsfm, false);
|
|
1065
|
+
bibleUsfm_ = diffPatch; // replace whole book with patch data (much shorter)
|
|
1066
|
+
|
|
1067
|
+
_saveDiffPatch = true;
|
|
1068
|
+
}
|
|
1041
1069
|
}
|
|
1042
1070
|
|
|
1043
1071
|
if (bibleUsfm) {
|
|
@@ -1046,9 +1074,10 @@ export default function ScriptureCard(_ref2) {
|
|
|
1046
1074
|
return [].concat(_toConsumableArray(prevCardsSaving), [cardResourceId]);
|
|
1047
1075
|
});
|
|
1048
1076
|
setState({
|
|
1049
|
-
saveContent:
|
|
1050
|
-
|
|
1051
|
-
|
|
1077
|
+
saveContent: bibleUsfm_,
|
|
1078
|
+
saveClicked: false,
|
|
1079
|
+
saveDiffPatch: _saveDiffPatch,
|
|
1080
|
+
startSave: true
|
|
1052
1081
|
});
|
|
1053
1082
|
} else {
|
|
1054
1083
|
console.error("saveChangesToCloud() - Error retrieving the correct book data: incorrect book ".concat(languageId_, "_").concat(resourceId));
|
|
@@ -1058,12 +1087,12 @@ export default function ScriptureCard(_ref2) {
|
|
|
1058
1087
|
});
|
|
1059
1088
|
}
|
|
1060
1089
|
|
|
1061
|
-
case
|
|
1090
|
+
case 56:
|
|
1062
1091
|
case "end":
|
|
1063
1092
|
return _context2.stop();
|
|
1064
1093
|
}
|
|
1065
1094
|
}
|
|
1066
|
-
}, _callee2, null, [[
|
|
1095
|
+
}, _callee2, null, [[27, 47, 50, 53]]);
|
|
1067
1096
|
}));
|
|
1068
1097
|
return _getReadyForSave.apply(this, arguments);
|
|
1069
1098
|
}
|
|
@@ -1561,4 +1590,4 @@ ScriptureCard.propTypes = {
|
|
|
1561
1590
|
/** use method for using local storage specific for user */
|
|
1562
1591
|
useUserLocalStorage: PropTypes.func.isRequired
|
|
1563
1592
|
};
|
|
1564
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL1NjcmlwdHVyZUNhcmQvU2NyaXB0dXJlQ2FyZC50c3giXSwibmFtZXMiOlsiUmVhY3QiLCJQcm9wVHlwZXMiLCJjb3JlIiwiU2VsZWN0aW9uc0NvbnRleHRQcm92aWRlciIsInVzZm1qcyIsInVzZUVkaXQiLCJJY29uQnV0dG9uIiwiUnhMaW5rMiIsIlJ4TGlua0JyZWFrMiIsIkNhcmQiLCJFcnJvckRpYWxvZyIsIkVSUk9SX1NUQVRFIiwiTUFOSUZFU1RfTk9UX0xPQURFRF9FUlJPUiIsIlVwZGF0ZUJyYW5jaEJ1dHRvbiIsInVzZUJyYW5jaE1lcmdlciIsInVzZUNhcmRTdGF0ZSIsInVzZUNvbnRlbnRVcGRhdGVQcm9wcyIsInVzZU1hc3Rlck1lcmdlUHJvcHMiLCJ1c2VVc2VyQnJhbmNoIiwiZ2V0UXVvdGVNYXRjaGVzSW5Cb29rUmVmIiwiQWxpZ25tZW50SGVscGVycyIsIlVzZm1GaWxlQ29udmVyc2lvbkhlbHBlcnMiLCJpc0VxdWFsIiwiZ2V0VmVyc2VzIiwiU2NyaXB0dXJlUGFuZSIsIlNjcmlwdHVyZVNlbGVjdG9yIiwidXNlU2NyaXB0dXJlU2V0dGluZ3MiLCJjbGVhbnVwVmVyc2VPYmplY3RzIiwiZml4T2NjdXJyZW5jZSIsImdldEJvb2tOYW1lRnJvbVVzZm1GaWxlTmFtZSIsImdldFJlc291cmNlTGluayIsImdldFJlc291cmNlTWVzc2FnZSIsImdldFNjcmlwdHVyZVZlcnNpb25TZXR0aW5ncyIsImlzT3JpZ2luYWxCaWJsZSIsImRlbGF5IiwiYXJlTWFwc1RoZVNhbWUiLCJUaXRsZSIsIk5UX09SSUdfTEFORyIsIk9SSUdJTkFMX1NPVVJDRSIsIk9UX09SSUdfTEFORyIsIlZlcnNlU2VsZWN0b3JQb3B1cCIsIktFWV9GT05UX1NJWkVfQkFTRSIsImxhYmVsIiwic3R5bGUiLCJtYXJnaW5Ub3AiLCJ3aWR0aCIsImNvbXBhcmVPYmplY3QiLCJ2ZXJzZVJlZiIsImNoYXB0ZXIiLCJ2ZXJzZSIsInZlcnNlRGF0YSIsInZlcnNlT2JqZWN0cyIsImxlbmd0aCIsIkpTT04iLCJzdHJpbmdpZnkiLCJhcmVWZXJzZXNTYW1lIiwidmVyc2VzRm9yUmVmMSIsInZlcnNlc0ZvclJlZjIiLCJhcmVTYW1lIiwiaSIsImwiLCJ2ZXJzZTEiLCJ2ZXJzZTIiLCJnZXRDdXJyZW50Qm9vayIsInNjcmlwdHVyZUNvbmZpZyIsImJvb2tJZCIsImxhdGVzdEJpYmxlIiwicmVzb3VyY2VTdGF0ZSIsInJlc291cmNlIiwicHJvamVjdElkIiwiZmlsZW5hbWUiLCJuYW1lIiwiaXNCb29rVmFsaWQiLCJib29rTmFtZSIsInRvTG93ZXJDYXNlIiwiaW5jbHVkZXMiLCJjb25zb2xlIiwid2FybiIsImJpYmxlVXNmbSIsImVycm9yIiwiU2NyaXB0dXJlQ2FyZCIsImFwcFJlZiIsImF1dGhlbnRpY2F0aW9uIiwiYm9va0luZGV4IiwiY2FyZE51bSIsImNsYXNzZXMiLCJkaXNhYmxlV29yZFBvcG92ZXIiLCJnZXRMYW5ndWFnZSIsImdldExleGljb25EYXRhIiwiZ3JlZWtSZXBvVXJsIiwiaGVicmV3UmVwb1VybCIsImh0dHBDb25maWciLCJpZCIsImlzTlQiLCJsb2dnZWRJblVzZXIiLCJvbk1pbmltaXplIiwib25SZXNvdXJjZUVycm9yIiwib3JpZ2luYWxTY3JpcHR1cmVCb29rT2JqZWN0cyIsInJlZmVyZW5jZSIsIm93bmVyIiwibGFuZ3VhZ2VJZCIsInJlc291cmNlSWQiLCJvcmlnaW5hbExhbmd1YWdlT3duZXIiLCJyZXNvdXJjZUxpbmsiLCJzZWxlY3RlZFF1b3RlIiwic2VydmVyIiwic2V0Q2FyZHNMb2FkaW5nTWVyZ2UiLCJzZXRDYXJkc0xvYWRpbmdVcGRhdGUiLCJzZXRDYXJkc1NhdmluZyIsInNldFNhdmVkQ2hhbmdlcyIsInNldFdvcmRBbGlnbmVyU3RhdHVzIiwidHJhbnNsYXRlIiwidGl0bGUiLCJ1c2VVc2VyTG9jYWxTdG9yYWdlIiwidXBkYXRlTWVyZ2VTdGF0ZSIsInVzZVN0YXRlIiwiY2hlY2tGb3JFZGl0QnJhbmNoIiwiY3VycmVudFJlZmVyZW5jZSIsImVkaXRCcmFuY2hSZWFkeSIsImhhdmVVbnNhdmVkQ2hhbmdlcyIsImxhc3RTZWxlY3RlZFF1b3RlIiwicmVhZHlGb3JGZXRjaCIsInJlZiIsInNhdmVDbGlja2VkIiwic2F2ZUNvbnRlbnQiLCJzZWxlY3Rpb25zIiwiTWFwIiwic2hvd0FsaWdubWVudFBvcHVwIiwic3RhcnRTYXZlIiwidXJsRXJyb3IiLCJ1c2luZ1VzZXJCcmFuY2giLCJ1bnNhdmVkQ2hhbmdlc0xpc3QiLCJ2ZXJzZXNBbGlnbm1lbnRTdGF0dXMiLCJ2ZXJzZXNGb3JSZWYiLCJ2ZXJzZU9iamVjdHNNYXAiLCJ2ZXJzZVNlbGVjdGVkRm9yQWxpZ25tZW50Iiwic3RhdGUiLCJzZXRTdGF0ZV8iLCJmb250U2l6ZSIsInNldEZvbnRTaXplIiwiaXNOVF8iLCJzZXRTdGF0ZSIsIm5ld1N0YXRlIiwicHJldlN0YXRlIiwiY2FjaGUiLCJtYXhBZ2UiLCJub0NhY2hlIiwic2V0VXJsRXJyb3IiLCJ3aG9sZUJvb2siLCJpc05ld1Rlc3RhbWVudCIsInNldFNjcmlwdHVyZSIsInNjcmlwdHVyZVNldHRpbmdzIiwic2NyaXB0dXJlVmVyc2lvbkhpc3QiLCJmZXRjaGVkUmVzb3VyY2UiLCJyZXBvIiwicmVmZXJlbmNlXyIsImNhcmRSZXNvdXJjZUlkIiwicmVmXyIsImNhblVzZUVkaXRCcmFuY2giLCJjYXJkSWQiLCJicmFuY2hEZXRlcm1pbmVkIiwidXNlckVkaXRCcmFuY2hOYW1lIiwiX3VzaW5nVXNlckJyYW5jaCIsIndvcmtpbmdSZXNvdXJjZUJyYW5jaCIsImFjdGlvbnMiLCJzdGFydEVkaXRCcmFuY2giLCJzdGFydEVkaXQiLCJmaW5pc2hFZGl0IiwiX3VzZUJyYW5jaE1lcmdlciIsInVzZXJCcmFuY2giLCJ0b2tlbmlkIiwidG9rZW4iLCJzaGExIiwibWVyZ2VUb01hc3RlciIsIm1lcmdlU3RhdHVzIiwibWVyZ2VGcm9tTWFzdGVyIiwidXBkYXRlU3RhdHVzIiwidXBkYXRlQnV0dG9uUHJvcHMiLCJpc1NhdmluZyIsIm9uVXBkYXRlIiwidGhlbiIsInJlbG9hZFJlc291cmNlIiwiY2FsbFVwZGF0ZVVzZXJCcmFuY2giLCJpc0Vycm9yRGlhbG9nT3BlbiIsIm9uQ2xvc2VFcnJvckRpYWxvZyIsImlzVXBkYXRlTG9hZGluZyIsImlzTG9hZGluZyIsImRpYWxvZ01lc3NhZ2UiLCJkaWFsb2dUaXRsZSIsImRpYWxvZ0xpbmsiLCJkaWFsb2dMaW5rVG9vbHRpcCIsIm9uTWVyZ2UiLCJsb2ciLCJpc01lcmdlTG9hZGluZyIsImNhbGxNZXJnZVVzZXJCcmFuY2giLCJ1c2VFZmZlY3QiLCJwcmV2Q2FyZHNMb2FkaW5nIiwiZmlsdGVyIiwid29ya2luZ1JlZiIsInNjcmlwdHVyZVRpdGxlIiwicmVzb3VyY2VTdGF0dXMiLCJtZXNzYWdlIiwiaXNBY2Nlc3NFcnJvciIsInZlcnNpb24iLCJ1cGRhdGVUaXRsZSIsImdldFNjcmlwdHVyZVNlbGVjdG9yIiwic2NyaXB0dXJlU2VsZWN0aW9uQ29uZmlnIiwib25NZW51Q2xvc2UiLCJsYW5ndWFnZUlkXyIsImxhbmd1YWdlIiwiZGlyZWN0aW9uIiwiX3JlZmVyZW5jZSIsImlzSGVicmV3IiwiZm9udEZhY3RvciIsInNjYWxlZEZvbnRTaXplIiwiaXRlbXMiLCJoZWFkZXJzIiwiZmlsdGVycyIsIml0ZW1JbmRleCIsIm1hcmtkb3duVmlldyIsInNldEZpbHRlcnMiLCJzZXRJdGVtSW5kZXgiLCJzZXRNYXJrZG93blZpZXciLCJyZWZTdHlsZSIsInVzZU1lbW8iLCJmb250RmFtaWx5IiwiTWF0aCIsInJvdW5kIiwiY29udGVudFN0eWxlIiwic2NyaXB0dXJlTGFiZWwiLCJkaXNhYmxlV29yZFBvcG92ZXJfIiwidXNpbmdPcmlnaW5hbEJpYmxlIiwidW5kZWZpbmVkIiwiZW5hYmxlRWRpdCIsImVuYWJsZUFsaWdubWVudCIsIm9yaWdpbmFsUmVwb1VybCIsInNjcmlwdHVyZUFsaWdubWVudEVkaXRDb25maWciLCJjdXJyZW50VmVyc2VSZWYiLCJfc2V0U2F2ZWRDaGFuZ2VzIiwic291cmNlTGFuZ3VhZ2UiLCJ0YXJnZXRMYW5ndWFnZSIsImN1cnJlbnRJbmRleCIsInNhdmVkIiwiZ2V0Q2hhbmdlcyIsImNsZWFyQ2hhbmdlcyIsIl91bnNhdmVkQ2hhbmdlc0xpc3QiLCJoYXNPd25Qcm9wZXJ0eSIsIl9oYXZlVW5zYXZlZENoYW5nZXMiLCJPYmplY3QiLCJrZXlzIiwiZmluZFJlZkluQXJyYXkiLCJmaW5kSXRlbSIsImNodW5rcyIsInJlZkxlbiIsImluZGV4IiwiZmluZEluZGV4IiwiY2h1bmsiLCJpZHgiLCJzdWJzdHJpbmciLCJuZXh0Q2hhciIsImdldEJvb2tOYW1lIiwiYm9va0NhcHMiLCJ0b1VwcGVyQ2FzZSIsImZpbGVwYXRoIiwic2hhIiwiY29udGVudCIsImNvbmZpZyIsImRvbnRDcmVhdGVCcmFuY2giLCJ0aW1lb3V0Iiwic2VydmVyVGltZU91dCIsImF1dGhvciIsImJyYW5jaCIsInNhdmVFcnJvciIsImlzU2F2ZUVycm9yIiwiaXNFcnJvciIsIm9uU2F2ZUVkaXQiLCJfc2F2ZUVkaXQiLCJpbmZvIiwic3VjY2VzcyIsInByZXZDYXJkc1NhdmluZyIsInVuc2F2ZWRDYXJkSW5kaWNlcyIsImNhcmRJbmRleCIsIm1lcmdlVmVyc2VPYmplY3RzSW50b0JpYmxlVXNmbSIsInVwZGF0ZWRWZXJzZU9iamVjdHMiLCJuZXdVc2ZtIiwiY2hhcHRlckNodW5rcyIsInNwbGl0IiwiY2hhcHRlckluZGV4IiwiY3VycmVudENoYXB0ZXIiLCJ2ZXJzZUNodW5rcyIsInZlcnNlSW5kZXgiLCJuZXdWZXJzZVVzZm0iLCJjb252ZXJ0VmVyc2VEYXRhVG9VU0ZNIiwib2xkVmVyc2UiLCJ2ZXJzZU51bUxlbiIsIm5ld0NoYXB0ZXIiLCJqb2luIiwiZ2V0UmVhZHlGb3JTYXZlIiwiY3JlYXRlRWRpdEJyYW5jaCIsIm1lcmdlRmFpbCIsInBhcnNlSW50IiwibmV3VmVyc2VUZXh0IiwidGFyZ2V0VmVyc2VPYmplY3RzXyIsInVwZGF0ZUFsaWdubWVudHNUb1RhcmdldFZlcnNlIiwidGFyZ2V0VmVyc2VPYmplY3RzIiwibmV3Qm9va0pzb24iLCJ1cGRhdGVWZXJzZSIsInRvVVNGTSIsImZvcmNlZE5ld0xpbmVzIiwiX3ZlcnNlc0ZvclJlZiIsIm5ld1NlbGVjdGlvbnMiLCJ1cGRhdGVTZWxlY3Rpb25zIiwiX21hcCIsIm9yaWdpbmFsQm9va0lkIiwiYm9va1ZlcnNlT2JqZWN0IiwiY2hhcHRlcnMiLCJuZXdTZWxlY3RlZFF1b3RlIiwicXVvdGUiLCJvcmlnaW5hbFZlcnNlcyIsInN1YnN0aXR1dGUiLCJzdGFydFZlcnNlIiwibGFzdFZlcnNlIiwiX3ZlcnNlIiwidmVyc2VzIiwidmVyc2VJdGVtIiwidm8iLCJjb25jYXQiLCJzZXQiLCJzdWJSZWYiLCJxdW90ZU1hdGNoZXMiLCJib29rT2JqZWN0Iiwib2NjdXJyZW5jZSIsInNpemUiLCJmb3JFYWNoIiwid29yZHMiLCJrZXkiLCJfa2V5IiwibWFwIiwid29yZCIsInRleHQiLCJub3JtYWxpemVTdHJpbmciLCJib29rc05vdFNhbWUiLCJ1cGRhdGVWZXJzZXNBbGlnbm1lbnRTdGF0dXMiLCJhbGlnbmVkIiwicmVuZGVyZWRTY3JpcHR1cmVQYW5lcyIsIl9jdXJyZW50VmVyc2VEYXRhIiwiaW5pdGlhbFZlcnNlT2JqZWN0cyIsIl9zY3JpcHR1cmVBbGlnbm1lbnRFZGl0Q29uZmlnIiwiaXNWZXJzZVNlbGVjdGVkRm9yQWxpZ25tZW50IiwiaGFuZGxlQWxpZ25CdXR0b25DbGljayIsIm9uUmVuZGVyVG9vbGJhciIsIm5ld0l0ZW1zIiwiYWxsVmVyc2VzQWxpZ25lZCIsInZhbHVlcyIsImV2ZXJ5IiwiYWxpZ25TdGF0dXMiLCJhbGlnbkljb24iLCJhbGlnbkJ1dHRvblRleHQiLCJwdXNoIiwiY3Vyc29yIiwicHJvcFR5cGVzIiwic3RyaW5nIiwiaXNSZXF1aXJlZCIsIm9iamVjdCIsIm51bWJlciIsImJvb2wiLCJmdW5jIiwic2hhcGUiLCJvbmVPZlR5cGUiLCJhbnkiLCJzZXRBcmVSZXNvdXJjZXNMb2FkaW5nIiwic2V0QXJlUmVzb3Vy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InNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0ICogYXMgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnXG5pbXBvcnQgeyBjb3JlLCBTZWxlY3Rpb25zQ29udGV4dFByb3ZpZGVyIH0gZnJvbSAnc2NyaXB0dXJlLXJlc291cmNlcy1yY2wnXG5pbXBvcnQgdXNmbWpzIGZyb20gJ3VzZm0tanMnXG5pbXBvcnQgeyB1c2VFZGl0IH0gZnJvbSAnZ2l0ZWEtcmVhY3QtdG9vbGtpdCdcbmltcG9ydCB7IEljb25CdXR0b24gfSBmcm9tICdAbXVpL21hdGVyaWFsJ1xuaW1wb3J0IHsgUnhMaW5rMiwgUnhMaW5rQnJlYWsyIH0gZnJvbSAncmVhY3QtaWNvbnMvcngnXG5pbXBvcnQge1xuICBDYXJkLFxuICBFcnJvckRpYWxvZyxcbiAgRVJST1JfU1RBVEUsXG4gIE1BTklGRVNUX05PVF9MT0FERURfRVJST1IsXG4gIFVwZGF0ZUJyYW5jaEJ1dHRvbixcbiAgdXNlQnJhbmNoTWVyZ2VyLFxuICB1c2VDYXJkU3RhdGUsXG4gIHVzZUNvbnRlbnRVcGRhdGVQcm9wcyxcbiAgdXNlTWFzdGVyTWVyZ2VQcm9wcyxcbiAgdXNlVXNlckJyYW5jaCxcbn0gZnJvbSAndHJhbnNsYXRpb24taGVscHMtcmNsJ1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgZ2V0UXVvdGVNYXRjaGVzSW5Cb29rUmVmIH0gZnJvbSAndXctcXVvdGUtaGVscGVycydcbmltcG9ydCB7IEFsaWdubWVudEhlbHBlcnMsIFVzZm1GaWxlQ29udmVyc2lvbkhlbHBlcnMgfSBmcm9tICd3b3JkLWFsaWduZXItcmNsJ1xuaW1wb3J0ICogYXMgaXNFcXVhbCBmcm9tICdkZWVwLWVxdWFsJ1xuaW1wb3J0IHsgZ2V0VmVyc2VzIH0gZnJvbSAnYmlibGUtcmVmZXJlbmNlLXJhbmdlJ1xuaW1wb3J0IHsgU2NyaXB0dXJlUGFuZSwgU2NyaXB0dXJlU2VsZWN0b3IgfSBmcm9tICcuLidcbmltcG9ydCB7IHVzZVNjcmlwdHVyZVNldHRpbmdzIH0gZnJvbSAnLi4vLi4vaG9va3MvdXNlU2NyaXB0dXJlU2V0dGluZ3MnXG5pbXBvcnQge1xuICBjbGVhbnVwVmVyc2VPYmplY3RzLFxuICBmaXhPY2N1cnJlbmNlLFxuICBnZXRCb29rTmFtZUZyb21Vc2ZtRmlsZU5hbWUsXG4gIGdldFJlc291cmNlTGluayxcbiAgZ2V0UmVzb3VyY2VNZXNzYWdlLFxuICBnZXRTY3JpcHR1cmVWZXJzaW9uU2V0dGluZ3MsXG4gIGlzT3JpZ2luYWxCaWJsZSxcbn0gZnJvbSAnLi4vLi4vdXRpbHMvU2NyaXB0dXJlU2V0dGluZ3MnXG5pbXBvcnQgeyBkZWxheSB9IGZyb20gJy4uLy4uL3V0aWxzL2RlbGF5J1xuaW1wb3J0IHsgYXJlTWFwc1RoZVNhbWUgfSBmcm9tICcuLi8uLi91dGlscy9tYXBzJ1xuaW1wb3J0IHsgVGl0bGUgfSBmcm9tICcuLi9TY3JpcHR1cmVQYW5lL3N0eWxlZCdcbmltcG9ydCB7XG4gIE5UX09SSUdfTEFORyxcbiAgT1JJR0lOQUxfU09VUkNFLFxuICBPVF9PUklHX0xBTkcsXG59IGZyb20gJy4uLy4uL3V0aWxzJ1xuaW1wb3J0IHsgVmVyc2VTZWxlY3RvclBvcHVwIH0gZnJvbSAnLi4vVmVyc2VTZWxlY3RvclBvcHVwJ1xuXG5jb25zdCBLRVlfRk9OVF9TSVpFX0JBU0UgPSAnc2NyaXB0dXJlUGFuZUZvbnRTaXplXydcbmNvbnN0IGxhYmVsID0gJ1ZlcnNpb24nXG5jb25zdCBzdHlsZSA9IHsgbWFyZ2luVG9wOiAnMTZweCcsIHdpZHRoOiAnNTAwcHgnIH1cblxuLyoqXG4gKiBjcmVhdGUgYSBzaG9ydCBjb21wYXJpc29uIHZlcnNlIHJlZiBvYmplY3Qgd2l0aG91dCBhbGwgdGhlIHZlcnNlRGF0YVxuICogQHBhcmFtIHZlcnNlUmVmXG4gKi9cbmZ1bmN0aW9uIGNvbXBhcmVPYmplY3QodmVyc2VSZWYpIHtcbiAgY29uc3Qge1xuICAgIGNoYXB0ZXIsXG4gICAgdmVyc2UsXG4gICAgdmVyc2VEYXRhLFxuICB9ID0gdmVyc2VSZWYgfHwge31cbiAgY29uc3QgdmVyc2VPYmplY3RzID0gdmVyc2VEYXRhPy52ZXJzZU9iamVjdHM/Lmxlbmd0aCA/IEpTT04uc3RyaW5naWZ5KHZlcnNlRGF0YS52ZXJzZU9iamVjdHMpIDogJydcbiAgcmV0dXJuIHtcbiAgICBjaGFwdGVyLFxuICAgIHZlcnNlLFxuICAgIHZlcnNlT2JqZWN0cyxcbiAgfVxufVxuXG4vKipcbiAqIGNvbXBhcmUgdHdvIHZlcnNlIHJlZnMgdG8gc2VlIGlmIHRoZXkgYXJlIHN1YnN0YW50aWFsbHkgc2ltaWxhclxuICogQHBhcmFtIHZlcnNlc0ZvclJlZjFcbiAqIEBwYXJhbSB2ZXJzZXNGb3JSZWYyXG4gKi9cbmZ1bmN0aW9uIGFyZVZlcnNlc1NhbWUodmVyc2VzRm9yUmVmMTogYW55W10sIHZlcnNlc0ZvclJlZjI6IGFueVtdKSB7XG4gIHZlcnNlc0ZvclJlZjEgPSB2ZXJzZXNGb3JSZWYxIHx8IFtdXG4gIHZlcnNlc0ZvclJlZjIgPSB2ZXJzZXNGb3JSZWYyIHx8IFtdXG4gIGxldCBhcmVTYW1lID0gZmFsc2VcblxuICBpZiAodmVyc2VzRm9yUmVmMS5sZW5ndGggPT09IHZlcnNlc0ZvclJlZjIubGVuZ3RoKSB7XG4gICAgYXJlU2FtZSA9IHRydWVcblxuICAgIGZvciAobGV0IGkgPSAwLCBsPSB2ZXJzZXNGb3JSZWYxLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgY29uc3QgdmVyc2UxID0gY29tcGFyZU9iamVjdCh2ZXJzZXNGb3JSZWYxW2ldKVxuICAgICAgY29uc3QgdmVyc2UyID0gY29tcGFyZU9iamVjdCh2ZXJzZXNGb3JSZWYyW2ldKVxuICAgICAgYXJlU2FtZSA9IGlzRXF1YWwodmVyc2UxLCB2ZXJzZTIpXG5cbiAgICAgIGlmICghYXJlU2FtZSkge1xuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBhcmVTYW1lXG59XG5cbi8qKlxuICogZ2V0IHRoZSBVU0ZNIGZvciBib29rSWQgZnJvbSBzY3JpcHR1cmVDb25maWcuXG4gKiBAcGFyYW0ge29iamVjdH0gc2NyaXB0dXJlQ29uZmlnXG4gKiBAcGFyYW0ge3N0cmluZ30gYm9va0lkXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRDdXJyZW50Qm9vayA9IChzY3JpcHR1cmVDb25maWcsIGJvb2tJZCkgPT4ge1xuICBjb25zdCBsYXRlc3RCaWJsZSA9IHNjcmlwdHVyZUNvbmZpZz8ucmVzb3VyY2VTdGF0ZT8ucmVzb3VyY2U/LnByb2plY3RJZFxuICBjb25zdCBmaWxlbmFtZSA9IHNjcmlwdHVyZUNvbmZpZz8ucmVzb3VyY2VTdGF0ZT8ucmVzb3VyY2U/Lm5hbWUgLy8gTGlrZSBcIjU3LVRJVC51c2ZtXCJcbiAgbGV0IGlzQm9va1ZhbGlkID0gZmFsc2VcbiAgY29uc3QgYm9va05hbWUgPSBnZXRCb29rTmFtZUZyb21Vc2ZtRmlsZU5hbWUoZmlsZW5hbWUpXG4gIGlzQm9va1ZhbGlkID0gYm9va05hbWU/LnRvTG93ZXJDYXNlKCk/LmluY2x1ZGVzKGJvb2tJZClcbiAgaWYgKCFpc0Jvb2tWYWxpZCkge1xuICAgIGNvbnNvbGUud2FybihgQ3VycmVudCBib29rSWQgaXMgJHtib29rSWR9IGFuZCBVU0ZNIGZpbGUgaXMgJHtmaWxlbmFtZX1gKVxuICB9XG4gIGlmIChsYXRlc3RCaWJsZT8udG9Mb3dlckNhc2UoKSAhPT0gYm9va0lkKSB7XG4gICAgY29uc29sZS53YXJuKGBDdXJyZW50IGJvb2tJZCBpcyAke2Jvb2tJZH0gYnV0IGZldGNoZWQgcHJvamVjdElkIGlzICR7bGF0ZXN0QmlibGV9YClcbiAgICBpc0Jvb2tWYWxpZCA9IGZhbHNlXG4gIH1cbiAgaWYgKGlzQm9va1ZhbGlkKSB7XG4gICAgY29uc3QgYmlibGVVc2ZtID0gc2NyaXB0dXJlQ29uZmlnPy5iaWJsZVVzZm07XG4gICAgaWYgKGJpYmxlVXNmbSkge1xuICAgICAgcmV0dXJuIGJpYmxlVXNmbVxuICAgIH1cbiAgICBjb25zb2xlLmVycm9yKGBnZXRDdXJyZW50Qm9vaygpIC0gQmlibGUgVVNGTSBtaXNzaW5nYClcbiAgfVxuICBjb25zb2xlLmVycm9yKGBnZXRDdXJyZW50Qm9vaygpIC0gRXhwZWN0ZWQgJHtib29rSWR9IGJ1dCBnb3QgZmlsZSAke2ZpbGVuYW1lfWApXG4gIHJldHVybiBudWxsXG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFNjcmlwdHVyZUNhcmQoe1xuICBhcHBSZWYsXG4gIGF1dGhlbnRpY2F0aW9uLFxuICBib29rSW5kZXgsXG4gIGNhcmROdW0sXG4gIGNsYXNzZXMsXG4gIGRpc2FibGVXb3JkUG9wb3ZlcixcbiAgZ2V0TGFuZ3VhZ2UsXG4gIGdldExleGljb25EYXRhLFxuICBncmVla1JlcG9VcmwsXG4gIGhlYnJld1JlcG9VcmwsXG4gIGh0dHBDb25maWcsXG4gIGlkLFxuICBpc05ULFxuICBsb2dnZWRJblVzZXIsXG4gIG9uTWluaW1pemUsXG4gIG9uUmVzb3VyY2VFcnJvcixcbiAgb3JpZ2luYWxTY3JpcHR1cmVCb29rT2JqZWN0cyxcbiAgcmVmZXJlbmNlLFxuICByZXNvdXJjZToge1xuICAgIG93bmVyLFxuICAgIGxhbmd1YWdlSWQsXG4gICAgcmVzb3VyY2VJZCxcbiAgICBvcmlnaW5hbExhbmd1YWdlT3duZXIsXG4gIH0sXG4gIHJlc291cmNlTGluayxcbiAgc2VsZWN0ZWRRdW90ZSxcbiAgc2VydmVyLFxuICBzZXRDYXJkc0xvYWRpbmdNZXJnZSxcbiAgc2V0Q2FyZHNMb2FkaW5nVXBkYXRlLFxuICBzZXRDYXJkc1NhdmluZyxcbiAgc2V0U2F2ZWRDaGFuZ2VzLFxuICBzZXRXb3JkQWxpZ25lclN0YXR1cyxcbiAgdHJhbnNsYXRlLFxuICB0aXRsZSxcbiAgdXNlVXNlckxvY2FsU3RvcmFnZSxcbiAgdXBkYXRlTWVyZ2VTdGF0ZSxcbn0pIHtcbiAgY29uc3QgYm9va0lkID0gcmVmZXJlbmNlPy5wcm9qZWN0SWRcbiAgY29uc3QgW3N0YXRlLCBzZXRTdGF0ZV9dID0gUmVhY3QudXNlU3RhdGUoe1xuICAgIGNoZWNrRm9yRWRpdEJyYW5jaDogMCxcbiAgICBjdXJyZW50UmVmZXJlbmNlOiBudWxsLFxuICAgIGVkaXRCcmFuY2hSZWFkeTogZmFsc2UsXG4gICAgaGF2ZVVuc2F2ZWRDaGFuZ2VzOiBmYWxzZSxcbiAgICBsYXN0U2VsZWN0ZWRRdW90ZTogbnVsbCxcbiAgICByZWFkeUZvckZldGNoOiBmYWxzZSxcbiAgICByZWY6IGFwcFJlZixcbiAgICBzYXZlQ2xpY2tlZDogZmFsc2UsXG4gICAgc2F2ZUNvbnRlbnQ6IG51bGwsXG4gICAgc2VsZWN0aW9uczogbmV3IE1hcCgpLFxuICAgIHNob3dBbGlnbm1lbnRQb3B1cDogZmFsc2UsXG4gICAgc3RhcnRTYXZlOiBmYWxzZSxcbiAgICB1cmxFcnJvcjogbnVsbCxcbiAgICB1c2luZ1VzZXJCcmFuY2g6IGZhbHNlLFxuICAgIHVuc2F2ZWRDaGFuZ2VzTGlzdDoge30sXG4gICAgdmVyc2VzQWxpZ25tZW50U3RhdHVzOiBudWxsLFxuICAgIHZlcnNlc0ZvclJlZjogbnVsbCxcbiAgICB2ZXJzZU9iamVjdHNNYXA6IG5ldyBNYXAoKSxcbiAgICB2ZXJzZVNlbGVjdGVkRm9yQWxpZ25tZW50OiBudWxsLFxuICB9KVxuICBjb25zdCB7XG4gICAgY2hlY2tGb3JFZGl0QnJhbmNoLFxuICAgIGN1cnJlbnRSZWZlcmVuY2UsXG4gICAgZWRpdEJyYW5jaFJlYWR5LFxuICAgIGhhdmVVbnNhdmVkQ2hhbmdlcyxcbiAgICBsYXN0U2VsZWN0ZWRRdW90ZSxcbiAgICByZWFkeUZvckZldGNoLFxuICAgIHJlZixcbiAgICBzYXZlQ2xpY2tlZCxcbiAgICBzYXZlQ29udGVudCxcbiAgICBzZWxlY3Rpb25zLFxuICAgIHNob3dBbGlnbm1lbnRQb3B1cCxcbiAgICBzdGFydFNhdmUsXG4gICAgdXJsRXJyb3IsXG4gICAgdXNpbmdVc2VyQnJhbmNoLFxuICAgIHVuc2F2ZWRDaGFuZ2VzTGlzdCxcbiAgICB2ZXJzZU9iamVjdHNNYXAsXG4gICAgdmVyc2VTZWxlY3RlZEZvckFsaWdubWVudCxcbiAgICB2ZXJzZXNBbGlnbm1lbnRTdGF0dXMsXG4gICAgdmVyc2VzRm9yUmVmLFxuICB9ID0gc3RhdGVcblxuICBjb25zdCBbZm9udFNpemUsIHNldEZvbnRTaXplXSA9IHVzZVVzZXJMb2NhbFN0b3JhZ2UoS0VZX0ZPTlRfU0laRV9CQVNFICsgY2FyZE51bSwgMTAwKVxuICBjb25zdCBpc05UXyA9IGlzTlQoYm9va0lkKVxuXG4gIGZ1bmN0aW9uIHNldFN0YXRlKG5ld1N0YXRlKSB7XG4gICAgc2V0U3RhdGVfKHByZXZTdGF0ZSA9PiAoeyAuLi5wcmV2U3RhdGUsIC4uLm5ld1N0YXRlIH0pKVxuICB9XG5cbiAgaHR0cENvbmZpZyA9IHtcbiAgICAuLi5odHRwQ29uZmlnLFxuICAgIGNhY2hlOiB7IG1heEFnZTogMCB9LFxuICAgIG5vQ2FjaGU6IHRydWUsXG4gIH0gLy8gZGlzYWJsZSBodHRwIGNhY2hpbmdcblxuICBjb25zdCB7XG4gICAgaXNOZXdUZXN0YW1lbnQsXG4gICAgc2NyaXB0dXJlQ29uZmlnLFxuICAgIHNldFNjcmlwdHVyZSxcbiAgICBzY3JpcHR1cmVTZXR0aW5ncyxcbiAgICBzY3JpcHR1cmVWZXJzaW9uSGlzdCxcbiAgfSA9IHVzZVNjcmlwdHVyZVNldHRpbmdzKHtcbiAgICBhcHBSZWY6IHJlZixcbiAgICBjYXJkTnVtLFxuICAgIGRpc2FibGVXb3JkUG9wb3ZlcixcbiAgICBncmVla1JlcG9VcmwsXG4gICAgaGVicmV3UmVwb1VybCxcbiAgICBodHRwQ29uZmlnLFxuICAgIGlzTlQsXG4gICAgbGFuZ3VhZ2VJZCxcbiAgICBvcmlnaW5hbExhbmd1YWdlT3duZXIsXG4gICAgb3duZXIsXG4gICAgcmVhZHlGb3JGZXRjaCxcbiAgICByZWZlcmVuY2U6IGN1cnJlbnRSZWZlcmVuY2UgfHwgcmVmZXJlbmNlLFxuICAgIHJlc291cmNlSWQsXG4gICAgcmVzb3VyY2VMaW5rLFxuICAgIHNldFVybEVycm9yOiAoZXJyb3IpID0+IHNldFN0YXRlKHsgdXJsRXJyb3I6IGVycm9yIH0pLFxuICAgIHNlcnZlcixcbiAgICB0aXRsZSxcbiAgICB1c2VVc2VyTG9jYWxTdG9yYWdlLFxuICAgIHdob2xlQm9vazogdHJ1ZSxcbiAgfSlcblxuICBjb25zdCBmZXRjaGVkUmVzb3VyY2UgPSBzY3JpcHR1cmVDb25maWc/LnJlc291cmNlU3RhdGVcbiAgLy8gQHRzLWlnbm9yZVxuICBjb25zdCByZXBvID0gYCR7c2NyaXB0dXJlQ29uZmlnPy5yZXNvdXJjZT8ubGFuZ3VhZ2VJZH1fJHtzY3JpcHR1cmVDb25maWc/LnJlc291cmNlPy5wcm9qZWN0SWR9YFxuICBjb25zdCByZWZlcmVuY2VfID0gc2NyaXB0dXJlQ29uZmlnPy5yZWZlcmVuY2UgfHwgbnVsbFxuXG4gIC8vIEB0cy1pZ25vcmVcbiAgY29uc3QgY2FyZFJlc291cmNlSWQgPSBzY3JpcHR1cmVDb25maWc/LnJlc291cmNlPy5wcm9qZWN0SWQgfHwgcmVzb3VyY2VJZFxuICAvLyBAdHMtaWdub3JlXG4gIGxldCByZWZfID0gc2NyaXB0dXJlQ29uZmlnPy5yZXNvdXJjZT8ucmVmIHx8IGFwcFJlZlxuICBjb25zdCBjYW5Vc2VFZGl0QnJhbmNoID0gISEobG9nZ2VkSW5Vc2VyICYmIGF1dGhlbnRpY2F0aW9uICYmIChyZXNvdXJjZUlkICE9PSBPUklHSU5BTF9TT1VSQ0UpICYmIC8vIFRSSUNLWSBpZiBub3Qgb3JpZ2luYWwgbGFuZ3VhZ2UgYW5kIHdlIGhhdmUgbG9naW4gZGF0YSwgdGhlbiB3ZSBjYW4gdXNlIHRoZSBlZGl0IGJyYW5jaFxuICAgICgocmVmXyA9PT0gJ21hc3RlcicpIHx8IChyZWZfLmluY2x1ZGVzKGxvZ2dlZEluVXNlcikpKSkgLy8gYWxzbyBtYWtlIHN1cmUgbm90IGEgdmVyc2lvbiB0YWdcblxuICBjb25zdCB7XG4gICAgc3RhdGU6IHtcbiAgICAgIGJyYW5jaERldGVybWluZWQsXG4gICAgICB1c2VyRWRpdEJyYW5jaE5hbWUsXG4gICAgICB1c2luZ1VzZXJCcmFuY2g6IF91c2luZ1VzZXJCcmFuY2gsXG4gICAgICB3b3JraW5nUmVzb3VyY2VCcmFuY2gsXG4gICAgfSxcbiAgICBhY3Rpb25zOiB7XG4gICAgICBzdGFydEVkaXQ6IHN0YXJ0RWRpdEJyYW5jaCxcbiAgICAgIGZpbmlzaEVkaXQsXG4gICAgfSxcbiAgfSA9IHVzZVVzZXJCcmFuY2goe1xuICAgIGFwcFJlZixcbiAgICBhdXRoZW50aWNhdGlvbjogY2FuVXNlRWRpdEJyYW5jaCA/IGF1dGhlbnRpY2F0aW9uIDogbnVsbCxcbiAgICBib29rSWQsXG4gICAgY2FyZElkOiBpZCxcbiAgICBjYXJkUmVzb3VyY2VJZCxcbiAgICBjaGVja0ZvckVkaXRCcmFuY2gsXG4gICAgbGFuZ3VhZ2VJZCxcbiAgICBsb2dnZWRJblVzZXI6IGNhblVzZUVkaXRCcmFuY2ggPyBsb2dnZWRJblVzZXIgOiBudWxsLFxuICAgIG93bmVyLFxuICAgIG9uUmVzb3VyY2VFcnJvcixcbiAgICBzZXJ2ZXIsXG4gICAgdXNlVXNlckxvY2FsU3RvcmFnZSxcbiAgfSlcblxuICBjb25zdCBfdXNlQnJhbmNoTWVyZ2VyID0gdXNlQnJhbmNoTWVyZ2VyKHsgc2VydmVyLCBvd25lciwgcmVwbywgdXNlckJyYW5jaDogdXNlckVkaXRCcmFuY2hOYW1lLCB0b2tlbmlkOiBhdXRoZW50aWNhdGlvbj8udG9rZW4/LnNoYTEgfSlcbiAgY29uc3Qge1xuICAgIHN0YXRlOiB7XG4gICAgICBtZXJnZVN0YXR1czogbWVyZ2VUb01hc3RlcixcbiAgICAgIHVwZGF0ZVN0YXR1czogbWVyZ2VGcm9tTWFzdGVyLFxuICAgIH0sXG4gIH0gPSBfdXNlQnJhbmNoTWVyZ2VyXG5cbiAgY29uc3QgdXBkYXRlQnV0dG9uUHJvcHMgPSB1c2VDb250ZW50VXBkYXRlUHJvcHMoe1xuICAgIGlzU2F2aW5nOiBzdGFydFNhdmUsXG4gICAgdXNlQnJhbmNoTWVyZ2VyOiBfdXNlQnJhbmNoTWVyZ2VyLFxuICAgIG9uVXBkYXRlOiAoKSA9PiB7XG4gICAgICBkZWxheSg1MDApLnRoZW4oKCkgPT4gc2NyaXB0dXJlQ29uZmlnPy5yZWxvYWRSZXNvdXJjZSgpKVxuICAgIH0sXG4gIH0pXG5cbiAgY29uc3Qge1xuICAgIGNhbGxVcGRhdGVVc2VyQnJhbmNoLFxuICAgIGlzRXJyb3JEaWFsb2dPcGVuLFxuICAgIG9uQ2xvc2VFcnJvckRpYWxvZyxcbiAgICBpc0xvYWRpbmc6IGlzVXBkYXRlTG9hZGluZyxcbiAgICBkaWFsb2dNZXNzYWdlLFxuICAgIGRpYWxvZ1RpdGxlLFxuICAgIGRpYWxvZ0xpbmssXG4gICAgZGlhbG9nTGlua1Rvb2x0aXAsXG4gIH0gPSB1cGRhdGVCdXR0b25Qcm9wc1xuXG4gIGNvbnN0IG9uTWVyZ2UgPSAoKSA9PiB7XG4gICAgZmluaXNoRWRpdCgpXG4gICAgY29uc29sZS5sb2coYG9uTWVyZ2UoKSBzd2l0Y2hpbmcgYmFjayB0byBtYXN0ZXIgYWZ0ZXIgbWVyZ2UgYXBwUmVmOmAsIGFwcFJlZilcbiAgICBzZXRTdGF0ZSh7XG4gICAgICByZWFkeUZvckZldGNoOiBmYWxzZSxcbiAgICAgIHJlZjogYXBwUmVmLFxuICAgIH0pXG4gICAgZGVsYXkoNTAwKS50aGVuKCgpID0+IHtcbiAgICAgIHNldFN0YXRlKHtcbiAgICAgICAgY2hlY2tGb3JFZGl0QnJhbmNoOiBjaGVja0ZvckVkaXRCcmFuY2ggKyAxLCAvLyB0cmlnZ2VyIHJlY2hlY2sgb2YgdXNlciBicmFuY2ggd2hpY2ggd2lsbCBzd2l0Y2ggdGhlIGJyYW5jaCBiYWNrIHRvIG1hc3RlclxuICAgICAgICByZWFkeUZvckZldGNoOiBmYWxzZSxcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxuXG4gIGNvbnN0IHsgaXNMb2FkaW5nOiBpc01lcmdlTG9hZGluZywgY2FsbE1lcmdlVXNlckJyYW5jaCB9ID0gdXNlTWFzdGVyTWVyZ2VQcm9wcyh7XG4gICAgaXNTYXZpbmc6IHN0YXJ0U2F2ZSxcbiAgICB1c2VCcmFuY2hNZXJnZXI6IF91c2VCcmFuY2hNZXJnZXIsXG4gICAgb25NZXJnZSxcbiAgfSlcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChjYXJkUmVzb3VyY2VJZCkge1xuICAgICAgdXBkYXRlTWVyZ2VTdGF0ZSAmJiB1cGRhdGVNZXJnZVN0YXRlKFxuICAgICAgICBjYXJkUmVzb3VyY2VJZCxcbiAgICAgICAgbWVyZ2VGcm9tTWFzdGVyLFxuICAgICAgICBtZXJnZVRvTWFzdGVyLFxuICAgICAgICBjYWxsVXBkYXRlVXNlckJyYW5jaCxcbiAgICAgICAgY2FsbE1lcmdlVXNlckJyYW5jaCxcbiAgICAgIClcbiAgICB9XG4gIH0sW2NhcmRSZXNvdXJjZUlkLCBtZXJnZUZyb21NYXN0ZXIsIG1lcmdlVG9NYXN0ZXJdKVxuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGlzVXBkYXRlTG9hZGluZykge1xuICAgICAgc2V0Q2FyZHNMb2FkaW5nVXBkYXRlPy4ocHJldkNhcmRzTG9hZGluZyA9PiBbLi4ucHJldkNhcmRzTG9hZGluZywgY2FyZFJlc291cmNlSWRdKVxuICAgIH0gZWxzZSB7XG4gICAgICBzZXRDYXJkc0xvYWRpbmdVcGRhdGU/LihwcmV2Q2FyZHNMb2FkaW5nID0+IHByZXZDYXJkc0xvYWRpbmcuZmlsdGVyKGNhcmRJZCA9PiBjYXJkSWQgIT09IGNhcmRSZXNvdXJjZUlkKSlcbiAgICB9XG4gIH0sIFtpc1VwZGF0ZUxvYWRpbmddKVxuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGlzTWVyZ2VMb2FkaW5nKSB7XG4gICAgICBzZXRDYXJkc0xvYWRpbmdNZXJnZT8uKHByZXZDYXJkc0xvYWRpbmcgPT4gWy4uLnByZXZDYXJkc0xvYWRpbmcsIGNhcmRSZXNvdXJjZUlkXSlcbiAgICB9IGVsc2Uge1xuICAgICAgc2V0Q2FyZHNMb2FkaW5nTWVyZ2U/LihwcmV2Q2FyZHNMb2FkaW5nID0+IHByZXZDYXJkc0xvYWRpbmcuZmlsdGVyKGNhcmRJZCA9PiBjYXJkSWQgIT09IGNhcmRSZXNvdXJjZUlkKSlcbiAgICB9XG4gIH0sIFtpc01lcmdlTG9hZGluZ10pXG5cbiAgY29uc3Qgd29ya2luZ1JlZiA9IGNhblVzZUVkaXRCcmFuY2ggPyB3b3JraW5nUmVzb3VyY2VCcmFuY2ggOiBhcHBSZWZcbiAgbGV0IHNjcmlwdHVyZVRpdGxlXG5cbiAgaWYgKCFjYW5Vc2VFZGl0QnJhbmNoICYmICFyZWFkeUZvckZldGNoKSB7IC8vIGlmIGJpYmxlIG5vdCBlbGlnaWJsZSBmb3IgdXNlciBicmFuY2gsIG1ha2Ugc3VyZSBpdCdzIHJlYWR5XG4gICAgc2V0U3RhdGUoeyByZWFkeUZvckZldGNoOiB0cnVlIH0pXG4gIH1cblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnNvbGUubG9nKGBTY3JpcHR1cmVDYXJkIGJvb2sgY2hhbmdlZGAsIHsgYm9va0lkLCBvd25lciwgbGFuZ3VhZ2VJZCwgcmVzb3VyY2VJZCB9KVxuXG4gICAgaWYgKGNhblVzZUVkaXRCcmFuY2gpIHsgLy8gaWYgYmlibGUgZWxpZ2libGUgZm9yIHVzZXIgYnJhbmNoLCByZWZyZXNoIGl0XG4gICAgICBzZXRTdGF0ZSh7IHJlYWR5Rm9yRmV0Y2g6IGZhbHNlLCBjaGVja0ZvckVkaXRCcmFuY2g6IGNoZWNrRm9yRWRpdEJyYW5jaCArIDEgfSlcbiAgICB9XG4gIH0sIFtib29rSWQsIG93bmVyLCBsYW5ndWFnZUlkLCByZXNvdXJjZUlkXSlcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghaXNFcXVhbChyZWZlcmVuY2UsIGN1cnJlbnRSZWZlcmVuY2UpKSB7XG4gICAgICAvLyBjb25zb2xlLmxvZyhgU2NyaXB0dXJlQ2FyZCByZWZlcmVuY2UgY2hhbmdlZGAsIHJlZmVyZW5jZSlcbiAgICAgIHNldFN0YXRlKHsgY3VycmVudFJlZmVyZW5jZTogcmVmZXJlbmNlIH0pXG4gICAgfVxuICB9LCBbcmVmZXJlbmNlXSlcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4geyAvLyB3YWl0aW5nIGZvciBicmFuY2ggZmV0Y2ggdG8gY29tcGxldGVcbiAgICBpZiAoIXJlYWR5Rm9yRmV0Y2ggJiYgYnJhbmNoRGV0ZXJtaW5lZCApIHtcbiAgICAgIGNvbnNvbGUubG9nKGBTY3JpcHR1cmVDYXJkIGJyYW5jaERldGVybWluZWQgaXMgJHticmFuY2hEZXRlcm1pbmVkfSBhbmQgd29ya2luZ1JlZiBpcyAke3dvcmtpbmdSZWZ9YClcbiAgICAgIHNldFN0YXRlKHsgcmVhZHlGb3JGZXRjaDogdHJ1ZSwgcmVmOiB3b3JraW5nUmVmIH0pXG4gICAgfVxuICB9LCBbYnJhbmNoRGV0ZXJtaW5lZF0pXG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHsgLy8gc2VsZWN0IGNvcnJlY3Qgd29ya2luZyByZWYgLSBjb3VsZCBiZSBtYXN0ZXIsIHVzZXIgYnJhbmNoLCBvciByZWxlYXNlXG4gICAgaWYgKF91c2luZ1VzZXJCcmFuY2ggIT09IHVzaW5nVXNlckJyYW5jaCkge1xuICAgICAgc2V0U3RhdGUoeyB1c2luZ1VzZXJCcmFuY2g6IF91c2luZ1VzZXJCcmFuY2ggfSlcbiAgICB9XG4gIH0sIFtfdXNpbmdVc2VyQnJhbmNoLCB1c2luZ1VzZXJCcmFuY2hdKVxuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7IC8vIHVwZGF0ZSBkaXNwbGF5IHN0YXR1cyBpZiBlcnJvclxuICAgIGNvbnN0IGVycm9yID0gc2NyaXB0dXJlQ29uZmlnPy5yZXNvdXJjZVN0YXR1cz8uW0VSUk9SX1NUQVRFXVxuXG4gICAgaWYgKGVycm9yKSB7IC8vIGlmIGVycm9yIHdhcyBmb3VuZCBkbyBjYWxsYmFja1xuICAgICAgY29uc3QgcmVzb3VyY2VTdGF0dXMgPSBzY3JpcHR1cmVDb25maWc/LnJlc291cmNlU3RhdHVzXG4gICAgICBjb25zdCByZXNvdXJjZUxpbmsgPSBnZXRSZXNvdXJjZUxpbmsoc2NyaXB0dXJlQ29uZmlnKVxuICAgICAgY29uc3QgbWVzc2FnZSA9IGdldFJlc291cmNlTWVzc2FnZShyZXNvdXJjZVN0YXR1cywgc2VydmVyLCByZXNvdXJjZUxpbmssIGlzTlRfKVxuICAgICAgY29uc3QgaXNBY2Nlc3NFcnJvciA9IHJlc291cmNlU3RhdHVzW01BTklGRVNUX05PVF9MT0FERURfRVJST1JdXG4gICAgICBvblJlc291cmNlRXJyb3IgJiYgb25SZXNvdXJjZUVycm9yKG1lc3NhZ2UsIGlzQWNjZXNzRXJyb3IsIHJlc291cmNlU3RhdHVzKVxuICAgIH1cbiAgfSwgW3NjcmlwdHVyZUNvbmZpZz8ucmVzb3VyY2VTdGF0dXM/LltFUlJPUl9TVEFURV1dKVxuXG4gIGlmIChzY3JpcHR1cmVDb25maWcudGl0bGUgJiYgc2NyaXB0dXJlQ29uZmlnLnZlcnNpb24pIHtcbiAgICBzY3JpcHR1cmVUaXRsZSA9IGAke3NjcmlwdHVyZUNvbmZpZy50aXRsZX0gdiR7c2NyaXB0dXJlQ29uZmlnLnZlcnNpb259YFxuICAgIHNjcmlwdHVyZVZlcnNpb25IaXN0LnVwZGF0ZVRpdGxlKHNjcmlwdHVyZUNvbmZpZy5yZXNvdXJjZUxpbmssIHNjcmlwdHVyZVRpdGxlKVxuICB9IGVsc2Uge1xuICAgIHNjcmlwdHVyZVRpdGxlID0gYFRpdGxlIG1pc3NpbmcgZnJvbSBwcm9qZWN0IG1hbmlmZXN0YFxuICB9XG5cbiAgLyoqIER5bmFtaWNhbGx5IGNyZWF0ZXMgdGhlIHNjcmlwdHVyZSBzZWxlY3Rpb24gZHJvcGRvd24gdG8gYmUgaW5zZXJ0ZWQgaW50byBjYXJkIHNldHRpbmdzICovXG4gIGZ1bmN0aW9uIGdldFNjcmlwdHVyZVNlbGVjdG9yKCkge1xuICAgIGNvbnN0IHNjcmlwdHVyZVNlbGVjdGlvbkNvbmZpZyA9IGdldFNjcmlwdHVyZVZlcnNpb25TZXR0aW5ncyh7XG4gICAgICBsYWJlbCxcbiAgICAgIHJlc291cmNlTGluazogc2NyaXB0dXJlQ29uZmlnLnJlc291cmNlTGluayxcbiAgICAgIHNldFNjcmlwdHVyZSxcbiAgICAgIHNjcmlwdHVyZVZlcnNpb25IaXN0LFxuICAgIH0pXG5cbiAgICByZXR1cm4gPFNjcmlwdHVyZVNlbGVjdG9yIHsuLi5zY3JpcHR1cmVTZWxlY3Rpb25Db25maWd9IHN0eWxlPXtzdHlsZX0gZXJyb3JNZXNzYWdlPXt1cmxFcnJvcn0gLz5cbiAgfVxuXG4gIGZ1bmN0aW9uIG9uTWVudUNsb3NlKCkge1xuICAgIC8vIGNvbnNvbGUubG9nKGBvbk1lbnVDbG9zZSgpYClcbiAgICBzZXRTdGF0ZSh7IHVybEVycm9yOiBudWxsIH0pXG4gIH1cblxuICAvLyBAdHMtaWdub3JlXG4gIGNvbnN0IGxhbmd1YWdlSWRfID0gc2NyaXB0dXJlQ29uZmlnPy5yZXNvdXJjZT8ubGFuZ3VhZ2VJZFxuICBjb25zdCBsYW5ndWFnZSA9IGdldExhbmd1YWdlKHsgbGFuZ3VhZ2VJZDogbGFuZ3VhZ2VJZF8gfSlcbiAgY29uc3QgZGlyZWN0aW9uID0gKGxhbmd1YWdlPy5kaXJlY3Rpb24pIHx8ICdsdHInXG4gIGNvbnN0IF9yZWZlcmVuY2UgPSBjdXJyZW50UmVmZXJlbmNlIHx8IHJlZmVyZW5jZVxuXG4gIGNvbnN0IGlzSGVicmV3ID0gKGxhbmd1YWdlSWRfID09PSAnaGJvJylcbiAgY29uc3QgZm9udEZhY3RvciA9IGlzSGVicmV3ID8gMS40IDogMSAvLyB3ZSBhdXRvbWF0aWNhbGx5IHNjYWxlIHVwIGZvbnQgc2l6ZSBmb3IgSGVicmV3XG4gIGNvbnN0IHNjYWxlZEZvbnRTaXplID0gZm9udFNpemUgKiBmb250RmFjdG9yXG5cbiAgY29uc3QgaXRlbXMgPSBudWxsXG4gIGNvbnN0IHtcbiAgICBzdGF0ZToge1xuICAgICAgaGVhZGVycywgZmlsdGVycywgaXRlbUluZGV4LCBtYXJrZG93blZpZXcsXG4gICAgfSxcbiAgICBhY3Rpb25zOiB7XG4gICAgICBzZXRGaWx0ZXJzLCBzZXRJdGVtSW5kZXgsIHNldE1hcmtkb3duVmlldyxcbiAgICB9LFxuICB9ID0gdXNlQ2FyZFN0YXRlKHsgaXRlbXMgfSlcblxuICBjb25zdCByZWZTdHlsZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHtcbiAgICBmb250RmFtaWx5OiAnTm90byBTYW5zJyxcbiAgICBmb250U2l6ZTogYCR7TWF0aC5yb3VuZChzY2FsZWRGb250U2l6ZSAqIDAuOSl9JWAsXG4gIH0pLCBbc2NhbGVkRm9udFNpemVdKVxuXG4gIGNvbnN0IGNvbnRlbnRTdHlsZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHtcbiAgICBmb250RmFtaWx5OiAnTm90byBTYW5zJyxcbiAgICBmb250U2l6ZTogYCR7c2NhbGVkRm9udFNpemV9JWAsXG4gIH0pLCBbc2NhbGVkRm9udFNpemVdKVxuXG4gIGNvbnN0IHNjcmlwdHVyZUxhYmVsID0gPFRpdGxlPntzY3JpcHR1cmVUaXRsZX08L1RpdGxlPlxuICBsZXQgZGlzYWJsZVdvcmRQb3BvdmVyXyA9IGRpc2FibGVXb3JkUG9wb3ZlclxuICBjb25zdCB1c2luZ09yaWdpbmFsQmlibGUgPSBpc09yaWdpbmFsQmlibGUoc2NyaXB0dXJlQ29uZmlnWydyZXNvdXJjZSddPy5wcm9qZWN0SWQpXG5cbiAgaWYgKGRpc2FibGVXb3JkUG9wb3ZlciA9PT0gdW5kZWZpbmVkKSB7IC8vIGlmIG5vdCBzcGVjaWZpZWQsIHRoZW4gZGV0ZXJtaW5lIGlmIG9yaWdpbmFsIGxhbmd1YWdlIHJlc291cmNlXG4gICAgZGlzYWJsZVdvcmRQb3BvdmVyXyA9ICF1c2luZ09yaWdpbmFsQmlibGVcbiAgfVxuXG4gIGNvbnN0IGVuYWJsZUVkaXQgPSAhdXNpbmdPcmlnaW5hbEJpYmxlXG4gIGNvbnN0IGVuYWJsZUFsaWdubWVudCA9ICF1c2luZ09yaWdpbmFsQmlibGVcbiAgY29uc3Qgb3JpZ2luYWxSZXBvVXJsID0gaXNOZXdUZXN0YW1lbnQgPyBncmVla1JlcG9VcmwgOiBoZWJyZXdSZXBvVXJsXG4gIGNvbnN0IHNjcmlwdHVyZUFsaWdubWVudEVkaXRDb25maWcgPSB7XG4gICAgYXV0aGVudGljYXRpb246IGNhblVzZUVkaXRCcmFuY2ggPyBhdXRoZW50aWNhdGlvbiA6IG51bGwsXG4gICAgYm9va0luZGV4LFxuICAgIGN1cnJlbnRWZXJzZVJlZjogX3JlZmVyZW5jZSxcbiAgICBlbmFibGVFZGl0LFxuICAgIGVuYWJsZUFsaWdubWVudCxcbiAgICBodHRwQ29uZmlnLFxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBpc05ld1Rlc3RhbWVudCxcbiAgICBsb2dnZWRJblVzZXI6IGNhblVzZUVkaXRCcmFuY2ggPyBsb2dnZWRJblVzZXIgOiBudWxsLFxuICAgIG9yaWdpbmFsTGFuZ3VhZ2VPd25lcixcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgb3JpZ2luYWxSZXBvVXJsLFxuICAgIHNjcmlwdHVyZUNvbmZpZyxcbiAgICBzY3JpcHR1cmVTZXR0aW5ncyxcbiAgICBzdGFydEVkaXRCcmFuY2gsXG4gICAgc2V0U2F2ZWRDaGFuZ2VzOiBfc2V0U2F2ZWRDaGFuZ2VzLFxuICAgIHNvdXJjZUxhbmd1YWdlOiBpc05UXyA/IE5UX09SSUdfTEFORyA6IE9UX09SSUdfTEFORyxcbiAgICB0YXJnZXRMYW5ndWFnZTogbGFuZ3VhZ2UsXG4gICAgdGl0bGU6IHNjcmlwdHVyZVRpdGxlLFxuICAgIHdvcmtpbmdSZXNvdXJjZUJyYW5jaDogcmVmLFxuICB9XG5cbiAgLyoqXG4gICAqIHRoaXMgZ2V0cyBjYWxsZWQgd2hlbmV2ZXIgYSBzY3JpcHR1cmUgcGFuZSBoYXMgYSBjaGFuZ2UgaW4gc2F2ZSBzdGF0ZVxuICAgKiBAcGFyYW0ge251bWJlcn0gY3VycmVudEluZGV4XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2F2ZWRcbiAgICogQHBhcmFtIHtmdW5jdGlvbn0gZ2V0Q2hhbmdlcyAtIHdpbGwgYmUgY2FsbGVkIHdoZW5ldmVyIHVzZXIgY2xpY2tzIHNhdmUgYnV0dG9uXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IGNsZWFyQ2hhbmdlcyAtIHdpbGwgYmUgY2FsbGVkIHdoZW5ldmVyIHNhdmUgaGFzIGNvbXBsZXRlZFxuICAgKiBAcGFyYW0ge29iamVjdH0gc3RhdGUgLSBjdXJyZW50IHN0YXRlIG9mIHdvcmQgYWxpZ25tZW50L2VkaXRcbiAgICovXG4gIGZ1bmN0aW9uIF9zZXRTYXZlZENoYW5nZXMoY3VycmVudEluZGV4LCBzYXZlZCwgeyBnZXRDaGFuZ2VzID0gbnVsbCwgY2xlYXJDaGFuZ2VzID0gbnVsbCwgc3RhdGUgPSBudWxsIH0pIHtcbiAgICBjb25zdCBfdW5zYXZlZENoYW5nZXNMaXN0ID0geyAuLi51bnNhdmVkQ2hhbmdlc0xpc3QgfVxuXG4gICAgaWYgKHNhdmVkKSB7XG4gICAgICBpZiAoX3Vuc2F2ZWRDaGFuZ2VzTGlzdC5oYXNPd25Qcm9wZXJ0eShjdXJyZW50SW5kZXgpKSB7XG4gICAgICAgIGRlbGV0ZSBfdW5zYXZlZENoYW5nZXNMaXN0W2N1cnJlbnRJbmRleF1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgX3Vuc2F2ZWRDaGFuZ2VzTGlzdFtjdXJyZW50SW5kZXhdID0geyBnZXRDaGFuZ2VzLCBjbGVhckNoYW5nZXMsIHN0YXRlIH0gLy8gdXBkYXRlIHdpdGggbGF0ZXN0XG4gICAgfVxuXG4gICAgY29uc3QgX2hhdmVVbnNhdmVkQ2hhbmdlcyA9ICEhT2JqZWN0LmtleXMoX3Vuc2F2ZWRDaGFuZ2VzTGlzdCkubGVuZ3RoXG5cbiAgICBpZiAoaGF2ZVVuc2F2ZWRDaGFuZ2VzICE9IF9oYXZlVW5zYXZlZENoYW5nZXMpIHtcbiAgICAgIHNldFNhdmVkQ2hhbmdlcyAmJiBzZXRTYXZlZENoYW5nZXMocmVzb3VyY2VJZCwgIV9oYXZlVW5zYXZlZENoYW5nZXMpXG4gICAgICBzZXRTdGF0ZSh7IGhhdmVVbnNhdmVkQ2hhbmdlczogX2hhdmVVbnNhdmVkQ2hhbmdlcyB9KVxuICAgIH1cblxuICAgIGlmICghaXNFcXVhbChfdW5zYXZlZENoYW5nZXNMaXN0LCB1bnNhdmVkQ2hhbmdlc0xpc3QpKSB7XG4gICAgICBzZXRTdGF0ZSh7IHVuc2F2ZWRDaGFuZ2VzTGlzdDogX3Vuc2F2ZWRDaGFuZ2VzTGlzdCB9KVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBzZWFyY2ggY2hhcHRlciBvciB2ZXJzZSBjaHVuayB0byBsaW5lIHRoYXQgc3RhcnRzIHdpdGggZmluZEl0ZW1cbiAgICogQHBhcmFtIHtudW1iZXJ8c3RyaW5nfSBmaW5kSXRlbVxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBjaHVua3NcbiAgICovXG4gIGZ1bmN0aW9uIGZpbmRSZWZJbkFycmF5KGZpbmRJdGVtLCBjaHVua3MpIHtcbiAgICBjb25zdCByZWZfID0gZmluZEl0ZW0gKyAnJ1xuICAgIGNvbnN0IHJlZkxlbiA9IHJlZl8ubGVuZ3RoXG4gICAgY29uc3QgaW5kZXggPSBjaHVua3MuZmluZEluZGV4KChjaHVuaywgaWR4KSA9PiB7XG4gICAgICBpZiAoaWR4ID4gMCkge1xuICAgICAgICBpZiAoY2h1bmsuc3Vic3RyaW5nKDAsIHJlZkxlbikgPT09IHJlZl8pIHtcbiAgICAgICAgICBjb25zdCBuZXh0Q2hhciA9IGNodW5rW3JlZkxlbl1cblxuICAgICAgICAgIGlmICgobmV4dENoYXIgPiAnOScpIHx8IChuZXh0Q2hhciA8ICcwJykpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9KVxuICAgIHJldHVybiBpbmRleFxuICB9XG5cbiAgZnVuY3Rpb24gZ2V0Qm9va05hbWUoKSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGNvbnN0IGJvb2tDYXBzID0gc2NyaXB0dXJlQ29uZmlnPy5yZWZlcmVuY2U/LnByb2plY3RJZCA/IHNjcmlwdHVyZUNvbmZpZy5yZWZlcmVuY2UucHJvamVjdElkLnRvVXBwZXJDYXNlKCkgOiAnJ1xuICAgIHJldHVybiBgJHtib29rSW5kZXh9LSR7Ym9va0NhcHN9LnVzZm1gXG4gIH1cblxuICBjb25zdCBmaWxlcGF0aCA9IGdldEJvb2tOYW1lKClcbiAgY29uc3Qgc2hhID0gZmV0Y2hlZFJlc291cmNlPy5zaGFcblxuICAvLyBrZWVwIHRyYWNrIG9mIHZlcnNlIGVkaXQgc3RhdGVcbiAgY29uc3Qge1xuICAgIGVycm9yOiBzYXZlRXJyb3IsXG4gICAgaXNFcnJvcjogaXNTYXZlRXJyb3IsXG4gICAgb25TYXZlRWRpdCxcbiAgfSA9IHVzZUVkaXQoe1xuICAgIHNoYSxcbiAgICBvd25lcixcbiAgICBjb250ZW50OiBzYXZlQ29udGVudCxcbiAgICBjb25maWc6IHtcbiAgICAgIGNhY2hlOiB7IG1heEFnZTogMCB9LFxuICAgICAgLi4uYXV0aGVudGljYXRpb24/LmNvbmZpZyxcbiAgICAgIGRvbnRDcmVhdGVCcmFuY2g6IHRydWUsXG4gICAgICB0b2tlbjogYXV0aGVudGljYXRpb24/LnRva2VuLFxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgdGltZW91dDogaHR0cENvbmZpZz8uc2VydmVyVGltZU91dCB8fCBodHRwQ29uZmlnPy50aW1lb3V0IHx8IDEwMDAwLFxuICAgICAgc2VydmVyLFxuICAgIH0sXG4gICAgYXV0aG9yOiBsb2dnZWRJblVzZXIsXG4gICAgdG9rZW46IGF1dGhlbnRpY2F0aW9uPy50b2tlbixcbiAgICBicmFuY2g6IHdvcmtpbmdSZXNvdXJjZUJyYW5jaCxcbiAgICBmaWxlcGF0aCxcbiAgICByZXBvLFxuICB9KVxuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7IC8vIHdoZW4gd2UgZ2V0IGEgc2F2ZSBzYXZlRXJyb3JcbiAgICBpZiAoc2F2ZUVycm9yICYmIGlzU2F2ZUVycm9yKSB7XG4gICAgICBjb25zb2xlLmxvZyhgc2F2ZSBlcnJvcmAsIHNhdmVFcnJvcilcbiAgICAgIG9uUmVzb3VyY2VFcnJvciAmJiBvblJlc291cmNlRXJyb3IobnVsbCwgZmFsc2UsIG51bGwsIGBFcnJvciBzYXZpbmcgJHtsYW5ndWFnZUlkX31fJHtyZXNvdXJjZUlkfSAke3NhdmVFcnJvcn1gLCB0cnVlKVxuICAgIH1cbiAgfSwgW3NhdmVFcnJvciwgaXNTYXZlRXJyb3JdKVxuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7IC8vIHdoZW4gc3RhcnRTYXZlIGdvZXMgdHJ1ZSwgc2F2ZSBlZGl0cyB0byB1c2VyIGJyYW5jaCBhbmQgdGhlbiBjbGVhciBzdGFydFNhdmVcbiAgICBjb25zdCBfc2F2ZUVkaXQgPSBhc3luYyAoKSA9PiB7IC8vIGJlZ2luIHVwbG9hZGluZyBuZXcgVVNGTVxuICAgICAgY29uc29sZS5pbmZvKGBzYXZlQ2hhbmdlc1RvQ2xvdWQoKSAtIFVzaW5nIHNoYTogJHtzaGF9YClcbiAgICAgIGF3YWl0IG9uU2F2ZUVkaXQodXNlckVkaXRCcmFuY2hOYW1lKS50aGVuKChzdWNjZXNzKSA9PiB7IC8vIHB1c2ggY2hhbmdlIHRvIHNlcnZlclxuICAgICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBzYXZlQ2hhbmdlc1RvQ2xvdWQoKSAtIHNhdmUgc2NyaXB0dXJlIGVkaXRzIHN1Y2Nlc3NgKVxuICAgICAgICAgIHNldENhcmRzU2F2aW5nKHByZXZDYXJkc1NhdmluZyA9PiBwcmV2Q2FyZHNTYXZpbmcuZmlsdGVyKGNhcmRJZCA9PiBjYXJkSWQgIT09IGNhcmRSZXNvdXJjZUlkKSlcbiAgICAgICAgICBzZXRTdGF0ZSh7XG4gICAgICAgICAgICBzdGFydFNhdmU6IGZhbHNlLFxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICBjb25zdCB1bnNhdmVkQ2FyZEluZGljZXMgPSBPYmplY3Qua2V5cyh1bnNhdmVkQ2hhbmdlc0xpc3QpXG5cbiAgICAgICAgICBpZiAodW5zYXZlZENhcmRJbmRpY2VzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY2FyZEluZGV4IG9mIHVuc2F2ZWRDYXJkSW5kaWNlcykge1xuICAgICAgICAgICAgICBjb25zdCB7IGNsZWFyQ2hhbmdlcyB9ID0gdW5zYXZlZENoYW5nZXNMaXN0W2NhcmRJbmRleF1cbiAgICAgICAgICAgICAgY2xlYXJDaGFuZ2VzICYmIGNsZWFyQ2hhbmdlcygpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc29sZS5pbmZvKCdzYXZlQ2hhbmdlc1RvQ2xvdWQoKSAtIFJlbG9hZGluZyByZXNvdXJjZScpXG4gICAgICAgICAgc2V0U3RhdGUoe1xuICAgICAgICAgICAgc3RhcnRTYXZlOiBmYWxzZSxcbiAgICAgICAgICAgIHJlYWR5Rm9yRmV0Y2g6IHRydWUsXG4gICAgICAgICAgICByZWY6IHVzZXJFZGl0QnJhbmNoTmFtZSxcbiAgICAgICAgICB9KVxuICAgICAgICAgIGRlbGF5KDEwMCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBzZXRDYXJkc1NhdmluZyhwcmV2Q2FyZHNTYXZpbmcgPT4gcHJldkNhcmRzU2F2aW5nLmZpbHRlcihjYXJkSWQgPT4gY2FyZElkICE9PSBjYXJkUmVzb3VyY2VJZCkpXG4gICAgICAgICAgICBzY3JpcHR1cmVDb25maWc/LnJlbG9hZFJlc291cmNlKHNoYSwgdXNlckVkaXRCcmFuY2hOYW1lKVxuICAgICAgICAgIH0pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignc2F2ZUNoYW5nZXNUb0Nsb3VkKCkgLSBzYXZpbmcgY2hhbmdlZCBzY3JpcHR1cmUgZmFpbGVkJylcbiAgICAgICAgICBzZXRDYXJkc1NhdmluZyhwcmV2Q2FyZHNTYXZpbmcgPT4gcHJldkNhcmRzU2F2aW5nLmZpbHRlcihjYXJkSWQgPT4gY2FyZElkICE9PSBjYXJkUmVzb3VyY2VJZCkpXG4gICAgICAgICAgc2V0U3RhdGUoeyBzdGFydFNhdmU6IGZhbHNlIH0pXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKHN0YXJ0U2F2ZSkge1xuICAgICAgaWYgKCFlZGl0QnJhbmNoUmVhZHkpIHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coYHNhdmVDaGFuZ2VzVG9DbG91ZCAtIGVkaXQgYnJhbmNoIG5vdCB5ZXQgY3JlYXRlZGApXG4gICAgICB9IGVsc2UgaWYgKCFzaGEpIHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coYHNhdmVDaGFuZ2VzVG9DbG91ZCAtIHNhdmUgc2hhIG5vdCB5ZXQgcmVhZHlgKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coYHNhdmVDaGFuZ2VzVG9DbG91ZCAtIGNhbGxpbmcgX3NhdmVFZGl0KClgKVxuICAgICAgICBzZXRDYXJkc1NhdmluZyhwcmV2Q2FyZHNTYXZpbmcgPT4gWy4uLnByZXZDYXJkc1NhdmluZywgY2FyZFJlc291cmNlSWRdKVxuICAgICAgICBfc2F2ZUVkaXQoKVxuICAgICAgfVxuICAgIH1cbiAgfSwgW3N0YXJ0U2F2ZSwgZWRpdEJyYW5jaFJlYWR5LCBzaGFdKVxuXG4gIC8qKlxuICAgKiBjb252ZXJ0IHVwZGF0ZWRWZXJzZU9iamVjdHMgdG8gVVNGTSBhbmQgbWVyZ2UgaW50byB0aGUgYmlibGVVc2ZtXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBiaWJsZVVzZm0gLSBVU0ZNIG9mIGJpYmxlXG4gICAqIEBwYXJhbSB7b2JqZWN0fSByZWYgLSByZWZlcmVuY2Ugb2YgdmVyc2UgdG8gbWVyZ2UgaW5cbiAgICogQHBhcmFtIHtvYmplY3RbXX0gdXBkYXRlZFZlcnNlT2JqZWN0cyAtIG5ldyB2ZXJzZSBpbiB2ZXJzZU9iamVjdCBmb3JtYXRcbiAgICogQHBhcmFtIHtudW1iZXJ9IGNhcmROdW1cbiAgICovXG4gIGZ1bmN0aW9uIG1lcmdlVmVyc2VPYmplY3RzSW50b0JpYmxlVXNmbShiaWJsZVVzZm0sIHJlZiwgdXBkYXRlZFZlcnNlT2JqZWN0cywgY2FyZE51bTogbnVtYmVyKSB7XG4gICAgbGV0IG5ld1VzZm1cbiAgICBjb25zdCBjaGFwdGVyQ2h1bmtzID0gYmlibGVVc2ZtPy5zcGxpdCgnXFxcXGMgJylcbiAgICBjb25zdCBjaGFwdGVySW5kZXggPSBmaW5kUmVmSW5BcnJheShyZWY/LmNoYXB0ZXIsIGNoYXB0ZXJDaHVua3MpXG5cbiAgICBpZiAoY2hhcHRlckluZGV4ID49IDApIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRDaGFwdGVyID0gY2hhcHRlckNodW5rc1tjaGFwdGVySW5kZXhdXG4gICAgICBjb25zdCB2ZXJzZUNodW5rcyA9IGN1cnJlbnRDaGFwdGVyLnNwbGl0KCdcXFxcdiAnKVxuICAgICAgY29uc3QgdmVyc2VJbmRleCA9IGZpbmRSZWZJbkFycmF5KHJlZj8udmVyc2UsIHZlcnNlQ2h1bmtzKVxuXG4gICAgICBpZiAodmVyc2VJbmRleCA+PSAwKSB7XG4gICAgICAgIGNvbnN0IG5ld1ZlcnNlVXNmbSA9IFVzZm1GaWxlQ29udmVyc2lvbkhlbHBlcnMuY29udmVydFZlcnNlRGF0YVRvVVNGTSh1cGRhdGVkVmVyc2VPYmplY3RzKVxuICAgICAgICBjb25zb2xlLmxvZyhgc2F2ZUNoYW5nZXNUb0Nsb3VkKCR7Y2FyZE51bX0pIC0gbmV3IFVTRk0gZm9yIGNhcmQ6fSAtICR7bmV3VmVyc2VVc2ZtLnN1YnN0cmluZygwLCAxMDApfWApXG4gICAgICAgIGNvbnN0IG9sZFZlcnNlID0gdmVyc2VDaHVua3NbdmVyc2VJbmRleF1cbiAgICAgICAgY29uc3QgdmVyc2VOdW1MZW4gPSAocmVmPy52ZXJzZSArICcnKS5sZW5ndGhcbiAgICAgICAgdmVyc2VDaHVua3NbdmVyc2VJbmRleF0gPSBvbGRWZXJzZS5zdWJzdHJpbmcoMCwgdmVyc2VOdW1MZW4gKyAxKSArIG5ld1ZlcnNlVXNmbVxuICAgICAgICBjb25zdCBuZXdDaGFwdGVyID0gdmVyc2VDaHVua3Muam9pbignXFxcXHYgJylcbiAgICAgICAgY2hhcHRlckNodW5rc1tjaGFwdGVySW5kZXhdID0gbmV3Q2hhcHRlclxuICAgICAgICBuZXdVc2ZtID0gY2hhcHRlckNodW5rcy5qb2luKCdcXFxcYyAnKVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3VXNmbVxuICB9XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHsgLy8gZm9yIGVhY2ggdW5zYXZlZCBjaGFuZ2UsIGNhbGwgaW50byBzY3JpcHR1cmVQYW5lIHRvIGdldCBsYXRlc3QgY2hhbmdlcyBmb3IgdmVyc2UgdG8gc2F2ZVxuICAgIGFzeW5jIGZ1bmN0aW9uIGdldFJlYWR5Rm9yU2F2ZSgpIHtcbiAgICAgIGlmIChzYXZlQ2xpY2tlZCkge1xuICAgICAgICBsZXQgY3JlYXRlRWRpdEJyYW5jaCA9ICFfdXNpbmdVc2VyQnJhbmNoXG5cbiAgICAgICAgaWYgKCFjcmVhdGVFZGl0QnJhbmNoKSB7IC8vIGlmIGFscmVhZHkgdXNpbmcgdGhlIHVzZXIgYnJhbmNoXG4gICAgICAgICAgaWYgKHdvcmtpbmdSZXNvdXJjZUJyYW5jaCAhPT0gdXNlckVkaXRCcmFuY2hOYW1lKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oYHNhdmVDaGFuZ2VzVG9DbG91ZCAtIHN0YXRlIGNvbmZsaWN0IC0gc2hvdWxkIGJlIGluIHVzZXIgYnJhbmNoICR7dXNlckVkaXRCcmFuY2hOYW1lfSwgYnV0IGFjdHVhbGx5IHVzaW5nICR7d29ya2luZ1Jlc291cmNlQnJhbmNofWApXG4gICAgICAgICAgICBjcmVhdGVFZGl0QnJhbmNoID0gdHJ1ZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgc2F2ZUNoYW5nZXNUb0Nsb3VkIC0gYWxyZWFkeSB1c2luZyBlZGl0IGJyYW5jaDogJHt3b3JraW5nUmVzb3VyY2VCcmFuY2h9YClcbiAgICAgICAgICAgIHNldFN0YXRlKHsgZWRpdEJyYW5jaFJlYWR5OiB0cnVlIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNyZWF0ZUVkaXRCcmFuY2gpIHsgLy8gaWYgbm90IHlldCB1c2luZyB0aGUgdXNlciBicmFuY2gsIGNyZWF0ZSBpdFxuICAgICAgICAgIGNvbnNvbGUubG9nKGBzYXZlQ2hhbmdlc1RvQ2xvdWQgLSBjcmVhdGluZyBlZGl0IGJyYW5jaGApXG4gICAgICAgICAgc2V0U3RhdGUoe1xuICAgICAgICAgICAgZWRpdEJyYW5jaFJlYWR5OiBmYWxzZSxcbiAgICAgICAgICAgIHJlYWR5Rm9yRmV0Y2g6IGZhbHNlLFxuICAgICAgICAgICAgc2hhOiBudWxsLFxuICAgICAgICAgIH0pIC8vIHdlIHdpbGwgbmVlZCBhIG5ldyBzaGEgZm9yIGJvb2svYnJhbmNoXG5cbiAgICAgICAgICBjb25zdCBicmFuY2ggPSBhd2FpdCBzdGFydEVkaXRCcmFuY2goKVxuXG4gICAgICAgICAgaWYgKGJyYW5jaCkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coYHNhdmVDaGFuZ2VzVG9DbG91ZCAtIGVkaXQgYnJhbmNoIGNyZWF0ZWRgKVxuICAgICAgICAgICAgc2V0U3RhdGUoe1xuICAgICAgICAgICAgICBlZGl0QnJhbmNoUmVhZHk6IHRydWUsXG4gICAgICAgICAgICAgIHJlYWR5Rm9yRmV0Y2g6IHRydWUsXG4gICAgICAgICAgICAgIHJlZjogYnJhbmNoLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignc2F2ZUNoYW5nZXNUb0Nsb3VkKCkgLSBlcnJvciBjcmVhdGluZyBlZGl0IGJyYW5jaCcpXG4gICAgICAgICAgICBvblJlc291cmNlRXJyb3IgJiYgb25SZXNvdXJjZUVycm9yKG51bGwsIGZhbHNlLCBudWxsLCBgRXJyb3IgY3JlYXRpbmcgZWRpdCBicmFuY2ggJHtsYW5ndWFnZUlkX31fJHtyZXNvdXJjZUlkfWAsIHRydWUpXG4gICAgICAgICAgICBzZXRTdGF0ZSh7IHNhdmVDbGlja2VkOiBmYWxzZSB9KVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc29sZS5sb2coYHNhdmVDaGFuZ2VzVG9DbG91ZCAtIGdldHRpbmcgdmVyc2UgY2hhbmdlc2ApXG4gICAgICAgIGNvbnN0IHVuc2F2ZWRDYXJkSW5kaWNlcyA9IE9iamVjdC5rZXlzKHVuc2F2ZWRDaGFuZ2VzTGlzdClcblxuICAgICAgICBpZiAodW5zYXZlZENhcmRJbmRpY2VzPy5sZW5ndGgpIHtcbiAgICAgICAgICBsZXQgYmlibGVVc2ZtID0gZ2V0Q3VycmVudEJvb2soc2NyaXB0dXJlQ29uZmlnLCBib29rSWQpXG4gICAgICAgICAgbGV0IG1lcmdlRmFpbCA9IGZhbHNlXG4gICAgICAgICAgaWYgKGJpYmxlVXNmbSkge1xuICAgICAgICAgICAgbGV0IGNhcmROdW0gPSAwXG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgY2FyZEluZGV4IG9mIHVuc2F2ZWRDYXJkSW5kaWNlcykge1xuICAgICAgICAgICAgICBjYXJkTnVtID0gcGFyc2VJbnQoY2FyZEluZGV4KVxuICAgICAgICAgICAgICBjb25zdCB7IGdldENoYW5nZXMsIHN0YXRlIH0gPSB1bnNhdmVkQ2hhbmdlc0xpc3RbY2FyZE51bV1cblxuICAgICAgICAgICAgICBpZiAoZ2V0Q2hhbmdlcykge1xuICAgICAgICAgICAgICAgIGxldCBuZXdVc2ZtXG4gICAgICAgICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgICAgICAgcmVmLFxuICAgICAgICAgICAgICAgICAgdXBkYXRlZFZlcnNlT2JqZWN0cyxcbiAgICAgICAgICAgICAgICB9ID0gZ2V0Q2hhbmdlcyhzdGF0ZSlcblxuICAgICAgICAgICAgICAgIGlmICh1cGRhdGVkVmVyc2VPYmplY3RzICYmIGJpYmxlVXNmbSkgeyAvLyBqdXN0IHJlcGxhY2UgdmVyc2VcbiAgICAgICAgICAgICAgICAgIG5ld1VzZm0gPSBtZXJnZVZlcnNlT2JqZWN0c0ludG9CaWJsZVVzZm0oYmlibGVVc2ZtLCByZWYsIHVwZGF0ZWRWZXJzZU9iamVjdHMsIGNhcmROdW0pXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKG5ld1VzZm0pIHtcbiAgICAgICAgICAgICAgICAgIGJpYmxlVXNmbSA9IG5ld1VzZm1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgbWVyZ2VGYWlsID0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cblxuICAgICAgICAgIGlmIChtZXJnZUZhaWwpIHsgLy8gaWYgd2UgZmFpbGVkIHRvIG1lcmdlLCBmYWxsYmFjayB0byBicnV0ZSBmb3JjZSB2ZXJzZSBvYmplY3RzIHRvIFVTRk1cbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBzYXZlQ2hhbmdlc1RvQ2xvdWQoJHtjYXJkTnVtfSkgLSB2ZXJzZSBub3QgZm91bmQsIGZhbGxpbmcgYmFjayB0byBpbnNlcnRpbmcgdmVyc2Ugb2JqZWN0YClcbiAgICAgICAgICAgIGxldCBuZXdCb29rSnNvblxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNhcmRJbmRleCBvZiB1bnNhdmVkQ2FyZEluZGljZXMpIHtcbiAgICAgICAgICAgICAgY29uc3QgY2FyZE51bSA9IHBhcnNlSW50KGNhcmRJbmRleClcbiAgICAgICAgICAgICAgY29uc3QgeyBnZXRDaGFuZ2VzLCBzdGF0ZSB9ID0gdW5zYXZlZENoYW5nZXNMaXN0W2NhcmROdW1dXG5cbiAgICAgICAgICAgICAgaWYgKGdldENoYW5nZXMpIHtcbiAgICAgICAgICAgICAgICBsZXQgbmV3VXNmbVxuICAgICAgICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgICAgICAgIG5ld1ZlcnNlVGV4dCxcbiAgICAgICAgICAgICAgICAgIHJlZixcbiAgICAgICAgICAgICAgICAgIHVwZGF0ZWRWZXJzZU9iamVjdHMsXG4gICAgICAgICAgICAgICAgfSA9IGdldENoYW5nZXMoc3RhdGUpXG5cbiAgICAgICAgICAgICAgICBpZiAodXBkYXRlZFZlcnNlT2JqZWN0cyAmJiAhbmV3VXNmbSkge1xuICAgICAgICAgICAgICAgICAgbGV0IHRhcmdldFZlcnNlT2JqZWN0c18gPSBudWxsXG5cbiAgICAgICAgICAgICAgICAgIGlmIChyZWYpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5ld1ZlcnNlVGV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgdGFyZ2V0VmVyc2VPYmplY3RzIH0gPSBBbGlnbm1lbnRIZWxwZXJzLnVwZGF0ZUFsaWdubWVudHNUb1RhcmdldFZlcnNlKHVwZGF0ZWRWZXJzZU9iamVjdHMsIG5ld1ZlcnNlVGV4dClcbiAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRWZXJzZU9iamVjdHNfID0gdGFyZ2V0VmVyc2VPYmplY3RzXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0VmVyc2VPYmplY3RzXyA9IHVwZGF0ZWRWZXJzZU9iamVjdHNcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBuZXdCb29rSnNvbiA9IHRhcmdldFZlcnNlT2JqZWN0c18gJiYgc2NyaXB0dXJlQ29uZmlnPy51cGRhdGVWZXJzZShyZWYuY2hhcHRlciwgcmVmLnZlcnNlLCB7dmVyc2VPYmplY3RzOiB0YXJnZXRWZXJzZU9iamVjdHNffSlcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYmlibGVVc2ZtID0gdXNmbWpzLnRvVVNGTShuZXdCb29rSnNvbiwgeyBmb3JjZWROZXdMaW5lczogdHJ1ZSB9KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChiaWJsZVVzZm0pIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBzYXZlQ2hhbmdlc1RvQ2xvdWQoKSAtIHNhdmluZyBuZXcgVVNGTTogJHtiaWJsZVVzZm0uc3Vic3RyaW5nKDAsIDEwMCl9Li4uYClcbiAgICAgICAgICAgIHNldENhcmRzU2F2aW5nKHByZXZDYXJkc1NhdmluZyA9PiBbLi4ucHJldkNhcmRzU2F2aW5nLCBjYXJkUmVzb3VyY2VJZF0pXG4gICAgICAgICAgICBzZXRTdGF0ZSh7c2F2ZUNvbnRlbnQ6IGJpYmxlVXNmbSwgc3RhcnRTYXZlOiB0cnVlLCBzYXZlQ2xpY2tlZDogZmFsc2V9KVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYHNhdmVDaGFuZ2VzVG9DbG91ZCgpIC0gRXJyb3IgcmV0cmlldmluZyB0aGUgY29ycmVjdCBib29rIGRhdGE6IGluY29ycmVjdCBib29rICR7bGFuZ3VhZ2VJZF99XyR7cmVzb3VyY2VJZH1gKVxuICAgICAgICAgICAgICBvblJlc291cmNlRXJyb3IgJiYgb25SZXNvdXJjZUVycm9yKG51bGwsIGZhbHNlLCBudWxsLCBgRXJyb3IgcmV0cmlldmluZyB0aGUgY29ycmVjdCBib29rIGRhdGEgJHtsYW5ndWFnZUlkX31fJHtyZXNvdXJjZUlkfWAsIHRydWUpXG4gICAgICAgICAgICAgIHNldFN0YXRlKHsgc2F2ZUNsaWNrZWQ6IGZhbHNlIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZ2V0UmVhZHlGb3JTYXZlKClcbiAgfSwgW3NhdmVDbGlja2VkXSlcblxuICAvLyBAdHMtaWdub3JlXG4gIGNvbnN0IHsgY2hhcHRlciB9ID0gX3JlZmVyZW5jZSB8fCB7fVxuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgX3ZlcnNlc0ZvclJlZiA9IHNjcmlwdHVyZUNvbmZpZz8udmVyc2VzRm9yUmVmXG4gICAgbGV0IG5ld1NlbGVjdGlvbnMgPSBuZXcgTWFwKClcbiAgICBsZXQgdXBkYXRlU2VsZWN0aW9ucyA9IGZhbHNlXG4gICAgY29uc3QgX21hcCA9IG5ld1NlbGVjdGlvbnNcbiAgICBjb25zdCBvcmlnaW5hbEJvb2tJZCA9IG9yaWdpbmFsU2NyaXB0dXJlQm9va09iamVjdHM/LmJvb2tJZFxuICAgIGNvbnN0IGJvb2tWZXJzZU9iamVjdCA9IG9yaWdpbmFsU2NyaXB0dXJlQm9va09iamVjdHM/LmNoYXB0ZXJzXG4gICAgbGV0IG5ld1NlbGVjdGVkUXVvdGUgPSBudWxsXG5cbiAgICAvLyBpZiB3ZSBoYXZlIGV2ZXJ5dGhpbmcgd2UgbmVlZCB0byBjYWxjdWxhdGUgc2VsZWN0aW9uc1xuICAgIGlmIChfdmVyc2VzRm9yUmVmPy5sZW5ndGggJiZcbiAgICAgIGJvb2tWZXJzZU9iamVjdCAmJlxuICAgICAgKGJvb2tJZCA9PT0gb3JpZ2luYWxCb29rSWQpICYmXG4gICAgICBib29rVmVyc2VPYmplY3RbY2hhcHRlcl0gJiYgLy8gd2UgbmVlZCB0byBoYXZlIGRhdGEgZm9yIGNoYXB0ZXJcbiAgICAgIHNlbGVjdGVkUXVvdGU/LnF1b3RlXG4gICAgKSB7XG4gICAgICAvLyBpZiBxdW90ZSBpcyBkaWZmZXJlbnQgdGhhbiBsYXN0XG4gICAgICBpZiAoIWlzRXF1YWwobGFzdFNlbGVjdGVkUXVvdGUsIHNlbGVjdGVkUXVvdGUpIHx8XG4gICAgICAgICFpc0VxdWFsKHZlcnNlc0ZvclJlZiwgX3ZlcnNlc0ZvclJlZikpIHtcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxWZXJzZXMgPSB7fVxuICAgICAgICBjb25zdCBzdWJzdGl0dXRlID0ge30gLy8ga2VlcCB0cmFjayBvZiB2ZXJzZSBzdWJzdGl0dXRpb25zXG4gICAgICAgIGxldCBzdGFydFZlcnNlID0gX3ZlcnNlc0ZvclJlZlswXS52ZXJzZVxuXG4gICAgICAgIGlmICh0eXBlb2Ygc3RhcnRWZXJzZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICBzdGFydFZlcnNlID0gcGFyc2VJbnQoc3RhcnRWZXJzZSlcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsYXN0VmVyc2UgPSBzdGFydFZlcnNlXG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSBfdmVyc2VzRm9yUmVmLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgIGNvbnN0IHZlcnNlUmVmID0gX3ZlcnNlc0ZvclJlZltpXVxuICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIGNoYXB0ZXIsXG4gICAgICAgICAgICB2ZXJzZSxcbiAgICAgICAgICB9ID0gdmVyc2VSZWZcbiAgICAgICAgICAvLyBUUklDS1kgLSB3ZSByZW1hcCB2ZXJzZXMgaW4gcmVmZXJlbmNlIHJhbmdlIHRvIGEgbGluZWFyIHNlcmllcyBvZiB2ZXJzZXMgc28gdmVyc2Ugc3BhbnMgZG9uJ3QgY2hva2UgZ2V0UXVvdGVNYXRjaGVzSW5Cb29rUmVmXG4gICAgICAgICAgbGV0IF92ZXJzZSA9IHN0YXJ0VmVyc2UgKyBpXG4gICAgICAgICAgbGFzdFZlcnNlID0gX3ZlcnNlXG4gICAgICAgICAgc3Vic3RpdHV0ZVtgJHtjaGFwdGVyfToke192ZXJzZX1gXSA9IGAke2NoYXB0ZXJ9OiR7dmVyc2V9YFxuXG4gICAgICAgICAgaWYgKCFvcmlnaW5hbFZlcnNlc1tjaGFwdGVyXSkge1xuICAgICAgICAgICAgb3JpZ2luYWxWZXJzZXNbY2hhcHRlcl0gPSB7fVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGxldCB2ZXJzZU9iamVjdHMgPSBbXVxuXG4gICAgICAgICAgaWYgKCh0eXBlb2YgdmVyc2UgPT09ICdzdHJpbmcnKSAmJiAodmVyc2UuaW5jbHVkZXMoJy0nKSkpIHtcbiAgICAgICAgICAgIGNvbnN0IHZlcnNlcyA9IGdldFZlcnNlcyhib29rVmVyc2VPYmplY3QsIGAke2NoYXB0ZXJ9OiR7dmVyc2V9YClcblxuICAgICAgICAgICAgZm9yIChjb25zdCB2ZXJzZUl0ZW0gb2YgdmVyc2VzKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHZvID0gdmVyc2VJdGVtLnZlcnNlRGF0YS52ZXJzZU9iamVjdHNcbiAgICAgICAgICAgICAgdmVyc2VPYmplY3RzID0gdmVyc2VPYmplY3RzLmNvbmNhdCh2bylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmVyc2VPYmplY3RzID0gYm9va1ZlcnNlT2JqZWN0W2NoYXB0ZXJdW3ZlcnNlXT8udmVyc2VPYmplY3RzXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHZlcnNlT2JqZWN0cykge1xuICAgICAgICAgICAgdmVyc2VPYmplY3RzID0gY2xlYW51cFZlcnNlT2JqZWN0cyh2ZXJzZU9iamVjdHMpXG4gICAgICAgICAgICBvcmlnaW5hbFZlcnNlc1tjaGFwdGVyXVtfdmVyc2VdID0geyB2ZXJzZU9iamVjdHMgfVxuICAgICAgICAgICAgX21hcC5zZXQoYCR7Y2hhcHRlcn06JHt2ZXJzZX1gLCB2ZXJzZU9iamVjdHMpXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gY3JlYXRlIG5ldyByZWZlcmVuY2UgcmFuZ2UgZm9yIG5ldyBsaW5lYXIgdmVyc2UgcmFuZ2VcbiAgICAgICAgY29uc3QgW2NoYXB0ZXJdID0gc2VsZWN0ZWRRdW90ZT8ucmVmZXJlbmNlPy5zcGxpdCgnOicpXG4gICAgICAgIGxldCBzdWJSZWYgPSBgJHtjaGFwdGVyfToke3N0YXJ0VmVyc2V9YFxuXG4gICAgICAgIGlmIChsYXN0VmVyc2UgIT0gc3RhcnRWZXJzZSkge1xuICAgICAgICAgIHN1YlJlZiArPSBgLSR7bGFzdFZlcnNlfWBcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHF1b3RlTWF0Y2hlcyA9IGdldFF1b3RlTWF0Y2hlc0luQm9va1JlZih7XG4gICAgICAgICAgYm9va09iamVjdDogb3JpZ2luYWxWZXJzZXMsXG4gICAgICAgICAgcmVmOiBzdWJSZWYsXG4gICAgICAgICAgcXVvdGU6IHNlbGVjdGVkUXVvdGU/LnF1b3RlLFxuICAgICAgICAgIG9jY3VycmVuY2U6IHNlbGVjdGVkUXVvdGU/Lm9jY3VycmVuY2UsXG4gICAgICAgIH0pXG5cbiAgICAgICAgY29uc3Qgc2VsZWN0aW9ucyA9IG5ldyBNYXAoKVxuXG4gICAgICAgIGlmIChxdW90ZU1hdGNoZXM/LnNpemUpIHtcbiAgICAgICAgICBxdW90ZU1hdGNoZXMuZm9yRWFjaCgod29yZHMsIGtleSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgX2tleSA9IHN1YnN0aXR1dGVba2V5XVxuXG4gICAgICAgICAgICBzZWxlY3Rpb25zLnNldChfa2V5LCB3b3Jkcy5tYXAod29yZCA9PiAoXG4gICAgICAgICAgICAgIHsgLi4ud29yZCwgdGV4dDogY29yZS5ub3JtYWxpemVTdHJpbmcod29yZC50ZXh0KSB9XG4gICAgICAgICAgICApKSlcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICAgIG5ld1NlbGVjdGlvbnMgPSBzZWxlY3Rpb25zXG4gICAgICAgIG5ld1NlbGVjdGVkUXVvdGUgPSBzZWxlY3RlZFF1b3RlXG4gICAgICAgIHVwZGF0ZVNlbGVjdGlvbnMgPSB0cnVlXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgbmV3U3RhdGU6IGFueSA9IHt9XG5cbiAgICAvLyB1cGRhdGUgc3RhdGVzIHRoYXQgaGF2ZSBjaGFuZ2VkXG4gICAgaWYgKCFhcmVNYXBzVGhlU2FtZSh2ZXJzZU9iamVjdHNNYXAsIF9tYXApKSB7XG4gICAgICBuZXdTdGF0ZS52ZXJzZU9iamVjdHNNYXAgPSBfbWFwXG4gICAgfVxuXG4gICAgY29uc3QgYm9va3NOb3RTYW1lID0gcmVmZXJlbmNlPy5wcm9qZWN0SWQgIT09IGN1cnJlbnRSZWZlcmVuY2U/LnByb2plY3RJZFxuXG4gICAgaWYgKGJvb2tzTm90U2FtZSB8fCAhYXJlVmVyc2VzU2FtZSh2ZXJzZXNGb3JSZWYsIF92ZXJzZXNGb3JSZWYpKSB7XG4gICAgICBuZXdTdGF0ZS52ZXJzZXNGb3JSZWYgPSBfdmVyc2VzRm9yUmVmXG4gICAgICBuZXdTdGF0ZS5sYXN0U2VsZWN0ZWRRdW90ZSA9IG5ld1NlbGVjdGVkUXVvdGVcbiAgICAgIG5ld1N0YXRlLnNlbGVjdGlvbnMgPSBuZXdTZWxlY3Rpb25zXG4gICAgfVxuXG4gICAgaWYgKG5ld1NlbGVjdGVkUXVvdGUpIHtcbiAgICAgIG5ld1N0YXRlLmxhc3RTZWxlY3RlZFF1b3RlID0gbmV3U2VsZWN0ZWRRdW90ZVxuICAgIH1cblxuICAgIGlmICh1cGRhdGVTZWxlY3Rpb25zKSB7XG4gICAgICBpZiAoIWFyZU1hcHNUaGVTYW1lKHNlbGVjdGlvbnMgfHwgKG5ldyBNYXAoKSksIG5ld1NlbGVjdGlvbnMpKSB7XG4gICAgICAgIG5ld1N0YXRlLnNlbGVjdGlvbnMgPSBuZXdTZWxlY3Rpb25zXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKE9iamVjdC5rZXlzKG5ld1N0YXRlKS5sZW5ndGgpIHtcbiAgICAgIHNldFN0YXRlKG5ld1N0YXRlKVxuICAgIH1cbiAgfSwgW1xuICAgIG93bmVyLFxuICAgIHJlc291cmNlSWQsXG4gICAgYm9va0lkLFxuICAgIGxhbmd1YWdlSWRfLFxuICAgIHNjcmlwdHVyZUNvbmZpZz8udmVyc2VzRm9yUmVmLFxuICAgIG9yaWdpbmFsU2NyaXB0dXJlQm9va09iamVjdHMsXG4gICAgc2VsZWN0ZWRRdW90ZSxcbiAgXSlcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4geyAvLyBjbGVhciBzZXR0aW5ncyBvbiB2ZXJzZSBjaGFuZ2VcbiAgICBzZXRTdGF0ZSh7XG4gICAgICB2ZXJzZXNBbGlnbm1lbnRTdGF0dXM6IG51bGwsXG4gICAgICB1bnNhdmVkQ2hhbmdlc0xpc3Q6IHt9LFxuICAgICAgaGF2ZVVuc2F2ZWRDaGFuZ2VzOiBmYWxzZSxcbiAgICB9KVxuICB9LCBbX3JlZmVyZW5jZV0pXG5cbiAgY29uc3QgdXBkYXRlVmVyc2VzQWxpZ25tZW50U3RhdHVzID0gKHJlZmVyZW5jZSwgYWxpZ25lZCkgPT4ge1xuICAgIHNldFN0YXRlXyhwcmV2U3RhdGUgPT4gKHtcbiAgICAgIC4uLnByZXZTdGF0ZSxcbiAgICAgIHZlcnNlc0FsaWdubWVudFN0YXR1czogeyAuLi5wcmV2U3RhdGUudmVyc2VzQWxpZ25tZW50U3RhdHVzLCBbYCR7cmVmZXJlbmNlLmNoYXB0ZXJ9OiR7cmVmZXJlbmNlLnZlcnNlfWBdOiBhbGlnbmVkIH0sXG4gICAgfSkpXG4gIH1cblxuICBsZXQgX3ZlcnNlc0ZvclJlZiA9IHNjcmlwdHVyZUNvbmZpZz8udmVyc2VzRm9yUmVmXG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoX3ZlcnNlc0ZvclJlZj8ubGVuZ3RoKSB7XG4gICAgICBjb25zdCB7IHJlZmVyZW5jZSwgcmVzb3VyY2VMaW5rIH0gPSBzY3JpcHR1cmVDb25maWcgfHwge31cbiAgICAgIGNvbnNvbGUubG9nKGBTY3JpcHR1cmVDYXJkLl92ZXJzZXNGb3JSZWYgY2hhbmdlZGAsIHsgcmVmZXJlbmNlLCByZXNvdXJjZUxpbmsgfSlcbiAgICB9XG4gIH0sIFtfdmVyc2VzRm9yUmVmXSlcblxuICBpZiAoIV92ZXJzZXNGb3JSZWY/Lmxlbmd0aCkgeyAvLyBpZiBlbXB0eSBvZiByZWZlcmVuY2VzLCBjcmVhdGUgc2luZ2xlIGVtcHR5IHJlZmVyZW5jZVxuICAgIF92ZXJzZXNGb3JSZWYgPSBbeyAuLi5yZWZlcmVuY2UgfV1cbiAgfVxuXG4gIGNvbnN0IHJlbmRlcmVkU2NyaXB0dXJlUGFuZXMgPSBfdmVyc2VzRm9yUmVmPy5tYXAoKF9jdXJyZW50VmVyc2VEYXRhLCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IGluaXRpYWxWZXJzZU9iamVjdHMgPSBfY3VycmVudFZlcnNlRGF0YT8udmVyc2VEYXRhPy52ZXJzZU9iamVjdHMgfHwgW11cbiAgICAvLyBAdHMtaWdub3JlXG4gICAgY29uc3QgeyBjaGFwdGVyLCB2ZXJzZSB9ID0gX2N1cnJlbnRWZXJzZURhdGEgfHwge31cbiAgICBjb25zdCBwcm9qZWN0SWQgPSBjdXJyZW50UmVmZXJlbmNlPy5wcm9qZWN0SWQgfHwgcmVmZXJlbmNlPy5wcm9qZWN0SWRcbiAgICBjb25zdCBfcmVmZXJlbmNlID0ge1xuICAgICAgLi4uX3ZlcnNlc0ZvclJlZixcbiAgICAgIGNoYXB0ZXIsXG4gICAgICBwcm9qZWN0SWQsXG4gICAgICB2ZXJzZSxcbiAgICB9XG4gICAgY29uc3QgX3NjcmlwdHVyZUFsaWdubWVudEVkaXRDb25maWcgPSB7XG4gICAgICAuLi5zY3JpcHR1cmVBbGlnbm1lbnRFZGl0Q29uZmlnLFxuICAgICAgY3VycmVudEluZGV4OiBpbmRleCxcbiAgICAgIGluaXRpYWxWZXJzZU9iamVjdHMsXG4gICAgICByZWZlcmVuY2U6IF9yZWZlcmVuY2UsXG4gICAgICBpc05ld1Rlc3RhbWVudCxcbiAgICB9XG5cbiAgICBsZXQgaXNWZXJzZVNlbGVjdGVkRm9yQWxpZ25tZW50ID0gZmFsc2VcblxuICAgIGlmICh2ZXJzZVNlbGVjdGVkRm9yQWxpZ25tZW50KSB7XG4gICAgICBpc1ZlcnNlU2VsZWN0ZWRGb3JBbGlnbm1lbnQgPSB2ZXJzZVNlbGVjdGVkRm9yQWxpZ25tZW50LmNoYXB0ZXIgPT0gY2hhcHRlciAmJiB2ZXJzZVNlbGVjdGVkRm9yQWxpZ25tZW50LnZlcnNlID09IHZlcnNlXG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxTY3JpcHR1cmVQYW5lXG4gICAgICAgIHsuLi5zY3JpcHR1cmVDb25maWd9XG4gICAgICAgIGNvbnRlbnRTdHlsZT17Y29udGVudFN0eWxlfVxuICAgICAgICBjdXJyZW50SW5kZXg9e2luZGV4fVxuICAgICAgICBkZXRlcm1pbmluZ0JyYW5jaD17IXJlYWR5Rm9yRmV0Y2h9XG4gICAgICAgIGRpcmVjdGlvbj17ZGlyZWN0aW9ufVxuICAgICAgICBkaXNhYmxlV29yZFBvcG92ZXI9e2Rpc2FibGVXb3JkUG9wb3Zlcl99XG4gICAgICAgIGZvbnRTaXplPXtmb250U2l6ZX1cbiAgICAgICAgZ2V0TGV4aWNvbkRhdGE9e2dldExleGljb25EYXRhfVxuICAgICAgICBpc05UPXtpc05UX31cbiAgICAgICAgaXNWZXJzZVNlbGVjdGVkRm9yQWxpZ25tZW50PXtpc1ZlcnNlU2VsZWN0ZWRGb3JBbGlnbm1lbnR9XG4gICAgICAgIGtleT17aW5kZXh9XG4gICAgICAgIG9uQWxpZ25tZW50RmluaXNoPXsoKSA9PiBzZXRTdGF0ZSh7IHZlcnNlU2VsZWN0ZWRGb3JBbGlnbm1lbnQ6IG51bGwgfSl9XG4gICAgICAgIG9yaWdpbmFsU2NyaXB0dXJlQm9va09iamVjdHM9e29yaWdpbmFsU2NyaXB0dXJlQm9va09iamVjdHN9XG4gICAgICAgIHJlZlN0eWxlPXtyZWZTdHlsZX1cbiAgICAgICAgcmVmZXJlbmNlPXtfcmVmZXJlbmNlfVxuICAgICAgICBzYXZpbmc9e3N0YXJ0U2F2ZX1cbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBzY3JpcHR1cmVBbGlnbm1lbnRFZGl0Q29uZmlnPXtfc2NyaXB0dXJlQWxpZ25tZW50RWRpdENvbmZpZ31cbiAgICAgICAgc2V0V29yZEFsaWduZXJTdGF0dXM9e3NldFdvcmRBbGlnbmVyU3RhdHVzfVxuICAgICAgICBzZXJ2ZXI9e3NlcnZlcn1cbiAgICAgICAgdHJhbnNsYXRlPXt0cmFuc2xhdGV9XG4gICAgICAgIHVwZGF0ZVZlcnNlc0FsaWdubWVudFN0YXR1cz17dXBkYXRlVmVyc2VzQWxpZ25tZW50U3RhdHVzfVxuICAgICAgLz5cbiAgICApXG4gIH0pXG5cbiAgY29uc3QgaGFuZGxlQWxpZ25CdXR0b25DbGljayA9ICgpID0+IHtcbiAgICBpZiAodmVyc2VzRm9yUmVmPy5sZW5ndGggPiAxKSB7XG4gICAgICBzZXRTdGF0ZSh7IHNob3dBbGlnbm1lbnRQb3B1cDogdHJ1ZSB9KVxuICAgIH0gZWxzZSBpZiAodmVyc2VzRm9yUmVmPy5sZW5ndGggPT09IDEpIHtcbiAgICAgIHNldFN0YXRlKHsgdmVyc2VTZWxlY3RlZEZvckFsaWdubWVudDogdmVyc2VzRm9yUmVmWzBdIH0pXG4gICAgfVxuICB9XG5cbiAgY29uc3Qgb25SZW5kZXJUb29sYmFyID0gKHsgaXRlbXMgfSkgPT4ge1xuICAgIGNvbnN0IG5ld0l0ZW1zID0gWy4uLml0ZW1zXVxuXG4gICAgbGV0IGFsbFZlcnNlc0FsaWduZWQgPSBmYWxzZVxuXG4gICAgLy8gQ2hlY2sgaWYgYWxsIHZhbHVlcyBpbiB2ZXJzZXNBbGlnbm1lbnRTdGF0dXMgYXJlIHRydWVcbiAgICBpZiAodmVyc2VzQWxpZ25tZW50U3RhdHVzKSB7XG4gICAgICBhbGxWZXJzZXNBbGlnbmVkID0gT2JqZWN0LnZhbHVlcyh2ZXJzZXNBbGlnbm1lbnRTdGF0dXMpLmV2ZXJ5KGFsaWduU3RhdHVzID0+IGFsaWduU3RhdHVzID09PSB0cnVlKVxuICAgIH1cblxuICAgIGxldCBhbGlnbkljb24gPSBudWxsXG4gICAgbGV0IGFsaWduQnV0dG9uVGV4dCA9ICcnXG5cbiAgICBpZiAoYWxsVmVyc2VzQWxpZ25lZCkge1xuICAgICAgYWxpZ25JY29uID0gPFJ4TGluazIgaWQ9e2B2YWxpZF9pY29uXyR7cmVzb3VyY2VJZH1gfSBjb2xvcj0nI0JCQicgLz5cbiAgICAgIGFsaWduQnV0dG9uVGV4dCA9ICdBbGlnbm1lbnQgaXMgVmFsaWQnXG4gICAgfSBlbHNlIHtcbiAgICAgIGFsaWduSWNvbiA9IDxSeExpbmtCcmVhazIgaWQ9e2BpbnZhbGlkX2FsaWdubWVudF9pY29uXyR7cmVzb3VyY2VJZH1gfSBjb2xvcj0nIzAwMCcgLz5cbiAgICAgIGFsaWduQnV0dG9uVGV4dCA9ICdBbGlnbm1lbnQgaXMgSW52YWxpZCdcbiAgICB9XG5cbiAgICBpZiAoc2V0V29yZEFsaWduZXJTdGF0dXMgJiYgcmVzb3VyY2VJZCAhPT0gJ09SSUdJTkFMX1NPVVJDRScpIHtcbiAgICAgIG5ld0l0ZW1zLnB1c2goXG4gICAgICAgIDxJY29uQnV0dG9uXG4gICAgICAgICAgaWQ9e2BhbGlnbm1lbnRfaWNvbl8ke3Jlc291cmNlSWR9YH1cbiAgICAgICAgICBrZXk9J2NoZWNraW5nLWJ1dHRvbidcbiAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVBbGlnbkJ1dHRvbkNsaWNrfVxuICAgICAgICAgIHRpdGxlPXthbGlnbkJ1dHRvblRleHR9XG4gICAgICAgICAgYXJpYS1sYWJlbD17YWxpZ25CdXR0b25UZXh0fVxuICAgICAgICAgIHN0eWxlPXt7IGN1cnNvcjogJ3BvaW50ZXInIH19XG4gICAgICAgID5cbiAgICAgICAgICB7YWxpZ25JY29ufVxuICAgICAgICA8L0ljb25CdXR0b24+XG4gICAgICApXG4gICAgfVxuXG4gICAgbmV3SXRlbXMucHVzaChcbiAgICAgIDw+XG4gICAgICAgIDxVcGRhdGVCcmFuY2hCdXR0b24gey4uLnVwZGF0ZUJ1dHRvblByb3BzfSBpc0xvYWRpbmc9e2lzVXBkYXRlTG9hZGluZyB8fCBzdGFydFNhdmV9Lz5cbiAgICAgICAgPEVycm9yRGlhbG9nIHRpdGxlPXtkaWFsb2dUaXRsZX0gY29udGVudD17ZGlhbG9nTWVzc2FnZX0gb3Blbj17aXNFcnJvckRpYWxvZ09wZW59IG9uQ2xvc2U9e29uQ2xvc2VFcnJvckRpYWxvZ30gaXNMb2FkaW5nPXsgaXNVcGRhdGVMb2FkaW5nIHx8IHN0YXJ0U2F2ZSB9IGxpbms9e2RpYWxvZ0xpbmt9IGxpbmtUb29sdGlwPXtkaWFsb2dMaW5rVG9vbHRpcH0gLz5cbiAgICAgIDwvPlxuICAgIClcblxuICAgIHJldHVybiBuZXdJdGVtc1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8U2VsZWN0aW9uc0NvbnRleHRQcm92aWRlclxuICAgICAgc2VsZWN0aW9ucz17c2VsZWN0aW9uc31cbiAgICAgIG9uU2VsZWN0aW9ucz17bmV3U2VsZWN0aW9ucyA9PiB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdvblNlbGVjdGlvbnMnLCBuZXdTZWxlY3Rpb25zKVxuICAgICAgfX1cbiAgICAgIHF1b3RlPXtzZWxlY3RlZFF1b3RlPy5xdW90ZX1cbiAgICAgIG9jY3VycmVuY2U9e2ZpeE9jY3VycmVuY2Uoc2VsZWN0ZWRRdW90ZT8ub2NjdXJyZW5jZSl9XG4gICAgICB2ZXJzZU9iamVjdHNNYXA9e3ZlcnNlT2JqZWN0c01hcH1cbiAgICA+XG4gICAgICA8Q2FyZFxuICAgICAgICBpZD17YHNjcmlwdHVyZV9jYXJkXyR7Y2FyZE51bX1gfVxuICAgICAgICB0aXRsZT17c2NyaXB0dXJlTGFiZWx9XG4gICAgICAgIHNldHRpbmdzVGl0bGU9e3NjcmlwdHVyZVRpdGxlICsgJyBTZXR0aW5ncyd9XG4gICAgICAgIGl0ZW1zPXtpdGVtc31cbiAgICAgICAgY2xhc3Nlcz17Y2xhc3Nlc31cbiAgICAgICAgaGVhZGVycz17aGVhZGVyc31cbiAgICAgICAgZmlsdGVycz17ZmlsdGVyc31cbiAgICAgICAgZm9udFNpemU9e2ZvbnRTaXplfVxuICAgICAgICBpdGVtSW5kZXg9e2l0ZW1JbmRleH1cbiAgICAgICAgc2V0RmlsdGVycz17c2V0RmlsdGVyc31cbiAgICAgICAgc2V0Rm9udFNpemU9e3NldEZvbnRTaXplfVxuICAgICAgICBzZXRJdGVtSW5kZXg9e3NldEl0ZW1JbmRleH1cbiAgICAgICAgbWFya2Rvd25WaWV3PXttYXJrZG93blZpZXd9XG4gICAgICAgIHNldE1hcmtkb3duVmlldz17c2V0TWFya2Rvd25WaWV3fVxuICAgICAgICBnZXRDdXN0b21Db21wb25lbnQ9e2dldFNjcmlwdHVyZVNlbGVjdG9yfVxuICAgICAgICBoaWRlTWFya2Rvd25Ub2dnbGVcbiAgICAgICAgb25NZW51Q2xvc2U9e29uTWVudUNsb3NlfVxuICAgICAgICBvbk1pbmltaXplPXtvbk1pbmltaXplID8gKCkgPT4gb25NaW5pbWl6ZShpZCwgc2NyaXB0dXJlVGl0bGUpIDogbnVsbH1cbiAgICAgICAgZWRpdGFibGU9e2VuYWJsZUVkaXQgfHwgZW5hYmxlQWxpZ25tZW50fVxuICAgICAgICBzYXZlZD17c3RhcnRTYXZlIHx8ICFoYXZlVW5zYXZlZENoYW5nZXN9XG4gICAgICAgIG9uU2F2ZUVkaXQ9eygpID0+IHNldFN0YXRlKHsgc2F2ZUNsaWNrZWQ6IHRydWUgfSl9XG4gICAgICAgIG9uUmVuZGVyVG9vbGJhcj17b25SZW5kZXJUb29sYmFyfVxuICAgICAgPlxuICAgICAgICA8ZGl2IGlkPVwic2NyaXB0dXJlLXBhbmUtbGlzdFwiPlxuICAgICAgICAgIHtyZW5kZXJlZFNjcmlwdHVyZVBhbmVzfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvQ2FyZD5cbiAgICAgIDxWZXJzZVNlbGVjdG9yUG9wdXBcbiAgICAgICAgcmVzb3VyY2VJZD17cmVzb3VyY2VJZH1cbiAgICAgICAgb3Blbj17c2hvd0FsaWdubWVudFBvcHVwfVxuICAgICAgICBvbkNsb3NlPXsoKSA9PiBzZXRTdGF0ZSh7IHNob3dBbGlnbm1lbnRQb3B1cDogZmFsc2UgfSl9XG4gICAgICAgIHZlcnNlc0ZvclJlZj17dmVyc2VzRm9yUmVmfVxuICAgICAgICB2ZXJzZXNBbGlnbm1lbnRTdGF0dXM9e3ZlcnNlc0FsaWdubWVudFN0YXR1c31cbiAgICAgICAgb25WZXJzZVNlbGVjdD17KHZlcnNlKSA9PiBzZXRTdGF0ZSh7XG4gICAgICAgICAgdmVyc2VTZWxlY3RlZEZvckFsaWdubWVudDogdmVyc2UsXG4gICAgICAgICAgc2hvd0FsaWdubWVudFBvcHVwOiBmYWxzZSxcbiAgICAgICAgfSl9XG4gICAgICAvPlxuICAgIDwvU2VsZWN0aW9uc0NvbnRleHRQcm92aWRlcj5cbiAgKVxufVxuXG5TY3JpcHR1cmVDYXJkLnByb3BUeXBlcyA9IHtcbiAgLyoqIHJlcG8gYnJhbmNoIG9yIHRhZyBzdWNoIGFzIG1hc3RlciAqL1xuICBhcHBSZWY6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgLyoqIGF1dGhlbnRpY2F0aW9uIGluZm8gKi9cbiAgYXV0aGVudGljYXRpb246IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKiBpbmRleCBmb3IgY3VycmVudCBib29rIChlLmcuICcwMScgZm9yICdnZW4nKSovXG4gIGJvb2tJbmRleDogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqIHNjcmlwdHVyZSBjYXJkIG51bWJlciAoMCB0byAyIGZvciBleGFtcGxlKSAqL1xuICBjYXJkTnVtOiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsXG4gIC8qKiBDU1MgY2xhc3NlcyAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKiogaWYgdHJ1ZSB0aGVuIHdvcmQgZGF0YSBob3ZlciBpcyBzaG93biAqL1xuICBkaXNhYmxlV29yZFBvcG92ZXI6IFByb3BUeXBlcy5ib29sLFxuICAvKiogZ2V0IGxhbmd1YWdlIGRldGFpbHMgKi9cbiAgZ2V0TGFuZ3VhZ2U6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIC8qKiBmdW5jdGlvbiB0byBnZXQgbGF0ZXN0IGxleGljb24gZGF0YSAqL1xuICBnZXRMZXhpY29uRGF0YTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKiBvcHRpb25hbCB1cmwgZm9yIGdyZWVrIHJlcG8gKi9cbiAgZ3JlZWtSZXBvVXJsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKiogb3B0aW9uYWwgdXJsIGZvciBoZWJyZXcgcmVwbyAqL1xuICBoZWJyZXdSZXBvVXJsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKiogb3B0aW9uYWwgaHR0cCB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyBmb3IgZmV0Y2hpbmcgcmVzb3VyY2VzLCBkZWZhdWx0IGlzIDAgKHZlcnkgbG9uZyB3YWl0KSAqL1xuICBodHRwQ29uZmlnOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKiogaHRtbCBpZGVudGlmaWVyIHRvIHVzZSBmb3IgY2FyZCAqL1xuICBpZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqIG1ldGhvZCB0byBkZXRlcm1pbmUgaWYgTlQgb3IgT1QgKi9cbiAgaXNOVDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgLyoqIHVzZXItbmFtZSAqL1xuICBsb2dnZWRJblVzZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKiBmdW5jdGlvbiB0byBtaW5pbWl6ZSB0aGUgY2FyZCAob3B0aW9uYWwpICovXG4gIG9uTWluaW1pemU6IFByb3BUeXBlcy5mdW5jLFxuICAvKiogb3B0aW9uYWwgY2FsbGJhY2sgaWYgZXJyb3IgbG9hZGluZyByZXNvdXJjZSwgcGFyYW1ldGVyIHJldHVybmVkIGFyZTpcbiAgICogICAgKHtzdHJpbmd9IGVycm9yTWVzc2FnZSwge2Jvb2xlYW59IGlzQWNjZXNzRXJyb3IsIHtvYmplY3R9IHJlc291cmNlU3RhdHVzKVxuICAgKiAgICAgIC0gaXNBY2Nlc3NFcnJvciAtIGlzIHRydWUgaWYgdGhpcyB3YXMgYW4gZXJyb3IgdHJ5aW5nIHRvIGFjY2VzcyBmaWxlXG4gICAqICAgICAgLSByZXNvdXJjZVN0YXR1cyAtIGlzIG9iamVjdCBjb250YWluaW5nIGRldGFpbHMgYWJvdXQgcHJvYmxlbXMgZmV0Y2hpbmcgcmVzb3VyY2UgKi9cbiAgb25SZXNvdXJjZUVycm9yOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqIHRoZSBvcmlnaW5hbCBzY3JpcHR1cmUgYm9va09iamVjdHMgZm9yIGN1cnJlbnQgYm9vayAqL1xuICBvcmlnaW5hbFNjcmlwdHVyZUJvb2tPYmplY3RzOiBQcm9wVHlwZXMub2JqZWN0LFxuICByZWZlcmVuY2U6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgLyoqIHByb2plY3RJZCAoYm9va0lEKSB0byB1c2UgKi9cbiAgICBwcm9qZWN0SWQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICAvKiogY3VycmVudCBjaGFwdGVyIG51bWJlciAqL1xuICAgIGNoYXB0ZXI6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKS5pc1JlcXVpcmVkLFxuICAgIC8qKiBjdXJyZW50IHZlcnNlIG51bWJlciAqL1xuICAgIHZlcnNlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSkuaXNSZXF1aXJlZCxcbiAgfSksXG4gIC8qKiByZXNvdXJjZSBvYmplY3QgKi9cbiAgcmVzb3VyY2U6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgLyoqIHJlc291cmNlIGxhbmd1YWdlIHRvIHVzZSAqL1xuICAgIGxhbmd1YWdlSWQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICAvKiogcmVwbyBvd25lciBzdWNoIGFzIHVuZm9sZGluZ1dvcmQgKi9cbiAgICBvd25lcjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIC8qKiByZXNvdXJjZUlkIHRvIHVzZSAoZS5nLiB1Z250KSAqL1xuICAgIHJlc291cmNlSWQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICAvKiogcmVwbyBvd25lciBmb3Igb3JpZ2luYWwgbGFuZ3VhZ2VzIHN1Y2ggYXMgdW5mb2xkaW5nV29yZCAqL1xuICAgIG9yaWdpbmFsTGFuZ3VhZ2VPd25lcjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICB9KSxcbiAgLyoqIHJlc291cmNlTGluayAqL1xuICByZXNvdXJjZUxpbms6IFByb3BUeXBlcy5hbnksXG4gIC8qKlRoaXMgaXMgY3VycmVudGx5IHNlbGVjdGVkIHF1b3RlICovXG4gIHNlbGVjdGVkUXVvdGU6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKiBzZXJ2ZXIgKGUuZy4gJ2h0dHBzOi8vZ2l0LmRvb3I0My5vcmcnKSAqL1xuICBzZXJ2ZXI6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgLyoqIGNhbGxiYWNrIHRvIHVwZGF0ZSBsb2FkaW5nIHN0YXRlICovXG4gIHNldEFyZVJlc291cmNlc0xvYWRpbmc6IFByb3BUeXBlcy5mdW5jLFxuICAvKiogY2FsbGJhY2sgdG8gdXBkYXRlIHNhdmluZyBzdGF0ZSovXG4gIHNldEFyZVJlc291cmNlc1NhdmluZzogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKiBjYWxsYmFjayB0byByZXBvcnQgY2FyZCBtZXJnZSBzdGF0dXMgKi9cbiAgc2V0Q2FyZHNMb2FkaW5nTWVyZ2U6IFByb3BUeXBlcy5mdW5jLFxuICAvKiogY2FsbGJhY2sgdG8gcmVwb3J0IGNhcmQgdXBkYXRlIHN0YXR1cyAqL1xuICBzZXRDYXJkc0xvYWRpbmdVcGRhdGU6IFByb3BUeXBlcy5mdW5jLFxuICAvKiogY2FsbGJhY2sgdG8gcmVwb3J0IGNhcmQgc2F2aW5nIHN0YXR1cyAqL1xuICBzZXRDYXJkc1NhdmluZzogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKiBmdW5jdGlvbiB0byBzZXQgc3RhdGUgaW4gYXBwIHRoYXQgdGhlcmUgYXJlIHVuc2F2ZWQgY2hhbmdlcyAqL1xuICBzZXRTYXZlZENoYW5nZXM6IFByb3BUeXBlcy5mdW5jLFxuICAvKiogY2FsbGJhY2sgdG8gdXBkYXRlIHdvcmQgYWxpZ25lciBzdGF0ZSAqL1xuICBzZXRXb3JkQWxpZ25lclN0YXR1czogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKiB0aXRsZSBmb3Igc2NyaXB0dXJlIGNhcmQgKi9cbiAgdGl0bGU6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgLyoqIG9wdGlvbmFsIGZ1bmN0aW9uIGZvciBsb2NhbGl6YXRpb24gKi9cbiAgdHJhbnNsYXRlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqIGNhbGxiYWNrIHRvIHVwZGF0ZSB0aGUgY2FyZCdzIG1lcmdlIHN0YXRlIGluIGFwcCAqL1xuICB1cGRhdGVNZXJnZVN0YXRlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqIHVzZSBtZXRob2QgZm9yIHVzaW5nIGxvY2FsIHN0b3JhZ2Ugc3BlY2lmaWMgZm9yIHVzZXIgKi9cbiAgdXNlVXNlckxvY2FsU3RvcmFnZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbn1cbiJdfQ==
|
|
1593
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL1NjcmlwdHVyZUNhcmQvU2NyaXB0dXJlQ2FyZC50c3giXSwibmFtZXMiOlsiUmVhY3QiLCJQcm9wVHlwZXMiLCJjb3JlIiwiU2VsZWN0aW9uc0NvbnRleHRQcm92aWRlciIsInVzZm1qcyIsInVzZUVkaXQiLCJJY29uQnV0dG9uIiwiUnhMaW5rMiIsIlJ4TGlua0JyZWFrMiIsIkNhcmQiLCJFcnJvckRpYWxvZyIsIkVSUk9SX1NUQVRFIiwiTUFOSUZFU1RfTk9UX0xPQURFRF9FUlJPUiIsIlVwZGF0ZUJyYW5jaEJ1dHRvbiIsInVzZUJyYW5jaE1lcmdlciIsInVzZUNhcmRTdGF0ZSIsInVzZUNvbnRlbnRVcGRhdGVQcm9wcyIsInVzZU1hc3Rlck1lcmdlUHJvcHMiLCJ1c2VVc2VyQnJhbmNoIiwiZ2V0UXVvdGVNYXRjaGVzSW5Cb29rUmVmIiwiQWxpZ25tZW50SGVscGVycyIsIlVzZm1GaWxlQ29udmVyc2lvbkhlbHBlcnMiLCJpc0VxdWFsIiwiZ2V0VmVyc2VzIiwiU2NyaXB0dXJlUGFuZSIsIlNjcmlwdHVyZVNlbGVjdG9yIiwidXNlU2NyaXB0dXJlU2V0dGluZ3MiLCJjbGVhbnVwVmVyc2VPYmplY3RzIiwiZml4T2NjdXJyZW5jZSIsImdldEJvb2tOYW1lRnJvbVVzZm1GaWxlTmFtZSIsImdldFJlc291cmNlTGluayIsImdldFJlc291cmNlTWVzc2FnZSIsImdldFNjcmlwdHVyZVZlcnNpb25TZXR0aW5ncyIsImlzT3JpZ2luYWxCaWJsZSIsImRlbGF5IiwiYXJlTWFwc1RoZVNhbWUiLCJUaXRsZSIsIk5UX09SSUdfTEFORyIsIk9SSUdJTkFMX1NPVVJDRSIsIk9UX09SSUdfTEFORyIsIlZlcnNlU2VsZWN0b3JQb3B1cCIsImdldFBhdGNoIiwiS0VZX0ZPTlRfU0laRV9CQVNFIiwibGFiZWwiLCJzdHlsZSIsIm1hcmdpblRvcCIsIndpZHRoIiwiY29tcGFyZU9iamVjdCIsInZlcnNlUmVmIiwiY2hhcHRlciIsInZlcnNlIiwidmVyc2VEYXRhIiwidmVyc2VPYmplY3RzIiwibGVuZ3RoIiwiSlNPTiIsInN0cmluZ2lmeSIsImFyZVZlcnNlc1NhbWUiLCJ2ZXJzZXNGb3JSZWYxIiwidmVyc2VzRm9yUmVmMiIsImFyZVNhbWUiLCJpIiwibCIsInZlcnNlMSIsInZlcnNlMiIsImdldEN1cnJlbnRCb29rIiwic2NyaXB0dXJlQ29uZmlnIiwiYm9va0lkIiwibGF0ZXN0QmlibGUiLCJyZXNvdXJjZVN0YXRlIiwicmVzb3VyY2UiLCJwcm9qZWN0SWQiLCJmaWxlbmFtZSIsIm5hbWUiLCJpc0Jvb2tWYWxpZCIsImJvb2tOYW1lIiwidG9Mb3dlckNhc2UiLCJpbmNsdWRlcyIsImNvbnNvbGUiLCJ3YXJuIiwiYmlibGVVc2ZtIiwiZXJyb3IiLCJTY3JpcHR1cmVDYXJkIiwiYXBwUmVmIiwiYXV0aGVudGljYXRpb24iLCJib29rSW5kZXgiLCJjYXJkTnVtIiwiY2xhc3NlcyIsImRpc2FibGVXb3JkUG9wb3ZlciIsImdldExhbmd1YWdlIiwiZ2V0TGV4aWNvbkRhdGEiLCJncmVla1JlcG9VcmwiLCJoZWJyZXdSZXBvVXJsIiwiaHR0cENvbmZpZyIsImlkIiwiaXNOVCIsImxvZ2dlZEluVXNlciIsIm9uTWluaW1pemUiLCJvblJlc291cmNlRXJyb3IiLCJvcmlnaW5hbFNjcmlwdHVyZUJvb2tPYmplY3RzIiwicmVmZXJlbmNlIiwib3duZXIiLCJsYW5ndWFnZUlkIiwicmVzb3VyY2VJZCIsIm9yaWdpbmFsTGFuZ3VhZ2VPd25lciIsInJlc291cmNlTGluayIsInNlbGVjdGVkUXVvdGUiLCJzZXJ2ZXIiLCJzZXRDYXJkc0xvYWRpbmdNZXJnZSIsInNldENhcmRzTG9hZGluZ1VwZGF0ZSIsInNldENhcmRzU2F2aW5nIiwic2V0U2F2ZWRDaGFuZ2VzIiwic2V0V29yZEFsaWduZXJTdGF0dXMiLCJ0cmFuc2xhdGUiLCJ0aXRsZSIsInVzZVVzZXJMb2NhbFN0b3JhZ2UiLCJ1cGRhdGVNZXJnZVN0YXRlIiwidXNlU3RhdGUiLCJjaGVja0ZvckVkaXRCcmFuY2giLCJjdXJyZW50UmVmZXJlbmNlIiwiZWRpdEJyYW5jaFJlYWR5IiwiaGF2ZVVuc2F2ZWRDaGFuZ2VzIiwibGFzdFNlbGVjdGVkUXVvdGUiLCJyZWFkeUZvckZldGNoIiwicmVmIiwic2F2ZUNsaWNrZWQiLCJzYXZlQ29udGVudCIsInNhdmVEaWZmUGF0Y2giLCJzZWxlY3Rpb25zIiwiTWFwIiwic2hvd0FsaWdubWVudFBvcHVwIiwic3RhcnRTYXZlIiwidXJsRXJyb3IiLCJ1c2luZ1VzZXJCcmFuY2giLCJ1bnNhdmVkQ2hhbmdlc0xpc3QiLCJ2ZXJzZXNBbGlnbm1lbnRTdGF0dXMiLCJ2ZXJzZXNGb3JSZWYiLCJ2ZXJzZU9iamVjdHNNYXAiLCJ2ZXJzZVNlbGVjdGVkRm9yQWxpZ25tZW50Iiwic3RhdGUiLCJzZXRTdGF0ZV8iLCJmb250U2l6ZSIsInNldEZvbnRTaXplIiwiaXNOVF8iLCJzZXRTdGF0ZSIsIm5ld1N0YXRlIiwicHJldlN0YXRlIiwiY2FjaGUiLCJtYXhBZ2UiLCJub0NhY2hlIiwic2V0VXJsRXJyb3IiLCJ3aG9sZUJvb2siLCJpc05ld1Rlc3RhbWVudCIsInNldFNjcmlwdHVyZSIsInNjcmlwdHVyZVNldHRpbmdzIiwic2NyaXB0dXJlVmVyc2lvbkhpc3QiLCJmZXRjaGVkUmVzb3VyY2UiLCJyZXBvIiwicmVmZXJlbmNlXyIsImNhcmRSZXNvdXJjZUlkIiwicmVmXyIsImNhblVzZUVkaXRCcmFuY2giLCJjYXJkSWQiLCJicmFuY2hEZXRlcm1pbmVkIiwidXNlckVkaXRCcmFuY2hOYW1lIiwiX3VzaW5nVXNlckJyYW5jaCIsIndvcmtpbmdSZXNvdXJjZUJyYW5jaCIsImFjdGlvbnMiLCJzdGFydEVkaXRCcmFuY2giLCJzdGFydEVkaXQiLCJmaW5pc2hFZGl0IiwiX3VzZUJyYW5jaE1lcmdlciIsInVzZXJCcmFuY2giLCJ0b2tlbmlkIiwidG9rZW4iLCJzaGExIiwibWVyZ2VUb01hc3RlciIsIm1lcmdlU3RhdHVzIiwibWVyZ2VGcm9tTWFzdGVyIiwidXBkYXRlU3RhdHVzIiwidXBkYXRlQnV0dG9uUHJvcHMiLCJpc1NhdmluZyIsIm9uVXBkYXRlIiwidGhlbiIsInJlbG9hZFJlc291cmNlIiwiY2FsbFVwZGF0ZVVzZXJCcmFuY2giLCJpc0Vycm9yRGlhbG9nT3BlbiIsIm9uQ2xvc2VFcnJvckRpYWxvZyIsImlzVXBkYXRlTG9hZGluZyIsImlzTG9hZGluZyIsImRpYWxvZ01lc3NhZ2UiLCJkaWFsb2dUaXRsZSIsImRpYWxvZ0xpbmsiLCJkaWFsb2dMaW5rVG9vbHRpcCIsIm9uTWVyZ2UiLCJsb2ciLCJpc01lcmdlTG9hZGluZyIsImNhbGxNZXJnZVVzZXJCcmFuY2giLCJ1c2VFZmZlY3QiLCJwcmV2Q2FyZHNMb2FkaW5nIiwiZmlsdGVyIiwid29ya2luZ1JlZiIsInNjcmlwdHVyZVRpdGxlIiwicmVzb3VyY2VTdGF0dXMiLCJtZXNzYWdlIiwiaXNBY2Nlc3NFcnJvciIsInZlcnNpb24iLCJ1cGRhdGVUaXRsZSIsImdldFNjcmlwdHVyZVNlbGVjdG9yIiwic2NyaXB0dXJlU2VsZWN0aW9uQ29uZmlnIiwib25NZW51Q2xvc2UiLCJsYW5ndWFnZUlkXyIsImxhbmd1YWdlIiwiZGlyZWN0aW9uIiwiX3JlZmVyZW5jZSIsImlzSGVicmV3IiwiZm9udEZhY3RvciIsInNjYWxlZEZvbnRTaXplIiwiaXRlbXMiLCJoZWFkZXJzIiwiZmlsdGVycyIsIml0ZW1JbmRleCIsIm1hcmtkb3duVmlldyIsInNldEZpbHRlcnMiLCJzZXRJdGVtSW5kZXgiLCJzZXRNYXJrZG93blZpZXciLCJyZWZTdHlsZSIsInVzZU1lbW8iLCJmb250RmFtaWx5IiwiTWF0aCIsInJvdW5kIiwiY29udGVudFN0eWxlIiwic2NyaXB0dXJlTGFiZWwiLCJkaXNhYmxlV29yZFBvcG92ZXJfIiwidXNpbmdPcmlnaW5hbEJpYmxlIiwidW5kZWZpbmVkIiwiZW5hYmxlRWRpdCIsImVuYWJsZUFsaWdubWVudCIsIm9yaWdpbmFsUmVwb1VybCIsInNjcmlwdHVyZUFsaWdubWVudEVkaXRDb25maWciLCJjdXJyZW50VmVyc2VSZWYiLCJfc2V0U2F2ZWRDaGFuZ2VzIiwic291cmNlTGFuZ3VhZ2UiLCJ0YXJnZXRMYW5ndWFnZSIsImN1cnJlbnRJbmRleCIsInNhdmVkIiwiZ2V0Q2hhbmdlcyIsImNsZWFyQ2hhbmdlcyIsIl91bnNhdmVkQ2hhbmdlc0xpc3QiLCJoYXNPd25Qcm9wZXJ0eSIsIl9oYXZlVW5zYXZlZENoYW5nZXMiLCJPYmplY3QiLCJrZXlzIiwiZmluZFJlZkluQXJyYXkiLCJmaW5kSXRlbSIsImNodW5rcyIsInJlZkxlbiIsImluZGV4IiwiZmluZEluZGV4IiwiY2h1bmsiLCJpZHgiLCJzdWJzdHJpbmciLCJuZXh0Q2hhciIsImdldEJvb2tOYW1lIiwiYm9va0NhcHMiLCJ0b1VwcGVyQ2FzZSIsImZpbGVwYXRoIiwic2hhIiwiY29udGVudCIsImNvbmZpZyIsImRvbnRDcmVhdGVCcmFuY2giLCJ0aW1lb3V0Iiwic2VydmVyVGltZU91dCIsImF1dGhvciIsImVtYWlsIiwidXNlciIsImJyYW5jaCIsInNhdmVFcnJvciIsImlzU2F2ZUVycm9yIiwiaXNFcnJvciIsIm9uU2F2ZUVkaXQiLCJvblNhdmVFZGl0UGF0Y2giLCJfc2F2ZUVkaXQiLCJpbmZvIiwic2F2ZUZ1bmN0aW9uIiwic3VjY2VzcyIsInByZXZDYXJkc1NhdmluZyIsInVuc2F2ZWRDYXJkSW5kaWNlcyIsImNhcmRJbmRleCIsIm1lcmdlVmVyc2VPYmplY3RzSW50b0JpYmxlVXNmbSIsInVwZGF0ZWRWZXJzZU9iamVjdHMiLCJuZXdVc2ZtIiwiY2hhcHRlckNodW5rcyIsInNwbGl0IiwiY2hhcHRlckluZGV4IiwiY3VycmVudENoYXB0ZXIiLCJ2ZXJzZUNodW5rcyIsInZlcnNlSW5kZXgiLCJuZXdWZXJzZVVzZm0iLCJjb252ZXJ0VmVyc2VEYXRhVG9VU0ZNIiwib2xkVmVyc2UiLCJ2ZXJzZU51bUxlbiIsIm5ld0NoYXB0ZXIiLCJqb2luIiwiZ2V0UmVhZHlGb3JTYXZlIiwiY3JlYXRlRWRpdEJyYW5jaCIsImJpYmxlVXNmbV8iLCJtZXJnZUZhaWwiLCJwYXJzZUludCIsIm5ld1ZlcnNlVGV4dCIsInRhcmdldFZlcnNlT2JqZWN0c18iLCJ1cGRhdGVBbGlnbm1lbnRzVG9UYXJnZXRWZXJzZSIsInRhcmdldFZlcnNlT2JqZWN0cyIsIm5ld0Jvb2tKc29uIiwidXBkYXRlVmVyc2UiLCJ0b1VTRk0iLCJmb3JjZWROZXdMaW5lcyIsImRpZmZQYXRjaCIsIl92ZXJzZXNGb3JSZWYiLCJuZXdTZWxlY3Rpb25zIiwidXBkYXRlU2VsZWN0aW9ucyIsIl9tYXAiLCJvcmlnaW5hbEJvb2tJZCIsImJvb2tWZXJzZU9iamVjdCIsImNoYXB0ZXJzIiwibmV3U2VsZWN0ZWRRdW90ZSIsInF1b3RlIiwib3JpZ2luYWxWZXJzZXMiLCJzdWJzdGl0dXRlIiwic3RhcnRWZXJzZSIsImxhc3RWZXJzZSIsIl92ZXJzZSIsInZlcnNlcyIsInZlcnNlSXRlbSIsInZvIiwiY29uY2F0Iiwic2V0Iiwic3ViUmVmIiwicXVvdGVNYXRjaGVzIiwiYm9va09iamVjdCIsIm9jY3VycmVuY2UiLCJzaXplIiwiZm9yRWFjaCIsIndvcmRzIiwia2V5IiwiX2tleSIsIm1hcCIsIndvcmQiLCJ0ZXh0Iiwibm9ybWFsaXplU3RyaW5nIiwiYm9va3NOb3RTYW1lIiwidXBkYXRlVmVyc2VzQWxpZ25tZW50U3RhdHVzIiwiYWxpZ25lZCIsInJlbmRlcmVkU2NyaXB0dXJlUGFuZXMiLCJfY3VycmVudFZlcnNlRGF0YSIsImluaXRpYWxWZXJzZU9iamVjdHMiLCJfc2NyaXB0dXJlQWxpZ25tZW50RWRpdENvbmZpZyIsImlzVmVyc2VTZWxlY3RlZEZvckFsaWdubWVudCIsImhhbmRsZUFsaWduQnV0dG9uQ2xpY2siLCJvblJlbmRlclRvb2xiYXIiLCJuZXdJdGVtcyIsImFsbFZlcnNlc0FsaWduZWQiLCJ2YWx1ZXMiLCJldmVyeSIsImFsaWduU3RhdHVzIiwiYWxpZ25JY29uIiwiYWxpZ25CdXR0b25UZXh0IiwicHVzaCIsImN1cnNvciIsInByb3BUeXBlcyIsInN0cmluZyIsImlzUmVxdWlyZWQiLCJvYmplY3QiLCJudW1iZXIiLCJib29sIiwiZnVuYyIsInNoYXBlIiwib25lT2ZUeXBlIiwiYW55Iiwic2V0QXJlUmVzb3VyY2VzTG9hZGluZyIsInNldEFyZVJlc291cmNlc1NhdmluZyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE9BQU8sS0FBS0EsS0FBWixNQUF1QixPQUF2QjtBQUNBLE9BQU8sS0FBS0MsU0FBWixNQUEyQixZQUEzQjtBQUNBLFNBQVNDLElBQVQsRUFBZUMseUJBQWYsUUFBZ0QseUJBQWhEO0FBQ0EsT0FBT0MsTUFBUCxNQUFtQixTQUFuQjtBQUNBLFNBQVNDLE9BQVQsUUFBd0IscUJBQXhCO0FBQ0EsU0FBU0MsVUFBVCxRQUEyQixlQUEzQjtBQUNBLFNBQVNDLE9BQVQsRUFBa0JDLFlBQWxCLFFBQXNDLGdCQUF0QztBQUNBLFNBQ0VDLElBREYsRUFFRUMsV0FGRixFQUdFQyxXQUhGLEVBSUVDLHlCQUpGLEVBS0VDLGtCQUxGLEVBTUVDLGVBTkYsRUFPRUMsWUFQRixFQVFFQyxxQkFSRixFQVNFQyxtQkFURixFQVVFQyxhQVZGLFFBV08sdUJBWFAsQyxDQVlBOztBQUNBLFNBQVNDLHdCQUFULFFBQXlDLGtCQUF6QztBQUNBLFNBQVNDLGdCQUFULEVBQTJCQyx5QkFBM0IsUUFBNEQsa0JBQTVEO0FBQ0EsT0FBTyxLQUFLQyxPQUFaLE1BQXlCLFlBQXpCO0FBQ0EsU0FBU0MsU0FBVCxRQUEwQix1QkFBMUI7QUFDQSxTQUFTQyxhQUFULEVBQXdCQyxpQkFBeEIsUUFBaUQsSUFBakQ7QUFDQSxTQUFTQyxvQkFBVCxRQUFxQyxrQ0FBckM7QUFDQSxTQUNFQyxtQkFERixFQUVFQyxhQUZGLEVBR0VDLDJCQUhGLEVBSUVDLGVBSkYsRUFLRUMsa0JBTEYsRUFNRUMsMkJBTkYsRUFPRUMsZUFQRixRQVFPLCtCQVJQO0FBU0EsU0FBU0MsS0FBVCxRQUFzQixtQkFBdEI7QUFDQSxTQUFTQyxjQUFULFFBQStCLGtCQUEvQjtBQUNBLFNBQVNDLEtBQVQsUUFBc0IseUJBQXRCO0FBQ0EsU0FDRUMsWUFERixFQUVFQyxlQUZGLEVBR0VDLFlBSEYsUUFJTyxhQUpQO0FBS0EsU0FBU0Msa0JBQVQsUUFBbUMsdUJBQW5DO0FBQ0EsU0FBU0MsUUFBVCxRQUF5QixtQkFBekI7QUFFQSxJQUFNQyxrQkFBa0IsR0FBRyx3QkFBM0I7QUFDQSxJQUFNQyxLQUFLLEdBQUcsU0FBZDtBQUNBLElBQU1DLEtBQUssR0FBRztBQUFFQyxFQUFBQSxTQUFTLEVBQUUsTUFBYjtBQUFxQkMsRUFBQUEsS0FBSyxFQUFFO0FBQTVCLENBQWQ7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFDQSxTQUFTQyxhQUFULENBQXVCQyxRQUF2QixFQUFpQztBQUFBOztBQUFBLGFBSzNCQSxRQUFRLElBQUksRUFMZTtBQUFBLE1BRTdCQyxPQUY2QixRQUU3QkEsT0FGNkI7QUFBQSxNQUc3QkMsS0FINkIsUUFHN0JBLEtBSDZCO0FBQUEsTUFJN0JDLFNBSjZCLFFBSTdCQSxTQUo2Qjs7QUFNL0IsTUFBTUMsWUFBWSxHQUFHRCxTQUFTLFNBQVQsSUFBQUEsU0FBUyxXQUFULDZCQUFBQSxTQUFTLENBQUVDLFlBQVgsd0VBQXlCQyxNQUF6QixHQUFrQ0MsSUFBSSxDQUFDQyxTQUFMLENBQWVKLFNBQVMsQ0FBQ0MsWUFBekIsQ0FBbEMsR0FBMkUsRUFBaEc7QUFDQSxTQUFPO0FBQ0xILElBQUFBLE9BQU8sRUFBUEEsT0FESztBQUVMQyxJQUFBQSxLQUFLLEVBQUxBLEtBRks7QUFHTEUsSUFBQUEsWUFBWSxFQUFaQTtBQUhLLEdBQVA7QUFLRDtBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNBLFNBQVNJLGFBQVQsQ0FBdUJDLGFBQXZCLEVBQTZDQyxhQUE3QyxFQUFtRTtBQUNqRUQsRUFBQUEsYUFBYSxHQUFHQSxhQUFhLElBQUksRUFBakM7QUFDQUMsRUFBQUEsYUFBYSxHQUFHQSxhQUFhLElBQUksRUFBakM7QUFDQSxNQUFJQyxPQUFPLEdBQUcsS0FBZDs7QUFFQSxNQUFJRixhQUFhLENBQUNKLE1BQWQsS0FBeUJLLGFBQWEsQ0FBQ0wsTUFBM0MsRUFBbUQ7QUFDakRNLElBQUFBLE9BQU8sR0FBRyxJQUFWOztBQUVBLFNBQUssSUFBSUMsQ0FBQyxHQUFHLENBQVIsRUFBV0MsQ0FBQyxHQUFFSixhQUFhLENBQUNKLE1BQWpDLEVBQXlDTyxDQUFDLEdBQUdDLENBQTdDLEVBQWdERCxDQUFDLEVBQWpELEVBQXFEO0FBQ25ELFVBQU1FLE1BQU0sR0FBR2YsYUFBYSxDQUFDVSxhQUFhLENBQUNHLENBQUQsQ0FBZCxDQUE1QjtBQUNBLFVBQU1HLE1BQU0sR0FBR2hCLGFBQWEsQ0FBQ1csYUFBYSxDQUFDRSxDQUFELENBQWQsQ0FBNUI7QUFDQUQsTUFBQUEsT0FBTyxHQUFHckMsT0FBTyxDQUFDd0MsTUFBRCxFQUFTQyxNQUFULENBQWpCOztBQUVBLFVBQUksQ0FBQ0osT0FBTCxFQUFjO0FBQ1o7QUFDRDtBQUNGO0FBQ0Y7O0FBRUQsU0FBT0EsT0FBUDtBQUNEO0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ0EsT0FBTyxJQUFNSyxjQUFjLEdBQUcsU0FBakJBLGNBQWlCLENBQUNDLGVBQUQsRUFBa0JDLE1BQWxCLEVBQTZCO0FBQUE7O0FBQ3pELE1BQU1DLFdBQVcsR0FBR0YsZUFBSCxhQUFHQSxlQUFILGdEQUFHQSxlQUFlLENBQUVHLGFBQXBCLG9GQUFHLHNCQUFnQ0MsUUFBbkMsMkRBQUcsdUJBQTBDQyxTQUE5RDtBQUNBLE1BQU1DLFFBQVEsR0FBR04sZUFBSCxhQUFHQSxlQUFILGlEQUFHQSxlQUFlLENBQUVHLGFBQXBCLHFGQUFHLHVCQUFnQ0MsUUFBbkMsMkRBQUcsdUJBQTBDRyxJQUEzRCxDQUZ5RCxDQUVPOztBQUNoRSxNQUFJQyxXQUFXLEdBQUcsS0FBbEI7QUFDQSxNQUFNQyxRQUFRLEdBQUc3QywyQkFBMkIsQ0FBQzBDLFFBQUQsQ0FBNUM7QUFDQUUsRUFBQUEsV0FBVyxHQUFHQyxRQUFILGFBQUdBLFFBQUgsZ0RBQUdBLFFBQVEsQ0FBRUMsV0FBVixFQUFILDBEQUFHLHNCQUF5QkMsUUFBekIsQ0FBa0NWLE1BQWxDLENBQWQ7O0FBQ0EsTUFBSSxDQUFDTyxXQUFMLEVBQWtCO0FBQ2hCSSxJQUFBQSxPQUFPLENBQUNDLElBQVIsNkJBQWtDWixNQUFsQywrQkFBNkRLLFFBQTdEO0FBQ0Q7O0FBQ0QsTUFBSSxDQUFBSixXQUFXLFNBQVgsSUFBQUEsV0FBVyxXQUFYLFlBQUFBLFdBQVcsQ0FBRVEsV0FBYixRQUErQlQsTUFBbkMsRUFBMkM7QUFDekNXLElBQUFBLE9BQU8sQ0FBQ0MsSUFBUiw2QkFBa0NaLE1BQWxDLHVDQUFxRUMsV0FBckU7QUFDQU0sSUFBQUEsV0FBVyxHQUFHLEtBQWQ7QUFDRDs7QUFDRCxNQUFJQSxXQUFKLEVBQWlCO0FBQ2YsUUFBTU0sU0FBUyxHQUFHZCxlQUFILGFBQUdBLGVBQUgsdUJBQUdBLGVBQWUsQ0FBRWMsU0FBbkM7O0FBQ0EsUUFBSUEsU0FBSixFQUFlO0FBQ2IsYUFBT0EsU0FBUDtBQUNEOztBQUNERixJQUFBQSxPQUFPLENBQUNHLEtBQVI7QUFDRDs7QUFDREgsRUFBQUEsT0FBTyxDQUFDRyxLQUFSLHVDQUE2Q2QsTUFBN0MsMkJBQW9FSyxRQUFwRTtBQUNBLFNBQU8sSUFBUDtBQUNELENBdEJNO0FBd0JQLGVBQWUsU0FBU1UsYUFBVCxRQXFDWjtBQUFBOztBQUFBLE1BcENEQyxNQW9DQyxTQXBDREEsTUFvQ0M7QUFBQSxNQW5DREMsY0FtQ0MsU0FuQ0RBLGNBbUNDO0FBQUEsTUFsQ0RDLFNBa0NDLFNBbENEQSxTQWtDQztBQUFBLE1BakNEQyxPQWlDQyxTQWpDREEsT0FpQ0M7QUFBQSxNQWhDREMsT0FnQ0MsU0FoQ0RBLE9BZ0NDO0FBQUEsTUEvQkRDLGtCQStCQyxTQS9CREEsa0JBK0JDO0FBQUEsTUE5QkRDLFdBOEJDLFNBOUJEQSxXQThCQztBQUFBLE1BN0JEQyxjQTZCQyxTQTdCREEsY0E2QkM7QUFBQSxNQTVCREMsWUE0QkMsU0E1QkRBLFlBNEJDO0FBQUEsTUEzQkRDLGFBMkJDLFNBM0JEQSxhQTJCQztBQUFBLE1BMUJEQyxVQTBCQyxTQTFCREEsVUEwQkM7QUFBQSxNQXpCREMsRUF5QkMsU0F6QkRBLEVBeUJDO0FBQUEsTUF4QkRDLElBd0JDLFNBeEJEQSxJQXdCQztBQUFBLE1BdkJEQyxZQXVCQyxTQXZCREEsWUF1QkM7QUFBQSxNQXRCREMsVUFzQkMsU0F0QkRBLFVBc0JDO0FBQUEsTUFyQkRDLGVBcUJDLFNBckJEQSxlQXFCQztBQUFBLE1BcEJEQyw0QkFvQkMsU0FwQkRBLDRCQW9CQztBQUFBLE1BbkJEQyxTQW1CQyxTQW5CREEsU0FtQkM7QUFBQSw2QkFsQkQ5QixRQWtCQztBQUFBLE1BakJDK0IsS0FpQkQsa0JBakJDQSxLQWlCRDtBQUFBLE1BaEJDQyxVQWdCRCxrQkFoQkNBLFVBZ0JEO0FBQUEsTUFmQ0MsVUFlRCxrQkFmQ0EsVUFlRDtBQUFBLE1BZENDLHFCQWNELGtCQWRDQSxxQkFjRDtBQUFBLE1BWkRDLFlBWUMsU0FaREEsWUFZQztBQUFBLE1BWERDLGFBV0MsU0FYREEsYUFXQztBQUFBLE1BVkRDLE1BVUMsU0FWREEsTUFVQztBQUFBLE1BVERDLG9CQVNDLFNBVERBLG9CQVNDO0FBQUEsTUFSREMscUJBUUMsU0FSREEscUJBUUM7QUFBQSxNQVBEQyxjQU9DLFNBUERBLGNBT0M7QUFBQSxNQU5EQyxlQU1DLFNBTkRBLGVBTUM7QUFBQSxNQUxEQyxvQkFLQyxTQUxEQSxvQkFLQztBQUFBLE1BSkRDLFNBSUMsU0FKREEsU0FJQztBQUFBLE1BSERDLEtBR0MsU0FIREEsS0FHQztBQUFBLE1BRkRDLG1CQUVDLFNBRkRBLG1CQUVDO0FBQUEsTUFEREMsZ0JBQ0MsU0FEREEsZ0JBQ0M7QUFDRCxNQUFNakQsTUFBTSxHQUFHaUMsU0FBSCxhQUFHQSxTQUFILHVCQUFHQSxTQUFTLENBQUU3QixTQUExQjs7QUFEQyx3QkFFMEJ0RSxLQUFLLENBQUNvSCxRQUFOLENBQWU7QUFDeENDLElBQUFBLGtCQUFrQixFQUFFLENBRG9CO0FBRXhDQyxJQUFBQSxnQkFBZ0IsRUFBRSxJQUZzQjtBQUd4Q0MsSUFBQUEsZUFBZSxFQUFFLEtBSHVCO0FBSXhDQyxJQUFBQSxrQkFBa0IsRUFBRSxLQUpvQjtBQUt4Q0MsSUFBQUEsaUJBQWlCLEVBQUUsSUFMcUI7QUFNeENDLElBQUFBLGFBQWEsRUFBRSxLQU55QjtBQU94Q0MsSUFBQUEsR0FBRyxFQUFFekMsTUFQbUM7QUFReEMwQyxJQUFBQSxXQUFXLEVBQUUsS0FSMkI7QUFTeENDLElBQUFBLFdBQVcsRUFBRSxJQVQyQjtBQVV4Q0MsSUFBQUEsYUFBYSxFQUFFLEtBVnlCO0FBV3hDQyxJQUFBQSxVQUFVLEVBQUUsSUFBSUMsR0FBSixFQVg0QjtBQVl4Q0MsSUFBQUEsa0JBQWtCLEVBQUUsS0Fab0I7QUFheENDLElBQUFBLFNBQVMsRUFBRSxLQWI2QjtBQWN4Q0MsSUFBQUEsUUFBUSxFQUFFLElBZDhCO0FBZXhDQyxJQUFBQSxlQUFlLEVBQUUsS0FmdUI7QUFnQnhDQyxJQUFBQSxrQkFBa0IsRUFBRSxFQWhCb0I7QUFpQnhDQyxJQUFBQSxxQkFBcUIsRUFBRSxJQWpCaUI7QUFrQnhDQyxJQUFBQSxZQUFZLEVBQUUsSUFsQjBCO0FBbUJ4Q0MsSUFBQUEsZUFBZSxFQUFFLElBQUlSLEdBQUosRUFuQnVCO0FBb0J4Q1MsSUFBQUEseUJBQXlCLEVBQUU7QUFwQmEsR0FBZixDQUYxQjtBQUFBO0FBQUEsTUFFTUMsS0FGTjtBQUFBLE1BRWFDLFNBRmI7O0FBQUEsTUF5QkN0QixrQkF6QkQsR0E2Q0dxQixLQTdDSCxDQXlCQ3JCLGtCQXpCRDtBQUFBLE1BMEJDQyxnQkExQkQsR0E2Q0dvQixLQTdDSCxDQTBCQ3BCLGdCQTFCRDtBQUFBLE1BMkJDQyxlQTNCRCxHQTZDR21CLEtBN0NILENBMkJDbkIsZUEzQkQ7QUFBQSxNQTRCQ0Msa0JBNUJELEdBNkNHa0IsS0E3Q0gsQ0E0QkNsQixrQkE1QkQ7QUFBQSxNQTZCQ0MsaUJBN0JELEdBNkNHaUIsS0E3Q0gsQ0E2QkNqQixpQkE3QkQ7QUFBQSxNQThCQ0MsYUE5QkQsR0E2Q0dnQixLQTdDSCxDQThCQ2hCLGFBOUJEO0FBQUEsTUErQkNDLEdBL0JELEdBNkNHZSxLQTdDSCxDQStCQ2YsR0EvQkQ7QUFBQSxNQWdDQ0MsV0FoQ0QsR0E2Q0djLEtBN0NILENBZ0NDZCxXQWhDRDtBQUFBLE1BaUNDQyxXQWpDRCxHQTZDR2EsS0E3Q0gsQ0FpQ0NiLFdBakNEO0FBQUEsTUFrQ0NDLGFBbENELEdBNkNHWSxLQTdDSCxDQWtDQ1osYUFsQ0Q7QUFBQSxNQW1DQ0MsVUFuQ0QsR0E2Q0dXLEtBN0NILENBbUNDWCxVQW5DRDtBQUFBLE1Bb0NDRSxrQkFwQ0QsR0E2Q0dTLEtBN0NILENBb0NDVCxrQkFwQ0Q7QUFBQSxNQXFDQ0MsU0FyQ0QsR0E2Q0dRLEtBN0NILENBcUNDUixTQXJDRDtBQUFBLE1Bc0NDQyxRQXRDRCxHQTZDR08sS0E3Q0gsQ0FzQ0NQLFFBdENEO0FBQUEsTUF1Q0NDLGVBdkNELEdBNkNHTSxLQTdDSCxDQXVDQ04sZUF2Q0Q7QUFBQSxNQXdDQ0Msa0JBeENELEdBNkNHSyxLQTdDSCxDQXdDQ0wsa0JBeENEO0FBQUEsTUF5Q0NHLGVBekNELEdBNkNHRSxLQTdDSCxDQXlDQ0YsZUF6Q0Q7QUFBQSxNQTBDQ0MseUJBMUNELEdBNkNHQyxLQTdDSCxDQTBDQ0QseUJBMUNEO0FBQUEsTUEyQ0NILHFCQTNDRCxHQTZDR0ksS0E3Q0gsQ0EyQ0NKLHFCQTNDRDtBQUFBLE1BNENDQyxZQTVDRCxHQTZDR0csS0E3Q0gsQ0E0Q0NILFlBNUNEOztBQUFBLDZCQStDK0JyQixtQkFBbUIsQ0FBQ3hFLGtCQUFrQixHQUFHMkMsT0FBdEIsRUFBK0IsR0FBL0IsQ0EvQ2xEO0FBQUE7QUFBQSxNQStDTXVELFFBL0NOO0FBQUEsTUErQ2dCQyxXQS9DaEI7O0FBZ0RELE1BQU1DLEtBQUssR0FBR2hELElBQUksQ0FBQzVCLE1BQUQsQ0FBbEI7O0FBRUEsV0FBUzZFLFFBQVQsQ0FBa0JDLFFBQWxCLEVBQTRCO0FBQzFCTCxJQUFBQSxTQUFTLENBQUMsVUFBQU0sU0FBUztBQUFBLDZDQUFVQSxTQUFWLEdBQXdCRCxRQUF4QjtBQUFBLEtBQVYsQ0FBVDtBQUNEOztBQUVEcEQsRUFBQUEsVUFBVSxtQ0FDTEEsVUFESztBQUVSc0QsSUFBQUEsS0FBSyxFQUFFO0FBQUVDLE1BQUFBLE1BQU0sRUFBRTtBQUFWLEtBRkM7QUFHUkMsSUFBQUEsT0FBTyxFQUFFO0FBSEQsSUFBVixDQXREQyxDQTBEQzs7QUExREQsOEJBa0VHMUgsb0JBQW9CLENBQUM7QUFDdkJ3RCxJQUFBQSxNQUFNLEVBQUV5QyxHQURlO0FBRXZCdEMsSUFBQUEsT0FBTyxFQUFQQSxPQUZ1QjtBQUd2QkUsSUFBQUEsa0JBQWtCLEVBQWxCQSxrQkFIdUI7QUFJdkJHLElBQUFBLFlBQVksRUFBWkEsWUFKdUI7QUFLdkJDLElBQUFBLGFBQWEsRUFBYkEsYUFMdUI7QUFNdkJDLElBQUFBLFVBQVUsRUFBVkEsVUFOdUI7QUFPdkJFLElBQUFBLElBQUksRUFBSkEsSUFQdUI7QUFRdkJPLElBQUFBLFVBQVUsRUFBVkEsVUFSdUI7QUFTdkJFLElBQUFBLHFCQUFxQixFQUFyQkEscUJBVHVCO0FBVXZCSCxJQUFBQSxLQUFLLEVBQUxBLEtBVnVCO0FBV3ZCc0IsSUFBQUEsYUFBYSxFQUFiQSxhQVh1QjtBQVl2QnZCLElBQUFBLFNBQVMsRUFBRW1CLGdCQUFnQixJQUFJbkIsU0FaUjtBQWF2QkcsSUFBQUEsVUFBVSxFQUFWQSxVQWJ1QjtBQWN2QkUsSUFBQUEsWUFBWSxFQUFaQSxZQWR1QjtBQWV2QjZDLElBQUFBLFdBQVcsRUFBRSxxQkFBQ3JFLEtBQUQ7QUFBQSxhQUFXK0QsUUFBUSxDQUFDO0FBQUVaLFFBQUFBLFFBQVEsRUFBRW5EO0FBQVosT0FBRCxDQUFuQjtBQUFBLEtBZlU7QUFnQnZCMEIsSUFBQUEsTUFBTSxFQUFOQSxNQWhCdUI7QUFpQnZCTyxJQUFBQSxLQUFLLEVBQUxBLEtBakJ1QjtBQWtCdkJDLElBQUFBLG1CQUFtQixFQUFuQkEsbUJBbEJ1QjtBQW1CdkJvQyxJQUFBQSxTQUFTLEVBQUU7QUFuQlksR0FBRCxDQWxFdkI7QUFBQSxNQTZEQ0MsY0E3REQseUJBNkRDQSxjQTdERDtBQUFBLE1BOERDdEYsZUE5REQseUJBOERDQSxlQTlERDtBQUFBLE1BK0RDdUYsWUEvREQseUJBK0RDQSxZQS9ERDtBQUFBLE1BZ0VDQyxpQkFoRUQseUJBZ0VDQSxpQkFoRUQ7QUFBQSxNQWlFQ0Msb0JBakVELHlCQWlFQ0Esb0JBakVEOztBQXdGRCxNQUFNQyxlQUFlLEdBQUcxRixlQUFILGFBQUdBLGVBQUgsdUJBQUdBLGVBQWUsQ0FBRUcsYUFBekMsQ0F4RkMsQ0F5RkQ7O0FBQ0EsTUFBTXdGLElBQUksYUFBTTNGLGVBQU4sYUFBTUEsZUFBTixpREFBTUEsZUFBZSxDQUFFSSxRQUF2QiwyREFBTSx1QkFBMkJnQyxVQUFqQyxjQUErQ3BDLGVBQS9DLGFBQStDQSxlQUEvQyxpREFBK0NBLGVBQWUsQ0FBRUksUUFBaEUsMkRBQStDLHVCQUEyQkMsU0FBMUUsQ0FBVjtBQUNBLE1BQU11RixVQUFVLEdBQUcsQ0FBQTVGLGVBQWUsU0FBZixJQUFBQSxlQUFlLFdBQWYsWUFBQUEsZUFBZSxDQUFFa0MsU0FBakIsS0FBOEIsSUFBakQsQ0EzRkMsQ0E2RkQ7O0FBQ0EsTUFBTTJELGNBQWMsR0FBRyxDQUFBN0YsZUFBZSxTQUFmLElBQUFBLGVBQWUsV0FBZixzQ0FBQUEsZUFBZSxDQUFFSSxRQUFqQixrRkFBMkJDLFNBQTNCLEtBQXdDZ0MsVUFBL0QsQ0E5RkMsQ0ErRkQ7O0FBQ0EsTUFBSXlELElBQUksR0FBRyxDQUFBOUYsZUFBZSxTQUFmLElBQUFBLGVBQWUsV0FBZixzQ0FBQUEsZUFBZSxDQUFFSSxRQUFqQixrRkFBMkJzRCxHQUEzQixLQUFrQ3pDLE1BQTdDO0FBQ0EsTUFBTThFLGdCQUFnQixHQUFHLENBQUMsRUFBRWpFLFlBQVksSUFBSVosY0FBaEIsSUFBbUNtQixVQUFVLEtBQUtoRSxlQUFsRCxNQUFzRTtBQUM5RnlILEVBQUFBLElBQUksS0FBSyxRQUFWLElBQXdCQSxJQUFJLENBQUNuRixRQUFMLENBQWNtQixZQUFkLENBREMsQ0FBRixDQUExQixDQWpHQyxDQWtHeUQ7O0FBbEd6RCx1QkErR0c3RSxhQUFhLENBQUM7QUFDaEJnRSxJQUFBQSxNQUFNLEVBQU5BLE1BRGdCO0FBRWhCQyxJQUFBQSxjQUFjLEVBQUU2RSxnQkFBZ0IsR0FBRzdFLGNBQUgsR0FBb0IsSUFGcEM7QUFHaEJqQixJQUFBQSxNQUFNLEVBQU5BLE1BSGdCO0FBSWhCK0YsSUFBQUEsTUFBTSxFQUFFcEUsRUFKUTtBQUtoQmlFLElBQUFBLGNBQWMsRUFBZEEsY0FMZ0I7QUFNaEJ6QyxJQUFBQSxrQkFBa0IsRUFBbEJBLGtCQU5nQjtBQU9oQmhCLElBQUFBLFVBQVUsRUFBVkEsVUFQZ0I7QUFRaEJOLElBQUFBLFlBQVksRUFBRWlFLGdCQUFnQixHQUFHakUsWUFBSCxHQUFrQixJQVJoQztBQVNoQkssSUFBQUEsS0FBSyxFQUFMQSxLQVRnQjtBQVVoQkgsSUFBQUEsZUFBZSxFQUFmQSxlQVZnQjtBQVdoQlMsSUFBQUEsTUFBTSxFQUFOQSxNQVhnQjtBQVloQlEsSUFBQUEsbUJBQW1CLEVBQW5CQTtBQVpnQixHQUFELENBL0doQjtBQUFBLDRDQXFHQ3dCLEtBckdEO0FBQUEsTUFzR0d3QixnQkF0R0gsd0JBc0dHQSxnQkF0R0g7QUFBQSxNQXVHR0Msa0JBdkdILHdCQXVHR0Esa0JBdkdIO0FBQUEsTUF3R29CQyxnQkF4R3BCLHdCQXdHR2hDLGVBeEdIO0FBQUEsTUF5R0dpQyxxQkF6R0gsd0JBeUdHQSxxQkF6R0g7QUFBQSw2Q0EyR0NDLE9BM0dEO0FBQUEsTUE0R2NDLGVBNUdkLHlCQTRHR0MsU0E1R0g7QUFBQSxNQTZHR0MsVUE3R0gseUJBNkdHQSxVQTdHSDs7QUE4SEQsTUFBTUMsZ0JBQWdCLEdBQUc1SixlQUFlLENBQUM7QUFBRTRGLElBQUFBLE1BQU0sRUFBTkEsTUFBRjtBQUFVTixJQUFBQSxLQUFLLEVBQUxBLEtBQVY7QUFBaUJ3RCxJQUFBQSxJQUFJLEVBQUpBLElBQWpCO0FBQXVCZSxJQUFBQSxVQUFVLEVBQUVSLGtCQUFuQztBQUF1RFMsSUFBQUEsT0FBTyxFQUFFekYsY0FBRixhQUFFQSxjQUFGLGdEQUFFQSxjQUFjLENBQUUwRixLQUFsQiwwREFBRSxzQkFBdUJDO0FBQXZGLEdBQUQsQ0FBeEM7O0FBOUhDLDhCQW9JR0osZ0JBcElILENBZ0lDaEMsS0FoSUQ7QUFBQSxNQWlJZ0JxQyxhQWpJaEIseUJBaUlHQyxXQWpJSDtBQUFBLE1Ba0lpQkMsZUFsSWpCLHlCQWtJR0MsWUFsSUg7QUFzSUQsTUFBTUMsaUJBQWlCLEdBQUduSyxxQkFBcUIsQ0FBQztBQUM5Q29LLElBQUFBLFFBQVEsRUFBRWxELFNBRG9DO0FBRTlDcEgsSUFBQUEsZUFBZSxFQUFFNEosZ0JBRjZCO0FBRzlDVyxJQUFBQSxRQUFRLEVBQUUsb0JBQU07QUFDZG5KLE1BQUFBLEtBQUssQ0FBQyxHQUFELENBQUwsQ0FBV29KLElBQVgsQ0FBZ0I7QUFBQSxlQUFNckgsZUFBTixhQUFNQSxlQUFOLHVCQUFNQSxlQUFlLENBQUVzSCxjQUFqQixFQUFOO0FBQUEsT0FBaEI7QUFDRDtBQUw2QyxHQUFELENBQS9DO0FBdElDLE1BK0lDQyxvQkEvSUQsR0F1SkdMLGlCQXZKSCxDQStJQ0ssb0JBL0lEO0FBQUEsTUFnSkNDLGlCQWhKRCxHQXVKR04saUJBdkpILENBZ0pDTSxpQkFoSkQ7QUFBQSxNQWlKQ0Msa0JBakpELEdBdUpHUCxpQkF2SkgsQ0FpSkNPLGtCQWpKRDtBQUFBLE1Ba0pZQyxlQWxKWixHQXVKR1IsaUJBdkpILENBa0pDUyxTQWxKRDtBQUFBLE1BbUpDQyxhQW5KRCxHQXVKR1YsaUJBdkpILENBbUpDVSxhQW5KRDtBQUFBLE1Bb0pDQyxXQXBKRCxHQXVKR1gsaUJBdkpILENBb0pDVyxXQXBKRDtBQUFBLE1BcUpDQyxVQXJKRCxHQXVKR1osaUJBdkpILENBcUpDWSxVQXJKRDtBQUFBLE1Bc0pDQyxpQkF0SkQsR0F1SkdiLGlCQXZKSCxDQXNKQ2EsaUJBdEpEOztBQXlKRCxNQUFNQyxPQUFPLEdBQUcsU0FBVkEsT0FBVSxHQUFNO0FBQ3BCeEIsSUFBQUEsVUFBVTtBQUNWNUYsSUFBQUEsT0FBTyxDQUFDcUgsR0FBUiwyREFBc0VoSCxNQUF0RTtBQUNBNkQsSUFBQUEsUUFBUSxDQUFDO0FBQ1ByQixNQUFBQSxhQUFhLEVBQUUsS0FEUjtBQUVQQyxNQUFBQSxHQUFHLEVBQUV6QztBQUZFLEtBQUQsQ0FBUjtBQUlBaEQsSUFBQUEsS0FBSyxDQUFDLEdBQUQsQ0FBTCxDQUFXb0osSUFBWCxDQUFnQixZQUFNO0FBQ3BCdkMsTUFBQUEsUUFBUSxDQUFDO0FBQ1AxQixRQUFBQSxrQkFBa0IsRUFBRUEsa0JBQWtCLEdBQUcsQ0FEbEM7QUFDcUM7QUFDNUNLLFFBQUFBLGFBQWEsRUFBRTtBQUZSLE9BQUQsQ0FBUjtBQUlELEtBTEQ7QUFNRCxHQWJEOztBQXpKQyw2QkF3SzBEekcsbUJBQW1CLENBQUM7QUFDN0VtSyxJQUFBQSxRQUFRLEVBQUVsRCxTQURtRTtBQUU3RXBILElBQUFBLGVBQWUsRUFBRTRKLGdCQUY0RDtBQUc3RXVCLElBQUFBLE9BQU8sRUFBUEE7QUFINkUsR0FBRCxDQXhLN0U7QUFBQSxNQXdLa0JFLGNBeEtsQix3QkF3S09QLFNBeEtQO0FBQUEsTUF3S2tDUSxtQkF4S2xDLHdCQXdLa0NBLG1CQXhLbEM7O0FBOEtEcE0sRUFBQUEsS0FBSyxDQUFDcU0sU0FBTixDQUFnQixZQUFNO0FBQ3BCLFFBQUl2QyxjQUFKLEVBQW9CO0FBQ2xCM0MsTUFBQUEsZ0JBQWdCLElBQUlBLGdCQUFnQixDQUNsQzJDLGNBRGtDLEVBRWxDbUIsZUFGa0MsRUFHbENGLGFBSGtDLEVBSWxDUyxvQkFKa0MsRUFLbENZLG1CQUxrQyxDQUFwQztBQU9EO0FBQ0YsR0FWRCxFQVVFLENBQUN0QyxjQUFELEVBQWlCbUIsZUFBakIsRUFBa0NGLGFBQWxDLENBVkY7QUFZQS9LLEVBQUFBLEtBQUssQ0FBQ3FNLFNBQU4sQ0FBZ0IsWUFBTTtBQUNwQixRQUFJVixlQUFKLEVBQXFCO0FBQ25CL0UsTUFBQUEscUJBQXFCLFNBQXJCLElBQUFBLHFCQUFxQixXQUFyQixZQUFBQSxxQkFBcUIsQ0FBRyxVQUFBMEYsZ0JBQWdCO0FBQUEsNENBQVFBLGdCQUFSLElBQTBCeEMsY0FBMUI7QUFBQSxPQUFuQixDQUFyQjtBQUNELEtBRkQsTUFFTztBQUNMbEQsTUFBQUEscUJBQXFCLFNBQXJCLElBQUFBLHFCQUFxQixXQUFyQixZQUFBQSxxQkFBcUIsQ0FBRyxVQUFBMEYsZ0JBQWdCO0FBQUEsZUFBSUEsZ0JBQWdCLENBQUNDLE1BQWpCLENBQXdCLFVBQUF0QyxNQUFNO0FBQUEsaUJBQUlBLE1BQU0sS0FBS0gsY0FBZjtBQUFBLFNBQTlCLENBQUo7QUFBQSxPQUFuQixDQUFyQjtBQUNEO0FBQ0YsR0FORCxFQU1HLENBQUM2QixlQUFELENBTkg7QUFRQTNMLEVBQUFBLEtBQUssQ0FBQ3FNLFNBQU4sQ0FBZ0IsWUFBTTtBQUNwQixRQUFJRixjQUFKLEVBQW9CO0FBQ2xCeEYsTUFBQUEsb0JBQW9CLFNBQXBCLElBQUFBLG9CQUFvQixXQUFwQixZQUFBQSxvQkFBb0IsQ0FBRyxVQUFBMkYsZ0JBQWdCO0FBQUEsNENBQVFBLGdCQUFSLElBQTBCeEMsY0FBMUI7QUFBQSxPQUFuQixDQUFwQjtBQUNELEtBRkQsTUFFTztBQUNMbkQsTUFBQUEsb0JBQW9CLFNBQXBCLElBQUFBLG9CQUFvQixXQUFwQixZQUFBQSxvQkFBb0IsQ0FBRyxVQUFBMkYsZ0JBQWdCO0FBQUEsZUFBSUEsZ0JBQWdCLENBQUNDLE1BQWpCLENBQXdCLFVBQUF0QyxNQUFNO0FBQUEsaUJBQUlBLE1BQU0sS0FBS0gsY0FBZjtBQUFBLFNBQTlCLENBQUo7QUFBQSxPQUFuQixDQUFwQjtBQUNEO0FBQ0YsR0FORCxFQU1HLENBQUNxQyxjQUFELENBTkg7QUFRQSxNQUFNSyxVQUFVLEdBQUd4QyxnQkFBZ0IsR0FBR0sscUJBQUgsR0FBMkJuRixNQUE5RDtBQUNBLE1BQUl1SCxjQUFKOztBQUVBLE1BQUksQ0FBQ3pDLGdCQUFELElBQXFCLENBQUN0QyxhQUExQixFQUF5QztBQUFFO0FBQ3pDcUIsSUFBQUEsUUFBUSxDQUFDO0FBQUVyQixNQUFBQSxhQUFhLEVBQUU7QUFBakIsS0FBRCxDQUFSO0FBQ0Q7O0FBRUQxSCxFQUFBQSxLQUFLLENBQUNxTSxTQUFOLENBQWdCLFlBQU07QUFDcEJ4SCxJQUFBQSxPQUFPLENBQUNxSCxHQUFSLCtCQUEwQztBQUFFaEksTUFBQUEsTUFBTSxFQUFOQSxNQUFGO0FBQVVrQyxNQUFBQSxLQUFLLEVBQUxBLEtBQVY7QUFBaUJDLE1BQUFBLFVBQVUsRUFBVkEsVUFBakI7QUFBNkJDLE1BQUFBLFVBQVUsRUFBVkE7QUFBN0IsS0FBMUM7O0FBRUEsUUFBSTBELGdCQUFKLEVBQXNCO0FBQUU7QUFDdEJqQixNQUFBQSxRQUFRLENBQUM7QUFBRXJCLFFBQUFBLGFBQWEsRUFBRSxLQUFqQjtBQUF3QkwsUUFBQUEsa0JBQWtCLEVBQUVBLGtCQUFrQixHQUFHO0FBQWpFLE9BQUQsQ0FBUjtBQUNEO0FBQ0YsR0FORCxFQU1HLENBQUNuRCxNQUFELEVBQVNrQyxLQUFULEVBQWdCQyxVQUFoQixFQUE0QkMsVUFBNUIsQ0FOSDtBQVFBdEcsRUFBQUEsS0FBSyxDQUFDcU0sU0FBTixDQUFnQixZQUFNO0FBQ3BCLFFBQUksQ0FBQy9LLE9BQU8sQ0FBQzZFLFNBQUQsRUFBWW1CLGdCQUFaLENBQVosRUFBMkM7QUFDekM7QUFDQXlCLE1BQUFBLFFBQVEsQ0FBQztBQUFFekIsUUFBQUEsZ0JBQWdCLEVBQUVuQjtBQUFwQixPQUFELENBQVI7QUFDRDtBQUNGLEdBTEQsRUFLRyxDQUFDQSxTQUFELENBTEg7QUFPQW5HLEVBQUFBLEtBQUssQ0FBQ3FNLFNBQU4sQ0FBZ0IsWUFBTTtBQUFFO0FBQ3RCLFFBQUksQ0FBQzNFLGFBQUQsSUFBa0J3QyxnQkFBdEIsRUFBeUM7QUFDdkNyRixNQUFBQSxPQUFPLENBQUNxSCxHQUFSLDZDQUFpRGhDLGdCQUFqRCxnQ0FBdUZzQyxVQUF2RjtBQUNBekQsTUFBQUEsUUFBUSxDQUFDO0FBQUVyQixRQUFBQSxhQUFhLEVBQUUsSUFBakI7QUFBdUJDLFFBQUFBLEdBQUcsRUFBRTZFO0FBQTVCLE9BQUQsQ0FBUjtBQUNEO0FBQ0YsR0FMRCxFQUtHLENBQUN0QyxnQkFBRCxDQUxIO0FBT0FsSyxFQUFBQSxLQUFLLENBQUNxTSxTQUFOLENBQWdCLFlBQU07QUFBRTtBQUN0QixRQUFJakMsZ0JBQWdCLEtBQUtoQyxlQUF6QixFQUEwQztBQUN4Q1csTUFBQUEsUUFBUSxDQUFDO0FBQUVYLFFBQUFBLGVBQWUsRUFBRWdDO0FBQW5CLE9BQUQsQ0FBUjtBQUNEO0FBQ0YsR0FKRCxFQUlHLENBQUNBLGdCQUFELEVBQW1CaEMsZUFBbkIsQ0FKSDtBQU1BcEksRUFBQUEsS0FBSyxDQUFDcU0sU0FBTixDQUFnQixZQUFNO0FBQUE7O0FBQUU7QUFDdEIsUUFBTXJILEtBQUssR0FBR2YsZUFBSCxhQUFHQSxlQUFILGlEQUFHQSxlQUFlLENBQUV5SSxjQUFwQiwyREFBRyx1QkFBa0MvTCxXQUFsQyxDQUFkOztBQUVBLFFBQUlxRSxLQUFKLEVBQVc7QUFBRTtBQUNYLFVBQU0wSCxjQUFjLEdBQUd6SSxlQUFILGFBQUdBLGVBQUgsdUJBQUdBLGVBQWUsQ0FBRXlJLGNBQXhDOztBQUNBLFVBQU1sRyxhQUFZLEdBQUcxRSxlQUFlLENBQUNtQyxlQUFELENBQXBDOztBQUNBLFVBQU0wSSxPQUFPLEdBQUc1SyxrQkFBa0IsQ0FBQzJLLGNBQUQsRUFBaUJoRyxNQUFqQixFQUF5QkYsYUFBekIsRUFBdUNzQyxLQUF2QyxDQUFsQztBQUNBLFVBQU04RCxhQUFhLEdBQUdGLGNBQWMsQ0FBQzlMLHlCQUFELENBQXBDO0FBQ0FxRixNQUFBQSxlQUFlLElBQUlBLGVBQWUsQ0FBQzBHLE9BQUQsRUFBVUMsYUFBVixFQUF5QkYsY0FBekIsQ0FBbEM7QUFDRDtBQUNGLEdBVkQsRUFVRyxDQUFDekksZUFBRCxhQUFDQSxlQUFELGtEQUFDQSxlQUFlLENBQUV5SSxjQUFsQiw0REFBQyx3QkFBa0MvTCxXQUFsQyxDQUFELENBVkg7O0FBWUEsTUFBSXNELGVBQWUsQ0FBQ2dELEtBQWhCLElBQXlCaEQsZUFBZSxDQUFDNEksT0FBN0MsRUFBc0Q7QUFDcERKLElBQUFBLGNBQWMsYUFBTXhJLGVBQWUsQ0FBQ2dELEtBQXRCLGVBQWdDaEQsZUFBZSxDQUFDNEksT0FBaEQsQ0FBZDtBQUNBbkQsSUFBQUEsb0JBQW9CLENBQUNvRCxXQUFyQixDQUFpQzdJLGVBQWUsQ0FBQ3VDLFlBQWpELEVBQStEaUcsY0FBL0Q7QUFDRCxHQUhELE1BR087QUFDTEEsSUFBQUEsY0FBYyx3Q0FBZDtBQUNEO0FBRUQ7OztBQUNBLFdBQVNNLG9CQUFULEdBQWdDO0FBQzlCLFFBQU1DLHdCQUF3QixHQUFHaEwsMkJBQTJCLENBQUM7QUFDM0RXLE1BQUFBLEtBQUssRUFBTEEsS0FEMkQ7QUFFM0Q2RCxNQUFBQSxZQUFZLEVBQUV2QyxlQUFlLENBQUN1QyxZQUY2QjtBQUczRGdELE1BQUFBLFlBQVksRUFBWkEsWUFIMkQ7QUFJM0RFLE1BQUFBLG9CQUFvQixFQUFwQkE7QUFKMkQsS0FBRCxDQUE1RDtBQU9BLHdCQUFPLG9CQUFDLGlCQUFELGVBQXVCc0Qsd0JBQXZCO0FBQWlELE1BQUEsS0FBSyxFQUFFcEssS0FBeEQ7QUFBK0QsTUFBQSxZQUFZLEVBQUV1RjtBQUE3RSxPQUFQO0FBQ0Q7O0FBRUQsV0FBUzhFLFdBQVQsR0FBdUI7QUFDckI7QUFDQWxFLElBQUFBLFFBQVEsQ0FBQztBQUFFWixNQUFBQSxRQUFRLEVBQUU7QUFBWixLQUFELENBQVI7QUFDRCxHQS9RQSxDQWlSRDs7O0FBQ0EsTUFBTStFLFdBQVcsR0FBR2pKLGVBQUgsYUFBR0EsZUFBSCxrREFBR0EsZUFBZSxDQUFFSSxRQUFwQiw0REFBRyx3QkFBMkJnQyxVQUEvQztBQUNBLE1BQU04RyxRQUFRLEdBQUczSCxXQUFXLENBQUM7QUFBRWEsSUFBQUEsVUFBVSxFQUFFNkc7QUFBZCxHQUFELENBQTVCO0FBQ0EsTUFBTUUsU0FBUyxHQUFHLENBQUNELFFBQUQsYUFBQ0EsUUFBRCx1QkFBQ0EsUUFBUSxDQUFFQyxTQUFYLEtBQXlCLEtBQTNDOztBQUNBLE1BQU1DLFVBQVUsR0FBRy9GLGdCQUFnQixJQUFJbkIsU0FBdkM7O0FBRUEsTUFBTW1ILFFBQVEsR0FBSUosV0FBVyxLQUFLLEtBQWxDO0FBQ0EsTUFBTUssVUFBVSxHQUFHRCxRQUFRLEdBQUcsR0FBSCxHQUFTLENBQXBDLENBeFJDLENBd1JxQzs7QUFDdEMsTUFBTUUsY0FBYyxHQUFHNUUsUUFBUSxHQUFHMkUsVUFBbEM7QUFFQSxNQUFNRSxLQUFLLEdBQUcsSUFBZDs7QUEzUkMsc0JBbVNHMU0sWUFBWSxDQUFDO0FBQUUwTSxJQUFBQSxLQUFLLEVBQUxBO0FBQUYsR0FBRCxDQW5TZjtBQUFBLDBDQTZSQy9FLEtBN1JEO0FBQUEsTUE4UkdnRixPQTlSSCx1QkE4UkdBLE9BOVJIO0FBQUEsTUE4UllDLE9BOVJaLHVCQThSWUEsT0E5Ulo7QUFBQSxNQThScUJDLFNBOVJyQix1QkE4UnFCQSxTQTlSckI7QUFBQSxNQThSZ0NDLFlBOVJoQyx1QkE4UmdDQSxZQTlSaEM7QUFBQSw0Q0FnU0N2RCxPQWhTRDtBQUFBLE1BaVNHd0QsVUFqU0gseUJBaVNHQSxVQWpTSDtBQUFBLE1BaVNlQyxZQWpTZix5QkFpU2VBLFlBalNmO0FBQUEsTUFpUzZCQyxlQWpTN0IseUJBaVM2QkEsZUFqUzdCOztBQXFTRCxNQUFNQyxRQUFRLEdBQUdqTyxLQUFLLENBQUNrTyxPQUFOLENBQWM7QUFBQSxXQUFPO0FBQ3BDQyxNQUFBQSxVQUFVLEVBQUUsV0FEd0I7QUFFcEN2RixNQUFBQSxRQUFRLFlBQUt3RixJQUFJLENBQUNDLEtBQUwsQ0FBV2IsY0FBYyxHQUFHLEdBQTVCLENBQUw7QUFGNEIsS0FBUDtBQUFBLEdBQWQsRUFHYixDQUFDQSxjQUFELENBSGEsQ0FBakI7QUFLQSxNQUFNYyxZQUFZLEdBQUd0TyxLQUFLLENBQUNrTyxPQUFOLENBQWM7QUFBQSxXQUFPO0FBQ3hDQyxNQUFBQSxVQUFVLEVBQUUsV0FENEI7QUFFeEN2RixNQUFBQSxRQUFRLFlBQUs0RSxjQUFMO0FBRmdDLEtBQVA7QUFBQSxHQUFkLEVBR2pCLENBQUNBLGNBQUQsQ0FIaUIsQ0FBckI7QUFLQSxNQUFNZSxjQUFjLGdCQUFHLG9CQUFDLEtBQUQsUUFBUTlCLGNBQVIsQ0FBdkI7QUFDQSxNQUFJK0IsbUJBQW1CLEdBQUdqSixrQkFBMUI7QUFDQSxNQUFNa0osa0JBQWtCLEdBQUd4TSxlQUFlLDRCQUFDZ0MsZUFBZSxDQUFDLFVBQUQsQ0FBaEIsNERBQUMsd0JBQTZCSyxTQUE5QixDQUExQzs7QUFFQSxNQUFJaUIsa0JBQWtCLEtBQUttSixTQUEzQixFQUFzQztBQUFFO0FBQ3RDRixJQUFBQSxtQkFBbUIsR0FBRyxDQUFDQyxrQkFBdkI7QUFDRDs7QUFFRCxNQUFNRSxVQUFVLEdBQUcsQ0FBQ0Ysa0JBQXBCO0FBQ0EsTUFBTUcsZUFBZSxHQUFHLENBQUNILGtCQUF6QjtBQUNBLE1BQU1JLGVBQWUsR0FBR3RGLGNBQWMsR0FBRzdELFlBQUgsR0FBa0JDLGFBQXhEO0FBQ0EsTUFBTW1KLDRCQUE0QixHQUFHO0FBQ25DM0osSUFBQUEsY0FBYyxFQUFFNkUsZ0JBQWdCLEdBQUc3RSxjQUFILEdBQW9CLElBRGpCO0FBRW5DQyxJQUFBQSxTQUFTLEVBQVRBLFNBRm1DO0FBR25DMkosSUFBQUEsZUFBZSxFQUFFMUIsVUFIa0I7QUFJbkNzQixJQUFBQSxVQUFVLEVBQVZBLFVBSm1DO0FBS25DQyxJQUFBQSxlQUFlLEVBQWZBLGVBTG1DO0FBTW5DaEosSUFBQUEsVUFBVSxFQUFWQSxVQU5tQztBQU9uQztBQUNBMkQsSUFBQUEsY0FBYyxFQUFkQSxjQVJtQztBQVNuQ3hELElBQUFBLFlBQVksRUFBRWlFLGdCQUFnQixHQUFHakUsWUFBSCxHQUFrQixJQVRiO0FBVW5DUSxJQUFBQSxxQkFBcUIsRUFBckJBLHFCQVZtQztBQVduQztBQUNBc0ksSUFBQUEsZUFBZSxFQUFmQSxlQVptQztBQWFuQzVLLElBQUFBLGVBQWUsRUFBZkEsZUFibUM7QUFjbkN3RixJQUFBQSxpQkFBaUIsRUFBakJBLGlCQWRtQztBQWVuQ2MsSUFBQUEsZUFBZSxFQUFmQSxlQWZtQztBQWdCbkN6RCxJQUFBQSxlQUFlLEVBQUVrSSxnQkFoQmtCO0FBaUJuQ0MsSUFBQUEsY0FBYyxFQUFFbkcsS0FBSyxHQUFHekcsWUFBSCxHQUFrQkUsWUFqQko7QUFrQm5DMk0sSUFBQUEsY0FBYyxFQUFFL0IsUUFsQm1CO0FBbUJuQ2xHLElBQUFBLEtBQUssRUFBRXdGLGNBbkI0QjtBQW9CbkNwQyxJQUFBQSxxQkFBcUIsRUFBRTFDO0FBcEJZLEdBQXJDO0FBdUJBO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBQ0UsV0FBU3FILGdCQUFULENBQTBCRyxZQUExQixFQUF3Q0MsS0FBeEMsU0FBeUc7QUFBQSxpQ0FBeERDLFVBQXdEO0FBQUEsUUFBeERBLFVBQXdELGlDQUEzQyxJQUEyQztBQUFBLG1DQUFyQ0MsWUFBcUM7QUFBQSxRQUFyQ0EsWUFBcUMsbUNBQXRCLElBQXNCO0FBQUEsNEJBQWhCNUcsS0FBZ0I7QUFBQSxRQUFoQkEsS0FBZ0IsNEJBQVIsSUFBUTs7QUFDdkcsUUFBTTZHLG1CQUFtQixxQkFBUWxILGtCQUFSLENBQXpCOztBQUVBLFFBQUkrRyxLQUFKLEVBQVc7QUFDVCxVQUFJRyxtQkFBbUIsQ0FBQ0MsY0FBcEIsQ0FBbUNMLFlBQW5DLENBQUosRUFBc0Q7QUFDcEQsZUFBT0ksbUJBQW1CLENBQUNKLFlBQUQsQ0FBMUI7QUFDRDtBQUNGLEtBSkQsTUFJTztBQUNMSSxNQUFBQSxtQkFBbUIsQ0FBQ0osWUFBRCxDQUFuQixHQUFvQztBQUFFRSxRQUFBQSxVQUFVLEVBQVZBLFVBQUY7QUFBY0MsUUFBQUEsWUFBWSxFQUFaQSxZQUFkO0FBQTRCNUcsUUFBQUEsS0FBSyxFQUFMQTtBQUE1QixPQUFwQyxDQURLLENBQ21FO0FBQ3pFOztBQUVELFFBQU0rRyxtQkFBbUIsR0FBRyxDQUFDLENBQUNDLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZSixtQkFBWixFQUFpQ2xNLE1BQS9EOztBQUVBLFFBQUltRSxrQkFBa0IsSUFBSWlJLG1CQUExQixFQUErQztBQUM3QzNJLE1BQUFBLGVBQWUsSUFBSUEsZUFBZSxDQUFDUixVQUFELEVBQWEsQ0FBQ21KLG1CQUFkLENBQWxDO0FBQ0ExRyxNQUFBQSxRQUFRLENBQUM7QUFBRXZCLFFBQUFBLGtCQUFrQixFQUFFaUk7QUFBdEIsT0FBRCxDQUFSO0FBQ0Q7O0FBRUQsUUFBSSxDQUFDbk8sT0FBTyxDQUFDaU8sbUJBQUQsRUFBc0JsSCxrQkFBdEIsQ0FBWixFQUF1RDtBQUNyRFUsTUFBQUEsUUFBUSxDQUFDO0FBQUVWLFFBQUFBLGtCQUFrQixFQUFFa0g7QUFBdEIsT0FBRCxDQUFSO0FBQ0Q7QUFDRjtBQUVEO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7OztBQUNFLFdBQVNLLGNBQVQsQ0FBd0JDLFFBQXhCLEVBQWtDQyxNQUFsQyxFQUEwQztBQUN4QyxRQUFNL0YsSUFBSSxHQUFHOEYsUUFBUSxHQUFHLEVBQXhCO0FBQ0EsUUFBTUUsTUFBTSxHQUFHaEcsSUFBSSxDQUFDMUcsTUFBcEI7QUFDQSxRQUFNMk0sS0FBSyxHQUFHRixNQUFNLENBQUNHLFNBQVAsQ0FBaUIsVUFBQ0MsS0FBRCxFQUFRQyxHQUFSLEVBQWdCO0FBQzdDLFVBQUlBLEdBQUcsR0FBRyxDQUFWLEVBQWE7QUFDWCxZQUFJRCxLQUFLLENBQUNFLFNBQU4sQ0FBZ0IsQ0FBaEIsRUFBbUJMLE1BQW5CLE1BQStCaEcsSUFBbkMsRUFBeUM7QUFDdkMsY0FBTXNHLFFBQVEsR0FBR0gsS0FBSyxDQUFDSCxNQUFELENBQXRCOztBQUVBLGNBQUtNLFFBQVEsR0FBRyxHQUFaLElBQXFCQSxRQUFRLEdBQUcsR0FBcEMsRUFBMEM7QUFDeEMsbUJBQU8sSUFBUDtBQUNEO0FBQ0Y7QUFDRjs7QUFDRCxhQUFPLEtBQVA7QUFDRCxLQVhhLENBQWQ7QUFZQSxXQUFPTCxLQUFQO0FBQ0Q7O0FBRUQsV0FBU00sV0FBVCxHQUF1QjtBQUFBOztBQUNyQjtBQUNBLFFBQU1DLFFBQVEsR0FBR3RNLGVBQWUsU0FBZixJQUFBQSxlQUFlLFdBQWYsNkJBQUFBLGVBQWUsQ0FBRWtDLFNBQWpCLHdFQUE0QjdCLFNBQTVCLEdBQXdDTCxlQUFlLENBQUNrQyxTQUFoQixDQUEwQjdCLFNBQTFCLENBQW9Da00sV0FBcEMsRUFBeEMsR0FBNEYsRUFBN0c7QUFDQSxxQkFBVXBMLFNBQVYsY0FBdUJtTCxRQUF2QjtBQUNEOztBQUVELE1BQU1FLFFBQVEsR0FBR0gsV0FBVyxFQUE1QjtBQUNBLE1BQU1JLEdBQUcsR0FBRy9HLGVBQUgsYUFBR0EsZUFBSCx1QkFBR0EsZUFBZSxDQUFFK0csR0FBN0IsQ0E5WUMsQ0FnWkQ7O0FBaFpDLGlCQXNaR3JRLE9BQU8sQ0FBQztBQUNWcVEsSUFBQUEsR0FBRyxFQUFIQSxHQURVO0FBRVZ0SyxJQUFBQSxLQUFLLEVBQUxBLEtBRlU7QUFHVnVLLElBQUFBLE9BQU8sRUFBRTlJLFdBSEM7QUFJVitJLElBQUFBLE1BQU07QUFDSjFILE1BQUFBLEtBQUssRUFBRTtBQUFFQyxRQUFBQSxNQUFNLEVBQUU7QUFBVjtBQURILE9BRURoRSxjQUZDLGFBRURBLGNBRkMsdUJBRURBLGNBQWMsQ0FBRXlMLE1BRmY7QUFHSkMsTUFBQUEsZ0JBQWdCLEVBQUUsSUFIZDtBQUlKaEcsTUFBQUEsS0FBSyxFQUFFMUYsY0FBRixhQUFFQSxjQUFGLHVCQUFFQSxjQUFjLENBQUUwRixLQUpuQjtBQUtKO0FBQ0FpRyxNQUFBQSxPQUFPLEVBQUUsZ0JBQUFsTCxVQUFVLFVBQVYsa0RBQVltTCxhQUFaLHNCQUE2Qm5MLFVBQTdCLGlEQUE2QixhQUFZa0wsT0FBekMsS0FBb0QsS0FOekQ7QUFPSnBLLE1BQUFBLE1BQU0sRUFBTkE7QUFQSSxNQUpJO0FBYVZzSyxJQUFBQSxNQUFNLEVBQUVqTCxZQWJFO0FBY1ZrTCxJQUFBQSxLQUFLLEVBQUU5TCxjQUFGLGFBQUVBLGNBQUYsK0NBQUVBLGNBQWMsQ0FBRStMLElBQWxCLHlEQUFFLHFCQUFzQkQsS0FkbkI7QUFlVnBHLElBQUFBLEtBQUssRUFBRTFGLGNBQUYsYUFBRUEsY0FBRix1QkFBRUEsY0FBYyxDQUFFMEYsS0FmYjtBQWdCVnNHLElBQUFBLE1BQU0sRUFBRTlHLHFCQWhCRTtBQWlCVm9HLElBQUFBLFFBQVEsRUFBUkEsUUFqQlU7QUFrQlY3RyxJQUFBQSxJQUFJLEVBQUpBO0FBbEJVLEdBQUQsQ0F0WlY7QUFBQSxNQWtaUXdILFNBbFpSLFlBa1pDcE0sS0FsWkQ7QUFBQSxNQW1aVXFNLFdBblpWLFlBbVpDQyxPQW5aRDtBQUFBLE1Bb1pDQyxVQXBaRCxZQW9aQ0EsVUFwWkQ7QUFBQSxNQXFaQ0MsZUFyWkQsWUFxWkNBLGVBclpEOztBQTJhRHhSLEVBQUFBLEtBQUssQ0FBQ3FNLFNBQU4sQ0FBZ0IsWUFBTTtBQUFFO0FBQ3RCLFFBQUkrRSxTQUFTLElBQUlDLFdBQWpCLEVBQThCO0FBQzVCeE0sTUFBQUEsT0FBTyxDQUFDcUgsR0FBUixlQUEwQmtGLFNBQTFCO0FBQ0FuTCxNQUFBQSxlQUFlLElBQUlBLGVBQWUsQ0FBQyxJQUFELEVBQU8sS0FBUCxFQUFjLElBQWQseUJBQW9DaUgsV0FBcEMsY0FBbUQ1RyxVQUFuRCxjQUFpRThLLFNBQWpFLEdBQThFLElBQTlFLENBQWxDO0FBQ0Q7QUFDRixHQUxELEVBS0csQ0FBQ0EsU0FBRCxFQUFZQyxXQUFaLENBTEg7QUFPQXJSLEVBQUFBLEtBQUssQ0FBQ3FNLFNBQU4sQ0FBZ0IsWUFBTTtBQUFFO0FBQ3RCLFFBQU1vRixTQUFTO0FBQUEsMEVBQUc7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQWM7QUFDOUI1TSxnQkFBQUEsT0FBTyxDQUFDNk0sSUFBUiw2Q0FBa0RoQixHQUFsRDtBQUNJaUIsZ0JBQUFBLFlBRlksR0FFR0osVUFGSDs7QUFHaEIsb0JBQUl6SixhQUFKLEVBQW1CO0FBQ2pCNkosa0JBQUFBLFlBQVksR0FBR0gsZUFBZixDQURpQixDQUNjO0FBQ2hDOztBQUxlO0FBQUEsdUJBTVZHLFlBQVksQ0FBQ3hILGtCQUFELENBQVosQ0FBaUNtQixJQUFqQyxDQUFzQyxVQUFDc0csT0FBRCxFQUFhO0FBQUU7QUFDekQsc0JBQUlBLE9BQUosRUFBYTtBQUNYL00sb0JBQUFBLE9BQU8sQ0FBQ3FILEdBQVI7QUFDQXJGLG9CQUFBQSxjQUFjLENBQUMsVUFBQWdMLGVBQWU7QUFBQSw2QkFBSUEsZUFBZSxDQUFDdEYsTUFBaEIsQ0FBdUIsVUFBQXRDLE1BQU07QUFBQSwrQkFBSUEsTUFBTSxLQUFLSCxjQUFmO0FBQUEsdUJBQTdCLENBQUo7QUFBQSxxQkFBaEIsQ0FBZDtBQUNBZixvQkFBQUEsUUFBUSxDQUFDO0FBQ1BiLHNCQUFBQSxTQUFTLEVBQUU7QUFESixxQkFBRCxDQUFSO0FBSUEsd0JBQU00SixrQkFBa0IsR0FBR3BDLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZdEgsa0JBQVosQ0FBM0I7O0FBRUEsd0JBQUl5SixrQkFBSixhQUFJQSxrQkFBSixlQUFJQSxrQkFBa0IsQ0FBRXpPLE1BQXhCLEVBQWdDO0FBQUEsaUVBQ055TyxrQkFETTtBQUFBOztBQUFBO0FBQzlCLDRFQUE0QztBQUFBLDhCQUFqQ0MsU0FBaUM7QUFBQSw4QkFDbEN6QyxZQURrQyxHQUNqQmpILGtCQUFrQixDQUFDMEosU0FBRCxDQURELENBQ2xDekMsWUFEa0M7QUFFMUNBLDBCQUFBQSxZQUFZLElBQUlBLFlBQVksRUFBNUI7QUFDRDtBQUo2QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBSy9COztBQUVEekssb0JBQUFBLE9BQU8sQ0FBQzZNLElBQVIsQ0FBYSwyQ0FBYjtBQUNBM0ksb0JBQUFBLFFBQVEsQ0FBQztBQUNQYixzQkFBQUEsU0FBUyxFQUFFLEtBREo7QUFFUFIsc0JBQUFBLGFBQWEsRUFBRSxJQUZSO0FBR1BDLHNCQUFBQSxHQUFHLEVBQUV3QztBQUhFLHFCQUFELENBQVI7QUFLQWpJLG9CQUFBQSxLQUFLLENBQUMsR0FBRCxDQUFMLENBQVdvSixJQUFYLENBQWdCLFlBQU07QUFDcEJ6RSxzQkFBQUEsY0FBYyxDQUFDLFVBQUFnTCxlQUFlO0FBQUEsK0JBQUlBLGVBQWUsQ0FBQ3RGLE1BQWhCLENBQXVCLFVBQUF0QyxNQUFNO0FBQUEsaUNBQUlBLE1BQU0sS0FBS0gsY0FBZjtBQUFBLHlCQUE3QixDQUFKO0FBQUEsdUJBQWhCLENBQWQ7QUFDQTdGLHNCQUFBQSxlQUFlLFNBQWYsSUFBQUEsZUFBZSxXQUFmLFlBQUFBLGVBQWUsQ0FBRXNILGNBQWpCLENBQWdDbUYsR0FBaEMsRUFBcUN2RyxrQkFBckM7QUFDRCxxQkFIRDtBQUlELG1CQTFCRCxNQTBCTztBQUNMdEYsb0JBQUFBLE9BQU8sQ0FBQ0csS0FBUixDQUFjLHdEQUFkO0FBQ0E2QixvQkFBQUEsY0FBYyxDQUFDLFVBQUFnTCxlQUFlO0FBQUEsNkJBQUlBLGVBQWUsQ0FBQ3RGLE1BQWhCLENBQXVCLFVBQUF0QyxNQUFNO0FBQUEsK0JBQUlBLE1BQU0sS0FBS0gsY0FBZjtBQUFBLHVCQUE3QixDQUFKO0FBQUEscUJBQWhCLENBQWQ7QUFDQWYsb0JBQUFBLFFBQVEsQ0FBQztBQUFFYixzQkFBQUEsU0FBUyxFQUFFO0FBQWIscUJBQUQsQ0FBUjtBQUNEO0FBQ0YsaUJBaENLLENBTlU7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsT0FBSDs7QUFBQSxzQkFBVHVKLFNBQVM7QUFBQTtBQUFBO0FBQUEsT0FBZjs7QUF5Q0EsUUFBSXZKLFNBQUosRUFBZTtBQUNiLFVBQUksQ0FBQ1gsZUFBTCxFQUFzQixDQUNwQjtBQUNELE9BRkQsTUFFTyxJQUFJLENBQUNtSixHQUFMLEVBQVUsQ0FDZjtBQUNELE9BRk0sTUFFQTtBQUNMO0FBQ0E3SixRQUFBQSxjQUFjLENBQUMsVUFBQWdMLGVBQWU7QUFBQSw4Q0FBUUEsZUFBUixJQUF5Qi9ILGNBQXpCO0FBQUEsU0FBaEIsQ0FBZDs7QUFDQTJILFFBQUFBLFNBQVM7QUFDVjtBQUNGO0FBQ0YsR0FyREQsRUFxREcsQ0FBQ3ZKLFNBQUQsRUFBWVgsZUFBWixFQUE2Qm1KLEdBQTdCLENBckRIO0FBdURBO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUNFLFdBQVNzQiw4QkFBVCxDQUF3Q2pOLFNBQXhDLEVBQW1ENEMsR0FBbkQsRUFBd0RzSyxtQkFBeEQsRUFBNkU1TSxPQUE3RSxFQUE4RjtBQUM1RixRQUFJNk0sT0FBSjtBQUNBLFFBQU1DLGFBQWEsR0FBR3BOLFNBQUgsYUFBR0EsU0FBSCx1QkFBR0EsU0FBUyxDQUFFcU4sS0FBWCxDQUFpQixNQUFqQixDQUF0QjtBQUNBLFFBQU1DLFlBQVksR0FBR3pDLGNBQWMsQ0FBQ2pJLEdBQUQsYUFBQ0EsR0FBRCx1QkFBQ0EsR0FBRyxDQUFFMUUsT0FBTixFQUFla1AsYUFBZixDQUFuQzs7QUFFQSxRQUFJRSxZQUFZLElBQUksQ0FBcEIsRUFBdUI7QUFDckIsVUFBTUMsY0FBYyxHQUFHSCxhQUFhLENBQUNFLFlBQUQsQ0FBcEM7QUFDQSxVQUFNRSxXQUFXLEdBQUdELGNBQWMsQ0FBQ0YsS0FBZixDQUFxQixNQUFyQixDQUFwQjtBQUNBLFVBQU1JLFVBQVUsR0FBRzVDLGNBQWMsQ0FBQ2pJLEdBQUQsYUFBQ0EsR0FBRCx1QkFBQ0EsR0FBRyxDQUFFekUsS0FBTixFQUFhcVAsV0FBYixDQUFqQzs7QUFFQSxVQUFJQyxVQUFVLElBQUksQ0FBbEIsRUFBcUI7QUFDbkIsWUFBTUMsWUFBWSxHQUFHcFIseUJBQXlCLENBQUNxUixzQkFBMUIsQ0FBaURULG1CQUFqRCxDQUFyQjtBQUNBcE4sUUFBQUEsT0FBTyxDQUFDcUgsR0FBUiw4QkFBa0M3RyxPQUFsQyx1Q0FBc0VvTixZQUFZLENBQUNyQyxTQUFiLENBQXVCLENBQXZCLEVBQTBCLEdBQTFCLENBQXRFO0FBQ0EsWUFBTXVDLFFBQVEsR0FBR0osV0FBVyxDQUFDQyxVQUFELENBQTVCO0FBQ0EsWUFBTUksV0FBVyxHQUFHLENBQUMsQ0FBQWpMLEdBQUcsU0FBSCxJQUFBQSxHQUFHLFdBQUgsWUFBQUEsR0FBRyxDQUFFekUsS0FBTCxJQUFhLEVBQWQsRUFBa0JHLE1BQXRDO0FBQ0FrUCxRQUFBQSxXQUFXLENBQUNDLFVBQUQsQ0FBWCxHQUEwQkcsUUFBUSxDQUFDdkMsU0FBVCxDQUFtQixDQUFuQixFQUFzQndDLFdBQVcsR0FBRyxDQUFwQyxJQUF5Q0gsWUFBbkU7QUFDQSxZQUFNSSxVQUFVLEdBQUdOLFdBQVcsQ0FBQ08sSUFBWixDQUFpQixNQUFqQixDQUFuQjtBQUNBWCxRQUFBQSxhQUFhLENBQUNFLFlBQUQsQ0FBYixHQUE4QlEsVUFBOUI7QUFDQVgsUUFBQUEsT0FBTyxHQUFHQyxhQUFhLENBQUNXLElBQWQsQ0FBbUIsTUFBbkIsQ0FBVjtBQUNEO0FBQ0Y7O0FBQ0QsV0FBT1osT0FBUDtBQUNEOztBQUVEbFMsRUFBQUEsS0FBSyxDQUFDcU0sU0FBTixDQUFnQixZQUFNO0FBQUU7QUFBRixhQUNMMEcsZUFESztBQUFBO0FBQUE7O0FBQUE7QUFBQSxpRkFDcEI7QUFBQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLHFCQUNNbkwsV0FETjtBQUFBO0FBQUE7QUFBQTs7QUFFUW9MLGdCQUFBQSxnQkFGUixHQUUyQixDQUFDNUksZ0JBRjVCOztBQUlJLG9CQUFJLENBQUM0SSxnQkFBTCxFQUF1QjtBQUFFO0FBQ3ZCLHNCQUFJM0kscUJBQXFCLEtBQUtGLGtCQUE5QixFQUFrRDtBQUNoRHRGLG9CQUFBQSxPQUFPLENBQUNDLElBQVIsMEVBQStFcUYsa0JBQS9FLGtDQUF5SEUscUJBQXpIO0FBQ0EySSxvQkFBQUEsZ0JBQWdCLEdBQUcsSUFBbkI7QUFDRCxtQkFIRCxNQUdPO0FBQ0xuTyxvQkFBQUEsT0FBTyxDQUFDcUgsR0FBUiwyREFBK0Q3QixxQkFBL0Q7QUFDQXRCLG9CQUFBQSxRQUFRLENBQUM7QUFBRXhCLHNCQUFBQSxlQUFlLEVBQUU7QUFBbkIscUJBQUQsQ0FBUjtBQUNEO0FBQ0Y7O0FBWkwscUJBY1F5TCxnQkFkUjtBQUFBO0FBQUE7QUFBQTs7QUFjNEI7QUFDdEJuTyxnQkFBQUEsT0FBTyxDQUFDcUgsR0FBUjtBQUNBbkQsZ0JBQUFBLFFBQVEsQ0FBQztBQUNQeEIsa0JBQUFBLGVBQWUsRUFBRSxLQURWO0FBRVBHLGtCQUFBQSxhQUFhLEVBQUUsS0FGUjtBQUdQZ0osa0JBQUFBLEdBQUcsRUFBRTtBQUhFLGlCQUFELENBQVIsQ0FoQk4sQ0FvQlM7O0FBcEJUO0FBQUEsdUJBc0IyQm5HLGVBQWUsRUF0QjFDOztBQUFBO0FBc0JZNEcsZ0JBQUFBLE1BdEJaOztBQUFBLHFCQXdCVUEsTUF4QlY7QUFBQTtBQUFBO0FBQUE7O0FBeUJRdE0sZ0JBQUFBLE9BQU8sQ0FBQ3FILEdBQVI7QUFDQW5ELGdCQUFBQSxRQUFRLENBQUM7QUFDUHhCLGtCQUFBQSxlQUFlLEVBQUUsSUFEVjtBQUVQRyxrQkFBQUEsYUFBYSxFQUFFLElBRlI7QUFHUEMsa0JBQUFBLEdBQUcsRUFBRXdKO0FBSEUsaUJBQUQsQ0FBUjtBQTFCUjtBQUFBOztBQUFBO0FBZ0NRdE0sZ0JBQUFBLE9BQU8sQ0FBQ0csS0FBUixDQUFjLG1EQUFkO0FBQ0FpQixnQkFBQUEsZUFBZSxJQUFJQSxlQUFlLENBQUMsSUFBRCxFQUFPLEtBQVAsRUFBYyxJQUFkLHVDQUFrRGlILFdBQWxELGNBQWlFNUcsVUFBakUsR0FBK0UsSUFBL0UsQ0FBbEM7QUFDQXlDLGdCQUFBQSxRQUFRLENBQUM7QUFBRW5CLGtCQUFBQSxXQUFXLEVBQUU7QUFBZixpQkFBRCxDQUFSO0FBbENSOztBQUFBO0FBdUNJL0MsZ0JBQUFBLE9BQU8sQ0FBQ3FILEdBQVI7QUFDTTRGLGdCQUFBQSxrQkF4Q1YsR0F3QytCcEMsTUFBTSxDQUFDQyxJQUFQLENBQVl0SCxrQkFBWixDQXhDL0I7O0FBQUEsc0JBMENReUosa0JBMUNSLGFBMENRQSxrQkExQ1IsZUEwQ1FBLGtCQUFrQixDQUFFek8sTUExQzVCO0FBQUE7QUFBQTtBQUFBOztBQTJDVTRQLGdCQUFBQSxVQTNDVixHQTJDdUJqUCxjQUFjLENBQUNDLGVBQUQsRUFBa0JDLE1BQWxCLENBM0NyQyxFQTJDK0Q7O0FBQ3JEYSxnQkFBQUEsU0E1Q1YsR0E0Q3NCa08sVUE1Q3RCLEVBNENpQzs7QUFDdkJDLGdCQUFBQSxTQTdDVixHQTZDc0IsS0E3Q3RCOztBQUFBLHFCQStDVUQsVUEvQ1Y7QUFBQTtBQUFBO0FBQUE7O0FBZ0RZNU4sZ0JBQUFBLFFBaERaLEdBZ0RzQixDQWhEdEI7QUFBQSx3REFrRGdDeU0sa0JBbERoQztBQUFBOztBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBa0RtQkMsZ0JBQUFBLFNBbERuQjtBQW1EVTFNLGdCQUFBQSxRQUFPLEdBQUc4TixRQUFRLENBQUNwQixTQUFELENBQWxCO0FBbkRWLHdDQW9Ed0MxSixrQkFBa0IsQ0FBQ2hELFFBQUQsQ0FwRDFELEVBb0RrQmdLLFVBcERsQix5QkFvRGtCQSxVQXBEbEIsRUFvRDhCM0csTUFwRDlCLHlCQW9EOEJBLEtBcEQ5Qjs7QUFBQSxxQkFzRGMyRyxVQXREZDtBQUFBO0FBQUE7QUFBQTs7QUF1RGdCNkMsZ0JBQUFBLE9BdkRoQjtBQUFBLDhCQTJEZ0I3QyxVQUFVLENBQUMzRyxNQUFELENBM0QxQixFQXlEY2YsS0F6RGQsZUF5RGNBLEdBekRkLEVBMERjc0ssbUJBMURkLGVBMERjQSxtQkExRGQ7O0FBNkRZLG9CQUFJQSxtQkFBbUIsSUFBSWxOLFNBQTNCLEVBQXNDO0FBQUU7QUFDdENtTixrQkFBQUEsT0FBTyxHQUFHRiw4QkFBOEIsQ0FBQ2pOLFNBQUQsRUFBWTRDLEtBQVosRUFBaUJzSyxtQkFBakIsRUFBc0M1TSxRQUF0QyxDQUF4QztBQUNEOztBQS9EYixxQkFpRWdCNk0sT0FqRWhCO0FBQUE7QUFBQTtBQUFBOztBQWtFY25OLGdCQUFBQSxTQUFTLEdBQUdtTixPQUFaO0FBbEVkO0FBQUE7O0FBQUE7QUFvRWNnQixnQkFBQUEsU0FBUyxHQUFHLElBQVo7QUFwRWQ7O0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBO0FBQUE7O0FBQUE7O0FBQUE7QUFBQTs7QUFBQTs7QUFBQTs7QUFBQTtBQTJFVXBMLGdCQUFBQSxjQTNFVixHQTJFMEIsS0EzRTFCLEVBMkVnQzs7QUFFMUIsb0JBQUlvTCxTQUFKLEVBQWU7QUFBRTtBQUNmck8sa0JBQUFBLE9BQU8sQ0FBQ3FILEdBQVIsOEJBQWtDN0csT0FBbEM7QUFEYSwwREFJV3lNLGtCQUpYOztBQUFBO0FBSWIsMkVBQTRDO0FBQWpDQyxzQkFBQUEsVUFBaUM7QUFDcEMxTSxzQkFBQUEsU0FEb0MsR0FDMUI4TixRQUFRLENBQUNwQixVQUFELENBRGtCO0FBQUEsK0NBRVoxSixrQkFBa0IsQ0FBQ2hELFNBQUQsQ0FGTixFQUVsQ2dLLFlBRmtDLDBCQUVsQ0EsVUFGa0MsRUFFdEIzRyxPQUZzQiwwQkFFdEJBLEtBRnNCOztBQUkxQywwQkFBSTJHLFlBQUosRUFBZ0I7QUFDVjZDLHdCQUFBQSxRQURVO0FBQUEsdUNBTVY3QyxZQUFVLENBQUMzRyxPQUFELENBTkEsRUFHWjBLLFlBSFksZ0JBR1pBLFlBSFksRUFJWnpMLEtBSlksZ0JBSVpBLEdBSlksRUFLWnNLLG9CQUxZLGdCQUtaQSxtQkFMWTs7QUFRZCw0QkFBSUEsb0JBQW1CLElBQUksQ0FBQ0MsUUFBNUIsRUFBcUM7QUFDL0JtQiwwQkFBQUEsbUJBRCtCLEdBQ1QsSUFEUzs7QUFHbkMsOEJBQUkxTCxLQUFKLEVBQVM7QUFDUCxnQ0FBSXlMLFlBQUosRUFBa0I7QUFBQSxzREFDZWhTLGdCQUFnQixDQUFDa1MsNkJBQWpCLENBQStDckIsb0JBQS9DLEVBQW9FbUIsWUFBcEUsQ0FEZixFQUNSRyxrQkFEUSx5QkFDUkEsa0JBRFE7QUFFaEJGLDhCQUFBQSxtQkFBbUIsR0FBR0Usa0JBQXRCO0FBQ0QsNkJBSEQsTUFHTztBQUNMRiw4QkFBQUEsbUJBQW1CLEdBQUdwQixvQkFBdEI7QUFDRDs7QUFDRHVCLDRCQUFBQSxXQUFXLEdBQUdILG1CQUFtQixLQUFJcFAsZUFBSixhQUFJQSxlQUFKLHVCQUFJQSxlQUFlLENBQUV3UCxXQUFqQixDQUE2QjlMLEtBQUcsQ0FBQzFFLE9BQWpDLEVBQTBDMEUsS0FBRyxDQUFDekUsS0FBOUMsRUFBcUQ7QUFBQ0UsOEJBQUFBLFlBQVksRUFBRWlRO0FBQWYsNkJBQXJELENBQUosQ0FBakM7QUFDRDtBQUNGO0FBQ0Y7QUFDRjtBQTlCWTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQWdDYnRPLGtCQUFBQSxTQUFTLEdBQUczRSxNQUFNLENBQUNzVCxNQUFQLENBQWNGLFdBQWQsRUFBMkI7QUFBRUcsb0JBQUFBLGNBQWMsRUFBRTtBQUFsQixtQkFBM0IsQ0FBWjtBQUNELGlCQWpDRCxNQWlDTztBQUFFO0FBQ0RwUCxrQkFBQUEsUUFERCxHQUNZTixlQURaLGFBQ1lBLGVBRFosa0RBQ1lBLGVBQWUsQ0FBRUcsYUFEN0IsdUZBQ1ksd0JBQWdDQyxRQUQ1Qyw0REFDWSx3QkFBMENHLElBRHRELEVBQzJEOztBQUNoRSxzQkFBSUQsUUFBUSxJQUFJUSxTQUFaLElBQXlCa08sVUFBN0IsRUFBeUM7QUFBRTtBQUNuQ1csb0JBQUFBLFNBRGlDLEdBQ3JCblIsUUFBUSxDQUFDOEIsUUFBRCxFQUFXME8sVUFBWCxFQUF1QmxPLFNBQXZCLEVBQWtDLEtBQWxDLENBRGE7QUFFdkNrTyxvQkFBQUEsVUFBVSxHQUFHVyxTQUFiLENBRnVDLENBRWhCOztBQUN2QjlMLG9CQUFBQSxjQUFhLEdBQUcsSUFBaEI7QUFDRDtBQUNGOztBQUVELG9CQUFJL0MsU0FBSixFQUFlO0FBQ2JGLGtCQUFBQSxPQUFPLENBQUNxSCxHQUFSLG1EQUF1RG5ILFNBQVMsQ0FBQ3FMLFNBQVYsQ0FBb0IsQ0FBcEIsRUFBdUIsR0FBdkIsQ0FBdkQ7QUFDQXZKLGtCQUFBQSxjQUFjLENBQUMsVUFBQWdMLGVBQWU7QUFBQSx3REFBUUEsZUFBUixJQUF5Qi9ILGNBQXpCO0FBQUEsbUJBQWhCLENBQWQ7QUFDQWYsa0JBQUFBLFFBQVEsQ0FBQztBQUNQbEIsb0JBQUFBLFdBQVcsRUFBRW9MLFVBRE47QUFFUHJMLG9CQUFBQSxXQUFXLEVBQUUsS0FGTjtBQUdQRSxvQkFBQUEsYUFBYSxFQUFiQSxjQUhPO0FBSVBJLG9CQUFBQSxTQUFTLEVBQUU7QUFKSixtQkFBRCxDQUFSO0FBTUQsaUJBVEQsTUFTTztBQUNIckQsa0JBQUFBLE9BQU8sQ0FBQ0csS0FBUix5RkFBK0ZrSSxXQUEvRixjQUE4RzVHLFVBQTlHO0FBQ0FMLGtCQUFBQSxlQUFlLElBQUlBLGVBQWUsQ0FBQyxJQUFELEVBQU8sS0FBUCxFQUFjLElBQWQsbURBQThEaUgsV0FBOUQsY0FBNkU1RyxVQUE3RSxHQUEyRixJQUEzRixDQUFsQztBQUNBeUMsa0JBQUFBLFFBQVEsQ0FBQztBQUFFbkIsb0JBQUFBLFdBQVcsRUFBRTtBQUFmLG1CQUFELENBQVI7QUFDSDs7QUFwSVA7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsT0FEb0I7QUFBQTtBQUFBOztBQTBJcEJtTCxJQUFBQSxlQUFlO0FBQ2hCLEdBM0lELEVBMklHLENBQUNuTCxXQUFELENBM0lILEVBeGdCQyxDQXFwQkQ7O0FBcnBCQyxjQXNwQm1CeUYsVUFBVSxJQUFJLEVBdHBCakM7QUFBQSxNQXNwQk9wSyxPQXRwQlAsU0FzcEJPQSxPQXRwQlA7O0FBd3BCRGpELEVBQUFBLEtBQUssQ0FBQ3FNLFNBQU4sQ0FBZ0IsWUFBTTtBQUNwQixRQUFNd0gsYUFBYSxHQUFHNVAsZUFBSCxhQUFHQSxlQUFILHVCQUFHQSxlQUFlLENBQUVzRSxZQUF2Qzs7QUFDQSxRQUFJdUwsYUFBYSxHQUFHLElBQUk5TCxHQUFKLEVBQXBCO0FBQ0EsUUFBSStMLGdCQUFnQixHQUFHLEtBQXZCO0FBQ0EsUUFBTUMsSUFBSSxHQUFHRixhQUFiO0FBQ0EsUUFBTUcsY0FBYyxHQUFHL04sNEJBQUgsYUFBR0EsNEJBQUgsdUJBQUdBLDRCQUE0QixDQUFFaEMsTUFBckQ7QUFDQSxRQUFNZ1EsZUFBZSxHQUFHaE8sNEJBQUgsYUFBR0EsNEJBQUgsdUJBQUdBLDRCQUE0QixDQUFFaU8sUUFBdEQ7QUFDQSxRQUFJQyxnQkFBZ0IsR0FBRyxJQUF2QixDQVBvQixDQVNwQjs7QUFDQSxRQUFJUCxhQUFhLFNBQWIsSUFBQUEsYUFBYSxXQUFiLElBQUFBLGFBQWEsQ0FBRXhRLE1BQWYsSUFDRjZRLGVBREUsSUFFRGhRLE1BQU0sS0FBSytQLGNBRlYsSUFHRkMsZUFBZSxDQUFDalIsT0FBRCxDQUhiLElBRzBCO0FBQzVCd0QsSUFBQUEsYUFKRSxhQUlGQSxhQUpFLGVBSUZBLGFBQWEsQ0FBRTROLEtBSmpCLEVBS0U7QUFDQTtBQUNBLFVBQUksQ0FBQy9TLE9BQU8sQ0FBQ21HLGlCQUFELEVBQW9CaEIsYUFBcEIsQ0FBUixJQUNGLENBQUNuRixPQUFPLENBQUNpSCxZQUFELEVBQWVzTCxhQUFmLENBRFYsRUFDeUM7QUFBQTs7QUFDdkMsWUFBTVMsY0FBYyxHQUFHLEVBQXZCO0FBQ0EsWUFBTUMsVUFBVSxHQUFHLEVBQW5CLENBRnVDLENBRWpCOztBQUN0QixZQUFJQyxVQUFVLEdBQUdYLGFBQWEsQ0FBQyxDQUFELENBQWIsQ0FBaUIzUSxLQUFsQzs7QUFFQSxZQUFJLE9BQU9zUixVQUFQLEtBQXNCLFFBQTFCLEVBQW9DO0FBQ2xDQSxVQUFBQSxVQUFVLEdBQUdyQixRQUFRLENBQUNxQixVQUFELENBQXJCO0FBQ0Q7O0FBRUQsWUFBSUMsU0FBUyxHQUFHRCxVQUFoQjs7QUFFQSxhQUFLLElBQUk1USxDQUFDLEdBQUcsQ0FBUixFQUFXQyxDQUFDLEdBQUdnUSxhQUFhLENBQUN4USxNQUFsQyxFQUEwQ08sQ0FBQyxHQUFHQyxDQUE5QyxFQUFpREQsQ0FBQyxFQUFsRCxFQUFzRDtBQUNwRCxjQUFNWixRQUFRLEdBQUc2USxhQUFhLENBQUNqUSxDQUFELENBQTlCO0FBRG9ELGNBR2xEWCxTQUhrRCxHQUtoREQsUUFMZ0QsQ0FHbERDLE9BSGtEO0FBQUEsY0FJbERDLEtBSmtELEdBS2hERixRQUxnRCxDQUlsREUsS0FKa0QsRUFNcEQ7O0FBQ0EsY0FBSXdSLE1BQU0sR0FBR0YsVUFBVSxHQUFHNVEsQ0FBMUI7O0FBQ0E2USxVQUFBQSxTQUFTLEdBQUdDLE1BQVo7QUFDQUgsVUFBQUEsVUFBVSxXQUFJdFIsU0FBSixjQUFleVIsTUFBZixFQUFWLGFBQXdDelIsU0FBeEMsY0FBbURDLEtBQW5EOztBQUVBLGNBQUksQ0FBQ29SLGNBQWMsQ0FBQ3JSLFNBQUQsQ0FBbkIsRUFBOEI7QUFDNUJxUixZQUFBQSxjQUFjLENBQUNyUixTQUFELENBQWQsR0FBMEIsRUFBMUI7QUFDRDs7QUFFRCxjQUFJRyxZQUFZLEdBQUcsRUFBbkI7O0FBRUEsY0FBSyxPQUFPRixLQUFQLEtBQWlCLFFBQWxCLElBQWdDQSxLQUFLLENBQUMwQixRQUFOLENBQWUsR0FBZixDQUFwQyxFQUEwRDtBQUN4RCxnQkFBTStQLE1BQU0sR0FBR3BULFNBQVMsQ0FBQzJTLGVBQUQsWUFBcUJqUixTQUFyQixjQUFnQ0MsS0FBaEMsRUFBeEI7O0FBRHdELHdEQUdoQ3lSLE1BSGdDO0FBQUE7O0FBQUE7QUFHeEQscUVBQWdDO0FBQUEsb0JBQXJCQyxTQUFxQjtBQUM5QixvQkFBTUMsRUFBRSxHQUFHRCxTQUFTLENBQUN6UixTQUFWLENBQW9CQyxZQUEvQjtBQUNBQSxnQkFBQUEsWUFBWSxHQUFHQSxZQUFZLENBQUMwUixNQUFiLENBQW9CRCxFQUFwQixDQUFmO0FBQ0Q7QUFOdUQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQU96RCxXQVBELE1BT087QUFBQTs7QUFDTHpSLFlBQUFBLFlBQVksNEJBQUc4USxlQUFlLENBQUNqUixTQUFELENBQWYsQ0FBeUJDLEtBQXpCLENBQUgsMERBQUcsc0JBQWlDRSxZQUFoRDtBQUNEOztBQUVELGNBQUlBLFlBQUosRUFBa0I7QUFDaEJBLFlBQUFBLFlBQVksR0FBR3pCLG1CQUFtQixDQUFDeUIsWUFBRCxDQUFsQztBQUNBa1IsWUFBQUEsY0FBYyxDQUFDclIsU0FBRCxDQUFkLENBQXdCeVIsTUFBeEIsSUFBa0M7QUFBRXRSLGNBQUFBLFlBQVksRUFBWkE7QUFBRixhQUFsQzs7QUFDQTRRLFlBQUFBLElBQUksQ0FBQ2UsR0FBTCxXQUFZOVIsU0FBWixjQUF1QkMsS0FBdkIsR0FBZ0NFLFlBQWhDO0FBQ0Q7QUFDRixTQTVDc0MsQ0E4Q3ZDOzs7QUE5Q3VDLG9DQStDckJxRCxhQS9DcUIsYUErQ3JCQSxhQS9DcUIsaURBK0NyQkEsYUFBYSxDQUFFTixTQS9DTSwyREErQ3JCLHVCQUEwQmlNLEtBQTFCLENBQWdDLEdBQWhDLENBL0NxQjtBQUFBO0FBQUEsWUErQ2hDblAsUUEvQ2dDOztBQWdEdkMsWUFBSStSLE1BQU0sYUFBTS9SLFFBQU4sY0FBaUJ1UixVQUFqQixDQUFWOztBQUVBLFlBQUlDLFNBQVMsSUFBSUQsVUFBakIsRUFBNkI7QUFDM0JRLFVBQUFBLE1BQU0sZUFBUVAsU0FBUixDQUFOO0FBQ0Q7O0FBRUQsWUFBTVEsWUFBWSxHQUFHOVQsd0JBQXdCLENBQUM7QUFDNUMrVCxVQUFBQSxVQUFVLEVBQUVaLGNBRGdDO0FBRTVDM00sVUFBQUEsR0FBRyxFQUFFcU4sTUFGdUM7QUFHNUNYLFVBQUFBLEtBQUssRUFBRTVOLGFBQUYsYUFBRUEsYUFBRix1QkFBRUEsYUFBYSxDQUFFNE4sS0FIc0I7QUFJNUNjLFVBQUFBLFVBQVUsRUFBRTFPLGFBQUYsYUFBRUEsYUFBRix1QkFBRUEsYUFBYSxDQUFFME87QUFKaUIsU0FBRCxDQUE3Qzs7QUFPQSxZQUFNcE4sV0FBVSxHQUFHLElBQUlDLEdBQUosRUFBbkI7O0FBRUEsWUFBSWlOLFlBQUosYUFBSUEsWUFBSixlQUFJQSxZQUFZLENBQUVHLElBQWxCLEVBQXdCO0FBQ3RCSCxVQUFBQSxZQUFZLENBQUNJLE9BQWIsQ0FBcUIsVUFBQ0MsS0FBRCxFQUFRQyxHQUFSLEVBQWdCO0FBQ25DLGdCQUFNQyxJQUFJLEdBQUdqQixVQUFVLENBQUNnQixHQUFELENBQXZCOztBQUVBeE4sWUFBQUEsV0FBVSxDQUFDZ04sR0FBWCxDQUFlUyxJQUFmLEVBQXFCRixLQUFLLENBQUNHLEdBQU4sQ0FBVSxVQUFBQyxJQUFJO0FBQUEscURBQzVCQSxJQUQ0QjtBQUN0QkMsZ0JBQUFBLElBQUksRUFBRXpWLElBQUksQ0FBQzBWLGVBQUwsQ0FBcUJGLElBQUksQ0FBQ0MsSUFBMUI7QUFEZ0I7QUFBQSxhQUFkLENBQXJCO0FBR0QsV0FORDtBQU9EOztBQUNEN0IsUUFBQUEsYUFBYSxHQUFHL0wsV0FBaEI7QUFDQXFNLFFBQUFBLGdCQUFnQixHQUFHM04sYUFBbkI7QUFDQXNOLFFBQUFBLGdCQUFnQixHQUFHLElBQW5CO0FBQ0Q7QUFDRjs7QUFFRCxRQUFNL0ssUUFBYSxHQUFHLEVBQXRCLENBaEdvQixDQWtHcEI7O0FBQ0EsUUFBSSxDQUFDN0csY0FBYyxDQUFDcUcsZUFBRCxFQUFrQndMLElBQWxCLENBQW5CLEVBQTRDO0FBQzFDaEwsTUFBQUEsUUFBUSxDQUFDUixlQUFULEdBQTJCd0wsSUFBM0I7QUFDRDs7QUFFRCxRQUFNNkIsWUFBWSxHQUFHLENBQUExUCxTQUFTLFNBQVQsSUFBQUEsU0FBUyxXQUFULFlBQUFBLFNBQVMsQ0FBRTdCLFNBQVgsT0FBeUJnRCxnQkFBekIsYUFBeUJBLGdCQUF6Qix1QkFBeUJBLGdCQUFnQixDQUFFaEQsU0FBM0MsQ0FBckI7O0FBRUEsUUFBSXVSLFlBQVksSUFBSSxDQUFDclMsYUFBYSxDQUFDK0UsWUFBRCxFQUFlc0wsYUFBZixDQUFsQyxFQUFpRTtBQUMvRDdLLE1BQUFBLFFBQVEsQ0FBQ1QsWUFBVCxHQUF3QnNMLGFBQXhCO0FBQ0E3SyxNQUFBQSxRQUFRLENBQUN2QixpQkFBVCxHQUE2QjJNLGdCQUE3QjtBQUNBcEwsTUFBQUEsUUFBUSxDQUFDakIsVUFBVCxHQUFzQitMLGFBQXRCO0FBQ0Q7O0FBRUQsUUFBSU0sZ0JBQUosRUFBc0I7QUFDcEJwTCxNQUFBQSxRQUFRLENBQUN2QixpQkFBVCxHQUE2QjJNLGdCQUE3QjtBQUNEOztBQUVELFFBQUlMLGdCQUFKLEVBQXNCO0FBQ3BCLFVBQUksQ0FBQzVSLGNBQWMsQ0FBQzRGLFVBQVUsSUFBSyxJQUFJQyxHQUFKLEVBQWhCLEVBQTRCOEwsYUFBNUIsQ0FBbkIsRUFBK0Q7QUFDN0Q5SyxRQUFBQSxRQUFRLENBQUNqQixVQUFULEdBQXNCK0wsYUFBdEI7QUFDRDtBQUNGOztBQUVELFFBQUlwRSxNQUFNLENBQUNDLElBQVAsQ0FBWTNHLFFBQVosRUFBc0IzRixNQUExQixFQUFrQztBQUNoQzBGLE1BQUFBLFFBQVEsQ0FBQ0MsUUFBRCxDQUFSO0FBQ0Q7QUFDRixHQTVIRCxFQTRIRyxDQUNENUMsS0FEQyxFQUVERSxVQUZDLEVBR0RwQyxNQUhDLEVBSURnSixXQUpDLEVBS0RqSixlQUxDLGFBS0RBLGVBTEMsdUJBS0RBLGVBQWUsQ0FBRXNFLFlBTGhCLEVBTURyQyw0QkFOQyxFQU9ETyxhQVBDLENBNUhIO0FBc0lBekcsRUFBQUEsS0FBSyxDQUFDcU0sU0FBTixDQUFnQixZQUFNO0FBQUU7QUFDdEJ0RCxJQUFBQSxRQUFRLENBQUM7QUFDUFQsTUFBQUEscUJBQXFCLEVBQUUsSUFEaEI7QUFFUEQsTUFBQUEsa0JBQWtCLEVBQUUsRUFGYjtBQUdQYixNQUFBQSxrQkFBa0IsRUFBRTtBQUhiLEtBQUQsQ0FBUjtBQUtELEdBTkQsRUFNRyxDQUFDNkYsVUFBRCxDQU5IOztBQVFBLE1BQU15SSwyQkFBMkIsR0FBRyxTQUE5QkEsMkJBQThCLENBQUMzUCxTQUFELEVBQVk0UCxPQUFaLEVBQXdCO0FBQzFEcE4sSUFBQUEsU0FBUyxDQUFDLFVBQUFNLFNBQVM7QUFBQSw2Q0FDZEEsU0FEYztBQUVqQlgsUUFBQUEscUJBQXFCLGtDQUFPVyxTQUFTLENBQUNYLHFCQUFqQixxQ0FBNENuQyxTQUFTLENBQUNsRCxPQUF0RCxjQUFpRWtELFNBQVMsQ0FBQ2pELEtBQTNFLEdBQXFGNlMsT0FBckY7QUFGSjtBQUFBLEtBQVYsQ0FBVDtBQUlELEdBTEQ7O0FBT0EsTUFBSWxDLGFBQWEsR0FBRzVQLGVBQUgsYUFBR0EsZUFBSCx1QkFBR0EsZUFBZSxDQUFFc0UsWUFBckM7O0FBRUF2SSxFQUFBQSxLQUFLLENBQUNxTSxTQUFOLENBQWdCLFlBQU07QUFBQTs7QUFDcEIsMEJBQUl3SCxhQUFKLDJDQUFJLGVBQWV4USxNQUFuQixFQUEyQjtBQUFBLGtCQUNXWSxlQUFlLElBQUksRUFEOUI7QUFBQSxVQUNqQmtDLFdBRGlCLFNBQ2pCQSxTQURpQjtBQUFBLFVBQ05LLGNBRE0sU0FDTkEsWUFETTs7QUFFekIzQixNQUFBQSxPQUFPLENBQUNxSCxHQUFSLHdDQUFtRDtBQUFFL0YsUUFBQUEsU0FBUyxFQUFUQSxXQUFGO0FBQWFLLFFBQUFBLFlBQVksRUFBWkE7QUFBYixPQUFuRDtBQUNEO0FBQ0YsR0FMRCxFQUtHLENBQUNxTixhQUFELENBTEg7O0FBT0EsTUFBSSxvQkFBQ0EsYUFBRCwyQ0FBQyxlQUFleFEsTUFBaEIsQ0FBSixFQUE0QjtBQUFFO0FBQzVCd1EsSUFBQUEsYUFBYSxHQUFHLG1CQUFNMU4sU0FBTixFQUFoQjtBQUNEOztBQUVELE1BQU02UCxzQkFBc0IscUJBQUduQyxhQUFILG1EQUFHLGVBQWU0QixHQUFmLENBQW1CLFVBQUNRLGlCQUFELEVBQW9CakcsS0FBcEIsRUFBOEI7QUFBQTs7QUFDOUUsUUFBTWtHLG1CQUFtQixHQUFHLENBQUFELGlCQUFpQixTQUFqQixJQUFBQSxpQkFBaUIsV0FBakIscUNBQUFBLGlCQUFpQixDQUFFOVMsU0FBbkIsZ0ZBQThCQyxZQUE5QixLQUE4QyxFQUExRSxDQUQ4RSxDQUU5RTs7QUFGOEUsZ0JBR25ENlMsaUJBQWlCLElBQUksRUFIOEI7QUFBQSxRQUd0RWhULE9BSHNFLFNBR3RFQSxPQUhzRTtBQUFBLFFBRzdEQyxLQUg2RCxTQUc3REEsS0FINkQ7O0FBSTlFLFFBQU1vQixTQUFTLEdBQUcsQ0FBQWdELGdCQUFnQixTQUFoQixJQUFBQSxnQkFBZ0IsV0FBaEIsWUFBQUEsZ0JBQWdCLENBQUVoRCxTQUFsQixNQUErQjZCLFNBQS9CLGFBQStCQSxTQUEvQix1QkFBK0JBLFNBQVMsQ0FBRTdCLFNBQTFDLENBQWxCOztBQUNBLFFBQU0rSSxVQUFVLG1DQUNYd0csYUFEVztBQUVkNVEsTUFBQUEsT0FBTyxFQUFQQSxPQUZjO0FBR2RxQixNQUFBQSxTQUFTLEVBQVRBLFNBSGM7QUFJZHBCLE1BQUFBLEtBQUssRUFBTEE7QUFKYyxNQUFoQjs7QUFNQSxRQUFNaVQsNkJBQTZCLG1DQUM5QnJILDRCQUQ4QjtBQUVqQ0ssTUFBQUEsWUFBWSxFQUFFYSxLQUZtQjtBQUdqQ2tHLE1BQUFBLG1CQUFtQixFQUFuQkEsbUJBSGlDO0FBSWpDL1AsTUFBQUEsU0FBUyxFQUFFa0gsVUFKc0I7QUFLakM5RCxNQUFBQSxjQUFjLEVBQWRBO0FBTGlDLE1BQW5DOztBQVFBLFFBQUk2TSwyQkFBMkIsR0FBRyxLQUFsQzs7QUFFQSxRQUFJM04seUJBQUosRUFBK0I7QUFDN0IyTixNQUFBQSwyQkFBMkIsR0FBRzNOLHlCQUF5QixDQUFDeEYsT0FBMUIsSUFBcUNBLE9BQXJDLElBQWdEd0YseUJBQXlCLENBQUN2RixLQUExQixJQUFtQ0EsS0FBakg7QUFDRDs7QUFFRCx3QkFDRSxvQkFBQyxhQUFELGVBQ01lLGVBRE47QUFFRSxNQUFBLFlBQVksRUFBRXFLLFlBRmhCO0FBR0UsTUFBQSxZQUFZLEVBQUUwQixLQUhoQjtBQUlFLE1BQUEsaUJBQWlCLEVBQUUsQ0FBQ3RJLGFBSnRCO0FBS0UsTUFBQSxTQUFTLEVBQUUwRixTQUxiO0FBTUUsTUFBQSxrQkFBa0IsRUFBRW9CLG1CQU50QjtBQU9FLE1BQUEsUUFBUSxFQUFFNUYsUUFQWjtBQVFFLE1BQUEsY0FBYyxFQUFFbkQsY0FSbEI7QUFTRSxNQUFBLElBQUksRUFBRXFELEtBVFI7QUFVRSxNQUFBLDJCQUEyQixFQUFFc04sMkJBVi9CO0FBV0UsTUFBQSxHQUFHLEVBQUVwRyxLQVhQO0FBWUUsTUFBQSxpQkFBaUIsRUFBRTtBQUFBLGVBQU1qSCxRQUFRLENBQUM7QUFBRU4sVUFBQUEseUJBQXlCLEVBQUU7QUFBN0IsU0FBRCxDQUFkO0FBQUEsT0FackI7QUFhRSxNQUFBLDRCQUE0QixFQUFFdkMsNEJBYmhDO0FBY0UsTUFBQSxRQUFRLEVBQUUrSCxRQWRaO0FBZUUsTUFBQSxTQUFTLEVBQUVaLFVBZmI7QUFnQkUsTUFBQSxNQUFNLEVBQUVuRixTQWhCVixDQWlCRTtBQWpCRjtBQWtCRSxNQUFBLDRCQUE0QixFQUFFaU8sNkJBbEJoQztBQW1CRSxNQUFBLG9CQUFvQixFQUFFcFAsb0JBbkJ4QjtBQW9CRSxNQUFBLE1BQU0sRUFBRUwsTUFwQlY7QUFxQkUsTUFBQSxTQUFTLEVBQUVNLFNBckJiO0FBc0JFLE1BQUEsMkJBQTJCLEVBQUU4TztBQXRCL0IsT0FERjtBQTBCRCxHQW5EOEIsQ0FBL0I7O0FBcURBLE1BQU1PLHNCQUFzQixHQUFHLFNBQXpCQSxzQkFBeUIsR0FBTTtBQUNuQyxRQUFJLENBQUE5TixZQUFZLFNBQVosSUFBQUEsWUFBWSxXQUFaLFlBQUFBLFlBQVksQ0FBRWxGLE1BQWQsSUFBdUIsQ0FBM0IsRUFBOEI7QUFDNUIwRixNQUFBQSxRQUFRLENBQUM7QUFBRWQsUUFBQUEsa0JBQWtCLEVBQUU7QUFBdEIsT0FBRCxDQUFSO0FBQ0QsS0FGRCxNQUVPLElBQUksQ0FBQU0sWUFBWSxTQUFaLElBQUFBLFlBQVksV0FBWixZQUFBQSxZQUFZLENBQUVsRixNQUFkLE1BQXlCLENBQTdCLEVBQWdDO0FBQ3JDMEYsTUFBQUEsUUFBUSxDQUFDO0FBQUVOLFFBQUFBLHlCQUF5QixFQUFFRixZQUFZLENBQUMsQ0FBRDtBQUF6QyxPQUFELENBQVI7QUFDRDtBQUNGLEdBTkQ7O0FBUUEsTUFBTStOLGVBQWUsR0FBRyxTQUFsQkEsZUFBa0IsU0FBZTtBQUFBLFFBQVo3SSxLQUFZLFVBQVpBLEtBQVk7O0FBQ3JDLFFBQU04SSxRQUFRLHNCQUFPOUksS0FBUCxDQUFkOztBQUVBLFFBQUkrSSxnQkFBZ0IsR0FBRyxLQUF2QixDQUhxQyxDQUtyQzs7QUFDQSxRQUFJbE8scUJBQUosRUFBMkI7QUFDekJrTyxNQUFBQSxnQkFBZ0IsR0FBRzlHLE1BQU0sQ0FBQytHLE1BQVAsQ0FBY25PLHFCQUFkLEVBQXFDb08sS0FBckMsQ0FBMkMsVUFBQUMsV0FBVztBQUFBLGVBQUlBLFdBQVcsS0FBSyxJQUFwQjtBQUFBLE9BQXRELENBQW5CO0FBQ0Q7O0FBRUQsUUFBSUMsU0FBUyxHQUFHLElBQWhCO0FBQ0EsUUFBSUMsZUFBZSxHQUFHLEVBQXRCOztBQUVBLFFBQUlMLGdCQUFKLEVBQXNCO0FBQ3BCSSxNQUFBQSxTQUFTLGdCQUFHLG9CQUFDLE9BQUQ7QUFBUyxRQUFBLEVBQUUsdUJBQWdCdFEsVUFBaEIsQ0FBWDtBQUF5QyxRQUFBLEtBQUssRUFBQztBQUEvQyxRQUFaO0FBQ0F1USxNQUFBQSxlQUFlLEdBQUcsb0JBQWxCO0FBQ0QsS0FIRCxNQUdPO0FBQ0xELE1BQUFBLFNBQVMsZ0JBQUcsb0JBQUMsWUFBRDtBQUFjLFFBQUEsRUFBRSxtQ0FBNEJ0USxVQUE1QixDQUFoQjtBQUEwRCxRQUFBLEtBQUssRUFBQztBQUFoRSxRQUFaO0FBQ0F1USxNQUFBQSxlQUFlLEdBQUcsc0JBQWxCO0FBQ0Q7O0FBRUQsUUFBSTlQLG9CQUFvQixJQUFJVCxVQUFVLEtBQUssaUJBQTNDLEVBQThEO0FBQzVEaVEsTUFBQUEsUUFBUSxDQUFDTyxJQUFULGVBQ0Usb0JBQUMsVUFBRDtBQUNFLFFBQUEsRUFBRSwyQkFBb0J4USxVQUFwQixDQURKO0FBRUUsUUFBQSxHQUFHLEVBQUMsaUJBRk47QUFHRSxRQUFBLE9BQU8sRUFBRStQLHNCQUhYO0FBSUUsUUFBQSxLQUFLLEVBQUVRLGVBSlQ7QUFLRSxzQkFBWUEsZUFMZDtBQU1FLFFBQUEsS0FBSyxFQUFFO0FBQUVFLFVBQUFBLE1BQU0sRUFBRTtBQUFWO0FBTlQsU0FRR0gsU0FSSCxDQURGO0FBWUQ7O0FBRURMLElBQUFBLFFBQVEsQ0FBQ08sSUFBVCxlQUNFLHVEQUNFLG9CQUFDLGtCQUFELGVBQXdCM0wsaUJBQXhCO0FBQTJDLE1BQUEsU0FBUyxFQUFFUSxlQUFlLElBQUl6RDtBQUF6RSxPQURGLGVBRUUsb0JBQUMsV0FBRDtBQUFhLE1BQUEsS0FBSyxFQUFFNEQsV0FBcEI7QUFBaUMsTUFBQSxPQUFPLEVBQUVELGFBQTFDO0FBQXlELE1BQUEsSUFBSSxFQUFFSixpQkFBL0Q7QUFBa0YsTUFBQSxPQUFPLEVBQUVDLGtCQUEzRjtBQUErRyxNQUFBLFNBQVMsRUFBR0MsZUFBZSxJQUFJekQsU0FBOUk7QUFBMEosTUFBQSxJQUFJLEVBQUU2RCxVQUFoSztBQUE0SyxNQUFBLFdBQVcsRUFBRUM7QUFBekwsTUFGRixDQURGO0FBT0EsV0FBT3VLLFFBQVA7QUFDRCxHQTVDRDs7QUE4Q0Esc0JBQ0Usb0JBQUMseUJBQUQ7QUFDRSxJQUFBLFVBQVUsRUFBRXhPLFVBRGQ7QUFFRSxJQUFBLFlBQVksRUFBRSxzQkFBQStMLGFBQWEsRUFBSSxDQUM3QjtBQUNELEtBSkg7QUFLRSxJQUFBLEtBQUssRUFBRXJOLGFBQUYsYUFBRUEsYUFBRix1QkFBRUEsYUFBYSxDQUFFNE4sS0FMeEI7QUFNRSxJQUFBLFVBQVUsRUFBRXpTLGFBQWEsQ0FBQzZFLGFBQUQsYUFBQ0EsYUFBRCx1QkFBQ0EsYUFBYSxDQUFFME8sVUFBaEIsQ0FOM0I7QUFPRSxJQUFBLGVBQWUsRUFBRTNNO0FBUG5CLGtCQVNFLG9CQUFDLElBQUQ7QUFDRSxJQUFBLEVBQUUsMkJBQW9CbkQsT0FBcEIsQ0FESjtBQUVFLElBQUEsS0FBSyxFQUFFa0osY0FGVDtBQUdFLElBQUEsYUFBYSxFQUFFOUIsY0FBYyxHQUFHLFdBSGxDO0FBSUUsSUFBQSxLQUFLLEVBQUVnQixLQUpUO0FBS0UsSUFBQSxPQUFPLEVBQUVuSSxPQUxYO0FBTUUsSUFBQSxPQUFPLEVBQUVvSSxPQU5YO0FBT0UsSUFBQSxPQUFPLEVBQUVDLE9BUFg7QUFRRSxJQUFBLFFBQVEsRUFBRS9FLFFBUlo7QUFTRSxJQUFBLFNBQVMsRUFBRWdGLFNBVGI7QUFVRSxJQUFBLFVBQVUsRUFBRUUsVUFWZDtBQVdFLElBQUEsV0FBVyxFQUFFakYsV0FYZjtBQVlFLElBQUEsWUFBWSxFQUFFa0YsWUFaaEI7QUFhRSxJQUFBLFlBQVksRUFBRUYsWUFiaEI7QUFjRSxJQUFBLGVBQWUsRUFBRUcsZUFkbkI7QUFlRSxJQUFBLGtCQUFrQixFQUFFakIsb0JBZnRCO0FBZ0JFLElBQUEsa0JBQWtCLE1BaEJwQjtBQWlCRSxJQUFBLFdBQVcsRUFBRUUsV0FqQmY7QUFrQkUsSUFBQSxVQUFVLEVBQUVqSCxVQUFVLEdBQUc7QUFBQSxhQUFNQSxVQUFVLENBQUNILEVBQUQsRUFBSzRHLGNBQUwsQ0FBaEI7QUFBQSxLQUFILEdBQTBDLElBbEJsRTtBQW1CRSxJQUFBLFFBQVEsRUFBRWtDLFVBQVUsSUFBSUMsZUFuQjFCO0FBb0JFLElBQUEsS0FBSyxFQUFFMUcsU0FBUyxJQUFJLENBQUNWLGtCQXBCdkI7QUFxQkUsSUFBQSxVQUFVLEVBQUU7QUFBQSxhQUFNdUIsUUFBUSxDQUFDO0FBQUVuQixRQUFBQSxXQUFXLEVBQUU7QUFBZixPQUFELENBQWQ7QUFBQSxLQXJCZDtBQXNCRSxJQUFBLGVBQWUsRUFBRTBPO0FBdEJuQixrQkF3QkU7QUFBSyxJQUFBLEVBQUUsRUFBQztBQUFSLEtBQ0dOLHNCQURILENBeEJGLENBVEYsZUFxQ0Usb0JBQUMsa0JBQUQ7QUFDRSxJQUFBLFVBQVUsRUFBRTFQLFVBRGQ7QUFFRSxJQUFBLElBQUksRUFBRTJCLGtCQUZSO0FBR0UsSUFBQSxPQUFPLEVBQUU7QUFBQSxhQUFNYyxRQUFRLENBQUM7QUFBRWQsUUFBQUEsa0JBQWtCLEVBQUU7QUFBdEIsT0FBRCxDQUFkO0FBQUEsS0FIWDtBQUlFLElBQUEsWUFBWSxFQUFFTSxZQUpoQjtBQUtFLElBQUEscUJBQXFCLEVBQUVELHFCQUx6QjtBQU1FLElBQUEsYUFBYSxFQUFFLHVCQUFDcEYsS0FBRDtBQUFBLGFBQVc2RixRQUFRLENBQUM7QUFDakNOLFFBQUFBLHlCQUF5QixFQUFFdkYsS0FETTtBQUVqQytFLFFBQUFBLGtCQUFrQixFQUFFO0FBRmEsT0FBRCxDQUFuQjtBQUFBO0FBTmpCLElBckNGLENBREY7QUFtREQ7QUFFRGhELGFBQWEsQ0FBQytSLFNBQWQsR0FBMEI7QUFDeEI7QUFDQTlSLEVBQUFBLE1BQU0sRUFBRWpGLFNBQVMsQ0FBQ2dYLE1BQVYsQ0FBaUJDLFVBRkQ7O0FBR3hCO0FBQ0EvUixFQUFBQSxjQUFjLEVBQUVsRixTQUFTLENBQUNrWCxNQUpGOztBQUt4QjtBQUNBL1IsRUFBQUEsU0FBUyxFQUFFbkYsU0FBUyxDQUFDZ1gsTUFORzs7QUFPeEI7QUFDQTVSLEVBQUFBLE9BQU8sRUFBRXBGLFNBQVMsQ0FBQ21YLE1BQVYsQ0FBaUJGLFVBUkY7O0FBU3hCO0FBQ0E1UixFQUFBQSxPQUFPLEVBQUVyRixTQUFTLENBQUNrWCxNQVZLOztBQVd4QjtBQUNBNVIsRUFBQUEsa0JBQWtCLEVBQUV0RixTQUFTLENBQUNvWCxJQVpOOztBQWF4QjtBQUNBN1IsRUFBQUEsV0FBVyxFQUFFdkYsU0FBUyxDQUFDcVgsSUFBVixDQUFlSixVQWRKOztBQWV4QjtBQUNBelIsRUFBQUEsY0FBYyxFQUFFeEYsU0FBUyxDQUFDcVgsSUFoQkY7O0FBaUJ4QjtBQUNBNVIsRUFBQUEsWUFBWSxFQUFFekYsU0FBUyxDQUFDZ1gsTUFsQkE7O0FBbUJ4QjtBQUNBdFIsRUFBQUEsYUFBYSxFQUFFMUYsU0FBUyxDQUFDZ1gsTUFwQkQ7O0FBcUJ4QjtBQUNBclIsRUFBQUEsVUFBVSxFQUFFM0YsU0FBUyxDQUFDa1gsTUF0QkU7O0FBdUJ4QjtBQUNBdFIsRUFBQUEsRUFBRSxFQUFFNUYsU0FBUyxDQUFDZ1gsTUF4QlU7O0FBeUJ4QjtBQUNBblIsRUFBQUEsSUFBSSxFQUFFN0YsU0FBUyxDQUFDcVgsSUFBVixDQUFlSixVQTFCRzs7QUEyQnhCO0FBQ0FuUixFQUFBQSxZQUFZLEVBQUU5RixTQUFTLENBQUNnWCxNQTVCQTs7QUE2QnhCO0FBQ0FqUixFQUFBQSxVQUFVLEVBQUUvRixTQUFTLENBQUNxWCxJQTlCRTs7QUErQnhCO0FBQ0Y7QUFDQTtBQUNBO0FBQ0VyUixFQUFBQSxlQUFlLEVBQUVoRyxTQUFTLENBQUNxWCxJQW5DSDs7QUFvQ3hCO0FBQ0FwUixFQUFBQSw0QkFBNEIsRUFBRWpHLFNBQVMsQ0FBQ2tYLE1BckNoQjtBQXNDeEJoUixFQUFBQSxTQUFTLEVBQUVsRyxTQUFTLENBQUNzWCxLQUFWLENBQWdCO0FBQ3pCO0FBQ0FqVCxJQUFBQSxTQUFTLEVBQUVyRSxTQUFTLENBQUNnWCxNQUFWLENBQWlCQyxVQUZIOztBQUd6QjtBQUNBalUsSUFBQUEsT0FBTyxFQUFFaEQsU0FBUyxDQUFDdVgsU0FBVixDQUFvQixDQUFDdlgsU0FBUyxDQUFDbVgsTUFBWCxFQUFtQm5YLFNBQVMsQ0FBQ2dYLE1BQTdCLENBQXBCLEVBQTBEQyxVQUoxQzs7QUFLekI7QUFDQWhVLElBQUFBLEtBQUssRUFBRWpELFNBQVMsQ0FBQ3VYLFNBQVYsQ0FBb0IsQ0FBQ3ZYLFNBQVMsQ0FBQ21YLE1BQVgsRUFBbUJuWCxTQUFTLENBQUNnWCxNQUE3QixDQUFwQixFQUEwREM7QUFOeEMsR0FBaEIsQ0F0Q2E7O0FBOEN4QjtBQUNBN1MsRUFBQUEsUUFBUSxFQUFFcEUsU0FBUyxDQUFDc1gsS0FBVixDQUFnQjtBQUN4QjtBQUNBbFIsSUFBQUEsVUFBVSxFQUFFcEcsU0FBUyxDQUFDZ1gsTUFBVixDQUFpQkMsVUFGTDs7QUFHeEI7QUFDQTlRLElBQUFBLEtBQUssRUFBRW5HLFNBQVMsQ0FBQ2dYLE1BQVYsQ0FBaUJDLFVBSkE7O0FBS3hCO0FBQ0E1USxJQUFBQSxVQUFVLEVBQUVyRyxTQUFTLENBQUNnWCxNQUFWLENBQWlCQyxVQU5MOztBQU94QjtBQUNBM1EsSUFBQUEscUJBQXFCLEVBQUV0RyxTQUFTLENBQUNnWCxNQUFWLENBQWlCQztBQVJoQixHQUFoQixDQS9DYzs7QUF5RHhCO0FBQ0ExUSxFQUFBQSxZQUFZLEVBQUV2RyxTQUFTLENBQUN3WCxHQTFEQTs7QUEyRHhCO0FBQ0FoUixFQUFBQSxhQUFhLEVBQUV4RyxTQUFTLENBQUNrWCxNQTVERDs7QUE2RHhCO0FBQ0F6USxFQUFBQSxNQUFNLEVBQUV6RyxTQUFTLENBQUNnWCxNQUFWLENBQWlCQyxVQTlERDs7QUErRHhCO0FBQ0FRLEVBQUFBLHNCQUFzQixFQUFFelgsU0FBUyxDQUFDcVgsSUFoRVY7O0FBaUV4QjtBQUNBSyxFQUFBQSxxQkFBcUIsRUFBRTFYLFNBQVMsQ0FBQ3FYLElBbEVUOztBQW1FeEI7QUFDQTNRLEVBQUFBLG9CQUFvQixFQUFFMUcsU0FBUyxDQUFDcVgsSUFwRVI7O0FBcUV4QjtBQUNBMVEsRUFBQUEscUJBQXFCLEVBQUUzRyxTQUFTLENBQUNxWCxJQXRFVDs7QUF1RXhCO0FBQ0F6USxFQUFBQSxjQUFjLEVBQUU1RyxTQUFTLENBQUNxWCxJQXhFRjs7QUF5RXhCO0FBQ0F4USxFQUFBQSxlQUFlLEVBQUU3RyxTQUFTLENBQUNxWCxJQTFFSDs7QUEyRXhCO0FBQ0F2USxFQUFBQSxvQkFBb0IsRUFBRTlHLFNBQVMsQ0FBQ3FYLElBNUVSOztBQTZFeEI7QUFDQXJRLEVBQUFBLEtBQUssRUFBRWhILFNBQVMsQ0FBQ2dYLE1BQVYsQ0FBaUJDLFVBOUVBOztBQStFeEI7QUFDQWxRLEVBQUFBLFNBQVMsRUFBRS9HLFNBQVMsQ0FBQ3FYLElBaEZHOztBQWlGeEI7QUFDQW5RLEVBQUFBLGdCQUFnQixFQUFFbEgsU0FBUyxDQUFDcVgsSUFsRko7O0FBbUZ4QjtBQUNBcFEsRUFBQUEsbUJBQW1CLEVBQUVqSCxTQUFTLENBQUNxWCxJQUFWLENBQWVKO0FBcEZaLENBQTFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgKiBhcyBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcydcbmltcG9ydCB7IGNvcmUsIFNlbGVjdGlvbnNDb250ZXh0UHJvdmlkZXIgfSBmcm9tICdzY3JpcHR1cmUtcmVzb3VyY2VzLXJjbCdcbmltcG9ydCB1c2ZtanMgZnJvbSAndXNmbS1qcydcbmltcG9ydCB7IHVzZUVkaXQgfSBmcm9tICdnaXRlYS1yZWFjdC10b29sa2l0J1xuaW1wb3J0IHsgSWNvbkJ1dHRvbiB9IGZyb20gJ0BtdWkvbWF0ZXJpYWwnXG5pbXBvcnQgeyBSeExpbmsyLCBSeExpbmtCcmVhazIgfSBmcm9tICdyZWFjdC1pY29ucy9yeCdcbmltcG9ydCB7XG4gIENhcmQsXG4gIEVycm9yRGlhbG9nLFxuICBFUlJPUl9TVEFURSxcbiAgTUFOSUZFU1RfTk9UX0xPQURFRF9FUlJPUixcbiAgVXBkYXRlQnJhbmNoQnV0dG9uLFxuICB1c2VCcmFuY2hNZXJnZXIsXG4gIHVzZUNhcmRTdGF0ZSxcbiAgdXNlQ29udGVudFVwZGF0ZVByb3BzLFxuICB1c2VNYXN0ZXJNZXJnZVByb3BzLFxuICB1c2VVc2VyQnJhbmNoLFxufSBmcm9tICd0cmFuc2xhdGlvbi1oZWxwcy1yY2wnXG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBnZXRRdW90ZU1hdGNoZXNJbkJvb2tSZWYgfSBmcm9tICd1dy1xdW90ZS1oZWxwZXJzJ1xuaW1wb3J0IHsgQWxpZ25tZW50SGVscGVycywgVXNmbUZpbGVDb252ZXJzaW9uSGVscGVycyB9IGZyb20gJ3dvcmQtYWxpZ25lci1yY2wnXG5pbXBvcnQgKiBhcyBpc0VxdWFsIGZyb20gJ2RlZXAtZXF1YWwnXG5pbXBvcnQgeyBnZXRWZXJzZXMgfSBmcm9tICdiaWJsZS1yZWZlcmVuY2UtcmFuZ2UnXG5pbXBvcnQgeyBTY3JpcHR1cmVQYW5lLCBTY3JpcHR1cmVTZWxlY3RvciB9IGZyb20gJy4uJ1xuaW1wb3J0IHsgdXNlU2NyaXB0dXJlU2V0dGluZ3MgfSBmcm9tICcuLi8uLi9ob29rcy91c2VTY3JpcHR1cmVTZXR0aW5ncydcbmltcG9ydCB7XG4gIGNsZWFudXBWZXJzZU9iamVjdHMsXG4gIGZpeE9jY3VycmVuY2UsXG4gIGdldEJvb2tOYW1lRnJvbVVzZm1GaWxlTmFtZSxcbiAgZ2V0UmVzb3VyY2VMaW5rLFxuICBnZXRSZXNvdXJjZU1lc3NhZ2UsXG4gIGdldFNjcmlwdHVyZVZlcnNpb25TZXR0aW5ncyxcbiAgaXNPcmlnaW5hbEJpYmxlLFxufSBmcm9tICcuLi8uLi91dGlscy9TY3JpcHR1cmVTZXR0aW5ncydcbmltcG9ydCB7IGRlbGF5IH0gZnJvbSAnLi4vLi4vdXRpbHMvZGVsYXknXG5pbXBvcnQgeyBhcmVNYXBzVGhlU2FtZSB9IGZyb20gJy4uLy4uL3V0aWxzL21hcHMnXG5pbXBvcnQgeyBUaXRsZSB9IGZyb20gJy4uL1NjcmlwdHVyZVBhbmUvc3R5bGVkJ1xuaW1wb3J0IHtcbiAgTlRfT1JJR19MQU5HLFxuICBPUklHSU5BTF9TT1VSQ0UsXG4gIE9UX09SSUdfTEFORyxcbn0gZnJvbSAnLi4vLi4vdXRpbHMnXG5pbXBvcnQgeyBWZXJzZVNlbGVjdG9yUG9wdXAgfSBmcm9tICcuLi9WZXJzZVNlbGVjdG9yUG9wdXAnXG5pbXBvcnQgeyBnZXRQYXRjaCB9IGZyb20gJy4uLy4uL3V0aWxzL2ZpbGVzJ1xuXG5jb25zdCBLRVlfRk9OVF9TSVpFX0JBU0UgPSAnc2NyaXB0dXJlUGFuZUZvbnRTaXplXydcbmNvbnN0IGxhYmVsID0gJ1ZlcnNpb24nXG5jb25zdCBzdHlsZSA9IHsgbWFyZ2luVG9wOiAnMTZweCcsIHdpZHRoOiAnNTAwcHgnIH1cblxuLyoqXG4gKiBjcmVhdGUgYSBzaG9ydCBjb21wYXJpc29uIHZlcnNlIHJlZiBvYmplY3Qgd2l0aG91dCBhbGwgdGhlIHZlcnNlRGF0YVxuICogQHBhcmFtIHZlcnNlUmVmXG4gKi9cbmZ1bmN0aW9uIGNvbXBhcmVPYmplY3QodmVyc2VSZWYpIHtcbiAgY29uc3Qge1xuICAgIGNoYXB0ZXIsXG4gICAgdmVyc2UsXG4gICAgdmVyc2VEYXRhLFxuICB9ID0gdmVyc2VSZWYgfHwge31cbiAgY29uc3QgdmVyc2VPYmplY3RzID0gdmVyc2VEYXRhPy52ZXJzZU9iamVjdHM/Lmxlbmd0aCA/IEpTT04uc3RyaW5naWZ5KHZlcnNlRGF0YS52ZXJzZU9iamVjdHMpIDogJydcbiAgcmV0dXJuIHtcbiAgICBjaGFwdGVyLFxuICAgIHZlcnNlLFxuICAgIHZlcnNlT2JqZWN0cyxcbiAgfVxufVxuXG4vKipcbiAqIGNvbXBhcmUgdHdvIHZlcnNlIHJlZnMgdG8gc2VlIGlmIHRoZXkgYXJlIHN1YnN0YW50aWFsbHkgc2ltaWxhclxuICogQHBhcmFtIHZlcnNlc0ZvclJlZjFcbiAqIEBwYXJhbSB2ZXJzZXNGb3JSZWYyXG4gKi9cbmZ1bmN0aW9uIGFyZVZlcnNlc1NhbWUodmVyc2VzRm9yUmVmMTogYW55W10sIHZlcnNlc0ZvclJlZjI6IGFueVtdKSB7XG4gIHZlcnNlc0ZvclJlZjEgPSB2ZXJzZXNGb3JSZWYxIHx8IFtdXG4gIHZlcnNlc0ZvclJlZjIgPSB2ZXJzZXNGb3JSZWYyIHx8IFtdXG4gIGxldCBhcmVTYW1lID0gZmFsc2VcblxuICBpZiAodmVyc2VzRm9yUmVmMS5sZW5ndGggPT09IHZlcnNlc0ZvclJlZjIubGVuZ3RoKSB7XG4gICAgYXJlU2FtZSA9IHRydWVcblxuICAgIGZvciAobGV0IGkgPSAwLCBsPSB2ZXJzZXNGb3JSZWYxLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgY29uc3QgdmVyc2UxID0gY29tcGFyZU9iamVjdCh2ZXJzZXNGb3JSZWYxW2ldKVxuICAgICAgY29uc3QgdmVyc2UyID0gY29tcGFyZU9iamVjdCh2ZXJzZXNGb3JSZWYyW2ldKVxuICAgICAgYXJlU2FtZSA9IGlzRXF1YWwodmVyc2UxLCB2ZXJzZTIpXG5cbiAgICAgIGlmICghYXJlU2FtZSkge1xuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBhcmVTYW1lXG59XG5cbi8qKlxuICogZ2V0IHRoZSBVU0ZNIGZvciBib29rSWQgZnJvbSBzY3JpcHR1cmVDb25maWcuXG4gKiBAcGFyYW0ge29iamVjdH0gc2NyaXB0dXJlQ29uZmlnXG4gKiBAcGFyYW0ge3N0cmluZ30gYm9va0lkXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRDdXJyZW50Qm9vayA9IChzY3JpcHR1cmVDb25maWcsIGJvb2tJZCkgPT4ge1xuICBjb25zdCBsYXRlc3RCaWJsZSA9IHNjcmlwdHVyZUNvbmZpZz8ucmVzb3VyY2VTdGF0ZT8ucmVzb3VyY2U/LnByb2plY3RJZFxuICBjb25zdCBmaWxlbmFtZSA9IHNjcmlwdHVyZUNvbmZpZz8ucmVzb3VyY2VTdGF0ZT8ucmVzb3VyY2U/Lm5hbWUgLy8gTGlrZSBcIjU3LVRJVC51c2ZtXCJcbiAgbGV0IGlzQm9va1ZhbGlkID0gZmFsc2VcbiAgY29uc3QgYm9va05hbWUgPSBnZXRCb29rTmFtZUZyb21Vc2ZtRmlsZU5hbWUoZmlsZW5hbWUpXG4gIGlzQm9va1ZhbGlkID0gYm9va05hbWU/LnRvTG93ZXJDYXNlKCk/LmluY2x1ZGVzKGJvb2tJZClcbiAgaWYgKCFpc0Jvb2tWYWxpZCkge1xuICAgIGNvbnNvbGUud2FybihgQ3VycmVudCBib29rSWQgaXMgJHtib29rSWR9IGFuZCBVU0ZNIGZpbGUgaXMgJHtmaWxlbmFtZX1gKVxuICB9XG4gIGlmIChsYXRlc3RCaWJsZT8udG9Mb3dlckNhc2UoKSAhPT0gYm9va0lkKSB7XG4gICAgY29uc29sZS53YXJuKGBDdXJyZW50IGJvb2tJZCBpcyAke2Jvb2tJZH0gYnV0IGZldGNoZWQgcHJvamVjdElkIGlzICR7bGF0ZXN0QmlibGV9YClcbiAgICBpc0Jvb2tWYWxpZCA9IGZhbHNlXG4gIH1cbiAgaWYgKGlzQm9va1ZhbGlkKSB7XG4gICAgY29uc3QgYmlibGVVc2ZtID0gc2NyaXB0dXJlQ29uZmlnPy5iaWJsZVVzZm07XG4gICAgaWYgKGJpYmxlVXNmbSkge1xuICAgICAgcmV0dXJuIGJpYmxlVXNmbVxuICAgIH1cbiAgICBjb25zb2xlLmVycm9yKGBnZXRDdXJyZW50Qm9vaygpIC0gQmlibGUgVVNGTSBtaXNzaW5nYClcbiAgfVxuICBjb25zb2xlLmVycm9yKGBnZXRDdXJyZW50Qm9vaygpIC0gRXhwZWN0ZWQgJHtib29rSWR9IGJ1dCBnb3QgZmlsZSAke2ZpbGVuYW1lfWApXG4gIHJldHVybiBudWxsXG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFNjcmlwdHVyZUNhcmQoe1xuICBhcHBSZWYsXG4gIGF1dGhlbnRpY2F0aW9uLFxuICBib29rSW5kZXgsXG4gIGNhcmROdW0sXG4gIGNsYXNzZXMsXG4gIGRpc2FibGVXb3JkUG9wb3ZlcixcbiAgZ2V0TGFuZ3VhZ2UsXG4gIGdldExleGljb25EYXRhLFxuICBncmVla1JlcG9VcmwsXG4gIGhlYnJld1JlcG9VcmwsXG4gIGh0dHBDb25maWcsXG4gIGlkLFxuICBpc05ULFxuICBsb2dnZWRJblVzZXIsXG4gIG9uTWluaW1pemUsXG4gIG9uUmVzb3VyY2VFcnJvcixcbiAgb3JpZ2luYWxTY3JpcHR1cmVCb29rT2JqZWN0cyxcbiAgcmVmZXJlbmNlLFxuICByZXNvdXJjZToge1xuICAgIG93bmVyLFxuICAgIGxhbmd1YWdlSWQsXG4gICAgcmVzb3VyY2VJZCxcbiAgICBvcmlnaW5hbExhbmd1YWdlT3duZXIsXG4gIH0sXG4gIHJlc291cmNlTGluayxcbiAgc2VsZWN0ZWRRdW90ZSxcbiAgc2VydmVyLFxuICBzZXRDYXJkc0xvYWRpbmdNZXJnZSxcbiAgc2V0Q2FyZHNMb2FkaW5nVXBkYXRlLFxuICBzZXRDYXJkc1NhdmluZyxcbiAgc2V0U2F2ZWRDaGFuZ2VzLFxuICBzZXRXb3JkQWxpZ25lclN0YXR1cyxcbiAgdHJhbnNsYXRlLFxuICB0aXRsZSxcbiAgdXNlVXNlckxvY2FsU3RvcmFnZSxcbiAgdXBkYXRlTWVyZ2VTdGF0ZSxcbn0pIHtcbiAgY29uc3QgYm9va0lkID0gcmVmZXJlbmNlPy5wcm9qZWN0SWRcbiAgY29uc3QgW3N0YXRlLCBzZXRTdGF0ZV9dID0gUmVhY3QudXNlU3RhdGUoe1xuICAgIGNoZWNrRm9yRWRpdEJyYW5jaDogMCxcbiAgICBjdXJyZW50UmVmZXJlbmNlOiBudWxsLFxuICAgIGVkaXRCcmFuY2hSZWFkeTogZmFsc2UsXG4gICAgaGF2ZVVuc2F2ZWRDaGFuZ2VzOiBmYWxzZSxcbiAgICBsYXN0U2VsZWN0ZWRRdW90ZTogbnVsbCxcbiAgICByZWFkeUZvckZldGNoOiBmYWxzZSxcbiAgICByZWY6IGFwcFJlZixcbiAgICBzYXZlQ2xpY2tlZDogZmFsc2UsXG4gICAgc2F2ZUNvbnRlbnQ6IG51bGwsXG4gICAgc2F2ZURpZmZQYXRjaDogZmFsc2UsXG4gICAgc2VsZWN0aW9uczogbmV3IE1hcCgpLFxuICAgIHNob3dBbGlnbm1lbnRQb3B1cDogZmFsc2UsXG4gICAgc3RhcnRTYXZlOiBmYWxzZSxcbiAgICB1cmxFcnJvcjogbnVsbCxcbiAgICB1c2luZ1VzZXJCcmFuY2g6IGZhbHNlLFxuICAgIHVuc2F2ZWRDaGFuZ2VzTGlzdDoge30sXG4gICAgdmVyc2VzQWxpZ25tZW50U3RhdHVzOiBudWxsLFxuICAgIHZlcnNlc0ZvclJlZjogbnVsbCxcbiAgICB2ZXJzZU9iamVjdHNNYXA6IG5ldyBNYXAoKSxcbiAgICB2ZXJzZVNlbGVjdGVkRm9yQWxpZ25tZW50OiBudWxsLFxuICB9KVxuICBjb25zdCB7XG4gICAgY2hlY2tGb3JFZGl0QnJhbmNoLFxuICAgIGN1cnJlbnRSZWZlcmVuY2UsXG4gICAgZWRpdEJyYW5jaFJlYWR5LFxuICAgIGhhdmVVbnNhdmVkQ2hhbmdlcyxcbiAgICBsYXN0U2VsZWN0ZWRRdW90ZSxcbiAgICByZWFkeUZvckZldGNoLFxuICAgIHJlZixcbiAgICBzYXZlQ2xpY2tlZCxcbiAgICBzYXZlQ29udGVudCxcbiAgICBzYXZlRGlmZlBhdGNoLFxuICAgIHNlbGVjdGlvbnMsXG4gICAgc2hvd0FsaWdubWVudFBvcHVwLFxuICAgIHN0YXJ0U2F2ZSxcbiAgICB1cmxFcnJvcixcbiAgICB1c2luZ1VzZXJCcmFuY2gsXG4gICAgdW5zYXZlZENoYW5nZXNMaXN0LFxuICAgIHZlcnNlT2JqZWN0c01hcCxcbiAgICB2ZXJzZVNlbGVjdGVkRm9yQWxpZ25tZW50LFxuICAgIHZlcnNlc0FsaWdubWVudFN0YXR1cyxcbiAgICB2ZXJzZXNGb3JSZWYsXG4gIH0gPSBzdGF0ZVxuXG4gIGNvbnN0IFtmb250U2l6ZSwgc2V0Rm9udFNpemVdID0gdXNlVXNlckxvY2FsU3RvcmFnZShLRVlfRk9OVF9TSVpFX0JBU0UgKyBjYXJkTnVtLCAxMDApXG4gIGNvbnN0IGlzTlRfID0gaXNOVChib29rSWQpXG5cbiAgZnVuY3Rpb24gc2V0U3RhdGUobmV3U3RhdGUpIHtcbiAgICBzZXRTdGF0ZV8ocHJldlN0YXRlID0+ICh7IC4uLnByZXZTdGF0ZSwgLi4ubmV3U3RhdGUgfSkpXG4gIH1cblxuICBodHRwQ29uZmlnID0ge1xuICAgIC4uLmh0dHBDb25maWcsXG4gICAgY2FjaGU6IHsgbWF4QWdlOiAwIH0sXG4gICAgbm9DYWNoZTogdHJ1ZSxcbiAgfSAvLyBkaXNhYmxlIGh0dHAgY2FjaGluZ1xuXG4gIGNvbnN0IHtcbiAgICBpc05ld1Rlc3RhbWVudCxcbiAgICBzY3JpcHR1cmVDb25maWcsXG4gICAgc2V0U2NyaXB0dXJlLFxuICAgIHNjcmlwdHVyZVNldHRpbmdzLFxuICAgIHNjcmlwdHVyZVZlcnNpb25IaXN0LFxuICB9ID0gdXNlU2NyaXB0dXJlU2V0dGluZ3Moe1xuICAgIGFwcFJlZjogcmVmLFxuICAgIGNhcmROdW0sXG4gICAgZGlzYWJsZVdvcmRQb3BvdmVyLFxuICAgIGdyZWVrUmVwb1VybCxcbiAgICBoZWJyZXdSZXBvVXJsLFxuICAgIGh0dHBDb25maWcsXG4gICAgaXNOVCxcbiAgICBsYW5ndWFnZUlkLFxuICAgIG9yaWdpbmFsTGFuZ3VhZ2VPd25lcixcbiAgICBvd25lcixcbiAgICByZWFkeUZvckZldGNoLFxuICAgIHJlZmVyZW5jZTogY3VycmVudFJlZmVyZW5jZSB8fCByZWZlcmVuY2UsXG4gICAgcmVzb3VyY2VJZCxcbiAgICByZXNvdXJjZUxpbmssXG4gICAgc2V0VXJsRXJyb3I6IChlcnJvcikgPT4gc2V0U3RhdGUoeyB1cmxFcnJvcjogZXJyb3IgfSksXG4gICAgc2VydmVyLFxuICAgIHRpdGxlLFxuICAgIHVzZVVzZXJMb2NhbFN0b3JhZ2UsXG4gICAgd2hvbGVCb29rOiB0cnVlLFxuICB9KVxuXG4gIGNvbnN0IGZldGNoZWRSZXNvdXJjZSA9IHNjcmlwdHVyZUNvbmZpZz8ucmVzb3VyY2VTdGF0ZVxuICAvLyBAdHMtaWdub3JlXG4gIGNvbnN0IHJlcG8gPSBgJHtzY3JpcHR1cmVDb25maWc/LnJlc291cmNlPy5sYW5ndWFnZUlkfV8ke3NjcmlwdHVyZUNvbmZpZz8ucmVzb3VyY2U/LnByb2plY3RJZH1gXG4gIGNvbnN0IHJlZmVyZW5jZV8gPSBzY3JpcHR1cmVDb25maWc/LnJlZmVyZW5jZSB8fCBudWxsXG5cbiAgLy8gQHRzLWlnbm9yZVxuICBjb25zdCBjYXJkUmVzb3VyY2VJZCA9IHNjcmlwdHVyZUNvbmZpZz8ucmVzb3VyY2U/LnByb2plY3RJZCB8fCByZXNvdXJjZUlkXG4gIC8vIEB0cy1pZ25vcmVcbiAgbGV0IHJlZl8gPSBzY3JpcHR1cmVDb25maWc/LnJlc291cmNlPy5yZWYgfHwgYXBwUmVmXG4gIGNvbnN0IGNhblVzZUVkaXRCcmFuY2ggPSAhIShsb2dnZWRJblVzZXIgJiYgYXV0aGVudGljYXRpb24gJiYgKHJlc291cmNlSWQgIT09IE9SSUdJTkFMX1NPVVJDRSkgJiYgLy8gVFJJQ0tZIGlmIG5vdCBvcmlnaW5hbCBsYW5ndWFnZSBhbmQgd2UgaGF2ZSBsb2dpbiBkYXRhLCB0aGVuIHdlIGNhbiB1c2UgdGhlIGVkaXQgYnJhbmNoXG4gICAgKChyZWZfID09PSAnbWFzdGVyJykgfHwgKHJlZl8uaW5jbHVkZXMobG9nZ2VkSW5Vc2VyKSkpKSAvLyBhbHNvIG1ha2Ugc3VyZSBub3QgYSB2ZXJzaW9uIHRhZ1xuXG4gIGNvbnN0IHtcbiAgICBzdGF0ZToge1xuICAgICAgYnJhbmNoRGV0ZXJtaW5lZCxcbiAgICAgIHVzZXJFZGl0QnJhbmNoTmFtZSxcbiAgICAgIHVzaW5nVXNlckJyYW5jaDogX3VzaW5nVXNlckJyYW5jaCxcbiAgICAgIHdvcmtpbmdSZXNvdXJjZUJyYW5jaCxcbiAgICB9LFxuICAgIGFjdGlvbnM6IHtcbiAgICAgIHN0YXJ0RWRpdDogc3RhcnRFZGl0QnJhbmNoLFxuICAgICAgZmluaXNoRWRpdCxcbiAgICB9LFxuICB9ID0gdXNlVXNlckJyYW5jaCh7XG4gICAgYXBwUmVmLFxuICAgIGF1dGhlbnRpY2F0aW9uOiBjYW5Vc2VFZGl0QnJhbmNoID8gYXV0aGVudGljYXRpb24gOiBudWxsLFxuICAgIGJvb2tJZCxcbiAgICBjYXJkSWQ6IGlkLFxuICAgIGNhcmRSZXNvdXJjZUlkLFxuICAgIGNoZWNrRm9yRWRpdEJyYW5jaCxcbiAgICBsYW5ndWFnZUlkLFxuICAgIGxvZ2dlZEluVXNlcjogY2FuVXNlRWRpdEJyYW5jaCA/IGxvZ2dlZEluVXNlciA6IG51bGwsXG4gICAgb3duZXIsXG4gICAgb25SZXNvdXJjZUVycm9yLFxuICAgIHNlcnZlcixcbiAgICB1c2VVc2VyTG9jYWxTdG9yYWdlLFxuICB9KVxuXG4gIGNvbnN0IF91c2VCcmFuY2hNZXJnZXIgPSB1c2VCcmFuY2hNZXJnZXIoeyBzZXJ2ZXIsIG93bmVyLCByZXBvLCB1c2VyQnJhbmNoOiB1c2VyRWRpdEJyYW5jaE5hbWUsIHRva2VuaWQ6IGF1dGhlbnRpY2F0aW9uPy50b2tlbj8uc2hhMSB9KVxuICBjb25zdCB7XG4gICAgc3RhdGU6IHtcbiAgICAgIG1lcmdlU3RhdHVzOiBtZXJnZVRvTWFzdGVyLFxuICAgICAgdXBkYXRlU3RhdHVzOiBtZXJnZUZyb21NYXN0ZXIsXG4gICAgfSxcbiAgfSA9IF91c2VCcmFuY2hNZXJnZXJcblxuICBjb25zdCB1cGRhdGVCdXR0b25Qcm9wcyA9IHVzZUNvbnRlbnRVcGRhdGVQcm9wcyh7XG4gICAgaXNTYXZpbmc6IHN0YXJ0U2F2ZSxcbiAgICB1c2VCcmFuY2hNZXJnZXI6IF91c2VCcmFuY2hNZXJnZXIsXG4gICAgb25VcGRhdGU6ICgpID0+IHtcbiAgICAgIGRlbGF5KDUwMCkudGhlbigoKSA9PiBzY3JpcHR1cmVDb25maWc/LnJlbG9hZFJlc291cmNlKCkpXG4gICAgfSxcbiAgfSlcblxuICBjb25zdCB7XG4gICAgY2FsbFVwZGF0ZVVzZXJCcmFuY2gsXG4gICAgaXNFcnJvckRpYWxvZ09wZW4sXG4gICAgb25DbG9zZUVycm9yRGlhbG9nLFxuICAgIGlzTG9hZGluZzogaXNVcGRhdGVMb2FkaW5nLFxuICAgIGRpYWxvZ01lc3NhZ2UsXG4gICAgZGlhbG9nVGl0bGUsXG4gICAgZGlhbG9nTGluayxcbiAgICBkaWFsb2dMaW5rVG9vbHRpcCxcbiAgfSA9IHVwZGF0ZUJ1dHRvblByb3BzXG5cbiAgY29uc3Qgb25NZXJnZSA9ICgpID0+IHtcbiAgICBmaW5pc2hFZGl0KClcbiAgICBjb25zb2xlLmxvZyhgb25NZXJnZSgpIHN3aXRjaGluZyBiYWNrIHRvIG1hc3RlciBhZnRlciBtZXJnZSBhcHBSZWY6YCwgYXBwUmVmKVxuICAgIHNldFN0YXRlKHtcbiAgICAgIHJlYWR5Rm9yRmV0Y2g6IGZhbHNlLFxuICAgICAgcmVmOiBhcHBSZWYsXG4gICAgfSlcbiAgICBkZWxheSg1MDApLnRoZW4oKCkgPT4ge1xuICAgICAgc2V0U3RhdGUoe1xuICAgICAgICBjaGVja0ZvckVkaXRCcmFuY2g6IGNoZWNrRm9yRWRpdEJyYW5jaCArIDEsIC8vIHRyaWdnZXIgcmVjaGVjayBvZiB1c2VyIGJyYW5jaCB3aGljaCB3aWxsIHN3aXRjaCB0aGUgYnJhbmNoIGJhY2sgdG8gbWFzdGVyXG4gICAgICAgIHJlYWR5Rm9yRmV0Y2g6IGZhbHNlLFxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgY29uc3QgeyBpc0xvYWRpbmc6IGlzTWVyZ2VMb2FkaW5nLCBjYWxsTWVyZ2VVc2VyQnJhbmNoIH0gPSB1c2VNYXN0ZXJNZXJnZVByb3BzKHtcbiAgICBpc1NhdmluZzogc3RhcnRTYXZlLFxuICAgIHVzZUJyYW5jaE1lcmdlcjogX3VzZUJyYW5jaE1lcmdlcixcbiAgICBvbk1lcmdlLFxuICB9KVxuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGNhcmRSZXNvdXJjZUlkKSB7XG4gICAgICB1cGRhdGVNZXJnZVN0YXRlICYmIHVwZGF0ZU1lcmdlU3RhdGUoXG4gICAgICAgIGNhcmRSZXNvdXJjZUlkLFxuICAgICAgICBtZXJnZUZyb21NYXN0ZXIsXG4gICAgICAgIG1lcmdlVG9NYXN0ZXIsXG4gICAgICAgIGNhbGxVcGRhdGVVc2VyQnJhbmNoLFxuICAgICAgICBjYWxsTWVyZ2VVc2VyQnJhbmNoLFxuICAgICAgKVxuICAgIH1cbiAgfSxbY2FyZFJlc291cmNlSWQsIG1lcmdlRnJvbU1hc3RlciwgbWVyZ2VUb01hc3Rlcl0pXG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaXNVcGRhdGVMb2FkaW5nKSB7XG4gICAgICBzZXRDYXJkc0xvYWRpbmdVcGRhdGU/LihwcmV2Q2FyZHNMb2FkaW5nID0+IFsuLi5wcmV2Q2FyZHNMb2FkaW5nLCBjYXJkUmVzb3VyY2VJZF0pXG4gICAgfSBlbHNlIHtcbiAgICAgIHNldENhcmRzTG9hZGluZ1VwZGF0ZT8uKHByZXZDYXJkc0xvYWRpbmcgPT4gcHJldkNhcmRzTG9hZGluZy5maWx0ZXIoY2FyZElkID0+IGNhcmRJZCAhPT0gY2FyZFJlc291cmNlSWQpKVxuICAgIH1cbiAgfSwgW2lzVXBkYXRlTG9hZGluZ10pXG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaXNNZXJnZUxvYWRpbmcpIHtcbiAgICAgIHNldENhcmRzTG9hZGluZ01lcmdlPy4ocHJldkNhcmRzTG9hZGluZyA9PiBbLi4ucHJldkNhcmRzTG9hZGluZywgY2FyZFJlc291cmNlSWRdKVxuICAgIH0gZWxzZSB7XG4gICAgICBzZXRDYXJkc0xvYWRpbmdNZXJnZT8uKHByZXZDYXJkc0xvYWRpbmcgPT4gcHJldkNhcmRzTG9hZGluZy5maWx0ZXIoY2FyZElkID0+IGNhcmRJZCAhPT0gY2FyZFJlc291cmNlSWQpKVxuICAgIH1cbiAgfSwgW2lzTWVyZ2VMb2FkaW5nXSlcblxuICBjb25zdCB3b3JraW5nUmVmID0gY2FuVXNlRWRpdEJyYW5jaCA/IHdvcmtpbmdSZXNvdXJjZUJyYW5jaCA6IGFwcFJlZlxuICBsZXQgc2NyaXB0dXJlVGl0bGVcblxuICBpZiAoIWNhblVzZUVkaXRCcmFuY2ggJiYgIXJlYWR5Rm9yRmV0Y2gpIHsgLy8gaWYgYmlibGUgbm90IGVsaWdpYmxlIGZvciB1c2VyIGJyYW5jaCwgbWFrZSBzdXJlIGl0J3MgcmVhZHlcbiAgICBzZXRTdGF0ZSh7IHJlYWR5Rm9yRmV0Y2g6IHRydWUgfSlcbiAgfVxuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc29sZS5sb2coYFNjcmlwdHVyZUNhcmQgYm9vayBjaGFuZ2VkYCwgeyBib29rSWQsIG93bmVyLCBsYW5ndWFnZUlkLCByZXNvdXJjZUlkIH0pXG5cbiAgICBpZiAoY2FuVXNlRWRpdEJyYW5jaCkgeyAvLyBpZiBiaWJsZSBlbGlnaWJsZSBmb3IgdXNlciBicmFuY2gsIHJlZnJlc2ggaXRcbiAgICAgIHNldFN0YXRlKHsgcmVhZHlGb3JGZXRjaDogZmFsc2UsIGNoZWNrRm9yRWRpdEJyYW5jaDogY2hlY2tGb3JFZGl0QnJhbmNoICsgMSB9KVxuICAgIH1cbiAgfSwgW2Jvb2tJZCwgb3duZXIsIGxhbmd1YWdlSWQsIHJlc291cmNlSWRdKVxuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFpc0VxdWFsKHJlZmVyZW5jZSwgY3VycmVudFJlZmVyZW5jZSkpIHtcbiAgICAgIC8vIGNvbnNvbGUubG9nKGBTY3JpcHR1cmVDYXJkIHJlZmVyZW5jZSBjaGFuZ2VkYCwgcmVmZXJlbmNlKVxuICAgICAgc2V0U3RhdGUoeyBjdXJyZW50UmVmZXJlbmNlOiByZWZlcmVuY2UgfSlcbiAgICB9XG4gIH0sIFtyZWZlcmVuY2VdKVxuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7IC8vIHdhaXRpbmcgZm9yIGJyYW5jaCBmZXRjaCB0byBjb21wbGV0ZVxuICAgIGlmICghcmVhZHlGb3JGZXRjaCAmJiBicmFuY2hEZXRlcm1pbmVkICkge1xuICAgICAgY29uc29sZS5sb2coYFNjcmlwdHVyZUNhcmQgYnJhbmNoRGV0ZXJtaW5lZCBpcyAke2JyYW5jaERldGVybWluZWR9IGFuZCB3b3JraW5nUmVmIGlzICR7d29ya2luZ1JlZn1gKVxuICAgICAgc2V0U3RhdGUoeyByZWFkeUZvckZldGNoOiB0cnVlLCByZWY6IHdvcmtpbmdSZWYgfSlcbiAgICB9XG4gIH0sIFticmFuY2hEZXRlcm1pbmVkXSlcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4geyAvLyBzZWxlY3QgY29ycmVjdCB3b3JraW5nIHJlZiAtIGNvdWxkIGJlIG1hc3RlciwgdXNlciBicmFuY2gsIG9yIHJlbGVhc2VcbiAgICBpZiAoX3VzaW5nVXNlckJyYW5jaCAhPT0gdXNpbmdVc2VyQnJhbmNoKSB7XG4gICAgICBzZXRTdGF0ZSh7IHVzaW5nVXNlckJyYW5jaDogX3VzaW5nVXNlckJyYW5jaCB9KVxuICAgIH1cbiAgfSwgW191c2luZ1VzZXJCcmFuY2gsIHVzaW5nVXNlckJyYW5jaF0pXG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHsgLy8gdXBkYXRlIGRpc3BsYXkgc3RhdHVzIGlmIGVycm9yXG4gICAgY29uc3QgZXJyb3IgPSBzY3JpcHR1cmVDb25maWc/LnJlc291cmNlU3RhdHVzPy5bRVJST1JfU1RBVEVdXG5cbiAgICBpZiAoZXJyb3IpIHsgLy8gaWYgZXJyb3Igd2FzIGZvdW5kIGRvIGNhbGxiYWNrXG4gICAgICBjb25zdCByZXNvdXJjZVN0YXR1cyA9IHNjcmlwdHVyZUNvbmZpZz8ucmVzb3VyY2VTdGF0dXNcbiAgICAgIGNvbnN0IHJlc291cmNlTGluayA9IGdldFJlc291cmNlTGluayhzY3JpcHR1cmVDb25maWcpXG4gICAgICBjb25zdCBtZXNzYWdlID0gZ2V0UmVzb3VyY2VNZXNzYWdlKHJlc291cmNlU3RhdHVzLCBzZXJ2ZXIsIHJlc291cmNlTGluaywgaXNOVF8pXG4gICAgICBjb25zdCBpc0FjY2Vzc0Vycm9yID0gcmVzb3VyY2VTdGF0dXNbTUFOSUZFU1RfTk9UX0xPQURFRF9FUlJPUl1cbiAgICAgIG9uUmVzb3VyY2VFcnJvciAmJiBvblJlc291cmNlRXJyb3IobWVzc2FnZSwgaXNBY2Nlc3NFcnJvciwgcmVzb3VyY2VTdGF0dXMpXG4gICAgfVxuICB9LCBbc2NyaXB0dXJlQ29uZmlnPy5yZXNvdXJjZVN0YXR1cz8uW0VSUk9SX1NUQVRFXV0pXG5cbiAgaWYgKHNjcmlwdHVyZUNvbmZpZy50aXRsZSAmJiBzY3JpcHR1cmVDb25maWcudmVyc2lvbikge1xuICAgIHNjcmlwdHVyZVRpdGxlID0gYCR7c2NyaXB0dXJlQ29uZmlnLnRpdGxlfSB2JHtzY3JpcHR1cmVDb25maWcudmVyc2lvbn1gXG4gICAgc2NyaXB0dXJlVmVyc2lvbkhpc3QudXBkYXRlVGl0bGUoc2NyaXB0dXJlQ29uZmlnLnJlc291cmNlTGluaywgc2NyaXB0dXJlVGl0bGUpXG4gIH0gZWxzZSB7XG4gICAgc2NyaXB0dXJlVGl0bGUgPSBgVGl0bGUgbWlzc2luZyBmcm9tIHByb2plY3QgbWFuaWZlc3RgXG4gIH1cblxuICAvKiogRHluYW1pY2FsbHkgY3JlYXRlcyB0aGUgc2NyaXB0dXJlIHNlbGVjdGlvbiBkcm9wZG93biB0byBiZSBpbnNlcnRlZCBpbnRvIGNhcmQgc2V0dGluZ3MgKi9cbiAgZnVuY3Rpb24gZ2V0U2NyaXB0dXJlU2VsZWN0b3IoKSB7XG4gICAgY29uc3Qgc2NyaXB0dXJlU2VsZWN0aW9uQ29uZmlnID0gZ2V0U2NyaXB0dXJlVmVyc2lvblNldHRpbmdzKHtcbiAgICAgIGxhYmVsLFxuICAgICAgcmVzb3VyY2VMaW5rOiBzY3JpcHR1cmVDb25maWcucmVzb3VyY2VMaW5rLFxuICAgICAgc2V0U2NyaXB0dXJlLFxuICAgICAgc2NyaXB0dXJlVmVyc2lvbkhpc3QsXG4gICAgfSlcblxuICAgIHJldHVybiA8U2NyaXB0dXJlU2VsZWN0b3Igey4uLnNjcmlwdHVyZVNlbGVjdGlvbkNvbmZpZ30gc3R5bGU9e3N0eWxlfSBlcnJvck1lc3NhZ2U9e3VybEVycm9yfSAvPlxuICB9XG5cbiAgZnVuY3Rpb24gb25NZW51Q2xvc2UoKSB7XG4gICAgLy8gY29uc29sZS5sb2coYG9uTWVudUNsb3NlKClgKVxuICAgIHNldFN0YXRlKHsgdXJsRXJyb3I6IG51bGwgfSlcbiAgfVxuXG4gIC8vIEB0cy1pZ25vcmVcbiAgY29uc3QgbGFuZ3VhZ2VJZF8gPSBzY3JpcHR1cmVDb25maWc/LnJlc291cmNlPy5sYW5ndWFnZUlkXG4gIGNvbnN0IGxhbmd1YWdlID0gZ2V0TGFuZ3VhZ2UoeyBsYW5ndWFnZUlkOiBsYW5ndWFnZUlkXyB9KVxuICBjb25zdCBkaXJlY3Rpb24gPSAobGFuZ3VhZ2U/LmRpcmVjdGlvbikgfHwgJ2x0cidcbiAgY29uc3QgX3JlZmVyZW5jZSA9IGN1cnJlbnRSZWZlcmVuY2UgfHwgcmVmZXJlbmNlXG5cbiAgY29uc3QgaXNIZWJyZXcgPSAobGFuZ3VhZ2VJZF8gPT09ICdoYm8nKVxuICBjb25zdCBmb250RmFjdG9yID0gaXNIZWJyZXcgPyAxLjQgOiAxIC8vIHdlIGF1dG9tYXRpY2FsbHkgc2NhbGUgdXAgZm9udCBzaXplIGZvciBIZWJyZXdcbiAgY29uc3Qgc2NhbGVkRm9udFNpemUgPSBmb250U2l6ZSAqIGZvbnRGYWN0b3JcblxuICBjb25zdCBpdGVtcyA9IG51bGxcbiAgY29uc3Qge1xuICAgIHN0YXRlOiB7XG4gICAgICBoZWFkZXJzLCBmaWx0ZXJzLCBpdGVtSW5kZXgsIG1hcmtkb3duVmlldyxcbiAgICB9LFxuICAgIGFjdGlvbnM6IHtcbiAgICAgIHNldEZpbHRlcnMsIHNldEl0ZW1JbmRleCwgc2V0TWFya2Rvd25WaWV3LFxuICAgIH0sXG4gIH0gPSB1c2VDYXJkU3RhdGUoeyBpdGVtcyB9KVxuXG4gIGNvbnN0IHJlZlN0eWxlID0gUmVhY3QudXNlTWVtbygoKSA9PiAoe1xuICAgIGZvbnRGYW1pbHk6ICdOb3RvIFNhbnMnLFxuICAgIGZvbnRTaXplOiBgJHtNYXRoLnJvdW5kKHNjYWxlZEZvbnRTaXplICogMC45KX0lYCxcbiAgfSksIFtzY2FsZWRGb250U2l6ZV0pXG5cbiAgY29uc3QgY29udGVudFN0eWxlID0gUmVhY3QudXNlTWVtbygoKSA9PiAoe1xuICAgIGZvbnRGYW1pbHk6ICdOb3RvIFNhbnMnLFxuICAgIGZvbnRTaXplOiBgJHtzY2FsZWRGb250U2l6ZX0lYCxcbiAgfSksIFtzY2FsZWRGb250U2l6ZV0pXG5cbiAgY29uc3Qgc2NyaXB0dXJlTGFiZWwgPSA8VGl0bGU+e3NjcmlwdHVyZVRpdGxlfTwvVGl0bGU+XG4gIGxldCBkaXNhYmxlV29yZFBvcG92ZXJfID0gZGlzYWJsZVdvcmRQb3BvdmVyXG4gIGNvbnN0IHVzaW5nT3JpZ2luYWxCaWJsZSA9IGlzT3JpZ2luYWxCaWJsZShzY3JpcHR1cmVDb25maWdbJ3Jlc291cmNlJ10/LnByb2plY3RJZClcblxuICBpZiAoZGlzYWJsZVdvcmRQb3BvdmVyID09PSB1bmRlZmluZWQpIHsgLy8gaWYgbm90IHNwZWNpZmllZCwgdGhlbiBkZXRlcm1pbmUgaWYgb3JpZ2luYWwgbGFuZ3VhZ2UgcmVzb3VyY2VcbiAgICBkaXNhYmxlV29yZFBvcG92ZXJfID0gIXVzaW5nT3JpZ2luYWxCaWJsZVxuICB9XG5cbiAgY29uc3QgZW5hYmxlRWRpdCA9ICF1c2luZ09yaWdpbmFsQmlibGVcbiAgY29uc3QgZW5hYmxlQWxpZ25tZW50ID0gIXVzaW5nT3JpZ2luYWxCaWJsZVxuICBjb25zdCBvcmlnaW5hbFJlcG9VcmwgPSBpc05ld1Rlc3RhbWVudCA/IGdyZWVrUmVwb1VybCA6IGhlYnJld1JlcG9VcmxcbiAgY29uc3Qgc2NyaXB0dXJlQWxpZ25tZW50RWRpdENvbmZpZyA9IHtcbiAgICBhdXRoZW50aWNhdGlvbjogY2FuVXNlRWRpdEJyYW5jaCA/IGF1dGhlbnRpY2F0aW9uIDogbnVsbCxcbiAgICBib29rSW5kZXgsXG4gICAgY3VycmVudFZlcnNlUmVmOiBfcmVmZXJlbmNlLFxuICAgIGVuYWJsZUVkaXQsXG4gICAgZW5hYmxlQWxpZ25tZW50LFxuICAgIGh0dHBDb25maWcsXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGlzTmV3VGVzdGFtZW50LFxuICAgIGxvZ2dlZEluVXNlcjogY2FuVXNlRWRpdEJyYW5jaCA/IGxvZ2dlZEluVXNlciA6IG51bGwsXG4gICAgb3JpZ2luYWxMYW5ndWFnZU93bmVyLFxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBvcmlnaW5hbFJlcG9VcmwsXG4gICAgc2NyaXB0dXJlQ29uZmlnLFxuICAgIHNjcmlwdHVyZVNldHRpbmdzLFxuICAgIHN0YXJ0RWRpdEJyYW5jaCxcbiAgICBzZXRTYXZlZENoYW5nZXM6IF9zZXRTYXZlZENoYW5nZXMsXG4gICAgc291cmNlTGFuZ3VhZ2U6IGlzTlRfID8gTlRfT1JJR19MQU5HIDogT1RfT1JJR19MQU5HLFxuICAgIHRhcmdldExhbmd1YWdlOiBsYW5ndWFnZSxcbiAgICB0aXRsZTogc2NyaXB0dXJlVGl0bGUsXG4gICAgd29ya2luZ1Jlc291cmNlQnJhbmNoOiByZWYsXG4gIH1cblxuICAvKipcbiAgICogdGhpcyBnZXRzIGNhbGxlZCB3aGVuZXZlciBhIHNjcmlwdHVyZSBwYW5lIGhhcyBhIGNoYW5nZSBpbiBzYXZlIHN0YXRlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBjdXJyZW50SW5kZXhcbiAgICogQHBhcmFtIHtib29sZWFufSBzYXZlZFxuICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBnZXRDaGFuZ2VzIC0gd2lsbCBiZSBjYWxsZWQgd2hlbmV2ZXIgdXNlciBjbGlja3Mgc2F2ZSBidXR0b25cbiAgICogQHBhcmFtIHtmdW5jdGlvbn0gY2xlYXJDaGFuZ2VzIC0gd2lsbCBiZSBjYWxsZWQgd2hlbmV2ZXIgc2F2ZSBoYXMgY29tcGxldGVkXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBzdGF0ZSAtIGN1cnJlbnQgc3RhdGUgb2Ygd29yZCBhbGlnbm1lbnQvZWRpdFxuICAgKi9cbiAgZnVuY3Rpb24gX3NldFNhdmVkQ2hhbmdlcyhjdXJyZW50SW5kZXgsIHNhdmVkLCB7IGdldENoYW5nZXMgPSBudWxsLCBjbGVhckNoYW5nZXMgPSBudWxsLCBzdGF0ZSA9IG51bGwgfSkge1xuICAgIGNvbnN0IF91bnNhdmVkQ2hhbmdlc0xpc3QgPSB7IC4uLnVuc2F2ZWRDaGFuZ2VzTGlzdCB9XG5cbiAgICBpZiAoc2F2ZWQpIHtcbiAgICAgIGlmIChfdW5zYXZlZENoYW5nZXNMaXN0Lmhhc093blByb3BlcnR5KGN1cnJlbnRJbmRleCkpIHtcbiAgICAgICAgZGVsZXRlIF91bnNhdmVkQ2hhbmdlc0xpc3RbY3VycmVudEluZGV4XVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBfdW5zYXZlZENoYW5nZXNMaXN0W2N1cnJlbnRJbmRleF0gPSB7IGdldENoYW5nZXMsIGNsZWFyQ2hhbmdlcywgc3RhdGUgfSAvLyB1cGRhdGUgd2l0aCBsYXRlc3RcbiAgICB9XG5cbiAgICBjb25zdCBfaGF2ZVVuc2F2ZWRDaGFuZ2VzID0gISFPYmplY3Qua2V5cyhfdW5zYXZlZENoYW5nZXNMaXN0KS5sZW5ndGhcblxuICAgIGlmIChoYXZlVW5zYXZlZENoYW5nZXMgIT0gX2hhdmVVbnNhdmVkQ2hhbmdlcykge1xuICAgICAgc2V0U2F2ZWRDaGFuZ2VzICYmIHNldFNhdmVkQ2hhbmdlcyhyZXNvdXJjZUlkLCAhX2hhdmVVbnNhdmVkQ2hhbmdlcylcbiAgICAgIHNldFN0YXRlKHsgaGF2ZVVuc2F2ZWRDaGFuZ2VzOiBfaGF2ZVVuc2F2ZWRDaGFuZ2VzIH0pXG4gICAgfVxuXG4gICAgaWYgKCFpc0VxdWFsKF91bnNhdmVkQ2hhbmdlc0xpc3QsIHVuc2F2ZWRDaGFuZ2VzTGlzdCkpIHtcbiAgICAgIHNldFN0YXRlKHsgdW5zYXZlZENoYW5nZXNMaXN0OiBfdW5zYXZlZENoYW5nZXNMaXN0IH0pXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIHNlYXJjaCBjaGFwdGVyIG9yIHZlcnNlIGNodW5rIHRvIGxpbmUgdGhhdCBzdGFydHMgd2l0aCBmaW5kSXRlbVxuICAgKiBAcGFyYW0ge251bWJlcnxzdHJpbmd9IGZpbmRJdGVtXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IGNodW5rc1xuICAgKi9cbiAgZnVuY3Rpb24gZmluZFJlZkluQXJyYXkoZmluZEl0ZW0sIGNodW5rcykge1xuICAgIGNvbnN0IHJlZl8gPSBmaW5kSXRlbSArICcnXG4gICAgY29uc3QgcmVmTGVuID0gcmVmXy5sZW5ndGhcbiAgICBjb25zdCBpbmRleCA9IGNodW5rcy5maW5kSW5kZXgoKGNodW5rLCBpZHgpID0+IHtcbiAgICAgIGlmIChpZHggPiAwKSB7XG4gICAgICAgIGlmIChjaHVuay5zdWJzdHJpbmcoMCwgcmVmTGVuKSA9PT0gcmVmXykge1xuICAgICAgICAgIGNvbnN0IG5leHRDaGFyID0gY2h1bmtbcmVmTGVuXVxuXG4gICAgICAgICAgaWYgKChuZXh0Q2hhciA+ICc5JykgfHwgKG5leHRDaGFyIDwgJzAnKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0pXG4gICAgcmV0dXJuIGluZGV4XG4gIH1cblxuICBmdW5jdGlvbiBnZXRCb29rTmFtZSgpIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgY29uc3QgYm9va0NhcHMgPSBzY3JpcHR1cmVDb25maWc/LnJlZmVyZW5jZT8ucHJvamVjdElkID8gc2NyaXB0dXJlQ29uZmlnLnJlZmVyZW5jZS5wcm9qZWN0SWQudG9VcHBlckNhc2UoKSA6ICcnXG4gICAgcmV0dXJuIGAke2Jvb2tJbmRleH0tJHtib29rQ2Fwc30udXNmbWBcbiAgfVxuXG4gIGNvbnN0IGZpbGVwYXRoID0gZ2V0Qm9va05hbWUoKVxuICBjb25zdCBzaGEgPSBmZXRjaGVkUmVzb3VyY2U/LnNoYVxuXG4gIC8vIGtlZXAgdHJhY2sgb2YgdmVyc2UgZWRpdCBzdGF0ZVxuICBjb25zdCB7XG4gICAgZXJyb3I6IHNhdmVFcnJvcixcbiAgICBpc0Vycm9yOiBpc1NhdmVFcnJvcixcbiAgICBvblNhdmVFZGl0LFxuICAgIG9uU2F2ZUVkaXRQYXRjaCxcbiAgfSA9IHVzZUVkaXQoe1xuICAgIHNoYSxcbiAgICBvd25lcixcbiAgICBjb250ZW50OiBzYXZlQ29udGVudCxcbiAgICBjb25maWc6IHtcbiAgICAgIGNhY2hlOiB7IG1heEFnZTogMCB9LFxuICAgICAgLi4uYXV0aGVudGljYXRpb24/LmNvbmZpZyxcbiAgICAgIGRvbnRDcmVhdGVCcmFuY2g6IHRydWUsXG4gICAgICB0b2tlbjogYXV0aGVudGljYXRpb24/LnRva2VuLFxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgdGltZW91dDogaHR0cENvbmZpZz8uc2VydmVyVGltZU91dCB8fCBodHRwQ29uZmlnPy50aW1lb3V0IHx8IDEwMDAwLFxuICAgICAgc2VydmVyLFxuICAgIH0sXG4gICAgYXV0aG9yOiBsb2dnZWRJblVzZXIsXG4gICAgZW1haWw6IGF1dGhlbnRpY2F0aW9uPy51c2VyPy5lbWFpbCxcbiAgICB0b2tlbjogYXV0aGVudGljYXRpb24/LnRva2VuLFxuICAgIGJyYW5jaDogd29ya2luZ1Jlc291cmNlQnJhbmNoLFxuICAgIGZpbGVwYXRoLFxuICAgIHJlcG8sXG4gIH0pXG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHsgLy8gd2hlbiB3ZSBnZXQgYSBzYXZlIHNhdmVFcnJvclxuICAgIGlmIChzYXZlRXJyb3IgJiYgaXNTYXZlRXJyb3IpIHtcbiAgICAgIGNvbnNvbGUubG9nKGBzYXZlIGVycm9yYCwgc2F2ZUVycm9yKVxuICAgICAgb25SZXNvdXJjZUVycm9yICYmIG9uUmVzb3VyY2VFcnJvcihudWxsLCBmYWxzZSwgbnVsbCwgYEVycm9yIHNhdmluZyAke2xhbmd1YWdlSWRffV8ke3Jlc291cmNlSWR9ICR7c2F2ZUVycm9yfWAsIHRydWUpXG4gICAgfVxuICB9LCBbc2F2ZUVycm9yLCBpc1NhdmVFcnJvcl0pXG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHsgLy8gd2hlbiBzdGFydFNhdmUgZ29lcyB0cnVlLCBzYXZlIGVkaXRzIHRvIHVzZXIgYnJhbmNoIGFuZCB0aGVuIGNsZWFyIHN0YXJ0U2F2ZVxuICAgIGNvbnN0IF9zYXZlRWRpdCA9IGFzeW5jICgpID0+IHsgLy8gYmVnaW4gdXBsb2FkaW5nIG5ldyBVU0ZNXG4gICAgICBjb25zb2xlLmluZm8oYHNhdmVDaGFuZ2VzVG9DbG91ZCgpIC0gVXNpbmcgc2hhOiAke3NoYX1gKVxuICAgICAgbGV0IHNhdmVGdW5jdGlvbiA9IG9uU2F2ZUVkaXRcbiAgICAgIGlmIChzYXZlRGlmZlBhdGNoKSB7XG4gICAgICAgIHNhdmVGdW5jdGlvbiA9IG9uU2F2ZUVkaXRQYXRjaCAvLyBpZiB3ZSBhcmUgc2VuZGluZyB1cCBhIGRpZmZwYXRjaCwgd2Ugd2lsbCB1c2UgdGhpcyBtZXRob2RcbiAgICAgIH1cbiAgICAgIGF3YWl0IHNhdmVGdW5jdGlvbih1c2VyRWRpdEJyYW5jaE5hbWUpLnRoZW4oKHN1Y2Nlc3MpID0+IHsgLy8gcHVzaCBjaGFuZ2UgdG8gc2VydmVyXG4gICAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYHNhdmVDaGFuZ2VzVG9DbG91ZCgpIC0gc2F2ZSBzY3JpcHR1cmUgZWRpdHMgc3VjY2Vzc2ApXG4gICAgICAgICAgc2V0Q2FyZHNTYXZpbmcocHJldkNhcmRzU2F2aW5nID0+IHByZXZDYXJkc1NhdmluZy5maWx0ZXIoY2FyZElkID0+IGNhcmRJZCAhPT0gY2FyZFJlc291cmNlSWQpKVxuICAgICAgICAgIHNldFN0YXRlKHtcbiAgICAgICAgICAgIHN0YXJ0U2F2ZTogZmFsc2UsXG4gICAgICAgICAgfSlcblxuICAgICAgICAgIGNvbnN0IHVuc2F2ZWRDYXJkSW5kaWNlcyA9IE9iamVjdC5rZXlzKHVuc2F2ZWRDaGFuZ2VzTGlzdClcblxuICAgICAgICAgIGlmICh1bnNhdmVkQ2FyZEluZGljZXM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBjYXJkSW5kZXggb2YgdW5zYXZlZENhcmRJbmRpY2VzKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHsgY2xlYXJDaGFuZ2VzIH0gPSB1bnNhdmVkQ2hhbmdlc0xpc3RbY2FyZEluZGV4XVxuICAgICAgICAgICAgICBjbGVhckNoYW5nZXMgJiYgY2xlYXJDaGFuZ2VzKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zb2xlLmluZm8oJ3NhdmVDaGFuZ2VzVG9DbG91ZCgpIC0gUmVsb2FkaW5nIHJlc291cmNlJylcbiAgICAgICAgICBzZXRTdGF0ZSh7XG4gICAgICAgICAgICBzdGFydFNhdmU6IGZhbHNlLFxuICAgICAgICAgICAgcmVhZHlGb3JGZXRjaDogdHJ1ZSxcbiAgICAgICAgICAgIHJlZjogdXNlckVkaXRCcmFuY2hOYW1lLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgZGVsYXkoMTAwKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHNldENhcmRzU2F2aW5nKHByZXZDYXJkc1NhdmluZyA9PiBwcmV2Q2FyZHNTYXZpbmcuZmlsdGVyKGNhcmRJZCA9PiBjYXJkSWQgIT09IGNhcmRSZXNvdXJjZUlkKSlcbiAgICAgICAgICAgIHNjcmlwdHVyZUNvbmZpZz8ucmVsb2FkUmVzb3VyY2Uoc2hhLCB1c2VyRWRpdEJyYW5jaE5hbWUpXG4gICAgICAgICAgfSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdzYXZlQ2hhbmdlc1RvQ2xvdWQoKSAtIHNhdmluZyBjaGFuZ2VkIHNjcmlwdHVyZSBmYWlsZWQnKVxuICAgICAgICAgIHNldENhcmRzU2F2aW5nKHByZXZDYXJkc1NhdmluZyA9PiBwcmV2Q2FyZHNTYXZpbmcuZmlsdGVyKGNhcmRJZCA9PiBjYXJkSWQgIT09IGNhcmRSZXNvdXJjZUlkKSlcbiAgICAgICAgICBzZXRTdGF0ZSh7IHN0YXJ0U2F2ZTogZmFsc2UgfSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBpZiAoc3RhcnRTYXZlKSB7XG4gICAgICBpZiAoIWVkaXRCcmFuY2hSZWFkeSkge1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhgc2F2ZUNoYW5nZXNUb0Nsb3VkIC0gZWRpdCBicmFuY2ggbm90IHlldCBjcmVhdGVkYClcbiAgICAgIH0gZWxzZSBpZiAoIXNoYSkge1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhgc2F2ZUNoYW5nZXNUb0Nsb3VkIC0gc2F2ZSBzaGEgbm90IHlldCByZWFkeWApXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhgc2F2ZUNoYW5nZXNUb0Nsb3VkIC0gY2FsbGluZyBfc2F2ZUVkaXQoKWApXG4gICAgICAgIHNldENhcmRzU2F2aW5nKHByZXZDYXJkc1NhdmluZyA9PiBbLi4ucHJldkNhcmRzU2F2aW5nLCBjYXJkUmVzb3VyY2VJZF0pXG4gICAgICAgIF9zYXZlRWRpdCgpXG4gICAgICB9XG4gICAgfVxuICB9LCBbc3RhcnRTYXZlLCBlZGl0QnJhbmNoUmVhZHksIHNoYV0pXG5cbiAgLyoqXG4gICAqIGNvbnZlcnQgdXBkYXRlZFZlcnNlT2JqZWN0cyB0byBVU0ZNIGFuZCBtZXJnZSBpbnRvIHRoZSBiaWJsZVVzZm1cbiAgICogQHBhcmFtIHtzdHJpbmd9IGJpYmxlVXNmbSAtIFVTRk0gb2YgYmlibGVcbiAgICogQHBhcmFtIHtvYmplY3R9IHJlZiAtIHJlZmVyZW5jZSBvZiB2ZXJzZSB0byBtZXJnZSBpblxuICAgKiBAcGFyYW0ge29iamVjdFtdfSB1cGRhdGVkVmVyc2VPYmplY3RzIC0gbmV3IHZlcnNlIGluIHZlcnNlT2JqZWN0IGZvcm1hdFxuICAgKiBAcGFyYW0ge251bWJlcn0gY2FyZE51bVxuICAgKi9cbiAgZnVuY3Rpb24gbWVyZ2VWZXJzZU9iamVjdHNJbnRvQmlibGVVc2ZtKGJpYmxlVXNmbSwgcmVmLCB1cGRhdGVkVmVyc2VPYmplY3RzLCBjYXJkTnVtOiBudW1iZXIpIHtcbiAgICBsZXQgbmV3VXNmbVxuICAgIGNvbnN0IGNoYXB0ZXJDaHVua3MgPSBiaWJsZVVzZm0/LnNwbGl0KCdcXFxcYyAnKVxuICAgIGNvbnN0IGNoYXB0ZXJJbmRleCA9IGZpbmRSZWZJbkFycmF5KHJlZj8uY2hhcHRlciwgY2hhcHRlckNodW5rcylcblxuICAgIGlmIChjaGFwdGVySW5kZXggPj0gMCkge1xuICAgICAgY29uc3QgY3VycmVudENoYXB0ZXIgPSBjaGFwdGVyQ2h1bmtzW2NoYXB0ZXJJbmRleF1cbiAgICAgIGNvbnN0IHZlcnNlQ2h1bmtzID0gY3VycmVudENoYXB0ZXIuc3BsaXQoJ1xcXFx2ICcpXG4gICAgICBjb25zdCB2ZXJzZUluZGV4ID0gZmluZFJlZkluQXJyYXkocmVmPy52ZXJzZSwgdmVyc2VDaHVua3MpXG5cbiAgICAgIGlmICh2ZXJzZUluZGV4ID49IDApIHtcbiAgICAgICAgY29uc3QgbmV3VmVyc2VVc2ZtID0gVXNmbUZpbGVDb252ZXJzaW9uSGVscGVycy5jb252ZXJ0VmVyc2VEYXRhVG9VU0ZNKHVwZGF0ZWRWZXJzZU9iamVjdHMpXG4gICAgICAgIGNvbnNvbGUubG9nKGBzYXZlQ2hhbmdlc1RvQ2xvdWQoJHtjYXJkTnVtfSkgLSBuZXcgVVNGTSBmb3IgY2FyZDp9IC0gJHtuZXdWZXJzZVVzZm0uc3Vic3RyaW5nKDAsIDEwMCl9YClcbiAgICAgICAgY29uc3Qgb2xkVmVyc2UgPSB2ZXJzZUNodW5rc1t2ZXJzZUluZGV4XVxuICAgICAgICBjb25zdCB2ZXJzZU51bUxlbiA9IChyZWY/LnZlcnNlICsgJycpLmxlbmd0aFxuICAgICAgICB2ZXJzZUNodW5rc1t2ZXJzZUluZGV4XSA9IG9sZFZlcnNlLnN1YnN0cmluZygwLCB2ZXJzZU51bUxlbiArIDEpICsgbmV3VmVyc2VVc2ZtXG4gICAgICAgIGNvbnN0IG5ld0NoYXB0ZXIgPSB2ZXJzZUNodW5rcy5qb2luKCdcXFxcdiAnKVxuICAgICAgICBjaGFwdGVyQ2h1bmtzW2NoYXB0ZXJJbmRleF0gPSBuZXdDaGFwdGVyXG4gICAgICAgIG5ld1VzZm0gPSBjaGFwdGVyQ2h1bmtzLmpvaW4oJ1xcXFxjICcpXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXdVc2ZtXG4gIH1cblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4geyAvLyBmb3IgZWFjaCB1bnNhdmVkIGNoYW5nZSwgY2FsbCBpbnRvIHNjcmlwdHVyZVBhbmUgdG8gZ2V0IGxhdGVzdCBjaGFuZ2VzIGZvciB2ZXJzZSB0byBzYXZlXG4gICAgYXN5bmMgZnVuY3Rpb24gZ2V0UmVhZHlGb3JTYXZlKCkge1xuICAgICAgaWYgKHNhdmVDbGlja2VkKSB7XG4gICAgICAgIGxldCBjcmVhdGVFZGl0QnJhbmNoID0gIV91c2luZ1VzZXJCcmFuY2hcblxuICAgICAgICBpZiAoIWNyZWF0ZUVkaXRCcmFuY2gpIHsgLy8gaWYgYWxyZWFkeSB1c2luZyB0aGUgdXNlciBicmFuY2hcbiAgICAgICAgICBpZiAod29ya2luZ1Jlc291cmNlQnJhbmNoICE9PSB1c2VyRWRpdEJyYW5jaE5hbWUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2Fybihgc2F2ZUNoYW5nZXNUb0Nsb3VkIC0gc3RhdGUgY29uZmxpY3QgLSBzaG91bGQgYmUgaW4gdXNlciBicmFuY2ggJHt1c2VyRWRpdEJyYW5jaE5hbWV9LCBidXQgYWN0dWFsbHkgdXNpbmcgJHt3b3JraW5nUmVzb3VyY2VCcmFuY2h9YClcbiAgICAgICAgICAgIGNyZWF0ZUVkaXRCcmFuY2ggPSB0cnVlXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBzYXZlQ2hhbmdlc1RvQ2xvdWQgLSBhbHJlYWR5IHVzaW5nIGVkaXQgYnJhbmNoOiAke3dvcmtpbmdSZXNvdXJjZUJyYW5jaH1gKVxuICAgICAgICAgICAgc2V0U3RhdGUoeyBlZGl0QnJhbmNoUmVhZHk6IHRydWUgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY3JlYXRlRWRpdEJyYW5jaCkgeyAvLyBpZiBub3QgeWV0IHVzaW5nIHRoZSB1c2VyIGJyYW5jaCwgY3JlYXRlIGl0XG4gICAgICAgICAgY29uc29sZS5sb2coYHNhdmVDaGFuZ2VzVG9DbG91ZCAtIGNyZWF0aW5nIGVkaXQgYnJhbmNoYClcbiAgICAgICAgICBzZXRTdGF0ZSh7XG4gICAgICAgICAgICBlZGl0QnJhbmNoUmVhZHk6IGZhbHNlLFxuICAgICAgICAgICAgcmVhZHlGb3JGZXRjaDogZmFsc2UsXG4gICAgICAgICAgICBzaGE6IG51bGwsXG4gICAgICAgICAgfSkgLy8gd2Ugd2lsbCBuZWVkIGEgbmV3IHNoYSBmb3IgYm9vay9icmFuY2hcblxuICAgICAgICAgIGNvbnN0IGJyYW5jaCA9IGF3YWl0IHN0YXJ0RWRpdEJyYW5jaCgpXG5cbiAgICAgICAgICBpZiAoYnJhbmNoKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgc2F2ZUNoYW5nZXNUb0Nsb3VkIC0gZWRpdCBicmFuY2ggY3JlYXRlZGApXG4gICAgICAgICAgICBzZXRTdGF0ZSh7XG4gICAgICAgICAgICAgIGVkaXRCcmFuY2hSZWFkeTogdHJ1ZSxcbiAgICAgICAgICAgICAgcmVhZHlGb3JGZXRjaDogdHJ1ZSxcbiAgICAgICAgICAgICAgcmVmOiBicmFuY2gsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdzYXZlQ2hhbmdlc1RvQ2xvdWQoKSAtIGVycm9yIGNyZWF0aW5nIGVkaXQgYnJhbmNoJylcbiAgICAgICAgICAgIG9uUmVzb3VyY2VFcnJvciAmJiBvblJlc291cmNlRXJyb3IobnVsbCwgZmFsc2UsIG51bGwsIGBFcnJvciBjcmVhdGluZyBlZGl0IGJyYW5jaCAke2xhbmd1YWdlSWRffV8ke3Jlc291cmNlSWR9YCwgdHJ1ZSlcbiAgICAgICAgICAgIHNldFN0YXRlKHsgc2F2ZUNsaWNrZWQ6IGZhbHNlIH0pXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zb2xlLmxvZyhgc2F2ZUNoYW5nZXNUb0Nsb3VkIC0gZ2V0dGluZyB2ZXJzZSBjaGFuZ2VzYClcbiAgICAgICAgY29uc3QgdW5zYXZlZENhcmRJbmRpY2VzID0gT2JqZWN0LmtleXModW5zYXZlZENoYW5nZXNMaXN0KVxuXG4gICAgICAgIGlmICh1bnNhdmVkQ2FyZEluZGljZXM/Lmxlbmd0aCkge1xuICAgICAgICAgIGxldCBiaWJsZVVzZm1fID0gZ2V0Q3VycmVudEJvb2soc2NyaXB0dXJlQ29uZmlnLCBib29rSWQpIC8vIGdldCBvcmlnaW5hbCBVU0ZNXG4gICAgICAgICAgbGV0IGJpYmxlVXNmbSA9IGJpYmxlVXNmbV8gLy8gbWFrZSBhIGNvcHkgdG8gZWRpdFxuICAgICAgICAgIGxldCBtZXJnZUZhaWwgPSBmYWxzZVxuXG4gICAgICAgICAgaWYgKGJpYmxlVXNmbV8pIHtcbiAgICAgICAgICAgIGxldCBjYXJkTnVtID0gMFxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNhcmRJbmRleCBvZiB1bnNhdmVkQ2FyZEluZGljZXMpIHtcbiAgICAgICAgICAgICAgY2FyZE51bSA9IHBhcnNlSW50KGNhcmRJbmRleClcbiAgICAgICAgICAgICAgY29uc3QgeyBnZXRDaGFuZ2VzLCBzdGF0ZSB9ID0gdW5zYXZlZENoYW5nZXNMaXN0W2NhcmROdW1dXG5cbiAgICAgICAgICAgICAgaWYgKGdldENoYW5nZXMpIHtcbiAgICAgICAgICAgICAgICBsZXQgbmV3VXNmbVxuICAgICAgICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgICAgICAgIHJlZixcbiAgICAgICAgICAgICAgICAgIHVwZGF0ZWRWZXJzZU9iamVjdHMsXG4gICAgICAgICAgICAgICAgfSA9IGdldENoYW5nZXMoc3RhdGUpXG5cbiAgICAgICAgICAgICAgICBpZiAodXBkYXRlZFZlcnNlT2JqZWN0cyAmJiBiaWJsZVVzZm0pIHsgLy8ganVzdCByZXBsYWNlIHZlcnNlXG4gICAgICAgICAgICAgICAgICBuZXdVc2ZtID0gbWVyZ2VWZXJzZU9iamVjdHNJbnRvQmlibGVVc2ZtKGJpYmxlVXNmbSwgcmVmLCB1cGRhdGVkVmVyc2VPYmplY3RzLCBjYXJkTnVtKVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChuZXdVc2ZtKSB7XG4gICAgICAgICAgICAgICAgICBiaWJsZVVzZm0gPSBuZXdVc2ZtXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIG1lcmdlRmFpbCA9IHRydWVcbiAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbGV0IHNhdmVEaWZmUGF0Y2ggPSBmYWxzZSAvLyBpZiB0cnVlIHRoZW4gd2Ugd2lsbCBzZW5kIHVwIGEgZGlmZnBhdGNoIGluc3RlYWQgb2YgdGhlIHdob2xlIGJvb2tcblxuICAgICAgICAgIGlmIChtZXJnZUZhaWwpIHsgLy8gaWYgd2UgZmFpbGVkIHRvIG1lcmdlLCBmYWxsYmFjayB0byBicnV0ZSBmb3JjZSB2ZXJzZSBvYmplY3RzIHRvIFVTRk1cbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBzYXZlQ2hhbmdlc1RvQ2xvdWQoJHtjYXJkTnVtfSkgLSB2ZXJzZSBub3QgZm91bmQsIGZhbGxpbmcgYmFjayB0byBpbnNlcnRpbmcgdmVyc2Ugb2JqZWN0YClcbiAgICAgICAgICAgIGxldCBuZXdCb29rSnNvblxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNhcmRJbmRleCBvZiB1bnNhdmVkQ2FyZEluZGljZXMpIHtcbiAgICAgICAgICAgICAgY29uc3QgY2FyZE51bSA9IHBhcnNlSW50KGNhcmRJbmRleClcbiAgICAgICAgICAgICAgY29uc3QgeyBnZXRDaGFuZ2VzLCBzdGF0ZSB9ID0gdW5zYXZlZENoYW5nZXNMaXN0W2NhcmROdW1dXG5cbiAgICAgICAgICAgICAgaWYgKGdldENoYW5nZXMpIHtcbiAgICAgICAgICAgICAgICBsZXQgbmV3VXNmbVxuICAgICAgICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgICAgICAgIG5ld1ZlcnNlVGV4dCxcbiAgICAgICAgICAgICAgICAgIHJlZixcbiAgICAgICAgICAgICAgICAgIHVwZGF0ZWRWZXJzZU9iamVjdHMsXG4gICAgICAgICAgICAgICAgfSA9IGdldENoYW5nZXMoc3RhdGUpXG5cbiAgICAgICAgICAgICAgICBpZiAodXBkYXRlZFZlcnNlT2JqZWN0cyAmJiAhbmV3VXNmbSkge1xuICAgICAgICAgICAgICAgICAgbGV0IHRhcmdldFZlcnNlT2JqZWN0c18gPSBudWxsXG5cbiAgICAgICAgICAgICAgICAgIGlmIChyZWYpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5ld1ZlcnNlVGV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgdGFyZ2V0VmVyc2VPYmplY3RzIH0gPSBBbGlnbm1lbnRIZWxwZXJzLnVwZGF0ZUFsaWdubWVudHNUb1RhcmdldFZlcnNlKHVwZGF0ZWRWZXJzZU9iamVjdHMsIG5ld1ZlcnNlVGV4dClcbiAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRWZXJzZU9iamVjdHNfID0gdGFyZ2V0VmVyc2VPYmplY3RzXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0VmVyc2VPYmplY3RzXyA9IHVwZGF0ZWRWZXJzZU9iamVjdHNcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBuZXdCb29rSnNvbiA9IHRhcmdldFZlcnNlT2JqZWN0c18gJiYgc2NyaXB0dXJlQ29uZmlnPy51cGRhdGVWZXJzZShyZWYuY2hhcHRlciwgcmVmLnZlcnNlLCB7dmVyc2VPYmplY3RzOiB0YXJnZXRWZXJzZU9iamVjdHNffSlcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYmlibGVVc2ZtID0gdXNmbWpzLnRvVVNGTShuZXdCb29rSnNvbiwgeyBmb3JjZWROZXdMaW5lczogdHJ1ZSB9KVxuICAgICAgICAgIH0gZWxzZSB7IC8vIGlmIG9ubHkgY2hhbmdlZCBhIGZldyB2ZXJzZXMsIHdlIHdpbGwganVzdCBtYWtlIGEgZGlmZnBhdGNoIGluc3RlYWQgb2Ygc2VuZGluZyB0aGUgd2hvbGUgYm9va1xuICAgICAgICAgICAgY29uc3QgZmlsZW5hbWUgPSBzY3JpcHR1cmVDb25maWc/LnJlc291cmNlU3RhdGU/LnJlc291cmNlPy5uYW1lIC8vIExpa2UgXCI1Ny1USVQudXNmbVwiXG4gICAgICAgICAgICBpZiAoZmlsZW5hbWUgJiYgYmlibGVVc2ZtICYmIGJpYmxlVXNmbV8pIHsgLy8gbWFrZSBzdXJlIHdlIGhhdmUgZXZlcnl0aGluZyBuZWVkZWQgdG8gbWFrZSBhIHBhdGNoXG4gICAgICAgICAgICAgIGNvbnN0IGRpZmZQYXRjaCA9IGdldFBhdGNoKGZpbGVuYW1lLCBiaWJsZVVzZm1fLCBiaWJsZVVzZm0sIGZhbHNlKVxuICAgICAgICAgICAgICBiaWJsZVVzZm1fID0gZGlmZlBhdGNoIC8vIHJlcGxhY2Ugd2hvbGUgYm9vayB3aXRoIHBhdGNoIGRhdGEgKG11Y2ggc2hvcnRlcilcbiAgICAgICAgICAgICAgc2F2ZURpZmZQYXRjaCA9IHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoYmlibGVVc2ZtKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgc2F2ZUNoYW5nZXNUb0Nsb3VkKCkgLSBzYXZpbmcgbmV3IFVTRk06ICR7YmlibGVVc2ZtLnN1YnN0cmluZygwLCAxMDApfS4uLmApXG4gICAgICAgICAgICBzZXRDYXJkc1NhdmluZyhwcmV2Q2FyZHNTYXZpbmcgPT4gWy4uLnByZXZDYXJkc1NhdmluZywgY2FyZFJlc291cmNlSWRdKVxuICAgICAgICAgICAgc2V0U3RhdGUoe1xuICAgICAgICAgICAgICBzYXZlQ29udGVudDogYmlibGVVc2ZtXyxcbiAgICAgICAgICAgICAgc2F2ZUNsaWNrZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICBzYXZlRGlmZlBhdGNoLFxuICAgICAgICAgICAgICBzdGFydFNhdmU6IHRydWUsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYHNhdmVDaGFuZ2VzVG9DbG91ZCgpIC0gRXJyb3IgcmV0cmlldmluZyB0aGUgY29ycmVjdCBib29rIGRhdGE6IGluY29ycmVjdCBib29rICR7bGFuZ3VhZ2VJZF99XyR7cmVzb3VyY2VJZH1gKVxuICAgICAgICAgICAgICBvblJlc291cmNlRXJyb3IgJiYgb25SZXNvdXJjZUVycm9yKG51bGwsIGZhbHNlLCBudWxsLCBgRXJyb3IgcmV0cmlldmluZyB0aGUgY29ycmVjdCBib29rIGRhdGEgJHtsYW5ndWFnZUlkX31fJHtyZXNvdXJjZUlkfWAsIHRydWUpXG4gICAgICAgICAgICAgIHNldFN0YXRlKHsgc2F2ZUNsaWNrZWQ6IGZhbHNlIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZ2V0UmVhZHlGb3JTYXZlKClcbiAgfSwgW3NhdmVDbGlja2VkXSlcblxuICAvLyBAdHMtaWdub3JlXG4gIGNvbnN0IHsgY2hhcHRlciB9ID0gX3JlZmVyZW5jZSB8fCB7fVxuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgX3ZlcnNlc0ZvclJlZiA9IHNjcmlwdHVyZUNvbmZpZz8udmVyc2VzRm9yUmVmXG4gICAgbGV0IG5ld1NlbGVjdGlvbnMgPSBuZXcgTWFwKClcbiAgICBsZXQgdXBkYXRlU2VsZWN0aW9ucyA9IGZhbHNlXG4gICAgY29uc3QgX21hcCA9IG5ld1NlbGVjdGlvbnNcbiAgICBjb25zdCBvcmlnaW5hbEJvb2tJZCA9IG9yaWdpbmFsU2NyaXB0dXJlQm9va09iamVjdHM/LmJvb2tJZFxuICAgIGNvbnN0IGJvb2tWZXJzZU9iamVjdCA9IG9yaWdpbmFsU2NyaXB0dXJlQm9va09iamVjdHM/LmNoYXB0ZXJzXG4gICAgbGV0IG5ld1NlbGVjdGVkUXVvdGUgPSBudWxsXG5cbiAgICAvLyBpZiB3ZSBoYXZlIGV2ZXJ5dGhpbmcgd2UgbmVlZCB0byBjYWxjdWxhdGUgc2VsZWN0aW9uc1xuICAgIGlmIChfdmVyc2VzRm9yUmVmPy5sZW5ndGggJiZcbiAgICAgIGJvb2tWZXJzZU9iamVjdCAmJlxuICAgICAgKGJvb2tJZCA9PT0gb3JpZ2luYWxCb29rSWQpICYmXG4gICAgICBib29rVmVyc2VPYmplY3RbY2hhcHRlcl0gJiYgLy8gd2UgbmVlZCB0byBoYXZlIGRhdGEgZm9yIGNoYXB0ZXJcbiAgICAgIHNlbGVjdGVkUXVvdGU/LnF1b3RlXG4gICAgKSB7XG4gICAgICAvLyBpZiBxdW90ZSBpcyBkaWZmZXJlbnQgdGhhbiBsYXN0XG4gICAgICBpZiAoIWlzRXF1YWwobGFzdFNlbGVjdGVkUXVvdGUsIHNlbGVjdGVkUXVvdGUpIHx8XG4gICAgICAgICFpc0VxdWFsKHZlcnNlc0ZvclJlZiwgX3ZlcnNlc0ZvclJlZikpIHtcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxWZXJzZXMgPSB7fVxuICAgICAgICBjb25zdCBzdWJzdGl0dXRlID0ge30gLy8ga2VlcCB0cmFjayBvZiB2ZXJzZSBzdWJzdGl0dXRpb25zXG4gICAgICAgIGxldCBzdGFydFZlcnNlID0gX3ZlcnNlc0ZvclJlZlswXS52ZXJzZVxuXG4gICAgICAgIGlmICh0eXBlb2Ygc3RhcnRWZXJzZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICBzdGFydFZlcnNlID0gcGFyc2VJbnQoc3RhcnRWZXJzZSlcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsYXN0VmVyc2UgPSBzdGFydFZlcnNlXG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSBfdmVyc2VzRm9yUmVmLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgIGNvbnN0IHZlcnNlUmVmID0gX3ZlcnNlc0ZvclJlZltpXVxuICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIGNoYXB0ZXIsXG4gICAgICAgICAgICB2ZXJzZSxcbiAgICAgICAgICB9ID0gdmVyc2VSZWZcbiAgICAgICAgICAvLyBUUklDS1kgLSB3ZSByZW1hcCB2ZXJzZXMgaW4gcmVmZXJlbmNlIHJhbmdlIHRvIGEgbGluZWFyIHNlcmllcyBvZiB2ZXJzZXMgc28gdmVyc2Ugc3BhbnMgZG9uJ3QgY2hva2UgZ2V0UXVvdGVNYXRjaGVzSW5Cb29rUmVmXG4gICAgICAgICAgbGV0IF92ZXJzZSA9IHN0YXJ0VmVyc2UgKyBpXG4gICAgICAgICAgbGFzdFZlcnNlID0gX3ZlcnNlXG4gICAgICAgICAgc3Vic3RpdHV0ZVtgJHtjaGFwdGVyfToke192ZXJzZX1gXSA9IGAke2NoYXB0ZXJ9OiR7dmVyc2V9YFxuXG4gICAgICAgICAgaWYgKCFvcmlnaW5hbFZlcnNlc1tjaGFwdGVyXSkge1xuICAgICAgICAgICAgb3JpZ2luYWxWZXJzZXNbY2hhcHRlcl0gPSB7fVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGxldCB2ZXJzZU9iamVjdHMgPSBbXVxuXG4gICAgICAgICAgaWYgKCh0eXBlb2YgdmVyc2UgPT09ICdzdHJpbmcnKSAmJiAodmVyc2UuaW5jbHVkZXMoJy0nKSkpIHtcbiAgICAgICAgICAgIGNvbnN0IHZlcnNlcyA9IGdldFZlcnNlcyhib29rVmVyc2VPYmplY3QsIGAke2NoYXB0ZXJ9OiR7dmVyc2V9YClcblxuICAgICAgICAgICAgZm9yIChjb25zdCB2ZXJzZUl0ZW0gb2YgdmVyc2VzKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHZvID0gdmVyc2VJdGVtLnZlcnNlRGF0YS52ZXJzZU9iamVjdHNcbiAgICAgICAgICAgICAgdmVyc2VPYmplY3RzID0gdmVyc2VPYmplY3RzLmNvbmNhdCh2bylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmVyc2VPYmplY3RzID0gYm9va1ZlcnNlT2JqZWN0W2NoYXB0ZXJdW3ZlcnNlXT8udmVyc2VPYmplY3RzXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHZlcnNlT2JqZWN0cykge1xuICAgICAgICAgICAgdmVyc2VPYmplY3RzID0gY2xlYW51cFZlcnNlT2JqZWN0cyh2ZXJzZU9iamVjdHMpXG4gICAgICAgICAgICBvcmlnaW5hbFZlcnNlc1tjaGFwdGVyXVtfdmVyc2VdID0geyB2ZXJzZU9iamVjdHMgfVxuICAgICAgICAgICAgX21hcC5zZXQoYCR7Y2hhcHRlcn06JHt2ZXJzZX1gLCB2ZXJzZU9iamVjdHMpXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gY3JlYXRlIG5ldyByZWZlcmVuY2UgcmFuZ2UgZm9yIG5ldyBsaW5lYXIgdmVyc2UgcmFuZ2VcbiAgICAgICAgY29uc3QgW2NoYXB0ZXJdID0gc2VsZWN0ZWRRdW90ZT8ucmVmZXJlbmNlPy5zcGxpdCgnOicpXG4gICAgICAgIGxldCBzdWJSZWYgPSBgJHtjaGFwdGVyfToke3N0YXJ0VmVyc2V9YFxuXG4gICAgICAgIGlmIChsYXN0VmVyc2UgIT0gc3RhcnRWZXJzZSkge1xuICAgICAgICAgIHN1YlJlZiArPSBgLSR7bGFzdFZlcnNlfWBcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHF1b3RlTWF0Y2hlcyA9IGdldFF1b3RlTWF0Y2hlc0luQm9va1JlZih7XG4gICAgICAgICAgYm9va09iamVjdDogb3JpZ2luYWxWZXJzZXMsXG4gICAgICAgICAgcmVmOiBzdWJSZWYsXG4gICAgICAgICAgcXVvdGU6IHNlbGVjdGVkUXVvdGU/LnF1b3RlLFxuICAgICAgICAgIG9jY3VycmVuY2U6IHNlbGVjdGVkUXVvdGU/Lm9jY3VycmVuY2UsXG4gICAgICAgIH0pXG5cbiAgICAgICAgY29uc3Qgc2VsZWN0aW9ucyA9IG5ldyBNYXAoKVxuXG4gICAgICAgIGlmIChxdW90ZU1hdGNoZXM/LnNpemUpIHtcbiAgICAgICAgICBxdW90ZU1hdGNoZXMuZm9yRWFjaCgod29yZHMsIGtleSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgX2tleSA9IHN1YnN0aXR1dGVba2V5XVxuXG4gICAgICAgICAgICBzZWxlY3Rpb25zLnNldChfa2V5LCB3b3Jkcy5tYXAod29yZCA9PiAoXG4gICAgICAgICAgICAgIHsgLi4ud29yZCwgdGV4dDogY29yZS5ub3JtYWxpemVTdHJpbmcod29yZC50ZXh0KSB9XG4gICAgICAgICAgICApKSlcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICAgIG5ld1NlbGVjdGlvbnMgPSBzZWxlY3Rpb25zXG4gICAgICAgIG5ld1NlbGVjdGVkUXVvdGUgPSBzZWxlY3RlZFF1b3RlXG4gICAgICAgIHVwZGF0ZVNlbGVjdGlvbnMgPSB0cnVlXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgbmV3U3RhdGU6IGFueSA9IHt9XG5cbiAgICAvLyB1cGRhdGUgc3RhdGVzIHRoYXQgaGF2ZSBjaGFuZ2VkXG4gICAgaWYgKCFhcmVNYXBzVGhlU2FtZSh2ZXJzZU9iamVjdHNNYXAsIF9tYXApKSB7XG4gICAgICBuZXdTdGF0ZS52ZXJzZU9iamVjdHNNYXAgPSBfbWFwXG4gICAgfVxuXG4gICAgY29uc3QgYm9va3NOb3RTYW1lID0gcmVmZXJlbmNlPy5wcm9qZWN0SWQgIT09IGN1cnJlbnRSZWZlcmVuY2U/LnByb2plY3RJZFxuXG4gICAgaWYgKGJvb2tzTm90U2FtZSB8fCAhYXJlVmVyc2VzU2FtZSh2ZXJzZXNGb3JSZWYsIF92ZXJzZXNGb3JSZWYpKSB7XG4gICAgICBuZXdTdGF0ZS52ZXJzZXNGb3JSZWYgPSBfdmVyc2VzRm9yUmVmXG4gICAgICBuZXdTdGF0ZS5sYXN0U2VsZWN0ZWRRdW90ZSA9IG5ld1NlbGVjdGVkUXVvdGVcbiAgICAgIG5ld1N0YXRlLnNlbGVjdGlvbnMgPSBuZXdTZWxlY3Rpb25zXG4gICAgfVxuXG4gICAgaWYgKG5ld1NlbGVjdGVkUXVvdGUpIHtcbiAgICAgIG5ld1N0YXRlLmxhc3RTZWxlY3RlZFF1b3RlID0gbmV3U2VsZWN0ZWRRdW90ZVxuICAgIH1cblxuICAgIGlmICh1cGRhdGVTZWxlY3Rpb25zKSB7XG4gICAgICBpZiAoIWFyZU1hcHNUaGVTYW1lKHNlbGVjdGlvbnMgfHwgKG5ldyBNYXAoKSksIG5ld1NlbGVjdGlvbnMpKSB7XG4gICAgICAgIG5ld1N0YXRlLnNlbGVjdGlvbnMgPSBuZXdTZWxlY3Rpb25zXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKE9iamVjdC5rZXlzKG5ld1N0YXRlKS5sZW5ndGgpIHtcbiAgICAgIHNldFN0YXRlKG5ld1N0YXRlKVxuICAgIH1cbiAgfSwgW1xuICAgIG93bmVyLFxuICAgIHJlc291cmNlSWQsXG4gICAgYm9va0lkLFxuICAgIGxhbmd1YWdlSWRfLFxuICAgIHNjcmlwdHVyZUNvbmZpZz8udmVyc2VzRm9yUmVmLFxuICAgIG9yaWdpbmFsU2NyaXB0dXJlQm9va09iamVjdHMsXG4gICAgc2VsZWN0ZWRRdW90ZSxcbiAgXSlcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4geyAvLyBjbGVhciBzZXR0aW5ncyBvbiB2ZXJzZSBjaGFuZ2VcbiAgICBzZXRTdGF0ZSh7XG4gICAgICB2ZXJzZXNBbGlnbm1lbnRTdGF0dXM6IG51bGwsXG4gICAgICB1bnNhdmVkQ2hhbmdlc0xpc3Q6IHt9LFxuICAgICAgaGF2ZVVuc2F2ZWRDaGFuZ2VzOiBmYWxzZSxcbiAgICB9KVxuICB9LCBbX3JlZmVyZW5jZV0pXG5cbiAgY29uc3QgdXBkYXRlVmVyc2VzQWxpZ25tZW50U3RhdHVzID0gKHJlZmVyZW5jZSwgYWxpZ25lZCkgPT4ge1xuICAgIHNldFN0YXRlXyhwcmV2U3RhdGUgPT4gKHtcbiAgICAgIC4uLnByZXZTdGF0ZSxcbiAgICAgIHZlcnNlc0FsaWdubWVudFN0YXR1czogeyAuLi5wcmV2U3RhdGUudmVyc2VzQWxpZ25tZW50U3RhdHVzLCBbYCR7cmVmZXJlbmNlLmNoYXB0ZXJ9OiR7cmVmZXJlbmNlLnZlcnNlfWBdOiBhbGlnbmVkIH0sXG4gICAgfSkpXG4gIH1cblxuICBsZXQgX3ZlcnNlc0ZvclJlZiA9IHNjcmlwdHVyZUNvbmZpZz8udmVyc2VzRm9yUmVmXG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoX3ZlcnNlc0ZvclJlZj8ubGVuZ3RoKSB7XG4gICAgICBjb25zdCB7IHJlZmVyZW5jZSwgcmVzb3VyY2VMaW5rIH0gPSBzY3JpcHR1cmVDb25maWcgfHwge31cbiAgICAgIGNvbnNvbGUubG9nKGBTY3JpcHR1cmVDYXJkLl92ZXJzZXNGb3JSZWYgY2hhbmdlZGAsIHsgcmVmZXJlbmNlLCByZXNvdXJjZUxpbmsgfSlcbiAgICB9XG4gIH0sIFtfdmVyc2VzRm9yUmVmXSlcblxuICBpZiAoIV92ZXJzZXNGb3JSZWY/Lmxlbmd0aCkgeyAvLyBpZiBlbXB0eSBvZiByZWZlcmVuY2VzLCBjcmVhdGUgc2luZ2xlIGVtcHR5IHJlZmVyZW5jZVxuICAgIF92ZXJzZXNGb3JSZWYgPSBbeyAuLi5yZWZlcmVuY2UgfV1cbiAgfVxuXG4gIGNvbnN0IHJlbmRlcmVkU2NyaXB0dXJlUGFuZXMgPSBfdmVyc2VzRm9yUmVmPy5tYXAoKF9jdXJyZW50VmVyc2VEYXRhLCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IGluaXRpYWxWZXJzZU9iamVjdHMgPSBfY3VycmVudFZlcnNlRGF0YT8udmVyc2VEYXRhPy52ZXJzZU9iamVjdHMgfHwgW11cbiAgICAvLyBAdHMtaWdub3JlXG4gICAgY29uc3QgeyBjaGFwdGVyLCB2ZXJzZSB9ID0gX2N1cnJlbnRWZXJzZURhdGEgfHwge31cbiAgICBjb25zdCBwcm9qZWN0SWQgPSBjdXJyZW50UmVmZXJlbmNlPy5wcm9qZWN0SWQgfHwgcmVmZXJlbmNlPy5wcm9qZWN0SWRcbiAgICBjb25zdCBfcmVmZXJlbmNlID0ge1xuICAgICAgLi4uX3ZlcnNlc0ZvclJlZixcbiAgICAgIGNoYXB0ZXIsXG4gICAgICBwcm9qZWN0SWQsXG4gICAgICB2ZXJzZSxcbiAgICB9XG4gICAgY29uc3QgX3NjcmlwdHVyZUFsaWdubWVudEVkaXRDb25maWcgPSB7XG4gICAgICAuLi5zY3JpcHR1cmVBbGlnbm1lbnRFZGl0Q29uZmlnLFxuICAgICAgY3VycmVudEluZGV4OiBpbmRleCxcbiAgICAgIGluaXRpYWxWZXJzZU9iamVjdHMsXG4gICAgICByZWZlcmVuY2U6IF9yZWZlcmVuY2UsXG4gICAgICBpc05ld1Rlc3RhbWVudCxcbiAgICB9XG5cbiAgICBsZXQgaXNWZXJzZVNlbGVjdGVkRm9yQWxpZ25tZW50ID0gZmFsc2VcblxuICAgIGlmICh2ZXJzZVNlbGVjdGVkRm9yQWxpZ25tZW50KSB7XG4gICAgICBpc1ZlcnNlU2VsZWN0ZWRGb3JBbGlnbm1lbnQgPSB2ZXJzZVNlbGVjdGVkRm9yQWxpZ25tZW50LmNoYXB0ZXIgPT0gY2hhcHRlciAmJiB2ZXJzZVNlbGVjdGVkRm9yQWxpZ25tZW50LnZlcnNlID09IHZlcnNlXG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxTY3JpcHR1cmVQYW5lXG4gICAgICAgIHsuLi5zY3JpcHR1cmVDb25maWd9XG4gICAgICAgIGNvbnRlbnRTdHlsZT17Y29udGVudFN0eWxlfVxuICAgICAgICBjdXJyZW50SW5kZXg9e2luZGV4fVxuICAgICAgICBkZXRlcm1pbmluZ0JyYW5jaD17IXJlYWR5Rm9yRmV0Y2h9XG4gICAgICAgIGRpcmVjdGlvbj17ZGlyZWN0aW9ufVxuICAgICAgICBkaXNhYmxlV29yZFBvcG92ZXI9e2Rpc2FibGVXb3JkUG9wb3Zlcl99XG4gICAgICAgIGZvbnRTaXplPXtmb250U2l6ZX1cbiAgICAgICAgZ2V0TGV4aWNvbkRhdGE9e2dldExleGljb25EYXRhfVxuICAgICAgICBpc05UPXtpc05UX31cbiAgICAgICAgaXNWZXJzZVNlbGVjdGVkRm9yQWxpZ25tZW50PXtpc1ZlcnNlU2VsZWN0ZWRGb3JBbGlnbm1lbnR9XG4gICAgICAgIGtleT17aW5kZXh9XG4gICAgICAgIG9uQWxpZ25tZW50RmluaXNoPXsoKSA9PiBzZXRTdGF0ZSh7IHZlcnNlU2VsZWN0ZWRGb3JBbGlnbm1lbnQ6IG51bGwgfSl9XG4gICAgICAgIG9yaWdpbmFsU2NyaXB0dXJlQm9va09iamVjdHM9e29yaWdpbmFsU2NyaXB0dXJlQm9va09iamVjdHN9XG4gICAgICAgIHJlZlN0eWxlPXtyZWZTdHlsZX1cbiAgICAgICAgcmVmZXJlbmNlPXtfcmVmZXJlbmNlfVxuICAgICAgICBzYXZpbmc9e3N0YXJ0U2F2ZX1cbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBzY3JpcHR1cmVBbGlnbm1lbnRFZGl0Q29uZmlnPXtfc2NyaXB0dXJlQWxpZ25tZW50RWRpdENvbmZpZ31cbiAgICAgICAgc2V0V29yZEFsaWduZXJTdGF0dXM9e3NldFdvcmRBbGlnbmVyU3RhdHVzfVxuICAgICAgICBzZXJ2ZXI9e3NlcnZlcn1cbiAgICAgICAgdHJhbnNsYXRlPXt0cmFuc2xhdGV9XG4gICAgICAgIHVwZGF0ZVZlcnNlc0FsaWdubWVudFN0YXR1cz17dXBkYXRlVmVyc2VzQWxpZ25tZW50U3RhdHVzfVxuICAgICAgLz5cbiAgICApXG4gIH0pXG5cbiAgY29uc3QgaGFuZGxlQWxpZ25CdXR0b25DbGljayA9ICgpID0+IHtcbiAgICBpZiAodmVyc2VzRm9yUmVmPy5sZW5ndGggPiAxKSB7XG4gICAgICBzZXRTdGF0ZSh7IHNob3dBbGlnbm1lbnRQb3B1cDogdHJ1ZSB9KVxuICAgIH0gZWxzZSBpZiAodmVyc2VzRm9yUmVmPy5sZW5ndGggPT09IDEpIHtcbiAgICAgIHNldFN0YXRlKHsgdmVyc2VTZWxlY3RlZEZvckFsaWdubWVudDogdmVyc2VzRm9yUmVmWzBdIH0pXG4gICAgfVxuICB9XG5cbiAgY29uc3Qgb25SZW5kZXJUb29sYmFyID0gKHsgaXRlbXMgfSkgPT4ge1xuICAgIGNvbnN0IG5ld0l0ZW1zID0gWy4uLml0ZW1zXVxuXG4gICAgbGV0IGFsbFZlcnNlc0FsaWduZWQgPSBmYWxzZVxuXG4gICAgLy8gQ2hlY2sgaWYgYWxsIHZhbHVlcyBpbiB2ZXJzZXNBbGlnbm1lbnRTdGF0dXMgYXJlIHRydWVcbiAgICBpZiAodmVyc2VzQWxpZ25tZW50U3RhdHVzKSB7XG4gICAgICBhbGxWZXJzZXNBbGlnbmVkID0gT2JqZWN0LnZhbHVlcyh2ZXJzZXNBbGlnbm1lbnRTdGF0dXMpLmV2ZXJ5KGFsaWduU3RhdHVzID0+IGFsaWduU3RhdHVzID09PSB0cnVlKVxuICAgIH1cblxuICAgIGxldCBhbGlnbkljb24gPSBudWxsXG4gICAgbGV0IGFsaWduQnV0dG9uVGV4dCA9ICcnXG5cbiAgICBpZiAoYWxsVmVyc2VzQWxpZ25lZCkge1xuICAgICAgYWxpZ25JY29uID0gPFJ4TGluazIgaWQ9e2B2YWxpZF9pY29uXyR7cmVzb3VyY2VJZH1gfSBjb2xvcj0nI0JCQicgLz5cbiAgICAgIGFsaWduQnV0dG9uVGV4dCA9ICdBbGlnbm1lbnQgaXMgVmFsaWQnXG4gICAgfSBlbHNlIHtcbiAgICAgIGFsaWduSWNvbiA9IDxSeExpbmtCcmVhazIgaWQ9e2BpbnZhbGlkX2FsaWdubWVudF9pY29uXyR7cmVzb3VyY2VJZH1gfSBjb2xvcj0nIzAwMCcgLz5cbiAgICAgIGFsaWduQnV0dG9uVGV4dCA9ICdBbGlnbm1lbnQgaXMgSW52YWxpZCdcbiAgICB9XG5cbiAgICBpZiAoc2V0V29yZEFsaWduZXJTdGF0dXMgJiYgcmVzb3VyY2VJZCAhPT0gJ09SSUdJTkFMX1NPVVJDRScpIHtcbiAgICAgIG5ld0l0ZW1zLnB1c2goXG4gICAgICAgIDxJY29uQnV0dG9uXG4gICAgICAgICAgaWQ9e2BhbGlnbm1lbnRfaWNvbl8ke3Jlc291cmNlSWR9YH1cbiAgICAgICAgICBrZXk9J2NoZWNraW5nLWJ1dHRvbidcbiAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVBbGlnbkJ1dHRvbkNsaWNrfVxuICAgICAgICAgIHRpdGxlPXthbGlnbkJ1dHRvblRleHR9XG4gICAgICAgICAgYXJpYS1sYWJlbD17YWxpZ25CdXR0b25UZXh0fVxuICAgICAgICAgIHN0eWxlPXt7IGN1cnNvcjogJ3BvaW50ZXInIH19XG4gICAgICAgID5cbiAgICAgICAgICB7YWxpZ25JY29ufVxuICAgICAgICA8L0ljb25CdXR0b24+XG4gICAgICApXG4gICAgfVxuXG4gICAgbmV3SXRlbXMucHVzaChcbiAgICAgIDw+XG4gICAgICAgIDxVcGRhdGVCcmFuY2hCdXR0b24gey4uLnVwZGF0ZUJ1dHRvblByb3BzfSBpc0xvYWRpbmc9e2lzVXBkYXRlTG9hZGluZyB8fCBzdGFydFNhdmV9Lz5cbiAgICAgICAgPEVycm9yRGlhbG9nIHRpdGxlPXtkaWFsb2dUaXRsZX0gY29udGVudD17ZGlhbG9nTWVzc2FnZX0gb3Blbj17aXNFcnJvckRpYWxvZ09wZW59IG9uQ2xvc2U9e29uQ2xvc2VFcnJvckRpYWxvZ30gaXNMb2FkaW5nPXsgaXNVcGRhdGVMb2FkaW5nIHx8IHN0YXJ0U2F2ZSB9IGxpbms9e2RpYWxvZ0xpbmt9IGxpbmtUb29sdGlwPXtkaWFsb2dMaW5rVG9vbHRpcH0gLz5cbiAgICAgIDwvPlxuICAgIClcblxuICAgIHJldHVybiBuZXdJdGVtc1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8U2VsZWN0aW9uc0NvbnRleHRQcm92aWRlclxuICAgICAgc2VsZWN0aW9ucz17c2VsZWN0aW9uc31cbiAgICAgIG9uU2VsZWN0aW9ucz17bmV3U2VsZWN0aW9ucyA9PiB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdvblNlbGVjdGlvbnMnLCBuZXdTZWxlY3Rpb25zKVxuICAgICAgfX1cbiAgICAgIHF1b3RlPXtzZWxlY3RlZFF1b3RlPy5xdW90ZX1cbiAgICAgIG9jY3VycmVuY2U9e2ZpeE9jY3VycmVuY2Uoc2VsZWN0ZWRRdW90ZT8ub2NjdXJyZW5jZSl9XG4gICAgICB2ZXJzZU9iamVjdHNNYXA9e3ZlcnNlT2JqZWN0c01hcH1cbiAgICA+XG4gICAgICA8Q2FyZFxuICAgICAgICBpZD17YHNjcmlwdHVyZV9jYXJkXyR7Y2FyZE51bX1gfVxuICAgICAgICB0aXRsZT17c2NyaXB0dXJlTGFiZWx9XG4gICAgICAgIHNldHRpbmdzVGl0bGU9e3NjcmlwdHVyZVRpdGxlICsgJyBTZXR0aW5ncyd9XG4gICAgICAgIGl0ZW1zPXtpdGVtc31cbiAgICAgICAgY2xhc3Nlcz17Y2xhc3Nlc31cbiAgICAgICAgaGVhZGVycz17aGVhZGVyc31cbiAgICAgICAgZmlsdGVycz17ZmlsdGVyc31cbiAgICAgICAgZm9udFNpemU9e2ZvbnRTaXplfVxuICAgICAgICBpdGVtSW5kZXg9e2l0ZW1JbmRleH1cbiAgICAgICAgc2V0RmlsdGVycz17c2V0RmlsdGVyc31cbiAgICAgICAgc2V0Rm9udFNpemU9e3NldEZvbnRTaXplfVxuICAgICAgICBzZXRJdGVtSW5kZXg9e3NldEl0ZW1JbmRleH1cbiAgICAgICAgbWFya2Rvd25WaWV3PXttYXJrZG93blZpZXd9XG4gICAgICAgIHNldE1hcmtkb3duVmlldz17c2V0TWFya2Rvd25WaWV3fVxuICAgICAgICBnZXRDdXN0b21Db21wb25lbnQ9e2dldFNjcmlwdHVyZVNlbGVjdG9yfVxuICAgICAgICBoaWRlTWFya2Rvd25Ub2dnbGVcbiAgICAgICAgb25NZW51Q2xvc2U9e29uTWVudUNsb3NlfVxuICAgICAgICBvbk1pbmltaXplPXtvbk1pbmltaXplID8gKCkgPT4gb25NaW5pbWl6ZShpZCwgc2NyaXB0dXJlVGl0bGUpIDogbnVsbH1cbiAgICAgICAgZWRpdGFibGU9e2VuYWJsZUVkaXQgfHwgZW5hYmxlQWxpZ25tZW50fVxuICAgICAgICBzYXZlZD17c3RhcnRTYXZlIHx8ICFoYXZlVW5zYXZlZENoYW5nZXN9XG4gICAgICAgIG9uU2F2ZUVkaXQ9eygpID0+IHNldFN0YXRlKHsgc2F2ZUNsaWNrZWQ6IHRydWUgfSl9XG4gICAgICAgIG9uUmVuZGVyVG9vbGJhcj17b25SZW5kZXJUb29sYmFyfVxuICAgICAgPlxuICAgICAgICA8ZGl2IGlkPVwic2NyaXB0dXJlLXBhbmUtbGlzdFwiPlxuICAgICAgICAgIHtyZW5kZXJlZFNjcmlwdHVyZVBhbmVzfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvQ2FyZD5cbiAgICAgIDxWZXJzZVNlbGVjdG9yUG9wdXBcbiAgICAgICAgcmVzb3VyY2VJZD17cmVzb3VyY2VJZH1cbiAgICAgICAgb3Blbj17c2hvd0FsaWdubWVudFBvcHVwfVxuICAgICAgICBvbkNsb3NlPXsoKSA9PiBzZXRTdGF0ZSh7IHNob3dBbGlnbm1lbnRQb3B1cDogZmFsc2UgfSl9XG4gICAgICAgIHZlcnNlc0ZvclJlZj17dmVyc2VzRm9yUmVmfVxuICAgICAgICB2ZXJzZXNBbGlnbm1lbnRTdGF0dXM9e3ZlcnNlc0FsaWdubWVudFN0YXR1c31cbiAgICAgICAgb25WZXJzZVNlbGVjdD17KHZlcnNlKSA9PiBzZXRTdGF0ZSh7XG4gICAgICAgICAgdmVyc2VTZWxlY3RlZEZvckFsaWdubWVudDogdmVyc2UsXG4gICAgICAgICAgc2hvd0FsaWdubWVudFBvcHVwOiBmYWxzZSxcbiAgICAgICAgfSl9XG4gICAgICAvPlxuICAgIDwvU2VsZWN0aW9uc0NvbnRleHRQcm92aWRlcj5cbiAgKVxufVxuXG5TY3JpcHR1cmVDYXJkLnByb3BUeXBlcyA9IHtcbiAgLyoqIHJlcG8gYnJhbmNoIG9yIHRhZyBzdWNoIGFzIG1hc3RlciAqL1xuICBhcHBSZWY6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgLyoqIGF1dGhlbnRpY2F0aW9uIGluZm8gKi9cbiAgYXV0aGVudGljYXRpb246IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKiBpbmRleCBmb3IgY3VycmVudCBib29rIChlLmcuICcwMScgZm9yICdnZW4nKSovXG4gIGJvb2tJbmRleDogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqIHNjcmlwdHVyZSBjYXJkIG51bWJlciAoMCB0byAyIGZvciBleGFtcGxlKSAqL1xuICBjYXJkTnVtOiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsXG4gIC8qKiBDU1MgY2xhc3NlcyAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKiogaWYgdHJ1ZSB0aGVuIHdvcmQgZGF0YSBob3ZlciBpcyBzaG93biAqL1xuICBkaXNhYmxlV29yZFBvcG92ZXI6IFByb3BUeXBlcy5ib29sLFxuICAvKiogZ2V0IGxhbmd1YWdlIGRldGFpbHMgKi9cbiAgZ2V0TGFuZ3VhZ2U6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIC8qKiBmdW5jdGlvbiB0byBnZXQgbGF0ZXN0IGxleGljb24gZGF0YSAqL1xuICBnZXRMZXhpY29uRGF0YTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKiBvcHRpb25hbCB1cmwgZm9yIGdyZWVrIHJlcG8gKi9cbiAgZ3JlZWtSZXBvVXJsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKiogb3B0aW9uYWwgdXJsIGZvciBoZWJyZXcgcmVwbyAqL1xuICBoZWJyZXdSZXBvVXJsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKiogb3B0aW9uYWwgaHR0cCB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyBmb3IgZmV0Y2hpbmcgcmVzb3VyY2VzLCBkZWZhdWx0IGlzIDAgKHZlcnkgbG9uZyB3YWl0KSAqL1xuICBodHRwQ29uZmlnOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKiogaHRtbCBpZGVudGlmaWVyIHRvIHVzZSBmb3IgY2FyZCAqL1xuICBpZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqIG1ldGhvZCB0byBkZXRlcm1pbmUgaWYgTlQgb3IgT1QgKi9cbiAgaXNOVDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgLyoqIHVzZXItbmFtZSAqL1xuICBsb2dnZWRJblVzZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKiBmdW5jdGlvbiB0byBtaW5pbWl6ZSB0aGUgY2FyZCAob3B0aW9uYWwpICovXG4gIG9uTWluaW1pemU6IFByb3BUeXBlcy5mdW5jLFxuICAvKiogb3B0aW9uYWwgY2FsbGJhY2sgaWYgZXJyb3IgbG9hZGluZyByZXNvdXJjZSwgcGFyYW1ldGVyIHJldHVybmVkIGFyZTpcbiAgICogICAgKHtzdHJpbmd9IGVycm9yTWVzc2FnZSwge2Jvb2xlYW59IGlzQWNjZXNzRXJyb3IsIHtvYmplY3R9IHJlc291cmNlU3RhdHVzKVxuICAgKiAgICAgIC0gaXNBY2Nlc3NFcnJvciAtIGlzIHRydWUgaWYgdGhpcyB3YXMgYW4gZXJyb3IgdHJ5aW5nIHRvIGFjY2VzcyBmaWxlXG4gICAqICAgICAgLSByZXNvdXJjZVN0YXR1cyAtIGlzIG9iamVjdCBjb250YWluaW5nIGRldGFpbHMgYWJvdXQgcHJvYmxlbXMgZmV0Y2hpbmcgcmVzb3VyY2UgKi9cbiAgb25SZXNvdXJjZUVycm9yOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqIHRoZSBvcmlnaW5hbCBzY3JpcHR1cmUgYm9va09iamVjdHMgZm9yIGN1cnJlbnQgYm9vayAqL1xuICBvcmlnaW5hbFNjcmlwdHVyZUJvb2tPYmplY3RzOiBQcm9wVHlwZXMub2JqZWN0LFxuICByZWZlcmVuY2U6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgLyoqIHByb2plY3RJZCAoYm9va0lEKSB0byB1c2UgKi9cbiAgICBwcm9qZWN0SWQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICAvKiogY3VycmVudCBjaGFwdGVyIG51bWJlciAqL1xuICAgIGNoYXB0ZXI6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKS5pc1JlcXVpcmVkLFxuICAgIC8qKiBjdXJyZW50IHZlcnNlIG51bWJlciAqL1xuICAgIHZlcnNlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSkuaXNSZXF1aXJlZCxcbiAgfSksXG4gIC8qKiByZXNvdXJjZSBvYmplY3QgKi9cbiAgcmVzb3VyY2U6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgLyoqIHJlc291cmNlIGxhbmd1YWdlIHRvIHVzZSAqL1xuICAgIGxhbmd1YWdlSWQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICAvKiogcmVwbyBvd25lciBzdWNoIGFzIHVuZm9sZGluZ1dvcmQgKi9cbiAgICBvd25lcjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIC8qKiByZXNvdXJjZUlkIHRvIHVzZSAoZS5nLiB1Z250KSAqL1xuICAgIHJlc291cmNlSWQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICAvKiogcmVwbyBvd25lciBmb3Igb3JpZ2luYWwgbGFuZ3VhZ2VzIHN1Y2ggYXMgdW5mb2xkaW5nV29yZCAqL1xuICAgIG9yaWdpbmFsTGFuZ3VhZ2VPd25lcjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICB9KSxcbiAgLyoqIHJlc291cmNlTGluayAqL1xuICByZXNvdXJjZUxpbms6IFByb3BUeXBlcy5hbnksXG4gIC8qKlRoaXMgaXMgY3VycmVudGx5IHNlbGVjdGVkIHF1b3RlICovXG4gIHNlbGVjdGVkUXVvdGU6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKiBzZXJ2ZXIgKGUuZy4gJ2h0dHBzOi8vZ2l0LmRvb3I0My5vcmcnKSAqL1xuICBzZXJ2ZXI6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgLyoqIGNhbGxiYWNrIHRvIHVwZGF0ZSBsb2FkaW5nIHN0YXRlICovXG4gIHNldEFyZVJlc291cmNlc0xvYWRpbmc6IFByb3BUeXBlcy5mdW5jLFxuICAvKiogY2FsbGJhY2sgdG8gdXBkYXRlIHNhdmluZyBzdGF0ZSovXG4gIHNldEFyZVJlc291cmNlc1NhdmluZzogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKiBjYWxsYmFjayB0byByZXBvcnQgY2FyZCBtZXJnZSBzdGF0dXMgKi9cbiAgc2V0Q2FyZHNMb2FkaW5nTWVyZ2U6IFByb3BUeXBlcy5mdW5jLFxuICAvKiogY2FsbGJhY2sgdG8gcmVwb3J0IGNhcmQgdXBkYXRlIHN0YXR1cyAqL1xuICBzZXRDYXJkc0xvYWRpbmdVcGRhdGU6IFByb3BUeXBlcy5mdW5jLFxuICAvKiogY2FsbGJhY2sgdG8gcmVwb3J0IGNhcmQgc2F2aW5nIHN0YXR1cyAqL1xuICBzZXRDYXJkc1NhdmluZzogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKiBmdW5jdGlvbiB0byBzZXQgc3RhdGUgaW4gYXBwIHRoYXQgdGhlcmUgYXJlIHVuc2F2ZWQgY2hhbmdlcyAqL1xuICBzZXRTYXZlZENoYW5nZXM6IFByb3BUeXBlcy5mdW5jLFxuICAvKiogY2FsbGJhY2sgdG8gdXBkYXRlIHdvcmQgYWxpZ25lciBzdGF0ZSAqL1xuICBzZXRXb3JkQWxpZ25lclN0YXR1czogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKiB0aXRsZSBmb3Igc2NyaXB0dXJlIGNhcmQgKi9cbiAgdGl0bGU6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgLyoqIG9wdGlvbmFsIGZ1bmN0aW9uIGZvciBsb2NhbGl6YXRpb24gKi9cbiAgdHJhbnNsYXRlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqIGNhbGxiYWNrIHRvIHVwZGF0ZSB0aGUgY2FyZCdzIG1lcmdlIHN0YXRlIGluIGFwcCAqL1xuICB1cGRhdGVNZXJnZVN0YXRlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqIHVzZSBtZXRob2QgZm9yIHVzaW5nIGxvY2FsIHN0b3JhZ2Ugc3BlY2lmaWMgZm9yIHVzZXIgKi9cbiAgdXNlVXNlckxvY2FsU3RvcmFnZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbn1cbiJdfQ==
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import "core-js/modules/es.array.join.js";
|
|
2
|
+
import "core-js/modules/es.regexp.exec.js";
|
|
3
|
+
import "core-js/modules/es.string.replace.js";
|
|
4
|
+
/// <reference types="jest" />
|
|
5
|
+
import path from 'path';
|
|
6
|
+
import fs from 'fs-extra';
|
|
7
|
+
import { escapeJsonStringChars, getPatch } from '../files';
|
|
8
|
+
var fileName = '57-TIT.usfm';
|
|
9
|
+
var filePath = path.join(__dirname, './fixture', fileName);
|
|
10
|
+
var titUsfm = fs.readFileSync(filePath, 'utf-8');
|
|
11
|
+
describe('escapeJsonStringChars', function () {
|
|
12
|
+
it('should escape invalid characters', function () {
|
|
13
|
+
// given
|
|
14
|
+
var rawData = '\\p\n' + '\\v 1 \\zaln-s |x-strong="G39720" x-lemma="Παῦλος" x-morph="Gr,N,,,,,NMS," x-occurrence="1" x-occurrences="1" x-content="Παῦλος"\\*\\w Paul|x-occurrence="1" x-occurrences="1"\\w*\\zaln-e\\*,\n';
|
|
15
|
+
var expectedEscapedData = '\\\\p\\n' + '\\\\v 1 \\\\zaln-s |x-strong=\\"G39720\\" x-lemma=\\"Παῦλος\\" x-morph=\\"Gr,N,,,,,NMS,\\" x-occurrence=\\"1\\" x-occurrences=\\"1\\" x-content=\\"Παῦλος\\"\\\\*\\\\w Paul|x-occurrence=\\"1\\" x-occurrences=\\"1\\"\\\\w*\\\\zaln-e\\\\*,\\n'; // when
|
|
16
|
+
|
|
17
|
+
var safeData = escapeJsonStringChars(rawData); // then
|
|
18
|
+
|
|
19
|
+
console.log(safeData);
|
|
20
|
+
expect(safeData).toEqual(expectedEscapedData);
|
|
21
|
+
});
|
|
22
|
+
});
|
|
23
|
+
describe('getPatch', function () {
|
|
24
|
+
it('should succeed with no escaping', function () {
|
|
25
|
+
// given
|
|
26
|
+
var editedFile = titUsfm.replace("\\v 1 ", "\\v 1 EDITED verse: "); // console.log(titUsfm, editedFile)
|
|
27
|
+
// when
|
|
28
|
+
|
|
29
|
+
var diffResult = getPatch(fileName, titUsfm, editedFile, false); // then
|
|
30
|
+
|
|
31
|
+
console.log(diffResult);
|
|
32
|
+
expect(diffResult).toMatchSnapshot();
|
|
33
|
+
});
|
|
34
|
+
it('should succeed with escaping', function () {
|
|
35
|
+
// given
|
|
36
|
+
var editedFile = titUsfm.replace("\\v 1 ", "\\v 1 EDITED verse: "); // console.log(titUsfm, editedFile)
|
|
37
|
+
// when
|
|
38
|
+
|
|
39
|
+
var diffResult = getPatch(fileName, titUsfm, editedFile, true); // then
|
|
40
|
+
|
|
41
|
+
console.log(diffResult);
|
|
42
|
+
expect(diffResult).toMatchSnapshot();
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy91dGlscy9fX3Rlc3RzX18vZGlmZi5zcGVjLnRzeCJdLCJuYW1lcyI6WyJwYXRoIiwiZnMiLCJlc2NhcGVKc29uU3RyaW5nQ2hhcnMiLCJnZXRQYXRjaCIsImZpbGVOYW1lIiwiZmlsZVBhdGgiLCJqb2luIiwiX19kaXJuYW1lIiwidGl0VXNmbSIsInJlYWRGaWxlU3luYyIsImRlc2NyaWJlIiwiaXQiLCJyYXdEYXRhIiwiZXhwZWN0ZWRFc2NhcGVkRGF0YSIsInNhZmVEYXRhIiwiY29uc29sZSIsImxvZyIsImV4cGVjdCIsInRvRXF1YWwiLCJlZGl0ZWRGaWxlIiwicmVwbGFjZSIsImRpZmZSZXN1bHQiLCJ0b01hdGNoU25hcHNob3QiXSwibWFwcGluZ3MiOiI7OztBQUFBO0FBQ0EsT0FBT0EsSUFBUCxNQUFpQixNQUFqQjtBQUNBLE9BQU9DLEVBQVAsTUFBZSxVQUFmO0FBQ0EsU0FBU0MscUJBQVQsRUFBZ0NDLFFBQWhDLFFBQWdELFVBQWhEO0FBRUEsSUFBTUMsUUFBUSxHQUFHLGFBQWpCO0FBQ0EsSUFBTUMsUUFBUSxHQUFHTCxJQUFJLENBQUNNLElBQUwsQ0FBVUMsU0FBVixFQUFxQixXQUFyQixFQUFrQ0gsUUFBbEMsQ0FBakI7QUFDQSxJQUFNSSxPQUFPLEdBQUdQLEVBQUUsQ0FBQ1EsWUFBSCxDQUFnQkosUUFBaEIsRUFBMEIsT0FBMUIsQ0FBaEI7QUFFQUssUUFBUSxDQUFDLHVCQUFELEVBQTBCLFlBQU07QUFDdENDLEVBQUFBLEVBQUUsQ0FBQyxrQ0FBRCxFQUFxQyxZQUFNO0FBQzNDO0FBQ0EsUUFBTUMsT0FBTyxHQUFHLFVBQ2Qsa01BREY7QUFFQSxRQUFNQyxtQkFBbUIsR0FBRyxhQUMxQixpUEFERixDQUoyQyxDQU8zQzs7QUFDQSxRQUFNQyxRQUFRLEdBQUdaLHFCQUFxQixDQUFDVSxPQUFELENBQXRDLENBUjJDLENBVTNDOztBQUNBRyxJQUFBQSxPQUFPLENBQUNDLEdBQVIsQ0FBWUYsUUFBWjtBQUNBRyxJQUFBQSxNQUFNLENBQUNILFFBQUQsQ0FBTixDQUFpQkksT0FBakIsQ0FBeUJMLG1CQUF6QjtBQUNELEdBYkMsQ0FBRjtBQWNELENBZk8sQ0FBUjtBQWlCQUgsUUFBUSxDQUFDLFVBQUQsRUFBYSxZQUFNO0FBQ3pCQyxFQUFBQSxFQUFFLENBQUMsaUNBQUQsRUFBb0MsWUFBTTtBQUMxQztBQUNBLFFBQU1RLFVBQVUsR0FBR1gsT0FBTyxDQUFDWSxPQUFSLGtDQUFuQixDQUYwQyxDQUcxQztBQUVBOztBQUNBLFFBQU1DLFVBQVUsR0FBR2xCLFFBQVEsQ0FBQ0MsUUFBRCxFQUFXSSxPQUFYLEVBQW9CVyxVQUFwQixFQUFnQyxLQUFoQyxDQUEzQixDQU4wQyxDQVExQzs7QUFDQUosSUFBQUEsT0FBTyxDQUFDQyxHQUFSLENBQVlLLFVBQVo7QUFDQUosSUFBQUEsTUFBTSxDQUFDSSxVQUFELENBQU4sQ0FBbUJDLGVBQW5CO0FBQ0QsR0FYQyxDQUFGO0FBYUFYLEVBQUFBLEVBQUUsQ0FBQyw4QkFBRCxFQUFpQyxZQUFNO0FBQ3ZDO0FBQ0EsUUFBTVEsVUFBVSxHQUFHWCxPQUFPLENBQUNZLE9BQVIsa0NBQW5CLENBRnVDLENBR3ZDO0FBRUE7O0FBQ0EsUUFBTUMsVUFBVSxHQUFHbEIsUUFBUSxDQUFDQyxRQUFELEVBQVdJLE9BQVgsRUFBb0JXLFVBQXBCLEVBQWdDLElBQWhDLENBQTNCLENBTnVDLENBUXZDOztBQUNBSixJQUFBQSxPQUFPLENBQUNDLEdBQVIsQ0FBWUssVUFBWjtBQUNBSixJQUFBQSxNQUFNLENBQUNJLFVBQUQsQ0FBTixDQUFtQkMsZUFBbkI7QUFDRCxHQVhDLENBQUY7QUFZRCxDQTFCTyxDQUFSIiwic291cmNlc0NvbnRlbnQiOlsiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCJqZXN0XCIgLz5cbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXG5pbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnXG5pbXBvcnQgeyBlc2NhcGVKc29uU3RyaW5nQ2hhcnMsIGdldFBhdGNoIH0gZnJvbSAnLi4vZmlsZXMnXG5cbmNvbnN0IGZpbGVOYW1lID0gJzU3LVRJVC51c2ZtJ1xuY29uc3QgZmlsZVBhdGggPSBwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi9maXh0dXJlJywgZmlsZU5hbWUpXG5jb25zdCB0aXRVc2ZtID0gZnMucmVhZEZpbGVTeW5jKGZpbGVQYXRoLCAndXRmLTgnKVxuXG5kZXNjcmliZSgnZXNjYXBlSnNvblN0cmluZ0NoYXJzJywgKCkgPT4ge1xuICBpdCgnc2hvdWxkIGVzY2FwZSBpbnZhbGlkIGNoYXJhY3RlcnMnLCAoKSA9PiB7XG4gICAgLy8gZ2l2ZW5cbiAgICBjb25zdCByYXdEYXRhID0gJ1xcXFxwXFxuJyArXG4gICAgICAnXFxcXHYgMSBcXFxcemFsbi1zIHx4LXN0cm9uZz1cIkczOTcyMFwiIHgtbGVtbWE9XCLOoM6x4b+mzrvOv8+CXCIgeC1tb3JwaD1cIkdyLE4sLCwsLE5NUyxcIiB4LW9jY3VycmVuY2U9XCIxXCIgeC1vY2N1cnJlbmNlcz1cIjFcIiB4LWNvbnRlbnQ9XCLOoM6x4b+mzrvOv8+CXCJcXFxcKlxcXFx3IFBhdWx8eC1vY2N1cnJlbmNlPVwiMVwiIHgtb2NjdXJyZW5jZXM9XCIxXCJcXFxcdypcXFxcemFsbi1lXFxcXCosXFxuJ1xuICAgIGNvbnN0IGV4cGVjdGVkRXNjYXBlZERhdGEgPSAnXFxcXFxcXFxwXFxcXG4nICtcbiAgICAgICdcXFxcXFxcXHYgMSBcXFxcXFxcXHphbG4tcyB8eC1zdHJvbmc9XFxcXFwiRzM5NzIwXFxcXFwiIHgtbGVtbWE9XFxcXFwizqDOseG/ps67zr/PglxcXFxcIiB4LW1vcnBoPVxcXFxcIkdyLE4sLCwsLE5NUyxcXFxcXCIgeC1vY2N1cnJlbmNlPVxcXFxcIjFcXFxcXCIgeC1vY2N1cnJlbmNlcz1cXFxcXCIxXFxcXFwiIHgtY29udGVudD1cXFxcXCLOoM6x4b+mzrvOv8+CXFxcXFwiXFxcXFxcXFwqXFxcXFxcXFx3IFBhdWx8eC1vY2N1cnJlbmNlPVxcXFxcIjFcXFxcXCIgeC1vY2N1cnJlbmNlcz1cXFxcXCIxXFxcXFwiXFxcXFxcXFx3KlxcXFxcXFxcemFsbi1lXFxcXFxcXFwqLFxcXFxuJ1xuXG4gICAgLy8gd2hlblxuICAgIGNvbnN0IHNhZmVEYXRhID0gZXNjYXBlSnNvblN0cmluZ0NoYXJzKHJhd0RhdGEpXG5cbiAgICAvLyB0aGVuXG4gICAgY29uc29sZS5sb2coc2FmZURhdGEpXG4gICAgZXhwZWN0KHNhZmVEYXRhKS50b0VxdWFsKGV4cGVjdGVkRXNjYXBlZERhdGEpXG4gIH0pXG59KVxuXG5kZXNjcmliZSgnZ2V0UGF0Y2gnLCAoKSA9PiB7XG4gIGl0KCdzaG91bGQgc3VjY2VlZCB3aXRoIG5vIGVzY2FwaW5nJywgKCkgPT4ge1xuICAgIC8vIGdpdmVuXG4gICAgY29uc3QgZWRpdGVkRmlsZSA9IHRpdFVzZm0ucmVwbGFjZShgXFxcXHYgMSBgLCBgXFxcXHYgMSBFRElURUQgdmVyc2U6IGApXG4gICAgLy8gY29uc29sZS5sb2codGl0VXNmbSwgZWRpdGVkRmlsZSlcblxuICAgIC8vIHdoZW5cbiAgICBjb25zdCBkaWZmUmVzdWx0ID0gZ2V0UGF0Y2goZmlsZU5hbWUsIHRpdFVzZm0sIGVkaXRlZEZpbGUsIGZhbHNlKVxuXG4gICAgLy8gdGhlblxuICAgIGNvbnNvbGUubG9nKGRpZmZSZXN1bHQpXG4gICAgZXhwZWN0KGRpZmZSZXN1bHQpLnRvTWF0Y2hTbmFwc2hvdCgpXG4gIH0pXG5cbiAgaXQoJ3Nob3VsZCBzdWNjZWVkIHdpdGggZXNjYXBpbmcnLCAoKSA9PiB7XG4gICAgLy8gZ2l2ZW5cbiAgICBjb25zdCBlZGl0ZWRGaWxlID0gdGl0VXNmbS5yZXBsYWNlKGBcXFxcdiAxIGAsIGBcXFxcdiAxIEVESVRFRCB2ZXJzZTogYClcbiAgICAvLyBjb25zb2xlLmxvZyh0aXRVc2ZtLCBlZGl0ZWRGaWxlKVxuXG4gICAgLy8gd2hlblxuICAgIGNvbnN0IGRpZmZSZXN1bHQgPSBnZXRQYXRjaChmaWxlTmFtZSwgdGl0VXNmbSwgZWRpdGVkRmlsZSwgdHJ1ZSlcblxuICAgIC8vIHRoZW5cbiAgICBjb25zb2xlLmxvZyhkaWZmUmVzdWx0KVxuICAgIGV4cGVjdChkaWZmUmVzdWx0KS50b01hdGNoU25hcHNob3QoKVxuICB9KVxufSlcbiJdfQ==
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { createPatch } from 'diff';
|
|
2
|
+
/**
|
|
3
|
+
* replace any characters that are not compatible with a json string content
|
|
4
|
+
* @param {string} diffFile
|
|
5
|
+
* @return {string} escaped text
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
export function escapeJsonStringChars(diffFile) {
|
|
9
|
+
var newDiff = diffFile.replaceAll('\\', '\\\\');
|
|
10
|
+
newDiff = newDiff.replaceAll('\n\r', '\\n');
|
|
11
|
+
newDiff = newDiff.replaceAll('\n', '\\n');
|
|
12
|
+
newDiff = newDiff.replaceAll('"', '\\"');
|
|
13
|
+
return newDiff;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* create a patch of the differences between the contents of originalFile and editedFile
|
|
17
|
+
* @param {string} fileName - name of the file being changed
|
|
18
|
+
* @param {string} originalFileContents - original file contents
|
|
19
|
+
* @param {string} editedFileContents - new file contents
|
|
20
|
+
* @param {boolean} jsonEscape - if true then we escape characters to fit in json string contents
|
|
21
|
+
* @return {string} - differences between files
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
export function getPatch(fileName, originalFileContents, editedFileContents) {
|
|
25
|
+
var jsonEscape = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
|
|
26
|
+
var diffResult = createPatch(fileName, originalFileContents, editedFileContents);
|
|
27
|
+
|
|
28
|
+
if (jsonEscape) {
|
|
29
|
+
diffResult = escapeJsonStringChars(diffResult);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
return diffResult;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9maWxlcy50cyJdLCJuYW1lcyI6WyJjcmVhdGVQYXRjaCIsImVzY2FwZUpzb25TdHJpbmdDaGFycyIsImRpZmZGaWxlIiwibmV3RGlmZiIsInJlcGxhY2VBbGwiLCJnZXRQYXRjaCIsImZpbGVOYW1lIiwib3JpZ2luYWxGaWxlQ29udGVudHMiLCJlZGl0ZWRGaWxlQ29udGVudHMiLCJqc29uRXNjYXBlIiwiZGlmZlJlc3VsdCJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsV0FBVCxRQUE0QixNQUE1QjtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBQ0EsT0FBTyxTQUFTQyxxQkFBVCxDQUErQkMsUUFBL0IsRUFBeUM7QUFDOUMsTUFBSUMsT0FBTyxHQUFHRCxRQUFRLENBQUNFLFVBQVQsQ0FBb0IsSUFBcEIsRUFBMEIsTUFBMUIsQ0FBZDtBQUNBRCxFQUFBQSxPQUFPLEdBQUdBLE9BQU8sQ0FBQ0MsVUFBUixDQUFtQixNQUFuQixFQUEyQixLQUEzQixDQUFWO0FBQ0FELEVBQUFBLE9BQU8sR0FBR0EsT0FBTyxDQUFDQyxVQUFSLENBQW1CLElBQW5CLEVBQXlCLEtBQXpCLENBQVY7QUFDQUQsRUFBQUEsT0FBTyxHQUFHQSxPQUFPLENBQUNDLFVBQVIsQ0FBbUIsR0FBbkIsRUFBd0IsS0FBeEIsQ0FBVjtBQUNBLFNBQU9ELE9BQVA7QUFDRDtBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBQ0EsT0FBTyxTQUFTRSxRQUFULENBQWtCQyxRQUFsQixFQUE0QkMsb0JBQTVCLEVBQWtEQyxrQkFBbEQsRUFBMEY7QUFBQSxNQUFwQkMsVUFBb0IsdUVBQVAsS0FBTztBQUMvRixNQUFJQyxVQUFVLEdBQUdWLFdBQVcsQ0FBQ00sUUFBRCxFQUFXQyxvQkFBWCxFQUFpQ0Msa0JBQWpDLENBQTVCOztBQUVBLE1BQUlDLFVBQUosRUFBZ0I7QUFDZEMsSUFBQUEsVUFBVSxHQUFHVCxxQkFBcUIsQ0FBQ1MsVUFBRCxDQUFsQztBQUNEOztBQUNELFNBQU9BLFVBQVA7QUFDRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZVBhdGNoIH0gZnJvbSAnZGlmZidcblxuLyoqXG4gKiByZXBsYWNlIGFueSBjaGFyYWN0ZXJzIHRoYXQgYXJlIG5vdCBjb21wYXRpYmxlIHdpdGggYSBqc29uIHN0cmluZyBjb250ZW50XG4gKiBAcGFyYW0ge3N0cmluZ30gZGlmZkZpbGVcbiAqIEByZXR1cm4ge3N0cmluZ30gZXNjYXBlZCB0ZXh0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlc2NhcGVKc29uU3RyaW5nQ2hhcnMoZGlmZkZpbGUpIHtcbiAgbGV0IG5ld0RpZmYgPSBkaWZmRmlsZS5yZXBsYWNlQWxsKCdcXFxcJywgJ1xcXFxcXFxcJylcbiAgbmV3RGlmZiA9IG5ld0RpZmYucmVwbGFjZUFsbCgnXFxuXFxyJywgJ1xcXFxuJylcbiAgbmV3RGlmZiA9IG5ld0RpZmYucmVwbGFjZUFsbCgnXFxuJywgJ1xcXFxuJylcbiAgbmV3RGlmZiA9IG5ld0RpZmYucmVwbGFjZUFsbCgnXCInLCAnXFxcXFwiJylcbiAgcmV0dXJuIG5ld0RpZmZcbn1cblxuLyoqXG4gKiBjcmVhdGUgYSBwYXRjaCBvZiB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUgY29udGVudHMgb2Ygb3JpZ2luYWxGaWxlIGFuZCBlZGl0ZWRGaWxlXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZU5hbWUgLSBuYW1lIG9mIHRoZSBmaWxlIGJlaW5nIGNoYW5nZWRcbiAqIEBwYXJhbSB7c3RyaW5nfSBvcmlnaW5hbEZpbGVDb250ZW50cyAtIG9yaWdpbmFsIGZpbGUgY29udGVudHNcbiAqIEBwYXJhbSB7c3RyaW5nfSBlZGl0ZWRGaWxlQ29udGVudHMgLSBuZXcgZmlsZSBjb250ZW50c1xuICogQHBhcmFtIHtib29sZWFufSBqc29uRXNjYXBlIC0gaWYgdHJ1ZSB0aGVuIHdlIGVzY2FwZSBjaGFyYWN0ZXJzIHRvIGZpdCBpbiBqc29uIHN0cmluZyBjb250ZW50c1xuICogQHJldHVybiB7c3RyaW5nfSAtIGRpZmZlcmVuY2VzIGJldHdlZW4gZmlsZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFBhdGNoKGZpbGVOYW1lLCBvcmlnaW5hbEZpbGVDb250ZW50cywgZWRpdGVkRmlsZUNvbnRlbnRzLCBqc29uRXNjYXBlID0gZmFsc2UpIHtcbiAgbGV0IGRpZmZSZXN1bHQgPSBjcmVhdGVQYXRjaChmaWxlTmFtZSwgb3JpZ2luYWxGaWxlQ29udGVudHMsIGVkaXRlZEZpbGVDb250ZW50cylcblxuICBpZiAoanNvbkVzY2FwZSkge1xuICAgIGRpZmZSZXN1bHQgPSBlc2NhcGVKc29uU3RyaW5nQ2hhcnMoZGlmZlJlc3VsdCk7XG4gIH1cbiAgcmV0dXJuIGRpZmZSZXN1bHRcbn1cbiJdfQ==
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "single-scripture-rcl",
|
|
3
3
|
"description": "A React Component Library for Rendering a Single Scripture Resource.",
|
|
4
|
-
"version": "3.4.
|
|
4
|
+
"version": "3.4.9-beta.9",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
7
7
|
"url": "https://github.com/unfoldingWord/single-scripture-rcl.git"
|
|
@@ -72,8 +72,10 @@
|
|
|
72
72
|
"eslint-plugin-prettier": "3.1.4",
|
|
73
73
|
"eslint-plugin-react": "7.21.5",
|
|
74
74
|
"eslint-plugin-react-hooks": "^4.2.0",
|
|
75
|
-
"
|
|
75
|
+
"fs-extra": "^11.1.1",
|
|
76
|
+
"gitea-react-toolkit": "file:.yalc/gitea-react-toolkit",
|
|
76
77
|
"jest": "^29.6.4",
|
|
78
|
+
"path-extra": "^4.3.0",
|
|
77
79
|
"prop-types": "^15.7.2",
|
|
78
80
|
"react": "^17.0.1",
|
|
79
81
|
"react-dom": "^17.0.1",
|
|
@@ -94,6 +96,7 @@
|
|
|
94
96
|
"@types/react": "^17.0.0",
|
|
95
97
|
"@types/react-dom": "^17.0.0",
|
|
96
98
|
"deep-equal": "^2.0.5",
|
|
99
|
+
"diff": "^5.1.0",
|
|
97
100
|
"lodash": "^4.17.21",
|
|
98
101
|
"react-docgen-typescript": "^1.20.5",
|
|
99
102
|
"source-map-loader": "^1.1.3",
|