yapp 2.2.107 → 2.2.108
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/example.js +52 -64
- package/lib/colours.js +1 -1
- package/lib/plugin/javascript.js +1 -1
- package/lib/plugin/json.js +1 -1
- package/lib/plugin/plainText.js +1 -1
- package/lib/plugin/xml.js +1 -1
- package/lib/processor.js +1 -1
- package/lib/richTextarea.js +1 -1
- package/lib/yapp.js +1 -1
- package/package.json +3 -3
package/example.js
CHANGED
|
@@ -24907,9 +24907,24 @@
|
|
|
24907
24907
|
Object.defineProperty(exports, "__esModule", {
|
|
24908
24908
|
value: true
|
|
24909
24909
|
});
|
|
24910
|
+
exports.rulesAsString = rulesAsString;
|
|
24910
24911
|
exports.ruleMapFromRules = ruleMapFromRules;
|
|
24911
24912
|
exports.startRuleFromRules = startRuleFromRules;
|
|
24913
|
+
exports.default = void 0;
|
|
24912
24914
|
var _array = require_array3();
|
|
24915
|
+
var _constants = require_constants4();
|
|
24916
|
+
function rulesAsString(rules, multiLine) {
|
|
24917
|
+
var maximumRuleNameLength1 = rules.reduce(function(maximumRuleNameLength, rule) {
|
|
24918
|
+
var ruleName = rule.getName(), ruleNameLength = ruleName.length;
|
|
24919
|
+
maximumRuleNameLength = Math.max(maximumRuleNameLength, ruleNameLength);
|
|
24920
|
+
return maximumRuleNameLength;
|
|
24921
|
+
}, 0), rulesString1 = rules.reduce(function(rulesString, rule) {
|
|
24922
|
+
var ruleString = rule.asString(maximumRuleNameLength1, multiLine);
|
|
24923
|
+
rulesString += ruleString;
|
|
24924
|
+
return rulesString;
|
|
24925
|
+
}, _constants.EMPTY_STRING).replace(/^\n\n/, _constants.EMPTY_STRING);
|
|
24926
|
+
return rulesString1;
|
|
24927
|
+
}
|
|
24913
24928
|
function ruleMapFromRules(rules) {
|
|
24914
24929
|
var ruleMap = {};
|
|
24915
24930
|
rules.forEach(function(rule) {
|
|
@@ -24922,6 +24937,12 @@
|
|
|
24922
24937
|
var firstRule = (0, _array).first(rules), startRule = firstRule;
|
|
24923
24938
|
return startRule;
|
|
24924
24939
|
}
|
|
24940
|
+
var _default = {
|
|
24941
|
+
rulesAsString,
|
|
24942
|
+
ruleMapFromRules,
|
|
24943
|
+
startRuleFromRules
|
|
24944
|
+
};
|
|
24945
|
+
exports.default = _default;
|
|
24925
24946
|
}
|
|
24926
24947
|
});
|
|
24927
24948
|
|
|
@@ -25445,6 +25466,12 @@
|
|
|
25445
25466
|
return _parser2.default;
|
|
25446
25467
|
}
|
|
25447
25468
|
});
|
|
25469
|
+
Object.defineProperty(exports, "rulesUtilities", {
|
|
25470
|
+
enumerable: true,
|
|
25471
|
+
get: function() {
|
|
25472
|
+
return _rules.default;
|
|
25473
|
+
}
|
|
25474
|
+
});
|
|
25448
25475
|
Object.defineProperty(exports, "Rule", {
|
|
25449
25476
|
enumerable: true,
|
|
25450
25477
|
get: function() {
|
|
@@ -25484,6 +25511,7 @@
|
|
|
25484
25511
|
var _parser = _interopRequireDefault2(require_parser());
|
|
25485
25512
|
var _parser1 = _interopRequireDefault2(require_parser4());
|
|
25486
25513
|
var _parser2 = _interopRequireDefault2(require_parser3());
|
|
25514
|
+
var _rules = _interopRequireDefault2(require_rules());
|
|
25487
25515
|
var _rule = _interopRequireDefault2(require_rule2());
|
|
25488
25516
|
var _parts = _interopRequireDefault2(require_parts());
|
|
25489
25517
|
var _partTypes = _interopRequireDefault2(require_partTypes());
|
|
@@ -30550,21 +30578,6 @@
|
|
|
30550
30578
|
}
|
|
30551
30579
|
});
|
|
30552
30580
|
|
|
30553
|
-
// node_modules/occam-grammar-utilities/lib/constants.js
|
|
30554
|
-
var require_constants8 = __commonJS({
|
|
30555
|
-
"node_modules/occam-grammar-utilities/lib/constants.js"(exports) {
|
|
30556
|
-
"use strict";
|
|
30557
|
-
Object.defineProperty(exports, "__esModule", {
|
|
30558
|
-
value: true
|
|
30559
|
-
});
|
|
30560
|
-
exports.UNASSIGNED_ENTRY = exports.EMPTY_STRING = void 0;
|
|
30561
|
-
var EMPTY_STRING = "";
|
|
30562
|
-
exports.EMPTY_STRING = EMPTY_STRING;
|
|
30563
|
-
var UNASSIGNED_ENTRY = "^.*$";
|
|
30564
|
-
exports.UNASSIGNED_ENTRY = UNASSIGNED_ENTRY;
|
|
30565
|
-
}
|
|
30566
|
-
});
|
|
30567
|
-
|
|
30568
30581
|
// node_modules/occam-grammar-utilities/lib/utilities/rules.js
|
|
30569
30582
|
var require_rules2 = __commonJS({
|
|
30570
30583
|
"node_modules/occam-grammar-utilities/lib/utilities/rules.js"(exports) {
|
|
@@ -30572,38 +30585,22 @@
|
|
|
30572
30585
|
Object.defineProperty(exports, "__esModule", {
|
|
30573
30586
|
value: true
|
|
30574
30587
|
});
|
|
30575
|
-
exports.rulesAsString = rulesAsString;
|
|
30576
|
-
exports.ruleMapFromRules = ruleMapFromRules;
|
|
30577
|
-
exports.startRuleFromRules = startRuleFromRules;
|
|
30578
|
-
exports.startRuleFromRulesAndStartRuleName = startRuleFromRulesAndStartRuleName;
|
|
30579
30588
|
exports.rulesFromStartRuleAndRuleMap = rulesFromStartRuleAndRuleMap;
|
|
30589
|
+
exports.startRuleFromRulesAndStartRuleName = startRuleFromRulesAndStartRuleName;
|
|
30580
30590
|
var _necessary = require_browser();
|
|
30581
|
-
var
|
|
30582
|
-
var first = _necessary.arrayUtilities.first;
|
|
30591
|
+
var _occamParsers = require_lib4();
|
|
30583
30592
|
var filter = _necessary.arrayUtilities.filter;
|
|
30584
|
-
|
|
30585
|
-
|
|
30586
|
-
|
|
30587
|
-
|
|
30588
|
-
return maximumRuleNameLength;
|
|
30589
|
-
}, 0), rulesString1 = rules.reduce(function(rulesString, rule) {
|
|
30590
|
-
var ruleString = rule.asString(maximumRuleNameLength1, multiLine);
|
|
30591
|
-
rulesString += ruleString;
|
|
30592
|
-
return rulesString;
|
|
30593
|
-
}, _constants.EMPTY_STRING).replace(/^\n\n/, _constants.EMPTY_STRING);
|
|
30594
|
-
return rulesString1;
|
|
30595
|
-
}
|
|
30596
|
-
function ruleMapFromRules(rules) {
|
|
30597
|
-
var ruleMap = {};
|
|
30598
|
-
rules.forEach(function(rule) {
|
|
30593
|
+
var startRuleFromRules = _occamParsers.rulesUtilitlies.startRuleFromRules;
|
|
30594
|
+
function rulesFromStartRuleAndRuleMap(startRule, ruleMap) {
|
|
30595
|
+
var rules = Object.values(ruleMap), startRuleName = startRule.getName();
|
|
30596
|
+
filter(rules, function(rule) {
|
|
30599
30597
|
var ruleName = rule.getName();
|
|
30600
|
-
|
|
30598
|
+
if (ruleName !== startRuleName) {
|
|
30599
|
+
return true;
|
|
30600
|
+
}
|
|
30601
30601
|
});
|
|
30602
|
-
|
|
30603
|
-
|
|
30604
|
-
function startRuleFromRules(rules) {
|
|
30605
|
-
var firstRule = first(rules), startRule = firstRule;
|
|
30606
|
-
return startRule;
|
|
30602
|
+
rules.unshift(startRule);
|
|
30603
|
+
return rules;
|
|
30607
30604
|
}
|
|
30608
30605
|
function startRuleFromRulesAndStartRuleName(rules, startRuleName) {
|
|
30609
30606
|
var startRule = rules.find(function(rule) {
|
|
@@ -30617,17 +30614,6 @@
|
|
|
30617
30614
|
}
|
|
30618
30615
|
return startRule;
|
|
30619
30616
|
}
|
|
30620
|
-
function rulesFromStartRuleAndRuleMap(startRule, ruleMap) {
|
|
30621
|
-
var rules = Object.values(ruleMap), startRuleName = startRule.getName();
|
|
30622
|
-
filter(rules, function(rule) {
|
|
30623
|
-
var ruleName = rule.getName();
|
|
30624
|
-
if (ruleName !== startRuleName) {
|
|
30625
|
-
return true;
|
|
30626
|
-
}
|
|
30627
|
-
});
|
|
30628
|
-
rules.unshift(startRule);
|
|
30629
|
-
return rules;
|
|
30630
|
-
}
|
|
30631
30617
|
}
|
|
30632
30618
|
});
|
|
30633
30619
|
|
|
@@ -33284,6 +33270,8 @@
|
|
|
33284
33270
|
default: obj
|
|
33285
33271
|
};
|
|
33286
33272
|
}
|
|
33273
|
+
var ruleMapFromRules = _occamParsers.rulesUtilities.ruleMapFromRules;
|
|
33274
|
+
var startRuleFromRules = _occamParsers.rulesUtilities.startRuleFromRules;
|
|
33287
33275
|
var bnfLexer = _occamLexers.BNFLexer.fromNothing();
|
|
33288
33276
|
var bnfParser = _occamParsers.BNFParser.fromNothing();
|
|
33289
33277
|
function rulesFromBNF(bnf) {
|
|
@@ -33291,14 +33279,14 @@
|
|
|
33291
33279
|
return rules;
|
|
33292
33280
|
}
|
|
33293
33281
|
function parserFromRules(Class, rules) {
|
|
33294
|
-
var ruleMap =
|
|
33295
|
-
var startRule =
|
|
33282
|
+
var ruleMap = ruleMapFromRules(rules);
|
|
33283
|
+
var startRule = startRuleFromRules(rules);
|
|
33296
33284
|
startRule = (0, _eliminateLeftRecursion).default(startRule, ruleMap);
|
|
33297
33285
|
var parser = new Class(startRule, ruleMap);
|
|
33298
33286
|
return parser;
|
|
33299
33287
|
}
|
|
33300
33288
|
function parserFromRulesAndStartRuleName(Class, rules, startRuleName) {
|
|
33301
|
-
var ruleMap =
|
|
33289
|
+
var ruleMap = ruleMapFromRules(rules);
|
|
33302
33290
|
var startRule = (0, _rules).startRuleFromRulesAndStartRuleName(rules, startRuleName);
|
|
33303
33291
|
startRule = (0, _eliminateLeftRecursion).default(startRule, ruleMap);
|
|
33304
33292
|
var parser = new Class(startRule, ruleMap);
|
|
@@ -38225,7 +38213,7 @@
|
|
|
38225
38213
|
});
|
|
38226
38214
|
|
|
38227
38215
|
// node_modules/easy-layout/lib/constants.js
|
|
38228
|
-
var
|
|
38216
|
+
var require_constants8 = __commonJS({
|
|
38229
38217
|
"node_modules/easy-layout/lib/constants.js"(exports) {
|
|
38230
38218
|
"use strict";
|
|
38231
38219
|
Object.defineProperty(exports, "__esModule", {
|
|
@@ -38269,7 +38257,7 @@
|
|
|
38269
38257
|
exports.columnResizeCursor = columnResizeCursor;
|
|
38270
38258
|
exports.default = void 0;
|
|
38271
38259
|
var _easy2 = require_lib();
|
|
38272
|
-
var _constants =
|
|
38260
|
+
var _constants = require_constants8();
|
|
38273
38261
|
var _cursors = require_cursors();
|
|
38274
38262
|
var body2 = new _easy2.Body();
|
|
38275
38263
|
var previousCursor;
|
|
@@ -39138,7 +39126,7 @@
|
|
|
39138
39126
|
});
|
|
39139
39127
|
|
|
39140
39128
|
// node_modules/easy-drag-and-drop/lib/constants.js
|
|
39141
|
-
var
|
|
39129
|
+
var require_constants9 = __commonJS({
|
|
39142
39130
|
"node_modules/easy-drag-and-drop/lib/constants.js"(exports) {
|
|
39143
39131
|
"use strict";
|
|
39144
39132
|
Object.defineProperty(exports, "__esModule", {
|
|
@@ -39180,7 +39168,7 @@
|
|
|
39180
39168
|
exports.default = void 0;
|
|
39181
39169
|
var _easy2 = require_lib();
|
|
39182
39170
|
var _necessary = require_browser();
|
|
39183
|
-
var _constants =
|
|
39171
|
+
var _constants = require_constants9();
|
|
39184
39172
|
var _event = require_event2();
|
|
39185
39173
|
function _arrayLikeToArray(arr, len) {
|
|
39186
39174
|
if (len == null || len > arr.length)
|
|
@@ -41829,7 +41817,7 @@
|
|
|
41829
41817
|
});
|
|
41830
41818
|
|
|
41831
41819
|
// lib/example/constants.js
|
|
41832
|
-
var
|
|
41820
|
+
var require_constants10 = __commonJS({
|
|
41833
41821
|
"lib/example/constants.js"(exports) {
|
|
41834
41822
|
"use strict";
|
|
41835
41823
|
Object.defineProperty(exports, "__esModule", {
|
|
@@ -41850,7 +41838,7 @@
|
|
|
41850
41838
|
});
|
|
41851
41839
|
exports.default = void 0;
|
|
41852
41840
|
var _textarea = _interopRequireDefault2(require_textarea2());
|
|
41853
|
-
var _constants =
|
|
41841
|
+
var _constants = require_constants10();
|
|
41854
41842
|
function _assertThisInitialized(self) {
|
|
41855
41843
|
if (self === void 0) {
|
|
41856
41844
|
throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
|
|
@@ -42649,7 +42637,7 @@
|
|
|
42649
42637
|
});
|
|
42650
42638
|
exports.default = void 0;
|
|
42651
42639
|
var _textarea = _interopRequireDefault2(require_textarea2());
|
|
42652
|
-
var _constants =
|
|
42640
|
+
var _constants = require_constants10();
|
|
42653
42641
|
function _assertThisInitialized(self) {
|
|
42654
42642
|
if (self === void 0) {
|
|
42655
42643
|
throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
|
|
@@ -43733,4 +43721,4 @@
|
|
|
43733
43721
|
(0, _index).renderYappStyles();
|
|
43734
43722
|
body.mount(/* @__PURE__ */ React.createElement(View, null));
|
|
43735
43723
|
})();
|
|
43736
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL29mZnNldC5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9saWIvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy9ib3VuZHMuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvbGliLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvY29uc3RhbnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy91dGlsaXRpZXMvb2JqZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy91dGlsaXRpZXMvYXJyYXkuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL3V0aWxpdGllcy9uYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy91dGlsaXRpZXMvZG9tLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy9taXhpbnMvZWxlbWVudC5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvdGV4dEVsZW1lbnQuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL3V0aWxpdGllcy9lbGVtZW50cy5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvbWl4aW5zL2pzeC5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvZXZlbnRUeXBlcy5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvbWl4aW5zL2tleS5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvbWl4aW5zL2NsaWNrLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy9taXhpbnMvc3RhdGUuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL2NvbnRlbnRUeXBlcy5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvbWl4aW5zL3Jlc2l6ZS5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvbWl4aW5zL2V2ZW50LmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy9taXhpbnMvbW91c2UuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL21peGlucy9zY3JvbGwuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL2VsZW1lbnQuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL2JvdW5kcy5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvcmVhY3QuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL2JvdW5kcy5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvZWxlbWVudC9ib2R5LmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L2xpYi9lbGVtZW50Lzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvZWxlbWVudC9saW5rLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L2xpYi9lbGVtZW50Lzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvbWl4aW5zL2NoYW5nZS5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvaW5wdXRFbGVtZW50LmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy9pbnB1dEVsZW1lbnQvaW5wdXQuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvbGliL2lucHV0RWxlbWVudC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL2VsZW1lbnQvYnV0dG9uLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L2xpYi9lbGVtZW50Lzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvZWxlbWVudC9zZWxlY3QuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL2VsZW1lbnQvY2hlY2tib3guanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL2lucHV0RWxlbWVudC90ZXh0YXJlYS5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9saWIvaW5wdXRFbGVtZW50Lzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvbWl4aW5zL3dpbmRvdy5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvd2luZG93LmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy9ib3VuZHMuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL2J1dHRvbnMuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL2RvY3VtZW50LmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvanV4dGFwb3NlL3NyYy9qdXh0YXBvc2UuanMiLCAibm9kZV9tb2R1bGVzL2p1eHRhcG9zZS9zcmMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL3dpdGgtc3R5bGUvc3JjL3RhZ05hbWVzLmpzIiwgIm5vZGVfbW9kdWxlcy9uZWNlc3Nhcnkvc3JjL2xldmVscy5qcyIsICJub2RlX21vZHVsZXMvbmVjZXNzYXJ5L3NyYy9tZXRob2RzLmpzIiwgIm5vZGVfbW9kdWxlcy9uZWNlc3Nhcnkvc3JjL2hlYWRlcnMuanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMva2V5Q29kZXMuanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvZW5jb2RpbmdzLmpzIiwgIm5vZGVfbW9kdWxlcy9uZWNlc3Nhcnkvc3JjL2NoYXJhY3RlcnMuanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvc3RhdHVzQ29kZXMuanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvY29udGVudFR5cGVzLmpzIiwgIm5vZGVfbW9kdWxlcy9uZWNlc3Nhcnkvc3JjL3N0YXR1c01lc3NhZ2VzLmpzIiwgIm5vZGVfbW9kdWxlcy9uZWNlc3Nhcnkvc3JjL3V0aWxpdGllcy9hcnJheS5qcyIsICJub2RlX21vZHVsZXMvbmVjZXNzYXJ5L3NyYy9jb25zdGFudHMuanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvdXRpbGl0aWVzL2h0dHAuanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvdXRpbGl0aWVzL2FqYXguanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvdXRpbGl0aWVzL3BhdGguanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvdXRpbGl0aWVzL2FzeW5jaHJvbm91cy5qcyIsICJub2RlX21vZHVsZXMvbmVjZXNzYXJ5L3NyYy9icm93c2VyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3V0aWxpdGllcy9jb250ZW50LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3R5cGVzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3Rva2VuLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvbGliLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy9jb25zdGFudHMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vc2lnbmlmaWNhbnQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9saWIvdG9rZW4vPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvbGliL3NyYy9jb25zdGFudHMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvY29uc3RhbnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3J1bGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvc3BlY2lhbFN5bWJvbHMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvYm5mL2VudHJpZXMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdXRpbGl0aWVzL3Rva2VuLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL2NvbW1vbi9sZXhlci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy90b2tlbi9ub25TaWduaWZpY2FudC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL2xpYi90b2tlbi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vbm9uU2lnbmlmaWNhbnQvd2hpdGVzcGFjZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL2xpYi90b2tlbi9ub25TaWduaWZpY2FudC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vc2lnbmlmaWNhbnQvcmVndWxhckV4cHJlc3Npb24uanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9saWIvdG9rZW4vc2lnbmlmaWNhbnQvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3Rva2VuL25vblNpZ25pZmljYW50L2VuZE9mTGluZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL2xpYi90b2tlbi9ub25TaWduaWZpY2FudC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vc2lnbmlmaWNhbnQvc3RyaW5nTGl0ZXJhbC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL2xpYi90b2tlbi9zaWduaWZpY2FudC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vc2lnbmlmaWNhbnQvc3RyaW5nTGl0ZXJhbC9kb3VibHlRdW90ZWQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9saWIvdG9rZW4vc2lnbmlmaWNhbnQvc3RyaW5nTGl0ZXJhbC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvYm5mL2xleGVyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvbGliL2JuZi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvYmFzaWMvZW50cmllcy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy90b2tlbi9zaWduaWZpY2FudC9zdHJpbmdMaXRlcmFsL3NpbmdseVF1b3RlZC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL2xpYi90b2tlbi9zaWduaWZpY2FudC9zdHJpbmdMaXRlcmFsLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L3NpbmdsZUxpbmUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9saWIvdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9zaW5nbGVMaW5lL3B5dGhvblN0eWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvbGliL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvc2luZ2xlTGluZS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9lbmRPZkxpbmUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9saWIvdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvZW5kT2YuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9saWIvdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL2VuZE9mL3B5dGhvblN0eWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvbGliL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL2VuZE9mLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9zdGFydE9mLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvbGliL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9zdGFydE9mL3B5dGhvblN0eWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvbGliL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL3N0YXJ0T2YvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL21pZGRsZU9mLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvbGliL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9taWRkbGVPZi9weXRob25TdHlsZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL2xpYi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9taWRkbGVPZi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvYmFzaWMvbGV4ZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9saWIvYmFzaWMvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3Rva2VuL3NpZ25pZmljYW50L2VuZE9mTGluZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL2xpYi90b2tlbi9zaWduaWZpY2FudC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vc2lnbmlmaWNhbnQvY29tbWVudC9lbmRPZkxpbmUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9saWIvdG9rZW4vc2lnbmlmaWNhbnQvY29tbWVudC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9zaW5nbGVMaW5lL2NTdHlsZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL2xpYi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L3NpbmdsZUxpbmUvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL2VuZE9mL2NTdHlsZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL2xpYi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9lbmRPZi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvc3RhcnRPZi9jU3R5bGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9saWIvdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvc3RhcnRPZi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvbWlkZGxlT2YvY1N0eWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvbGliL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL21pZGRsZU9mLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvd2l0aC1zdHlsZS9zcmMvY3NzL2VudHJpZXMuanMiLCAibm9kZV9tb2R1bGVzL3dpdGgtc3R5bGUvc3JjL2Nzcy9sZXhlci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL2JuZi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvY29uc3RhbnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy91dGlsaXRpZXMvc3RyaW5nLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2RlZmF1bHRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9zdGF0ZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy91dGlsaXRpZXMvYXJyYXkuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnNlVHJlZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFyc2VUcmVlL3ZlcnRpY2FsQnJhbmNoLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9zcmMvY29uc3RhbnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJzZVRyZWUvcnVsZU5hbWUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL3BhcnNlVHJlZS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnNlVHJlZS9ob3Jpem9udGFsQnJhbmNoLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJzZVRyZWUvY2hpbGROb2Rlcy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvcGFyc2VUcmVlLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFyc2VUcmVlL25vblRlcm1pbmFsTm9kZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvcGFyc2VUcmVlLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ub25UZXJtaW5hbC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvbm9kZS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL25vZGUvYm5mL25hbWUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL25vZGUvYm5mLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvdXRpbGl0aWVzL3BhcnQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3V0aWxpdGllcy9sb29rQWhlYWQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2RlZmluaXRpb24uanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFydC90ZXJtaW5hbC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvcGFydC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL3NyYy9jb25zdGFudHMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnNlVHJlZS90ZXJtaW5hbE5vZGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL3BhcnNlVHJlZS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL25vZGUvdGVybWluYWwuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL25vZGUvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJ0L3Rlcm1pbmFsL3NpZ25pZmljYW50VG9rZW5UeXBlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9wYXJ0L3Rlcm1pbmFsLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvcGFydC9zcmMvY29uc3RhbnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL25hbWUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL2RlZmluaXRpb24vPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlTmFtZXMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvbmFtZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvcnVsZS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnQvbm9uVGVybWluYWwuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL3BhcnQvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9zcmMvY29uc3RhbnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJ0VHlwZXMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnQvbm9uVGVybWluYWwvb3B0aW9uYWxQYXJ0LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9wYXJ0L3NyYy9jb25zdGFudHMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnQvbm9uVGVybWluYWwvY29sbGVjdGlvbk9mUGFydHMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL3BhcnQvbm9uVGVybWluYWwvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9wYXJ0L3NyYy9jb25zdGFudHMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnQvbm9uVGVybWluYWwvb25lT3JNb3JlUGFydHMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnQvbm9uVGVybWluYWwvemVyb09yTW9yZVBhcnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy91dGlsaXRpZXMvYm5mLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL2JuZi9wYXJ0LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJ0L25vblRlcm1pbmFsL3J1bGVOYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9wYXJ0L25vblRlcm1pbmFsLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvcGFydC9zcmMvY29uc3RhbnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL3J1bGVOYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9kZWZpbml0aW9uLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvZGVmaW5pdGlvbi9wYXJ0UnVsZS90ZXJtaW5hbC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvZGVmaW5pdGlvbi9wYXJ0UnVsZS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2RlZmluaXRpb24vcGFydFJ1bGUvbm9uVGVybWluYWwuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL2RlZmluaXRpb24vcGFydFJ1bGUvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL3BhcnQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL3J1bGUvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL2JuZi9ydWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9ub2RlL2JuZi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnQvdGVybWluYWwvdGVybWluYWxTeW1ib2wuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL3BhcnQvdGVybWluYWwvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9wYXJ0L3NyYy9jb25zdGFudHMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2RlZmluaXRpb24vcnVsZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvZGVmaW5pdGlvbi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvcnVsZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvcnVsZS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL25vZGUvYm5mL2Vycm9yLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9ub2RlL2JuZi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnQvdGVybWluYWwvd2lsZGNhcmQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL3BhcnQvdGVybWluYWwvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL2Vycm9yLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9kZWZpbml0aW9uLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS9lcnJvci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvcnVsZS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL25vZGUvYm5mL2RvY3VtZW50LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9ub2RlL2JuZi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnQvbm9uVGVybWluYWwvY2hvaWNlT2ZQYXJ0cy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvcGFydC9ub25UZXJtaW5hbC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL3BhcnQvc3JjL2NvbnN0YW50cy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvZGVmaW5pdGlvbi9kb2N1bWVudC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvZGVmaW5pdGlvbi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvZG9jdW1lbnQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL3J1bGUvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL2JuZi9ydWxlTmFtZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvbm9kZS9ibmYvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL3J1bGVOYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9ydWxlLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvd2lsZGNhcmQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL25vZGUvYm5mLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvZGVmaW5pdGlvbi90ZXJtaW5hbFN5bWJvbC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvZGVmaW5pdGlvbi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvd2lsZGNhcmQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL3J1bGUvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJzZVRyZWUvZW5kT2ZMaW5lTm9kZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvcGFyc2VUcmVlLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS90ZXJtaW5hbC9lbmRPZkxpbmUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL25vZGUvdGVybWluYWwvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJ0L3Rlcm1pbmFsL2VuZE9mTGluZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvcGFydC90ZXJtaW5hbC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL25vZGUvYm5mL2VuZE9mTGluZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvbm9kZS9ibmYvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL2VuZE9mTGluZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvcnVsZS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvcXVhbnRpZmllci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvcnVsZS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL25vZGUvYm5mL2RlZmluaXRpb24uanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL25vZGUvYm5mLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvZGVmaW5pdGlvbi9kZWZpbml0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9kZWZpbml0aW9uLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS9kZWZpbml0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9ydWxlLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvZGVmaW5pdGlvbnMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL25vZGUvYm5mLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFydC9ub25UZXJtaW5hbC9zZXF1ZW5jZU9mUGFydHMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL3BhcnQvbm9uVGVybWluYWwvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9wYXJ0L3NyYy9jb25zdGFudHMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2RlZmluaXRpb24vZGVmaW5pdGlvbnMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL2RlZmluaXRpb24vPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL2RlZmluaXRpb25zLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9ydWxlLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvcGFydC90ZXJtaW5hbC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvbm9kZS9ibmYvcGFydC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvdGVybWluYWxQYXJ0LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9ydWxlLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvY2hvaWNlT2ZQYXJ0cy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvbm9kZS9ibmYvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL2Nob2ljZU9mUGFydHMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL2RlZmluaXRpb24vPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL2Nob2ljZU9mUGFydHMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL3J1bGUvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL2JuZi90ZXJtaW5hbFN5bWJvbC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvbm9kZS9ibmYvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9ub2RlL3NyYy9jb25zdGFudHMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2RlZmluaXRpb24vc2lnbmlmaWNhbnRUb2tlblR5cGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL2RlZmluaXRpb24vPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL3Rlcm1pbmFsU3ltYm9sLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9ydWxlLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvcGFydC9ub25UZXJtaW5hbC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvZGVmaW5pdGlvbi9wYXJ0UnVsZS9ub25UZXJtaW5hbC9ydWxlTmFtZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvZGVmaW5pdGlvbi9wYXJ0UnVsZS9ub25UZXJtaW5hbC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvbm9uVGVybWluYWxQYXJ0LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9ydWxlLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvc2VxdWVuY2VPZlBhcnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9ub2RlL2JuZi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2RlZmluaXRpb24vc2VxdWVuY2VPZlBhcnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9kZWZpbml0aW9uLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS9zZXF1ZW5jZU9mUGFydHMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL3J1bGUvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJzZVRyZWUvbm9XaGl0ZXNwYWNlTm9kZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvcGFyc2VUcmVlLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS90ZXJtaW5hbC9ub1doaXRlc3BhY2UuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL25vZGUvdGVybWluYWwvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJ0L3Rlcm1pbmFsL25vV2hpdGVzcGFjZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvcGFydC90ZXJtaW5hbC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL25vZGUvYm5mL25vV2hpdGVzcGFjZVBhcnQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL25vZGUvYm5mLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvZGVmaW5pdGlvbi9ub1doaXRlc3BhY2VQYXJ0LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9kZWZpbml0aW9uLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS9ub1doaXRlc3BhY2VQYXJ0LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9ydWxlLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvbW9kaWZpZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL25vZGUvYm5mLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvZGVmaW5pdGlvbi9sb29rQWhlYWRNb2RpZmllclJ1bGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL2RlZmluaXRpb24vPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL2xvb2tBaGVhZE1vZGlmaWVyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9ydWxlLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvZGVmaW5pdGlvbi9hbWJpZ3VvdXNNb2RpZmllclJ1bGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL2RlZmluaXRpb24vPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL2FtYmlndW91c01vZGlmaWVyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9ydWxlLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFydC90ZXJtaW5hbC9yZWd1bGFyRXhwcmVzc2lvbi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvcGFydC90ZXJtaW5hbC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL3BhcnQvc3JjL2NvbnN0YW50cy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvcmVndWxhckV4cHJlc3Npb24uanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL25vZGUvYm5mLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvbm9kZS9zcmMvY29uc3RhbnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL3JlZ3VsYXJFeHByZXNzaW9uLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9ydWxlLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvcXVhbnRpZmllci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvbm9kZS9ibmYvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL3F1YW50aWZpZXJSdWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9kZWZpbml0aW9uLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS9vcHRpb25hbFF1YW50aWZpZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL3J1bGUvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL29uZU9yTW9yZVF1YW50aWZpZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL3J1bGUvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL3plcm9Pck1vcmVRdWFudGlmaWVyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9ydWxlLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvc2lnbmlmaWNhbnRUb2tlblR5cGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL25vZGUvc3JjL2NvbnN0YW50cy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS9zaWduaWZpY2FudFRva2VuVHlwZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvcnVsZS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3V0aWxpdGllcy9ydWxlcy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL3BhcnNlci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvYm5mLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYmFzaWMvYm5mLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy91dGlsaXRpZXMvcGFyc2VyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9jb21tb24vcGFyc2VyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9jb21tb24vPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9iYXNpYy9wYXJzZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL2Jhc2ljLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFydHMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy93aXRoLXN0eWxlL3NyYy9jc3MvYm5mLmpzIiwgIm5vZGVfbW9kdWxlcy93aXRoLXN0eWxlL3NyYy9jc3MvcGFyc2VyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1kb20vc3JjL3V0aWxpdGllcy9hcnJheS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tZG9tL2xpYi9zcmMvY29uc3RhbnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1kb20vc3JjL3NwcmVhZC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tZG9tL2xpYi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWRvbS9zcmMvcXVlcnkuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWRvbS9zcmMvdXRpbGl0aWVzL3F1ZXJ5LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1kb20vc3JjL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy93aXRoLXN0eWxlL3NyYy9jb25zdGFudHMuanMiLCAibm9kZV9tb2R1bGVzL3dpdGgtc3R5bGUvc3JjL3V0aWxpdGllcy9jb250ZW50LmpzIiwgIm5vZGVfbW9kdWxlcy93aXRoLXN0eWxlL3NyYy9zdHlsZS9kZWNsYXJhdGlvbi5qcyIsICJub2RlX21vZHVsZXMvd2l0aC1zdHlsZS9zcmMvc3R5bGUvZGVjbGFyYXRpb25zLmpzIiwgIm5vZGVfbW9kdWxlcy93aXRoLXN0eWxlL3NyYy9zdHlsZS9ydWxlU2V0LmpzIiwgIm5vZGVfbW9kdWxlcy93aXRoLXN0eWxlL3NyYy9zdHlsZS9ydWxlU2V0cy5qcyIsICJub2RlX21vZHVsZXMvd2l0aC1zdHlsZS9zcmMvc3R5bGUvbWVkaWEuanMiLCAibm9kZV9tb2R1bGVzL3dpdGgtc3R5bGUvc3JjL3N0eWxlL21lZGlhcy5qcyIsICJub2RlX21vZHVsZXMvd2l0aC1zdHlsZS9zcmMvc3R5bGUuanMiLCAibm9kZV9tb2R1bGVzL3dpdGgtc3R5bGUvc3JjL3V0aWxpdGllcy9zdHlsZXMuanMiLCAibm9kZV9tb2R1bGVzL3dpdGgtc3R5bGUvc3JjL3V0aWxpdGllcy9jbGFzc05hbWUuanMiLCAibm9kZV9tb2R1bGVzL3dpdGgtc3R5bGUvc3JjL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5LXdpdGgtc3R5bGUvc3JjL3V0aWxpdGllcy9jbGFzcy5qcyIsICJub2RlX21vZHVsZXMvZWFzeS13aXRoLXN0eWxlL3NyYy9jb25zdGFudHMuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3ktd2l0aC1zdHlsZS9zcmMvd2l0aFN0eWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5LXdpdGgtc3R5bGUvc3JjL2NvbnN0YW50cy5qcyIsICJub2RlX21vZHVsZXMvZWFzeS13aXRoLXN0eWxlL3NyYy9pbmRleC5qcyIsICJzcmMvdXRpbGl0aWVzL2Nzcy5qcyIsICJzcmMvY29uc3RhbnRzLmpzIiwgInNyYy9taXhpbnMvc3R5bGUuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3ktcmljaHRleHRhcmVhL3NyYy9zZWxlY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzL2Vhc3ktcmljaHRleHRhcmVhL2xpYi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL2Vhc3ktcmljaHRleHRhcmVhL3NyYy9yaWNoVGV4dGFyZWEuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3ktcmljaHRleHRhcmVhL2xpYi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL2Vhc3ktcmljaHRleHRhcmVhL3NyYy9icm93c2VyLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5LXJpY2h0ZXh0YXJlYS9zcmMvYnJvd3Nlci5qcyIsICJzcmMvc3R5bGVzLmpzIiwgInNyYy9jb2xvdXJzLmpzIiwgInNyYy9zY2hlbWUvY29sb3VyLmpzIiwgInNyYy9yaWNoVGV4dGFyZWEuanMiLCAic3JjL2NvbG91cnMuanMiLCAic3JjL2xpbmVOdW1iZXJzLmpzIiwgInNyYy91dGlsaXRpZXMvdG9rZW5zLmpzIiwgInNyYy9ndXR0ZXIuanMiLCAic3JjL2VsZW1lbnQvc2Nyb2xsYWJsZS5qcyIsICJsaWIvZWxlbWVudC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAic3JjL3N5bnRheC5qcyIsICJzcmMvcHJldHR5UHJpbnRlci5qcyIsICJzcmMvdXRpbGl0aWVzL3Njcm9sbGJhclRoaWNrbmVzcy5qcyIsICJzcmMvcGx1Z2luLmpzIiwgInNyYy9sZXhlci95YXBwLmpzIiwgImxpYi9sZXhlci88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAic3JjL2xleGVyL3htbC5qcyIsICJsaWIvbGV4ZXIvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1ncmFtbWFyLXV0aWxpdGllcy9zcmMvY29uc3RhbnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1ncmFtbWFyLXV0aWxpdGllcy9zcmMvdXRpbGl0aWVzL3J1bGVzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1ncmFtbWFyLXV0aWxpdGllcy9zcmMvdXRpbGl0aWVzL3JlY3Vyc2l2ZVBhcnQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXItdXRpbGl0aWVzL3NyYy91dGlsaXRpZXMvZGVmaW5pdGlvbi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tZ3JhbW1hci11dGlsaXRpZXMvc3JjL3R5cGVzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1ncmFtbWFyLXV0aWxpdGllcy9zcmMvZGVmaW5pdGlvbi9yZWN1cnNpdmUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXItdXRpbGl0aWVzL2xpYi9kZWZpbml0aW9uLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tZ3JhbW1hci11dGlsaXRpZXMvbGliL3NyYy9jb25zdGFudHMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXItdXRpbGl0aWVzL3NyYy9kZWZpbml0aW9uL2xlZnRSZWN1cnNpdmUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXItdXRpbGl0aWVzL2xpYi9kZWZpbml0aW9uLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tZ3JhbW1hci11dGlsaXRpZXMvbGliL3NyYy9jb25zdGFudHMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXItdXRpbGl0aWVzL3NyYy9ub2RlL3JlZHVjZWQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXItdXRpbGl0aWVzL2xpYi9ub2RlLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tZ3JhbW1hci11dGlsaXRpZXMvc3JjL3V0aWxpdGllcy9jbGFzcy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tZ3JhbW1hci11dGlsaXRpZXMvc3JjL3V0aWxpdGllcy9ydWxlTmFtZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tZ3JhbW1hci11dGlsaXRpZXMvc3JjL3J1bGUvcmVkdWNlZC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tZ3JhbW1hci11dGlsaXRpZXMvbGliL3J1bGUvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1ncmFtbWFyLXV0aWxpdGllcy9zcmMvbm9kZS9yZXBlYXRlZC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tZ3JhbW1hci11dGlsaXRpZXMvbGliL25vZGUvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1ncmFtbWFyLXV0aWxpdGllcy9zcmMvcnVsZS9yZXBlYXRlZC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tZ3JhbW1hci11dGlsaXRpZXMvbGliL3J1bGUvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1ncmFtbWFyLXV0aWxpdGllcy9zcmMvdXRpbGl0aWVzL3BhcnQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXItdXRpbGl0aWVzL3NyYy9kZWZpbml0aW9uL3J1bGVOYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1ncmFtbWFyLXV0aWxpdGllcy9saWIvZGVmaW5pdGlvbi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXItdXRpbGl0aWVzL3NyYy9ydWxlL3Jld3JpdHRlbi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tZ3JhbW1hci11dGlsaXRpZXMvbGliL3J1bGUvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1ncmFtbWFyLXV0aWxpdGllcy9zcmMvdXRpbGl0aWVzL3BhcnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1ncmFtbWFyLXV0aWxpdGllcy9zcmMvZGVmaW5pdGlvbi9yZXBlYXRlZC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tZ3JhbW1hci11dGlsaXRpZXMvc3JjL2RlZmluaXRpb24vcmV3cml0dGVuLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1ncmFtbWFyLXV0aWxpdGllcy9zcmMvdXRpbGl0aWVzL3J1bGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXItdXRpbGl0aWVzL3NyYy9kZWZpbml0aW9uL2xlZnRSZWN1cnNpdmUvZGlyZWN0bHkuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXItdXRpbGl0aWVzL2xpYi9kZWZpbml0aW9uL2xlZnRSZWN1cnNpdmUvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1ncmFtbWFyLXV0aWxpdGllcy9zcmMvZGVmaW5pdGlvbi9sZWZ0UmVjdXJzaXZlL2ltcGxpY2l0bHkuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXItdXRpbGl0aWVzL2xpYi9kZWZpbml0aW9uL3NyYy9jb25zdGFudHMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXItdXRpbGl0aWVzL3NyYy9kZWZpbml0aW9uL3VuYXJ5LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1ncmFtbWFyLXV0aWxpdGllcy9saWIvZGVmaW5pdGlvbi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXItdXRpbGl0aWVzL3NyYy9kZWZpbml0aW9uL2xlZnRSZWN1cnNpdmUvaW5kaXJlY3RseS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tZ3JhbW1hci11dGlsaXRpZXMvbGliL2RlZmluaXRpb24vbGVmdFJlY3Vyc2l2ZS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXItdXRpbGl0aWVzL2xpYi9kZWZpbml0aW9uL3NyYy9jb25zdGFudHMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXItdXRpbGl0aWVzL3NyYy9lbGltaW5hdGVMZWZ0UmVjdXJzaW9uLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1ncmFtbWFyLXV0aWxpdGllcy9zcmMvdXRpbGl0aWVzL3BhcnNlci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tZ3JhbW1hci11dGlsaXRpZXMvc3JjL3JlbW92ZU9yUmVuYW1lSW50ZXJtZWRpYXRlTm9kZXMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXItdXRpbGl0aWVzL3NyYy9pbmRleC5qcyIsICJzcmMvcGFyc2VyL3lhcHAuanMiLCAibGliL3BhcnNlci88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAic3JjL3BhcnNlci94bWwuanMiLCAibGliL3BhcnNlci88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAic3JjL3Rva2VuVHlwZXMuanMiLCAic3JjL3Rva2VuL3NpZ25pZmljYW50L2Vycm9yLmpzIiwgImxpYi90b2tlbi9zaWduaWZpY2FudC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAic3JjL3Byb2Nlc3Nvci5qcyIsICJzcmMvY29sb3Vycy5qcyIsICJzcmMvdG9rZW4vc2lnbmlmaWNhbnQvbmFtZS5qcyIsICJsaWIvdG9rZW4vc2lnbmlmaWNhbnQvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgInNyYy90b2tlbi9zaWduaWZpY2FudC9jb21tZW50LmpzIiwgImxpYi90b2tlbi9zaWduaWZpY2FudC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAic3JjL3Rva2VuL3NpZ25pZmljYW50L2F0dHJpYnV0ZS5qcyIsICJsaWIvdG9rZW4vc2lnbmlmaWNhbnQvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgInNyYy9wcm9jZXNzb3IveG1sLmpzIiwgImxpYi9wcm9jZXNzb3IvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgInNyYy9sYW5ndWFnZXMuanMiLCAic3JjL3BsdWdpbi94bWwuanMiLCAibGliL3BsdWdpbi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibGliL3NyYy9jb2xvdXJzLmpzIiwgInNyYy9sZXhlci9qc29uLmpzIiwgImxpYi9sZXhlci88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAic3JjL3BhcnNlci9qc29uLmpzIiwgImxpYi9wYXJzZXIvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgInNyYy9wcm9jZXNzb3IvanNvbi5qcyIsICJsaWIvcHJvY2Vzc29yLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJzcmMvcGx1Z2luL2pzb24uanMiLCAibGliL3BsdWdpbi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibGliL3NyYy9jb2xvdXJzLmpzIiwgInNyYy9sZXhlci9wbGFpblRleHQuanMiLCAibGliL2xleGVyLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJzcmMvcGFyc2VyL3BsYWluVGV4dC5qcyIsICJsaWIvcGFyc2VyLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJzcmMvcHJvY2Vzc29yL3BsYWluVGV4dC5qcyIsICJsaWIvcHJvY2Vzc29yLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJzcmMvcGx1Z2luL3BsYWluVGV4dC5qcyIsICJsaWIvcGx1Z2luLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJsaWIvc3JjL2NvbG91cnMuanMiLCAic3JjL2xleGVyL2phdmFzY3JpcHQuanMiLCAibGliL2xleGVyLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJzcmMvcGFyc2VyL2phdmFzY3JpcHQuanMiLCAibGliL3BhcnNlci88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAic3JjL3Rva2VuL3NpZ25pZmljYW50L2pzeC5qcyIsICJsaWIvdG9rZW4vc2lnbmlmaWNhbnQvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgInNyYy90b2tlbi9zaWduaWZpY2FudC9zdHJpbmcuanMiLCAibGliL3Rva2VuL3NpZ25pZmljYW50Lzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJzcmMvdG9rZW4vc2lnbmlmaWNhbnQvdmFyaWFibGUuanMiLCAibGliL3Rva2VuL3NpZ25pZmljYW50Lzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJzcmMvdG9rZW4vc2lnbmlmaWNhbnQvYXJndW1lbnQuanMiLCAibGliL3Rva2VuL3NpZ25pZmljYW50Lzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJzcmMvcHJvY2Vzc29yL2phdmFzY3JpcHQuanMiLCAibGliL3Byb2Nlc3Nvci88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAic3JjL3BsdWdpbi9qYXZhc2NyaXB0LmpzIiwgImxpYi9wbHVnaW4vPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgImxpYi9zcmMvY29sb3Vycy5qcyIsICJzcmMvdXRpbGl0aWVzL3BsdWdpbi5qcyIsICJzcmMvdXRpbGl0aWVzL3Byb3BlcnRpZXMuanMiLCAic3JjL3V0aWxpdGllcy9jb250ZW50LmpzIiwgInNyYy9kZWZhdWx0cy5qcyIsICJzcmMveWFwcC5qcyIsICJzcmMvY29sb3Vycy5qcyIsICJzcmMvc2NoZW1lL3N5bnRheC94bWwuanMiLCAic3JjL3N0eWxlL3N5bnRheC94bWwuanMiLCAic3JjL3NjaGVtZS9zeW50YXgvanNvbi5qcyIsICJzcmMvc3R5bGUvc3ludGF4L2pzb24uanMiLCAic3JjL3NjaGVtZS9zeW50YXgvZGVmYXVsdC5qcyIsICJzcmMvc3R5bGUvc3ludGF4L2RlZmF1bHQuanMiLCAic3JjL3NjaGVtZS9zeW50YXgvamF2YVNjcmlwdC5qcyIsICJzcmMvc3R5bGUvc3ludGF4L2phdmFTY3JpcHQuanMiLCAic3JjL3N0eWxlL3N5bnRheC5qcyIsICJzcmMvc3R5bGUvZmlyYUNvZGUuanMiLCAic3JjL3JlbmRlcllhcHBTdHlsZXMuanMiLCAic3JjL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5LWxheW91dC9zcmMvY29uc3RhbnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5LWxheW91dC9zcmMvY3Vyc29ycy5qcyIsICJub2RlX21vZHVsZXMvZWFzeS1sYXlvdXQvc3JjL2N1cnNvci5qcyIsICJub2RlX21vZHVsZXMvZWFzeS1sYXlvdXQvc3JjL2Rpdi9yb3cuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3ktbGF5b3V0L3NyYy9kaXYvcm93cy5qcyIsICJub2RlX21vZHVsZXMvZWFzeS1sYXlvdXQvc3JjL2Rpdi9jb2x1bW4uanMiLCAibm9kZV9tb2R1bGVzL2Vhc3ktbGF5b3V0L3NyYy9kaXYvY29sdW1ucy5qcyIsICJub2RlX21vZHVsZXMvZWFzeS1kcmFnLWFuZC1kcm9wL3NyYy9jb25zdGFudHMuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3ktZHJhZy1hbmQtZHJvcC9zcmMvdXRpbGl0aWVzL2V2ZW50LmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5LWRyYWctYW5kLWRyb3Avc3JjL21peGlucy9kcmFnLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5LWRyYWctYW5kLWRyb3AvbGliL3NyYy9jb25zdGFudHMuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3ktZHJhZy1hbmQtZHJvcC9zcmMvbWl4aW5zL2Ryb3AuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3ktZHJhZy1hbmQtZHJvcC9saWIvc3JjL2NvbnN0YW50cy5qcyIsICJub2RlX21vZHVsZXMvZWFzeS1kcmFnLWFuZC1kcm9wL3NyYy9lbGVtZW50L2RyYWcuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3ktZHJhZy1hbmQtZHJvcC9zcmMvZWxlbWVudC9kcm9wLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5LWRyYWctYW5kLWRyb3Avc3JjL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5LWxheW91dC9zcmMvZGl2L3NpemVhYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5LWxheW91dC9zcmMvc2VjdGlvbi9zaXplYWJsZS5qcyIsICJub2RlX21vZHVsZXMvZWFzeS1sYXlvdXQvc3JjL2Rpdi9zcGxpdHRlci5qcyIsICJub2RlX21vZHVsZXMvZWFzeS1sYXlvdXQvc3JjL2Rpdi9zcGxpdHRlci92ZXJ0aWNhbC5qcyIsICJub2RlX21vZHVsZXMvZWFzeS1sYXlvdXQvc3JjL2Rpdi9zcGxpdHRlci9ob3Jpem9udGFsLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5LWxheW91dC9zcmMvaW5kZXguanMiLCAic3JjL2V4YW1wbGUveWFwcC5qcyIsICJzcmMvZXhhbXBsZS9zdWJIZWFkaW5nLmpzIiwgInNyYy9leGFtcGxlL3RleHRhcmVhLmpzIiwgInNyYy9leGFtcGxlL3RleHRhcmVhL2JuZi5qcyIsICJsaWIvZXhhbXBsZS90ZXh0YXJlYS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAic3JjL2V4YW1wbGUvY29uc3RhbnRzLmpzIiwgInNyYy9leGFtcGxlL3RleHRhcmVhL3Rva2Vucy5qcyIsICJsaWIvZXhhbXBsZS90ZXh0YXJlYS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAic3JjL2V4YW1wbGUvZGl2L3NpemVhYmxlL3RvcC5qcyIsICJzcmMvZXhhbXBsZS9kaXYvc2l6ZWFibGUvbGVmdC5qcyIsICJzcmMvZXhhbXBsZS9kaXYvc2l6ZWFibGUvcmlnaHQuanMiLCAic3JjL2V4YW1wbGUvZGl2L3NpemVhYmxlL21pZGRsZS5qcyIsICJzcmMvZXhhbXBsZS90ZXh0YXJlYS9wYXJzZVRyZWUuanMiLCAibGliL2V4YW1wbGUvdGV4dGFyZWEvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgInNyYy9leGFtcGxlL3RleHRhcmVhL2xleGljYWxFbnRyaWVzLmpzIiwgImxpYi9leGFtcGxlL3RleHRhcmVhLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJzcmMvdXRpbGl0aWVzL3J1bGVzLmpzIiwgInNyYy9leGFtcGxlL3ZpZXcuanMiLCAic3JjL2V4YW1wbGUvdmlldy94bWwuanMiLCAibGliL2V4YW1wbGUvdmlldy88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAic3JjL2V4YW1wbGUvdmlldy9qc29uLmpzIiwgImxpYi9leGFtcGxlL3ZpZXcvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgInNyYy9leGFtcGxlL3ZpZXcvamF2YXNjcmlwdC5qcyIsICJsaWIvZXhhbXBsZS92aWV3Lzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJzcmMvZXhhbXBsZS5qcyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE9mZnNldCB7XG4gIGNvbnN0cnVjdG9yKHRvcCwgbGVmdCkge1xuICAgIHRoaXMudG9wID0gdG9wO1xuICAgIHRoaXMubGVmdCA9IGxlZnQ7XG4gIH1cblxuICBnZXRUb3AoKSB7XG4gICAgcmV0dXJuIHRoaXMudG9wO1xuICB9XG5cbiAgZ2V0TGVmdCgpIHtcbiAgICByZXR1cm4gdGhpcy5sZWZ0O1xuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQm91bmRzIHtcbiAgY29uc3RydWN0b3IodG9wLCBsZWZ0LCByaWdodCwgYm90dG9tKSB7XG4gICAgdGhpcy50b3AgPSB0b3A7XG4gICAgdGhpcy5sZWZ0ID0gbGVmdDtcbiAgICB0aGlzLnJpZ2h0ID0gcmlnaHQ7XG4gICAgdGhpcy5ib3R0b20gPSBib3R0b207XG4gIH1cblxuICBnZXRUb3AoKSB7XG4gICAgcmV0dXJuIHRoaXMudG9wO1xuICB9XG5cbiAgZ2V0TGVmdCgpIHtcbiAgICByZXR1cm4gdGhpcy5sZWZ0O1xuICB9XG5cbiAgZ2V0UmlnaHQoKSB7XG4gICAgcmV0dXJuIHRoaXMucmlnaHQ7XG4gIH1cblxuICBnZXRCb3R0b20oKSB7XG4gICAgcmV0dXJuIHRoaXMuYm90dG9tO1xuICB9XG5cbiAgZ2V0V2lkdGgoKSB7XG4gICAgY29uc3Qgd2lkdGggPSAodGhpcy5yaWdodCAtIHRoaXMubGVmdCk7XG5cbiAgICByZXR1cm4gd2lkdGg7XG4gIH1cblxuICBnZXRIZWlnaHQoKSB7XG4gICAgY29uc3QgaGVpZ2h0ID0gKHRoaXMuYm90dG9tIC0gdGhpcy50b3ApO1xuXG4gICAgcmV0dXJuIGhlaWdodDtcbiAgfVxuICBcbiAgc2V0VG9wKHRvcCkge1xuICAgIHRoaXMudG9wID0gdG9wO1xuICB9XG5cbiAgc2V0TGVmdChsZWZ0KSB7XG4gICAgdGhpcy5sZWZ0ID0gbGVmdDtcbiAgfVxuXG4gIHNldFJpZ2h0KHJpZ2h0KSB7XG4gICAgdGhpcy5yaWdodCA9IHJpZ2h0O1xuICB9XG5cbiAgc2V0Qm90dG9tKGJvdHRvbSkge1xuICAgIHRoaXMuYm90dG9tID0gYm90dG9tO1xuICB9XG5cbiAgc2hpZnQoaG9yaXpvbnRhbE9mZnNldCwgdmVydGljYWxPZmZzZXQpIHtcbiAgICB0aGlzLnRvcCArPSB2ZXJ0aWNhbE9mZnNldDtcbiAgICB0aGlzLmxlZnQgKz0gaG9yaXpvbnRhbE9mZnNldDtcbiAgICB0aGlzLnJpZ2h0ICs9IGhvcml6b250YWxPZmZzZXQ7XG4gICAgdGhpcy5ib3R0b20gKz0gdmVydGljYWxPZmZzZXQ7XG4gIH1cblxuICBpc092ZXJsYXBwaW5nTW91c2UobW91c2VUb3AsIG1vdXNlTGVmdCkge1xuICAgIHJldHVybiAoICAodGhpcy50b3AgPD0gbW91c2VUb3ApXG4gICAgICAgICAgICYmICh0aGlzLmxlZnQgPD0gbW91c2VMZWZ0KVxuICAgICAgICAgICAmJiAodGhpcy5yaWdodCA+IG1vdXNlTGVmdClcbiAgICAgICAgICAgJiYgKHRoaXMuYm90dG9tID4gbW91c2VUb3ApICApO1xuICB9XG5cbiAgYXJlT3ZlcmxhcHBpbmcoYm91bmRzKSB7XG4gICAgcmV0dXJuICggICh0aGlzLnRvcCA8IGJvdW5kcy5ib3R0b20pXG4gICAgICAgICAgICYmICh0aGlzLmxlZnQgPCBib3VuZHMucmlnaHQpXG4gICAgICAgICAgICYmICh0aGlzLnJpZ2h0ID4gYm91bmRzLmxlZnQpXG4gICAgICAgICAgICYmICh0aGlzLmJvdHRvbSA+IGJvdW5kcy50b3ApICApO1xuICB9XG5cbiAgc3RhdGljIGZyb21Cb3VuZGluZ0NsaWVudFJlY3QoYm91bmRpbmdDbGllbnRSZWN0KSB7XG4gICAgY29uc3Qgd2luZG93U2Nyb2xsVG9wID0gd2luZG93LnBhZ2VZT2Zmc2V0LCAvLy9cbiAgICAgICAgICB3aW5kb3dTY3JvbGxMZWZ0ID0gd2luZG93LnBhZ2VYT2Zmc2V0LCAgLy8vXG4gICAgICAgICAgdG9wID0gYm91bmRpbmdDbGllbnRSZWN0LnRvcCArIHdpbmRvd1Njcm9sbFRvcCxcbiAgICAgICAgICBsZWZ0ID0gYm91bmRpbmdDbGllbnRSZWN0LmxlZnQgKyB3aW5kb3dTY3JvbGxMZWZ0LFxuICAgICAgICAgIHJpZ2h0ID0gYm91bmRpbmdDbGllbnRSZWN0LnJpZ2h0ICsgd2luZG93U2Nyb2xsTGVmdCxcbiAgICAgICAgICBib3R0b20gPSBib3VuZGluZ0NsaWVudFJlY3QuYm90dG9tICsgd2luZG93U2Nyb2xsVG9wLFxuICAgICAgICAgIGJvdW5kcyA9IG5ldyBCb3VuZHModG9wLCBsZWZ0LCByaWdodCwgYm90dG9tKTtcblxuICAgIHJldHVybiBib3VuZHM7XG4gIH1cblxuICBzdGF0aWMgZnJvbVRvcExlZnRXaWR0aEFuZEhlaWdodCh0b3AsIGxlZnQsIHdpZHRoLCBoZWlnaHQpIHtcbiAgICBjb25zdCBib3R0b20gPSB0b3AgKyBoZWlnaHQsXG4gICAgICAgICAgcmlnaHQgPSBsZWZ0ICsgd2lkdGgsXG4gICAgICAgICAgYm91bmRzID0gbmV3IEJvdW5kcyh0b3AsIGxlZnQsIHJpZ2h0LCBib3R0b20pO1xuXG4gICAgcmV0dXJuIGJvdW5kcztcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBGT1IgPSBcImZvclwiO1xuZXhwb3J0IGNvbnN0IEJPRFkgPSBcImJvZHlcIjtcbmV4cG9ydCBjb25zdCBOT05FID0gXCJub25lXCI7XG5leHBvcnQgY29uc3QgU1BBQ0UgPSBcIiBcIjtcbmV4cG9ydCBjb25zdCBDTEFTUyA9IFwiY2xhc3NcIjtcbmV4cG9ydCBjb25zdCBXSURUSCA9IFwid2lkdGhcIjtcbmV4cG9ydCBjb25zdCBCTE9DSyA9IFwiYmxvY2tcIjtcbmV4cG9ydCBjb25zdCBIRUlHSFQgPSBcImhlaWdodFwiO1xuZXhwb3J0IGNvbnN0IE9CSkVDVCA9IFwib2JqZWN0XCI7XG5leHBvcnQgY29uc3QgU1RSSU5HID0gXCJzdHJpbmdcIjtcbmV4cG9ydCBjb25zdCBESVNQTEFZID0gXCJkaXNwbGF5XCI7XG5leHBvcnQgY29uc3QgQk9PTEVBTiA9IFwiYm9vbGVhblwiO1xuZXhwb3J0IGNvbnN0IERJU0FCTEVEID0gXCJkaXNhYmxlZFwiO1xuZXhwb3J0IGNvbnN0IEZVTkNUSU9OID0gXCJmdW5jdGlvblwiO1xuZXhwb3J0IGNvbnN0IFdJTERDQVJEID0gXCIqXCI7XG5leHBvcnQgY29uc3QgSFRNTF9GT1IgPSBcImh0bWxGb3JcIjtcbmV4cG9ydCBjb25zdCBVTkRFRklORUQgPSAndW5kZWZpbmVkJztcbmV4cG9ydCBjb25zdCBDTEFTU19OQU1FID0gXCJjbGFzc05hbWVcIjtcbmV4cG9ydCBjb25zdCBBQk9VVF9CTEFOSyA9IFwiYWJvdXQ6YmxhbmtcIjtcbmV4cG9ydCBjb25zdCBFTVBUWV9TVFJJTkcgPSBcIlwiO1xuZXhwb3J0IGNvbnN0IFNWR19OQU1FU1BBQ0VfVVJJID0gXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfUFJPUEVSVElFUyA9IFwiZGVmYXVsdFByb3BlcnRpZXNcIjtcbmV4cG9ydCBjb25zdCBJR05PUkVEX1BST1BFUlRJRVMgPSBcImlnbm9yZWRQcm9wZXJ0aWVzXCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEJPT0xFQU4gfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5lKHRhcmdldCwgc291cmNlID0ge30pIHtcbiAgdGFyZ2V0ID0geyAuLi50YXJnZXQgfTsgIC8vL1xuXG4gIGNvbnN0IG5hbWVzID0gT2JqZWN0LmtleXMoc291cmNlKTsgIC8vL1xuXG4gIG5hbWVzLmZvckVhY2goKG5hbWUpID0+IHtcbiAgICBjb25zdCB0YXJnZXRWYWx1ZSA9IHRhcmdldFtuYW1lXSxcbiAgICAgICAgICBzb3VyY2VWYWx1ZSA9IHNvdXJjZVtuYW1lXSxcbiAgICAgICAgICB0YXJnZXRIYXNPd25Qcm9wZXJ0eSA9IHRhcmdldC5oYXNPd25Qcm9wZXJ0eShuYW1lKTtcblxuICAgIHRhcmdldFtuYW1lXSA9IHRhcmdldEhhc093blByb3BlcnR5ID9cbiAgICAgICAgICAgICAgICAgICAgIGNvbWJpbmVWYWx1ZXModGFyZ2V0VmFsdWUsIHNvdXJjZVZhbHVlKSA6XG4gICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZVZhbHVlOyAvLy9cbiAgfSk7XG5cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBydW5lKHRhcmdldCwgbmFtZXMgPSBbXSkge1xuICB0YXJnZXQgPSB7IC4uLnRhcmdldCB9OyAgLy8vXG5cbiAgbmFtZXMuZm9yRWFjaCgobmFtZSkgPT4ge1xuICAgIGNvbnN0IHRhcmdldEhhc093blByb3BlcnR5ID0gdGFyZ2V0Lmhhc093blByb3BlcnR5KG5hbWUpO1xuXG4gICAgaWYgKHRhcmdldEhhc093blByb3BlcnR5KSB7XG4gICAgICBkZWxldGUgdGFyZ2V0W25hbWVdO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuZnVuY3Rpb24gY29tYmluZVZhbHVlcyh0YXJnZXRWYWx1ZSwgc291cmNlVmFsdWUpIHtcbiAgY29uc3QgdGFyZ2V0VmFsdWVCb29sZWFuID0gaXNWYWx1ZUJvb2xlYW4odGFyZ2V0VmFsdWUpLFxuICAgICAgICBzb3VyY2VWYWx1ZUJvb2xlYW4gPSBpc1ZhbHVlQm9vbGVhbihzb3VyY2VWYWx1ZSksXG4gICAgICAgIGNvbWJpbmVkVmFsdWUgPSAodGFyZ2V0VmFsdWVCb29sZWFuICYmIHNvdXJjZVZhbHVlQm9vbGVhbikgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRWYWx1ZSA6IC8vL1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAke3RhcmdldFZhbHVlfSAke3NvdXJjZVZhbHVlfWA7XG5cbiAgcmV0dXJuIGNvbWJpbmVkVmFsdWU7XG59XG5cbmZ1bmN0aW9uIGlzVmFsdWVCb29sZWFuKHZhbHVlKSB7XG4gIGNvbnN0IHZhbHVlQm9vbGVhbiA9ICh0eXBlb2YgdmFsdWUgPT09IEJPT0xFQU4pO1xuXG4gIHJldHVybiB2YWx1ZUJvb2xlYW47XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBmaXJzdChhcnJheSkgeyByZXR1cm4gYXJyYXlbMF07IH1cblxuZXhwb3J0IGZ1bmN0aW9uIHB1c2goYXJyYXkxLCBhcnJheTIpIHsgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoYXJyYXkxLCBhcnJheTIpOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBhdWdtZW50KGFycmF5MSwgYXJyYXkyLCB0ZXN0KSB7XG4gIGFycmF5MSA9IFsgLi4uYXJyYXkxIF07IC8vL1xuXG4gIGFycmF5Mi5mb3JFYWNoKChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHBhc3NlZCA9IHRlc3QoZWxlbWVudCwgaW5kZXgpO1xuXG4gICAgaWYgKHBhc3NlZCkge1xuICAgICAgYXJyYXkxLnB1c2goZWxlbWVudCk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gYXJyYXkxO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmxhdHRlbihhcnJheSkge1xuICByZXR1cm4gYXJyYXkucmVkdWNlKChhcnJheSwgZWxlbWVudCkgPT4ge1xuICAgIGFycmF5ID0gYXJyYXkuY29uY2F0KGVsZW1lbnQpOyAgLy8vXG5cbiAgICByZXR1cm4gYXJyYXk7XG4gIH0sIFtdKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGd1YXJhbnRlZShhcnJheU9yRWxlbWVudCkge1xuICBhcnJheU9yRWxlbWVudCA9IGFycmF5T3JFbGVtZW50IHx8IFtdO1xuXG4gIHJldHVybiAoYXJyYXlPckVsZW1lbnQgaW5zdGFuY2VvZiBBcnJheSkgP1xuICAgICAgICAgICAgYXJyYXlPckVsZW1lbnQgOlxuICAgICAgICAgICAgICBbYXJyYXlPckVsZW1lbnRdO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNTVkdUYWdOYW1lKHRhZ05hbWUpIHtcbiAgcmV0dXJuIHN2Z1RhZ05hbWVzLmluY2x1ZGVzKHRhZ05hbWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNTVkdBdHRyaWJ1dGVOYW1lKGF0dHJpYnV0ZU5hbWUpIHtcbiAgcmV0dXJuIHN2Z0F0dHJpYnV0ZU5hbWVzLmluY2x1ZGVzKGF0dHJpYnV0ZU5hbWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNIVE1MQXR0cmlidXRlTmFtZShhdHRyaWJ1dGVOYW1lKSB7XG4gIHJldHVybiBodG1sQXR0cmlidXRlTmFtZXMuaW5jbHVkZXMoYXR0cmlidXRlTmFtZSk7XG59XG5cbmNvbnN0IHN2Z1RhZ05hbWVzID0gW1xuICAgICAgICBcImFsdEdseXBoXCIsIFwiYW5pbWF0ZVwiLCBcImFuaW1hdGVDb2xvclwiLCBcImFuaW1hdGVNb3Rpb25cIiwgXCJhbmltYXRlVHJhbnNmb3JtXCIsIFwiYW5pbWF0aW9uXCIsIFwiYXVkaW9cIixcbiAgICAgICAgXCJjaXJjbGVcIiwgXCJjbGlwUGF0aFwiLCBcImNvbG9yLXByb2ZpbGVcIiwgXCJjdXJzb3JcIixcbiAgICAgICAgXCJkZWZzXCIsIFwiZGVzY1wiLCBcImRpc2NhcmRcIixcbiAgICAgICAgXCJlbGxpcHNlXCIsXG4gICAgICAgIFwiZmVCbGVuZFwiLCBcImZlQ29sb3JNYXRyaXhcIiwgXCJmZUNvbXBvbmVudFRyYW5zZmVyXCIsIFwiZmVDb21wb3NpdGVcIiwgXCJmZUNvbnZvbHZlTWF0cml4XCIsIFwiZmVEaWZmdXNlTGlnaHRpbmdcIiwgXCJmZURpc3BsYWNlbWVudE1hcFwiLCBcImZlRGlzdGFudExpZ2h0XCIsIFwiZmVEcm9wU2hhZG93XCIsIFwiZmVGbG9vZFwiLCBcImZlRnVuY0FcIiwgXCJmZUZ1bmNCXCIsIFwiZmVGdW5jR1wiLCBcImZlRnVuY1JcIiwgXCJmZUdhdXNzaWFuQmx1clwiLCBcImZlSW1hZ2VcIiwgXCJmZU1lcmdlXCIsIFwiZmVNZXJnZU5vZGVcIiwgXCJmZU1vcnBob2xvZ3lcIiwgXCJmZU9mZnNldFwiLCBcImZlUG9pbnRMaWdodFwiLCBcImZlU3BlY3VsYXJMaWdodGluZ1wiLCBcImZlU3BvdExpZ2h0XCIsIFwiZmVUaWxlXCIsIFwiZmVUdXJidWxlbmNlXCIsIFwiZmlsdGVyXCIsIFwiZm9udFwiLCBcImZvbnQtZmFjZVwiLCBcImZvbnQtZmFjZS1mb3JtYXRcIiwgXCJmb250LWZhY2UtbmFtZVwiLCBcImZvbnQtZmFjZS11cmlcIiwgXCJmb3JlaWduT2JqZWN0XCIsXG4gICAgICAgIFwiZ1wiLCBcImdseXBoXCIsIFwiZ2x5cGhSZWZcIixcbiAgICAgICAgXCJoYW5kbGVyXCIsIFwiaGF0Y2hcIiwgXCJoYXRjaHBhdGhcIiwgXCJoa2VyblwiLFxuICAgICAgICBcImltYWdlXCIsIFwibGluZVwiLCBcImxpbmVhckdyYWRpZW50XCIsXG4gICAgICAgIFwibGlzdGVuZXJcIixcbiAgICAgICAgXCJtYXJrZXJcIiwgXCJtYXNrXCIsIFwibWVzaFwiLCBcIm1lc2hncmFkaWVudFwiLCBcIm1lc2hwYXRjaFwiLCBcIm1lc2hyb3dcIiwgXCJtZXRhZGF0YVwiLCBcIm1pc3NpbmctZ2x5cGhcIiwgXCJtcGF0aFwiLFxuICAgICAgICBcInBhdGhcIiwgXCJwYXR0ZXJuXCIsIFwicG9seWdvblwiLCBcInBvbHlsaW5lXCIsIFwicHJlZmV0Y2hcIixcbiAgICAgICAgXCJyYWRpYWxHcmFkaWVudFwiLCBcInJlY3RcIixcbiAgICAgICAgXCJzY3JpcHRcIiwgXCJzZXRcIiwgXCJzb2xpZGNvbG9yXCIsIFwic3RvcFwiLCBcInN0eWxlXCIsIFwic3ZnXCIsIFwic3dpdGNoXCIsIFwic3ltYm9sXCIsXG4gICAgICAgIFwidGJyZWFrXCIsIFwidGV4dFwiLCBcInRleHRBcmVhXCIsIFwidGV4dFBhdGhcIiwgXCJ0aXRsZVwiLCBcInRyZWZcIiwgXCJ0c3BhblwiLFxuICAgICAgICBcInVua25vd25cIiwgXCJ1c2VcIixcbiAgICAgICAgXCJ2aWRlb1wiLCBcInZpZXdcIiwgXCJ2a2VyblwiXG4gICAgICBdLFxuICAgICAgc3ZnQXR0cmlidXRlTmFtZXMgPSBbXG4gICAgICAgIFwiYWNjZW50LWhlaWdodFwiLCBcImFjY3VtdWxhdGVcIiwgXCJhZGRpdGl2ZVwiLCBcImFsaWdubWVudC1iYXNlbGluZVwiLCBcImFscGhhYmV0aWNcIiwgXCJhbXBsaXR1ZGVcIiwgXCJhcmFiaWMtZm9ybVwiLCBcImFzY2VudFwiLCBcImF0dHJpYnV0ZU5hbWVcIiwgXCJhdHRyaWJ1dGVUeXBlXCIsIFwiYXppbXV0aFwiLFxuICAgICAgICBcImJhbmR3aWR0aFwiLCBcImJhc2VGcmVxdWVuY3lcIiwgXCJiYXNlUHJvZmlsZVwiLCBcImJhc2VsaW5lLXNoaWZ0XCIsIFwiYmJveFwiLCBcImJlZ2luXCIsIFwiYmlhc1wiLCBcImJ5XCIsXG4gICAgICAgIFwiY2FsY01vZGVcIiwgXCJjYXAtaGVpZ2h0XCIsIFwiY2xpcFwiLCBcImNsYXNzTmFtZVwiLCBcImNsaXAtcGF0aFwiLCBcImNsaXAtcnVsZVwiLCBcImNsaXBQYXRoVW5pdHNcIiwgXCJjb2xvclwiLCBcImNvbG9yLWludGVycG9sYXRpb25cIiwgXCJjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnNcIiwgXCJjb2xvci1wcm9maWxlXCIsIFwiY29sb3ItcmVuZGVyaW5nXCIsIFwiY29udGVudFNjcmlwdFR5cGVcIiwgXCJjb250ZW50U3R5bGVUeXBlXCIsIFwiY3Jvc3NvcmlnaW5cIiwgXCJjdXJzb3JcIiwgXCJjeFwiLCBcImN5XCIsXG4gICAgICAgIFwiZFwiLCBcImRlZmF1bHRBY3Rpb25cIiwgXCJkZXNjZW50XCIsIFwiZGlmZnVzZUNvbnN0YW50XCIsIFwiZGlyZWN0aW9uXCIsIFwiZGlzcGxheVwiLCBcImRpdmlzb3JcIiwgXCJkb21pbmFudC1iYXNlbGluZVwiLCBcImRvd25sb2FkXCIsIFwiZHVyXCIsIFwiZHhcIiwgXCJkeVwiLFxuICAgICAgICBcImVkZ2VNb2RlXCIsIFwiZWRpdGFibGVcIiwgXCJlbGV2YXRpb25cIiwgXCJlbmFibGUtYmFja2dyb3VuZFwiLCBcImVuZFwiLCBcImV2ZW50XCIsIFwiZXhwb25lbnRcIiwgXCJleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkXCIsXG4gICAgICAgIFwiZmlsbFwiLCBcImZpbGwtb3BhY2l0eVwiLCBcImZpbGwtcnVsZVwiLCBcImZpbHRlclwiLCBcImZpbHRlclJlc1wiLCBcImZpbHRlclVuaXRzXCIsIFwiZmxvb2QtY29sb3JcIiwgXCJmbG9vZC1vcGFjaXR5XCIsIFwiZm9jdXNIaWdobGlnaHRcIiwgXCJmb2N1c2FibGVcIiwgXCJmb250LWZhbWlseVwiLCBcImZvbnQtc2l6ZVwiLCBcImZvbnQtc2l6ZS1hZGp1c3RcIiwgXCJmb250LXN0cmV0Y2hcIiwgXCJmb250LXN0eWxlXCIsIFwiZm9udC12YXJpYW50XCIsIFwiZm9udC13ZWlnaHRcIiwgXCJmb3JtYXRcIiwgXCJmclwiLCBcImZyb21cIiwgXCJmeFwiLCBcImZ5XCIsXG4gICAgICAgIFwiZzFcIiwgXCJnMlwiLCBcImdseXBoLW5hbWVcIiwgXCJnbHlwaC1vcmllbnRhdGlvbi1ob3Jpem9udGFsXCIsIFwiZ2x5cGgtb3JpZW50YXRpb24tdmVydGljYWxcIiwgXCJnbHlwaFJlZlwiLCBcImdyYWRpZW50VHJhbnNmb3JtXCIsIFwiZ3JhZGllbnRVbml0c1wiLFxuICAgICAgICBcImhhbmRsZXJcIiwgXCJoYW5naW5nXCIsIFwiaGF0Y2hDb250ZW50VW5pdHNcIiwgXCJoYXRjaFVuaXRzXCIsIFwiaGVpZ2h0XCIsIFwiaG9yaXotYWR2LXhcIiwgXCJob3Jpei1vcmlnaW4teFwiLCBcImhvcml6LW9yaWdpbi15XCIsIFwiaHJlZlwiLCBcImhyZWZsYW5nXCIsXG4gICAgICAgIFwiaWRcIiwgXCJpZGVvZ3JhcGhpY1wiLCBcImltYWdlLXJlbmRlcmluZ1wiLCBcImluXCIsIFwiaW4yXCIsIFwiaW5pdGlhbFZpc2liaWxpdHlcIiwgXCJpbnRlcmNlcHRcIixcbiAgICAgICAgXCJrXCIsIFwiazFcIiwgXCJrMlwiLCBcImszXCIsIFwiazRcIiwgXCJrZXJuZWxNYXRyaXhcIiwgXCJrZXJuZWxVbml0TGVuZ3RoXCIsIFwia2VybmluZ1wiLCBcImtleVBvaW50c1wiLCBcImtleVNwbGluZXNcIiwgXCJrZXlUaW1lc1wiLFxuICAgICAgICBcImxlbmd0aEFkanVzdFwiLCBcImxldHRlci1zcGFjaW5nXCIsIFwibGlnaHRpbmctY29sb3JcIiwgXCJsaW1pdGluZ0NvbmVBbmdsZVwiLCBcImxvY2FsXCIsXG4gICAgICAgIFwibWFya2VyLWVuZFwiLCBcIm1hcmtlci1taWRcIiwgXCJtYXJrZXItc3RhcnRcIiwgXCJtYXJrZXJIZWlnaHRcIiwgXCJtYXJrZXJVbml0c1wiLCBcIm1hcmtlcldpZHRoXCIsIFwibWFza1wiLCBcIm1hc2tDb250ZW50VW5pdHNcIiwgXCJtYXNrVW5pdHNcIiwgXCJtYXRoZW1hdGljYWxcIiwgXCJtYXhcIiwgXCJtZWRpYVwiLCBcIm1lZGlhQ2hhcmFjdGVyRW5jb2RpbmdcIiwgXCJtZWRpYUNvbnRlbnRFbmNvZGluZ3NcIiwgXCJtZWRpYVNpemVcIiwgXCJtZWRpYVRpbWVcIiwgXCJtZXRob2RcIiwgXCJtaW5cIiwgXCJtb2RlXCIsXG4gICAgICAgIFwibmFtZVwiLCBcIm5hdi1kb3duXCIsIFwibmF2LWRvd24tbGVmdFwiLCBcIm5hdi1kb3duLXJpZ2h0XCIsIFwibmF2LWxlZnRcIiwgXCJuYXYtbmV4dFwiLCBcIm5hdi1wcmV2XCIsIFwibmF2LXJpZ2h0XCIsIFwibmF2LXVwXCIsIFwibmF2LXVwLWxlZnRcIiwgXCJuYXYtdXAtcmlnaHRcIiwgXCJudW1PY3RhdmVzXCIsXG4gICAgICAgIFwib2JzZXJ2ZXJcIiwgXCJvZmZzZXRcIiwgXCJvcGFjaXR5XCIsIFwib3BlcmF0b3JcIiwgXCJvcmRlclwiLCBcIm9yaWVudFwiLCBcIm9yaWVudGF0aW9uXCIsIFwib3JpZ2luXCIsIFwib3ZlcmZsb3dcIiwgXCJvdmVybGF5XCIsIFwib3ZlcmxpbmUtcG9zaXRpb25cIiwgXCJvdmVybGluZS10aGlja25lc3NcIixcbiAgICAgICAgXCJwYW5vc2UtMVwiLCBcInBhdGhcIiwgXCJwYXRoTGVuZ3RoXCIsIFwicGF0dGVybkNvbnRlbnRVbml0c1wiLCBcInBhdHRlcm5UcmFuc2Zvcm1cIiwgXCJwYXR0ZXJuVW5pdHNcIiwgXCJwaGFzZVwiLCBcInBpdGNoXCIsIFwicGxheWJhY2tPcmRlclwiLCBcInBsYXliYWNrb3JkZXJcIiwgXCJwb2ludGVyLWV2ZW50c1wiLCBcInBvaW50c1wiLCBcInBvaW50c0F0WFwiLCBcInBvaW50c0F0WVwiLCBcInBvaW50c0F0WlwiLCBcInByZXNlcnZlQWxwaGFcIiwgXCJwcmVzZXJ2ZUFzcGVjdFJhdGlvXCIsIFwicHJpbWl0aXZlVW5pdHNcIiwgXCJwcm9wYWdhdGVcIixcbiAgICAgICAgXCJyXCIsIFwicmFkaXVzXCIsIFwicmVmWFwiLCBcInJlZllcIiwgXCJyZW5kZXJpbmctaW50ZW50XCIsIFwicmVwZWF0Q291bnRcIiwgXCJyZXBlYXREdXJcIiwgXCJyZXF1aXJlZEV4dGVuc2lvbnNcIiwgXCJyZXF1aXJlZEZlYXR1cmVzXCIsIFwicmVxdWlyZWRGb250c1wiLCBcInJlcXVpcmVkRm9ybWF0c1wiLCBcInJlc3RhcnRcIiwgXCJyZXN1bHRcIiwgXCJyb3RhdGVcIiwgXCJyeFwiLCBcInJ5XCIsXG4gICAgICAgIFwic2NhbGVcIiwgXCJzZWVkXCIsIFwic2hhcGUtcmVuZGVyaW5nXCIsIFwic2lkZVwiLCBcInNsb3BlXCIsIFwic25hcHNob3RUaW1lXCIsIFwic3BhY2luZ1wiLCBcInNwZWN1bGFyQ29uc3RhbnRcIiwgXCJzcGVjdWxhckV4cG9uZW50XCIsIFwic3ByZWFkTWV0aG9kXCIsIFwic3JjXCIsIFwic3RhcnRPZmZzZXRcIiwgXCJzdGREZXZpYXRpb25cIiwgXCJzdGVtaFwiLCBcInN0ZW12XCIsIFwic3RpdGNoVGlsZXNcIiwgXCJzdG9wLWNvbG9yXCIsIFwic3RvcC1vcGFjaXR5XCIsIFwic3RyaWtldGhyb3VnaC1wb3NpdGlvblwiLCBcInN0cmlrZXRocm91Z2gtdGhpY2tuZXNzXCIsIFwic3RyaW5nXCIsIFwic3Ryb2tlXCIsIFwic3Ryb2tlLWRhc2hhcnJheVwiLCBcInN0cm9rZS1kYXNob2Zmc2V0XCIsIFwic3Ryb2tlLWxpbmVjYXBcIiwgXCJzdHJva2UtbGluZWpvaW5cIiwgXCJzdHJva2UtbWl0ZXJsaW1pdFwiLCBcInN0cm9rZS1vcGFjaXR5XCIsIFwic3Ryb2tlLXdpZHRoXCIsIFwic3R5bGVcIiwgXCJzdXJmYWNlU2NhbGVcIiwgXCJzeW5jQmVoYXZpb3JcIiwgXCJzeW5jQmVoYXZpb3JEZWZhdWx0XCIsIFwic3luY01hc3RlclwiLCBcInN5bmNUb2xlcmFuY2VcIiwgXCJzeW5jVG9sZXJhbmNlRGVmYXVsdFwiLCBcInN5c3RlbUxhbmd1YWdlXCIsXG4gICAgICAgIFwidGFibGVWYWx1ZXNcIiwgXCJ0YXJnZXRcIiwgXCJ0YXJnZXRYXCIsIFwidGFyZ2V0WVwiLCBcInRleHQtYW5jaG9yXCIsIFwidGV4dC1kZWNvcmF0aW9uXCIsIFwidGV4dC1yZW5kZXJpbmdcIiwgXCJ0ZXh0TGVuZ3RoXCIsIFwidGltZWxpbmVCZWdpblwiLCBcInRpbWVsaW5lYmVnaW5cIiwgXCJ0aXRsZVwiLCBcInRvXCIsIFwidHJhbnNmb3JtXCIsIFwidHJhbnNmb3JtQmVoYXZpb3JcIiwgXCJ0eXBlXCIsXG4gICAgICAgIFwidTFcIiwgXCJ1MlwiLCBcInVuZGVybGluZS1wb3NpdGlvblwiLCBcInVuZGVybGluZS10aGlja25lc3NcIiwgXCJ1bmljb2RlXCIsIFwidW5pY29kZS1iaWRpXCIsIFwidW5pY29kZS1yYW5nZVwiLCBcInVuaXRzLXBlci1lbVwiLFxuICAgICAgICBcInYtYWxwaGFiZXRpY1wiLCBcInYtaGFuZ2luZ1wiLCBcInYtaWRlb2dyYXBoaWNcIiwgXCJ2LW1hdGhlbWF0aWNhbFwiLCBcInZhbHVlc1wiLCBcInZlcnNpb25cIiwgXCJ2ZXJ0LWFkdi15XCIsIFwidmVydC1vcmlnaW4teFwiLCBcInZlcnQtb3JpZ2luLXlcIiwgXCJ2aWV3Qm94XCIsIFwidmlld1RhcmdldFwiLCBcInZpc2liaWxpdHlcIixcbiAgICAgICAgXCJ3aWR0aFwiLCBcIndpZHRoc1wiLCBcIndvcmQtc3BhY2luZ1wiLCBcIndyaXRpbmctbW9kZVwiLFxuICAgICAgICBcInhcIiwgXCJ4LWhlaWdodFwiLCBcIngxXCIsIFwieDJcIiwgXCJ4Q2hhbm5lbFNlbGVjdG9yXCIsXG4gICAgICAgIFwieVwiLCBcInkxXCIsIFwieTJcIiwgXCJ5Q2hhbm5lbFNlbGVjdG9yXCIsXG4gICAgICAgIFwielwiLCBcInpvb21BbmRQYW5cIlxuICAgICAgXSxcbiAgICAgIGh0bWxBdHRyaWJ1dGVOYW1lcyA9IFtcbiAgICAgICAgXCJhY2NlcHRcIiwgXCJhY2NlcHRDaGFyc2V0XCIsIFwiYWNjZXNzS2V5XCIsIFwiYWN0aW9uXCIsIFwiYWxsb3dcIiwgXCJhbGxvd0Z1bGxTY3JlZW5cIiwgXCJhbGxvd1RyYW5zcGFyZW5jeVwiLCBcImFsdFwiLCBcImFzeW5jXCIsIFwiYXV0b0NvbXBsZXRlXCIsIFwiYXV0b0ZvY3VzXCIsIFwiYXV0b1BsYXlcIixcbiAgICAgICAgXCJjYXB0dXJlXCIsIFwiY2VsbFBhZGRpbmdcIiwgXCJjZWxsU3BhY2luZ1wiLCBcImNoYWxsZW5nZVwiLCBcImNoYXJTZXRcIiwgXCJjaGVja2VkXCIsIFwiY2l0ZVwiLCBcImNsYXNzSURcIiwgXCJjbGFzc05hbWVcIiwgXCJjb2xTcGFuXCIsIFwiY29sc1wiLCBcImNvbnRlbnRcIiwgXCJjb250ZW50RWRpdGFibGVcIiwgXCJjb250ZXh0TWVudVwiLCBcImNvbnRyb2xzXCIsIFwiY29vcmRzXCIsIFwiY3Jvc3NPcmlnaW5cIixcbiAgICAgICAgXCJkYXRhXCIsIFwiZGF0ZVRpbWVcIiwgXCJkZWZhdWx0XCIsIFwiZGVmZXJcIiwgXCJkaXJcIiwgXCJkaXNhYmxlZFwiLCBcImRvd25sb2FkXCIsIFwiZHJhZ2dhYmxlXCIsXG4gICAgICAgIFwiZW5jVHlwZVwiLFxuICAgICAgICBcImZvcm1cIiwgXCJmb3JtQWN0aW9uXCIsIFwiZm9ybUVuY1R5cGVcIiwgXCJmb3JtTWV0aG9kXCIsIFwiZm9ybU5vVmFsaWRhdGVcIiwgXCJmb3JtVGFyZ2V0XCIsIFwiZnJhbWVCb3JkZXJcIixcbiAgICAgICAgXCJoZWFkZXJzXCIsIFwiaGVpZ2h0XCIsIFwiaGlkZGVuXCIsIFwiaGlnaFwiLCBcImhyZWZcIiwgXCJocmVmTGFuZ1wiLCBcImh0bWxGb3JcIiwgXCJodHRwRXF1aXZcIixcbiAgICAgICAgXCJpY29uXCIsIFwiaWRcIiwgXCJpbnB1dE1vZGVcIiwgXCJpbnRlZ3JpdHlcIiwgXCJpc1wiLFxuICAgICAgICBcImtleVBhcmFtc1wiLCBcImtleVR5cGVcIiwgXCJraW5kXCIsXG4gICAgICAgIFwibGFiZWxcIiwgXCJsYW5nXCIsIFwibGlzdFwiLCBcImxvb3BcIiwgXCJsb3dcIixcbiAgICAgICAgXCJtYW5pZmVzdFwiLCBcIm1hcmdpbkhlaWdodFwiLCBcIm1hcmdpbldpZHRoXCIsIFwibWF4XCIsIFwibWF4TGVuZ3RoXCIsIFwibWVkaWFcIiwgXCJtZWRpYUdyb3VwXCIsIFwibWV0aG9kXCIsIFwibWluXCIsIFwibWluTGVuZ3RoXCIsIFwibXVsdGlwbGVcIiwgXCJtdXRlZFwiLFxuICAgICAgICBcIm5hbWVcIiwgXCJub1ZhbGlkYXRlXCIsIFwibm9uY2VcIixcbiAgICAgICAgXCJvcGVuXCIsIFwib3B0aW11bVwiLFxuICAgICAgICBcInBhdHRlcm5cIiwgXCJwbGFjZWhvbGRlclwiLCBcInBvc3RlclwiLCBcInByZWxvYWRcIiwgXCJwcm9maWxlXCIsXG4gICAgICAgIFwicmFkaW9Hcm91cFwiLCBcInJlYWRPbmx5XCIsIFwicmVsXCIsIFwicmVxdWlyZWRcIiwgXCJyZXZlcnNlZFwiLCBcInJvbGVcIiwgXCJyb3dTcGFuXCIsIFwicm93c1wiLFxuICAgICAgICBcInNhbmRib3hcIiwgXCJzY29wZVwiLCBcInNjb3BlZFwiLCBcInNjcm9sbGluZ1wiLCBcInNlYW1sZXNzXCIsIFwic2VsZWN0ZWRcIiwgXCJzaGFwZVwiLCBcInNpemVcIiwgXCJzaXplc1wiLCBcInNwYW5cIiwgXCJzcGVsbENoZWNrXCIsIFwic3JjXCIsIFwic3JjRG9jXCIsIFwic3JjTGFuZ1wiLCBcInNyY1NldFwiLCBcInN0YXJ0XCIsIFwic3RlcFwiLCBcInN0eWxlXCIsIFwic3VtbWFyeVwiLFxuICAgICAgICBcInRhYkluZGV4XCIsIFwidGFyZ2V0XCIsIFwidGl0bGVcIiwgXCJ0eXBlXCIsXG4gICAgICAgIFwidXNlTWFwXCIsXG4gICAgICAgIFwidmFsdWVcIixcbiAgICAgICAgXCJ3aWR0aFwiLFxuICAgICAgICBcIndtb2RlXCIsXG4gICAgICAgIFwid3JhcFwiXG4gICAgICBdO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBwdXNoIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9hcnJheVwiO1xuaW1wb3J0IHsgV0lMRENBUkQgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBlbGVtZW50c0Zyb21ET01FbGVtZW50cyhkb21FbGVtZW50cykge1xuICBjb25zdCBkb21FbGVtZW50c1dpdGhFbGVtZW50cyA9IGZpbHRlckRPTU5vZGVzKGRvbUVsZW1lbnRzLCAoZG9tRWxlbWVudCkgPT4gKGRvbUVsZW1lbnQuX19lbGVtZW50X18gIT09IHVuZGVmaW5lZCkpLFxuICAgICAgICBlbGVtZW50cyA9IGRvbUVsZW1lbnRzV2l0aEVsZW1lbnRzLm1hcCgoZG9tRWxlbWVudCkgPT4gZG9tRWxlbWVudC5fX2VsZW1lbnRfXyk7XG5cbiAgcmV0dXJuIGVsZW1lbnRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNjZW5kYW50RE9NTm9kZXNGcm9tRE9NTm9kZShkb21Ob2RlLCBoZWlnaHQsIGFzY2VuZGFudERPTU5vZGVzID0gW10pIHtcbiAgaWYgKGhlaWdodCA+IDApIHtcbiAgICBjb25zdCBwYXJlbnRET01Ob2RlID0gZG9tTm9kZS5wYXJlbnRFbGVtZW50OyAgLy8vXG5cbiAgICBpZiAocGFyZW50RE9NTm9kZSAhPT0gbnVsbCkge1xuICAgICAgYXNjZW5kYW50RE9NTm9kZXMucHVzaChwYXJlbnRET01Ob2RlKTtcblxuICAgICAgaGVpZ2h0LS07XG5cbiAgICAgIGFzY2VuZGFudERPTU5vZGVzRnJvbURPTU5vZGUocGFyZW50RE9NTm9kZSwgaGVpZ2h0LCBhc2NlbmRhbnRET01Ob2Rlcyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGFzY2VuZGFudERPTU5vZGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVzY2VuZGFudERPTU5vZGVzRnJvbURPTU5vZGUoZG9tTm9kZSwgZGVwdGgsIGRlc2NlbmRhbnRET01Ob2RlcyA9IFtdKSB7XG4gIGlmIChkZXB0aCA+IDApIHtcbiAgICBjb25zdCBjaGlsZERPTU5vZGVzID0gZG9tTm9kZS5jaGlsZE5vZGVzOyAgLy8vXG5cbiAgICBwdXNoKGRlc2NlbmRhbnRET01Ob2RlcywgY2hpbGRET01Ob2Rlcyk7XG5cbiAgICBkZXB0aC0tO1xuXG4gICAgY2hpbGRET01Ob2Rlcy5mb3JFYWNoKChjaGlsZERPTU5vZGUpID0+IGRlc2NlbmRhbnRET01Ob2Rlc0Zyb21ET01Ob2RlKGNoaWxkRE9NTm9kZSwgZGVwdGgsIGRlc2NlbmRhbnRET01Ob2RlcykpO1xuICB9XG5cbiAgcmV0dXJuIGRlc2NlbmRhbnRET01Ob2Rlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbHRlckRPTU5vZGVzQnlTZWxlY3Rvcihkb21Ob2Rlcywgc2VsZWN0b3IpIHtcbiAgY29uc3QgZmlsdGVyZWRET01Ob2RlcyA9IGZpbHRlckRPTU5vZGVzKGRvbU5vZGVzLCAoZG9tTm9kZSkgPT4gZG9tTm9kZU1hdGNoZXNTZWxlY3Rvcihkb21Ob2RlLCBzZWxlY3RvcikpO1xuXG4gIHJldHVybiBmaWx0ZXJlZERPTU5vZGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZG9tTm9kZU1hdGNoZXNTZWxlY3Rvcihkb21Ob2RlLCBzZWxlY3Rvcikge1xuICBjb25zdCBkb21Ob2RlVHlwZSA9IGRvbU5vZGUubm9kZVR5cGU7XG5cbiAgc3dpdGNoIChkb21Ob2RlVHlwZSkge1xuICAgIGNhc2UgTm9kZS5FTEVNRU5UX05PREU6IHtcbiAgICAgIGNvbnN0IGRvbUVsZW1lbnQgPSBkb21Ob2RlOyAvLy9cblxuICAgICAgcmV0dXJuIGRvbUVsZW1lbnQubWF0Y2hlcyhzZWxlY3Rvcik7XG4gICAgfVxuXG4gICAgY2FzZSBOb2RlLlRFWFRfTk9ERToge1xuICAgICAgaWYgKHNlbGVjdG9yID09PSBXSUxEQ0FSRCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXJET01Ob2Rlcyhkb21Ob2RlcywgdGVzdCkge1xuICBjb25zdCBmaWx0ZXJlZERPTU5vZGVzID0gW10sXG4gICAgICAgIGRvbU5vZGVzTGVuZ3RoID0gZG9tTm9kZXMubGVuZ3RoO1xuXG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBkb21Ob2Rlc0xlbmd0aDsgaW5kZXgrKykge1xuICAgIGNvbnN0IGRvbU5vZGUgPSBkb21Ob2Rlc1tpbmRleF0sXG4gICAgICAgICAgcmVzdWx0ID0gdGVzdChkb21Ob2RlKTtcblxuICAgIGlmIChyZXN1bHQpIHtcbiAgICAgIGZpbHRlcmVkRE9NTm9kZXMucHVzaChkb21Ob2RlKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmlsdGVyZWRET01Ob2Rlcztcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgZmlyc3QgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5pbXBvcnQgeyBXSUxEQ0FSRCB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGRvbU5vZGVNYXRjaGVzU2VsZWN0b3IsIGVsZW1lbnRzRnJvbURPTUVsZW1lbnRzLCBmaWx0ZXJET01Ob2Rlc0J5U2VsZWN0b3IsIGFzY2VuZGFudERPTU5vZGVzRnJvbURPTU5vZGUsIGRlc2NlbmRhbnRET01Ob2Rlc0Zyb21ET01Ob2RlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9kb21cIjtcblxuZnVuY3Rpb24gZ2V0UGFyZW50RWxlbWVudChzZWxlY3RvciA9IFdJTERDQVJEKSB7XG4gIGxldCBwYXJlbnRFbGVtZW50ID0gbnVsbDtcblxuICBjb25zdCBwYXJlbnRET01FbGVtZW50ID0gdGhpcy5kb21FbGVtZW50LnBhcmVudEVsZW1lbnQ7XG5cbiAgaWYgKHBhcmVudERPTUVsZW1lbnQgIT09IG51bGwpIHtcbiAgICBpZiAocGFyZW50RE9NRWxlbWVudC5tYXRjaGVzKHNlbGVjdG9yKSkge1xuICAgICAgY29uc3QgcGFyZW50RE9NRWxlbWVudHMgPSBbcGFyZW50RE9NRWxlbWVudF0sXG4gICAgICAgICAgICBwYXJlbnRFbGVtZW50cyA9IGVsZW1lbnRzRnJvbURPTUVsZW1lbnRzKHBhcmVudERPTUVsZW1lbnRzKSxcbiAgICAgICAgICAgIGZpcnN0UGFyZW50RWxlbWVudCA9IGZpcnN0KHBhcmVudEVsZW1lbnRzKTtcblxuICAgICAgcGFyZW50RWxlbWVudCA9IGZpcnN0UGFyZW50RWxlbWVudCB8fCBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYXJlbnRFbGVtZW50O1xufVxuXG5mdW5jdGlvbiBnZXRDaGlsZEVsZW1lbnRzKHNlbGVjdG9yID0gV0lMRENBUkQpIHtcbiAgY29uc3QgY2hpbGRET01Ob2RlcyA9IHRoaXMuZG9tRWxlbWVudC5jaGlsZE5vZGVzLFxuICAgICAgICBjaGlsZERPTUVsZW1lbnRzID0gZmlsdGVyRE9NTm9kZXNCeVNlbGVjdG9yKGNoaWxkRE9NTm9kZXMsIHNlbGVjdG9yKSxcbiAgICAgICAgY2hpbGRFbGVtZW50cyA9IGVsZW1lbnRzRnJvbURPTUVsZW1lbnRzKGNoaWxkRE9NRWxlbWVudHMpO1xuXG4gIHJldHVybiBjaGlsZEVsZW1lbnRzO1xufVxuXG5mdW5jdGlvbiBnZXRBc2NlbmRhbnRFbGVtZW50cyhzZWxlY3RvciA9IFdJTERDQVJELCBtYXhpbXVtSGVpZ2h0ID0gSW5maW5pdHkpIHtcbiAgY29uc3QgaGVpZ2h0ID0gbWF4aW11bUhlaWdodCwgLy8vXG4gICAgICAgIGRvbU5vZGUgPSB0aGlzLmRvbUVsZW1lbnQsICAvLy9cbiAgICAgICAgYXNjZW5kYW50RE9NTm9kZXMgPSBhc2NlbmRhbnRET01Ob2Rlc0Zyb21ET01Ob2RlKGRvbU5vZGUsIGhlaWdodCksXG4gICAgICAgIGFzY2VuZGFudERPTUVsZW1lbnRzID0gZmlsdGVyRE9NTm9kZXNCeVNlbGVjdG9yKGFzY2VuZGFudERPTU5vZGVzLCBzZWxlY3RvciksXG4gICAgICAgIGFzY2VuZGFudEVsZW1lbnRzID0gZWxlbWVudHNGcm9tRE9NRWxlbWVudHMoYXNjZW5kYW50RE9NRWxlbWVudHMpO1xuXG4gIHJldHVybiBhc2NlbmRhbnRFbGVtZW50cztcbn1cblxuZnVuY3Rpb24gZ2V0RGVzY2VuZGFudEVsZW1lbnRzKHNlbGVjdG9yID0gV0lMRENBUkQsIG1heGltdW1EZXB0aCA9IEluZmluaXR5KSB7XG4gIGNvbnN0IGRlcHRoID0gbWF4aW11bURlcHRoLCAvLy9cbiAgICAgICAgZG9tTm9kZSA9IHRoaXMuZG9tRWxlbWVudCwgIC8vL1xuICAgICAgICBkZXNjZW5kYW50RE9NTm9kZXMgPSBkZXNjZW5kYW50RE9NTm9kZXNGcm9tRE9NTm9kZShkb21Ob2RlLCBkZXB0aCksXG4gICAgICAgIGRlc2NlbmRhbnRET01FbGVtZW50cyA9IGZpbHRlckRPTU5vZGVzQnlTZWxlY3RvcihkZXNjZW5kYW50RE9NTm9kZXMsIHNlbGVjdG9yKSxcbiAgICAgICAgZGVzY2VuZGFudEVsZW1lbnRzID0gZWxlbWVudHNGcm9tRE9NRWxlbWVudHMoZGVzY2VuZGFudERPTUVsZW1lbnRzKTtcblxuICByZXR1cm4gZGVzY2VuZGFudEVsZW1lbnRzO1xufVxuXG5mdW5jdGlvbiBnZXROZXh0U2libGluZ0VsZW1lbnQoc2VsZWN0b3IgPSBXSUxEQ0FSRCkge1xuICBsZXQgbmV4dFNpYmxpbmdFbGVtZW50ID0gbnVsbDtcblxuICBjb25zdCBuZXh0U2libGluZ0RPTU5vZGUgPSB0aGlzLmRvbUVsZW1lbnQubmV4dFNpYmxpbmc7XG5cbiAgaWYgKChuZXh0U2libGluZ0RPTU5vZGUgIT09IG51bGwpICYmIGRvbU5vZGVNYXRjaGVzU2VsZWN0b3IobmV4dFNpYmxpbmdET01Ob2RlLCBzZWxlY3RvcikpIHtcbiAgICBuZXh0U2libGluZ0VsZW1lbnQgPSBuZXh0U2libGluZ0RPTU5vZGUuX19lbGVtZW50X18gfHwgbnVsbDtcbiAgfVxuXG4gIHJldHVybiBuZXh0U2libGluZ0VsZW1lbnQ7XG59XG5cbmZ1bmN0aW9uIGdldFByZXZpb3VzU2libGluZ0VsZW1lbnQoc2VsZWN0b3IgPSBXSUxEQ0FSRCkge1xuICBsZXQgcHJldmlvdXNTaWJsaW5nRWxlbWVudCA9IG51bGw7XG5cbiAgY29uc3QgcHJldmlvdXNTaWJsaW5nRE9NTm9kZSA9IHRoaXMuZG9tRWxlbWVudC5wcmV2aW91c1NpYmxpbmc7ICAvLy9cblxuICBpZiAoKHByZXZpb3VzU2libGluZ0RPTU5vZGUgIT09IG51bGwpICYmIGRvbU5vZGVNYXRjaGVzU2VsZWN0b3IocHJldmlvdXNTaWJsaW5nRE9NTm9kZSwgc2VsZWN0b3IpKSB7XG4gICAgcHJldmlvdXNTaWJsaW5nRWxlbWVudCA9IHByZXZpb3VzU2libGluZ0RPTU5vZGUuX19lbGVtZW50X18gfHwgbnVsbDtcbiAgfVxuXG4gIHJldHVybiBwcmV2aW91c1NpYmxpbmdFbGVtZW50O1xufVxuXG5jb25zdCBlbGVtZW50TWl4aW5zID0ge1xuICBnZXRQYXJlbnRFbGVtZW50LFxuICBnZXRDaGlsZEVsZW1lbnRzLFxuICBnZXRBc2NlbmRhbnRFbGVtZW50cyxcbiAgZ2V0RGVzY2VuZGFudEVsZW1lbnRzLFxuICBnZXROZXh0U2libGluZ0VsZW1lbnQsXG4gIGdldFByZXZpb3VzU2libGluZ0VsZW1lbnRcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGVsZW1lbnRNaXhpbnM7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBPZmZzZXQgZnJvbSBcIi4vb2Zmc2V0XCI7XG5pbXBvcnQgQm91bmRzIGZyb20gXCIuL2JvdW5kc1wiO1xuaW1wb3J0IGVsZW1lbnRNaXhpbnMgZnJvbSBcIi4vbWl4aW5zL2VsZW1lbnRcIjtcblxuY2xhc3MgVGV4dEVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcih0ZXh0KSB7XG4gICAgdGhpcy5kb21FbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGV4dCk7IC8vL1xuXG4gICAgdGhpcy5kb21FbGVtZW50Ll9fZWxlbWVudF9fID0gdGhpcztcbiAgfVxuXG4gIGdldFRleHQoKSB7XG4gICAgY29uc3Qgbm9kZVZhbHVlID0gdGhpcy5kb21FbGVtZW50Lm5vZGVWYWx1ZSxcbiAgICAgICAgICB0ZXh0ID0gbm9kZVZhbHVlOyAvLy9cblxuICAgIHJldHVybiB0ZXh0O1xuICB9XG5cbiAgc2V0VGV4dCh0ZXh0KSB7XG4gICAgY29uc3Qgbm9kZVZhbHVlID0gdGV4dDsgLy8vXG5cbiAgICB0aGlzLmRvbUVsZW1lbnQubm9kZVZhbHVlID0gbm9kZVZhbHVlO1xuICB9XG5cbiAgZ2V0T2Zmc2V0KCkge1xuICAgIGNvbnN0IHRvcCA9IHRoaXMuZG9tRWxlbWVudC5vZmZzZXRUb3AsICAvLy9cbiAgICAgICAgICBsZWZ0ID0gdGhpcy5kb21FbGVtZW50Lm9mZnNldExlZnQsICAvLy9cbiAgICAgICAgICBvZmZzZXQgPSBuZXcgT2Zmc2V0KHRvcCwgbGVmdCk7XG5cbiAgICByZXR1cm4gb2Zmc2V0O1xuICB9XG5cbiAgZ2V0Qm91bmRzKCkge1xuICAgIGNvbnN0IGJvdW5kaW5nQ2xpZW50UmVjdCA9IHRoaXMuZG9tRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxcbiAgICAgICAgICBib3VuZHMgPSBCb3VuZHMuZnJvbUJvdW5kaW5nQ2xpZW50UmVjdChib3VuZGluZ0NsaWVudFJlY3QpO1xuXG4gICAgcmV0dXJuIGJvdW5kcztcbiAgfVxuXG4gIGdldFdpZHRoKCkge1xuICAgIGNvbnN0IGNsaWVudFdpZHRoID0gdGhpcy5kb21FbGVtZW50LmNsaWVudFdpZHRoLFxuICAgICAgICAgIHdpZHRoID0gY2xpZW50V2lkdGg7ICAvLy9cblxuICAgIHJldHVybiB3aWR0aDtcbiAgfVxuXG4gIGdldEhlaWdodCgpIHtcbiAgICBjb25zdCBjbGllbnRIZWlnaHQgPSB0aGlzLmRvbUVsZW1lbnQuY2xpZW50SGVpZ2h0LFxuICAgICAgICAgIGhlaWdodCA9IGNsaWVudEhlaWdodDsgIC8vL1xuXG4gICAgcmV0dXJuIGhlaWdodDtcbiAgfVxuXG4gIHByZXBlbmRUbyhwYXJlbnRFbGVtZW50KSB7IHBhcmVudEVsZW1lbnQucHJlcGVuZCh0aGlzKTsgfVxuXG4gIGFwcGVuZFRvKHBhcmVudEVsZW1lbnQpIHsgcGFyZW50RWxlbWVudC5hcHBlbmQodGhpcyk7IH1cblxuICBhZGRUbyhwYXJlbnRFbGVtZW50KSB7IHBhcmVudEVsZW1lbnQuYWRkKHRoaXMpOyB9XG5cbiAgcmVtb3ZlRnJvbShwYXJlbnRFbGVtZW50KSB7IHBhcmVudEVsZW1lbnQucmVtb3ZlKHRoaXMpOyB9XG5cbiAgaW5zZXJ0QmVmb3JlKHNpYmxpbmdFbGVtZW50KSB7XG4gICAgY29uc3QgcGFyZW50RE9NTm9kZSA9IHNpYmxpbmdFbGVtZW50LmRvbUVsZW1lbnQucGFyZW50Tm9kZSxcbiAgICAgICAgICBzaWJsaW5nRE9NRWxlbWVudCA9IHNpYmxpbmdFbGVtZW50LmRvbUVsZW1lbnQ7XG5cbiAgICBwYXJlbnRET01Ob2RlLmluc2VydEJlZm9yZSh0aGlzLmRvbUVsZW1lbnQsIHNpYmxpbmdET01FbGVtZW50KTtcbiAgfVxuXG4gIGluc2VydEFmdGVyKHNpYmxpbmdFbGVtZW50KSB7XG4gICAgY29uc3QgcGFyZW50RE9NTm9kZSA9IHNpYmxpbmdFbGVtZW50LmRvbUVsZW1lbnQucGFyZW50Tm9kZSxcbiAgICAgICAgICBzaWJsaW5nRE9NRWxlbWVudCA9IHNpYmxpbmdFbGVtZW50LmRvbUVsZW1lbnQ7XG5cbiAgICBwYXJlbnRET01Ob2RlLmluc2VydEJlZm9yZSh0aGlzLmRvbUVsZW1lbnQsIHNpYmxpbmdET01FbGVtZW50Lm5leHRTaWJsaW5nKTsgIC8vL1xuICB9XG5cbiAgcmVtb3ZlKCkge1xuICAgIHRoaXMuZG9tRWxlbWVudC5yZW1vdmUoKTtcbiAgfVxufVxuXG5PYmplY3QuYXNzaWduKFRleHRFbGVtZW50LnByb3RvdHlwZSwgZWxlbWVudE1peGlucyk7XG5cbmV4cG9ydCBkZWZhdWx0IFRleHRFbGVtZW50O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVGV4dEVsZW1lbnQgZnJvbSBcIi4uL3RleHRFbGVtZW50XCI7XG5cbmltcG9ydCB7IFNUUklORyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUZhbHNleUVsZW1lbnRzKGVsZW1lbnRzKSB7XG4gIGVsZW1lbnRzID0gZWxlbWVudHMucmVkdWNlKChlbGVtZW50cywgZWxlbWVudCkgPT4ge1xuICAgIGlmIChlbGVtZW50KSB7XG4gICAgICBlbGVtZW50cy5wdXNoKGVsZW1lbnQpO1xuICAgIH1cblxuICAgIHJldHVybiBlbGVtZW50cztcbiAgfSwgW10pO1xuXG4gIHJldHVybiBlbGVtZW50cztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VTdHJpbmdzV2l0aFRleHRFbGVtZW50cyhlbGVtZW50cykge1xuICBlbGVtZW50cyA9IGVsZW1lbnRzLm1hcCgoZWxlbWVudCkgPT4geyAgLy8vXG4gICAgaWYgKHR5cGVvZiBlbGVtZW50ID09PSBTVFJJTkcpIHtcbiAgICAgIGNvbnN0IHRleHQgPSBlbGVtZW50LCAgLy8vXG4gICAgICAgICAgICB0ZXh0RWxlbWVudCA9IG5ldyBUZXh0RWxlbWVudCh0ZXh0KTtcblxuICAgICAgZWxlbWVudCA9IHRleHRFbGVtZW50OyAvLy9cbiAgICB9XG5cbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfSk7XG5cbiAgcmV0dXJuIGVsZW1lbnRzO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBjb21iaW5lLCBwcnVuZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvb2JqZWN0XCI7XG5pbXBvcnQgeyBmaXJzdCwgZ3VhcmFudGVlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9hcnJheVwiO1xuaW1wb3J0IHsgaXNIVE1MQXR0cmlidXRlTmFtZSwgaXNTVkdBdHRyaWJ1dGVOYW1lIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9uYW1lXCI7XG5pbXBvcnQgeyByZW1vdmVGYWxzZXlFbGVtZW50cywgcmVwbGFjZVN0cmluZ3NXaXRoVGV4dEVsZW1lbnRzIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9lbGVtZW50c1wiO1xuaW1wb3J0IHsgRk9SLCBDTEFTUywgT0JKRUNULCBIVE1MX0ZPUiwgQ0xBU1NfTkFNRSwgQk9PTEVBTiwgRlVOQ1RJT04sIFNWR19OQU1FU1BBQ0VfVVJJIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5mdW5jdGlvbiBhcHBseVByb3BlcnRpZXMocHJvcGVydGllcywgZGVmYXVsdFByb3BlcnRpZXMsIGlnbm9yZWRQcm9wZXJ0aWVzKSB7XG4gIHRoaXMucHJvcGVydGllcyA9IGNvbWJpbmUocHJvcGVydGllcywgZGVmYXVsdFByb3BlcnRpZXMpO1xuXG4gIHByb3BlcnRpZXMgPSBwcnVuZSh0aGlzLnByb3BlcnRpZXMsIGlnbm9yZWRQcm9wZXJ0aWVzKTsgLy8vXG5cbiAgY29uc3QgeyBuYW1lc3BhY2VVUkkgfSA9IHRoaXMuZG9tRWxlbWVudCxcbiAgICAgICAgc3ZnID0gKG5hbWVzcGFjZVVSSSA9PT0gU1ZHX05BTUVTUEFDRV9VUkkpLCAvLy9cbiAgICAgICAgcHJvcGVydGllc0tleXMgPSBPYmplY3Qua2V5cyhwcm9wZXJ0aWVzKSxcbiAgICAgICAgbmFtZXMgPSBwcm9wZXJ0aWVzS2V5czsgIC8vLz1cblxuICBuYW1lcy5mb3JFYWNoKChuYW1lKSA9PiB7XG4gICAgY29uc3QgdmFsdWUgPSBwcm9wZXJ0aWVzW25hbWVdLFxuICAgICAgICAgIG5hbWVIYW5kbGVyTmFtZSA9IGlzTmFtZUhhbmRsZXJOYW1lKG5hbWUpO1xuXG4gICAgaWYgKG5hbWVIYW5kbGVyTmFtZSkge1xuICAgICAgYWRkSGFuZGxlcih0aGlzLCBuYW1lLCB2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG5hbWVBdHRyaWJ1dGVOYW1lID0gaXNOYW1lQXR0cmlidXRlTmFtZShuYW1lLCBzdmcpO1xuXG4gICAgICBpZiAobmFtZUF0dHJpYnV0ZU5hbWUpIHtcbiAgICAgICAgYWRkQXR0cmlidXRlKHRoaXMsIG5hbWUsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IGNoaWxkRWxlbWVudHMgPSBjaGlsZEVsZW1lbnRzRnJvbUVsZW1lbnQodGhpcykgfHwgcHJvcGVydGllcy5jaGlsZEVsZW1lbnRzLCAgLy8vXG4gICAgICAgIGNvbnRleHQgPSB7fTtcblxuICBjaGlsZEVsZW1lbnRzLmZvckVhY2goKGNoaWxkRWxlbWVudCkgPT4ge1xuICAgIHVwZGF0ZUNvbnRleHQoY2hpbGRFbGVtZW50LCBjb250ZXh0KTtcblxuICAgIHRoaXMuYWRkKGNoaWxkRWxlbWVudCk7XG4gIH0pO1xuXG4gIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG59XG5cbmZ1bmN0aW9uIGdldFByb3BlcnRpZXMoKSB7XG4gIHJldHVybiB0aGlzLnByb3BlcnRpZXM7XG59XG5cbmZ1bmN0aW9uIGdldENvbnRleHQoKSB7XG4gIHJldHVybiB0aGlzLmNvbnRleHQ7XG59XG5cbmZ1bmN0aW9uIGFzc2lnbkNvbnRleHQobmFtZXMsIHRoZW5EZWxldGUpIHtcbiAgY29uc3QgYXJndW1lbnRzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcblxuICBpZiAoYXJndW1lbnRzTGVuZ3RoID09PSAxKSB7XG4gICAgY29uc3QgZmlyc3RBcmd1bWVudCA9IGZpcnN0KGFyZ3VtZW50cyk7XG5cbiAgICBpZiAodHlwZW9mIGZpcnN0QXJndW1lbnQgPT09IEJPT0xFQU4pIHtcbiAgICAgIG5hbWVzID0gT2JqZWN0LmtleXModGhpcy5jb250ZXh0KTtcblxuICAgICAgdGhlbkRlbGV0ZSA9IGZpcnN0QXJndW1lbnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoZW5EZWxldGUgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGlmIChhcmd1bWVudHNMZW5ndGggPT09IDApIHtcbiAgICBuYW1lcyA9IE9iamVjdC5rZXlzKHRoaXMuY29udGV4dCk7XG5cbiAgICB0aGVuRGVsZXRlID0gdHJ1ZTtcbiAgfVxuXG4gIG5hbWVzLmZvckVhY2goKG5hbWUpID0+IHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuY29udGV4dFtuYW1lXSxcbiAgICAgICAgICBwcm9wZXJ0eU5hbWUgPSBuYW1lLCAgLy8vXG4gICAgICAgICAgZGVzY3JpcHRvciA9IHtcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZVxuICAgICAgICAgIH07XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTtcblxuICAgIGlmICh0aGVuRGVsZXRlKSB7XG4gICAgICBkZWxldGUgdGhpcy5jb250ZXh0W25hbWVdO1xuICAgIH1cbiAgfSwgW10pO1xufVxuXG5jb25zdCBqc3hNaXhpbnMgPSB7XG4gIGFwcGx5UHJvcGVydGllcyxcbiAgZ2V0UHJvcGVydGllcyxcbiAgZ2V0Q29udGV4dCxcbiAgYXNzaWduQ29udGV4dFxufTtcblxuZXhwb3J0IGRlZmF1bHQganN4TWl4aW5zO1xuXG5mdW5jdGlvbiBjaGlsZEVsZW1lbnRzRnJvbUVsZW1lbnQoZWxlbWVudCkge1xuICBsZXQgY2hpbGRFbGVtZW50cyA9IG51bGw7XG5cbiAgaWYgKHR5cGVvZiBlbGVtZW50LmNoaWxkRWxlbWVudHMgPT09IEZVTkNUSU9OKSB7XG4gICAgY2hpbGRFbGVtZW50cyA9IGVsZW1lbnQuY2hpbGRFbGVtZW50cy5jYWxsKGVsZW1lbnQpO1xuXG4gICAgY2hpbGRFbGVtZW50cyA9IGd1YXJhbnRlZShjaGlsZEVsZW1lbnRzKTtcblxuICAgIGNoaWxkRWxlbWVudHMgPSByZW1vdmVGYWxzZXlFbGVtZW50cyhjaGlsZEVsZW1lbnRzKTtcblxuICAgIGNoaWxkRWxlbWVudHMgPSByZXBsYWNlU3RyaW5nc1dpdGhUZXh0RWxlbWVudHMoY2hpbGRFbGVtZW50cyk7XG4gIH1cblxuICByZXR1cm4gY2hpbGRFbGVtZW50cztcbn1cblxuZnVuY3Rpb24gdXBkYXRlQ29udGV4dChjaGlsZEVsZW1lbnQsIGNvbnRleHQpIHtcbiAgY29uc3QgcGFyZW50Q29udGV4dCA9ICh0eXBlb2YgY2hpbGRFbGVtZW50LnBhcmVudENvbnRleHQgPT09IEZVTkNUSU9OKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkRWxlbWVudC5wYXJlbnRDb250ZXh0KCkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkRWxlbWVudC5jb250ZXh0OyAvLy9cblxuICBPYmplY3QuYXNzaWduKGNvbnRleHQsIHBhcmVudENvbnRleHQpO1xufVxuXG5mdW5jdGlvbiBhZGRIYW5kbGVyKGVsZW1lbnQsIG5hbWUsIHZhbHVlKSB7XG4gIGNvbnN0IGV2ZW50VHlwZSA9IG5hbWUuc3Vic3RyKDIpLnRvTG93ZXJDYXNlKCksIC8vL1xuICAgICAgICBoYW5kbGVyID0gdmFsdWU7ICAvLy9cblxuICBlbGVtZW50Lm9uKGV2ZW50VHlwZSwgaGFuZGxlcik7XG59XG5cbmZ1bmN0aW9uIGFkZEF0dHJpYnV0ZShlbGVtZW50LCBuYW1lLCB2YWx1ZSkge1xuICBpZiAobmFtZSA9PT0gQ0xBU1NfTkFNRSkge1xuICAgIG5hbWUgPSBDTEFTUztcbiAgfVxuXG4gIGlmIChuYW1lID09PSBIVE1MX0ZPUikge1xuICAgIG5hbWUgPSBGT1I7XG4gIH1cblxuICBpZiAodHlwZW9mIHZhbHVlID09PSBPQkpFQ1QpIHtcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXModmFsdWUpO1xuXG4gICAga2V5cy5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgIGVsZW1lbnQuZG9tRWxlbWVudFtuYW1lXVtrZXldID0gdmFsdWVba2V5XTtcbiAgICB9KTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09IEJPT0xFQU4pIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHZhbHVlID0gbmFtZTsgLy8vXG5cbiAgICAgIGVsZW1lbnQuYWRkQXR0cmlidXRlKG5hbWUsIHZhbHVlKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZWxlbWVudC5hZGRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzTmFtZUhhbmRsZXJOYW1lKG5hbWUpIHtcbiAgcmV0dXJuIC9eb24vLnRlc3QobmFtZSk7XG59XG5cbmZ1bmN0aW9uIGlzTmFtZUF0dHJpYnV0ZU5hbWUobmFtZSwgc3ZnKSB7XG4gIHJldHVybiBzdmcgPyBpc1NWR0F0dHJpYnV0ZU5hbWUobmFtZSkgOiBpc0hUTUxBdHRyaWJ1dGVOYW1lKG5hbWUpXG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBPUEVOX0VWRU5UX1RZUEUgPSBcIm9wZW5cIjtcbmV4cG9ydCBjb25zdCBNT1ZFX0VWRU5UX1RZUEUgPSBcIm1vdmVcIjtcbmV4cG9ydCBjb25zdCBCTFVSX0VWRU5UX1RZUEUgPSBcImJsdXJcIjtcbmV4cG9ydCBjb25zdCBEUkFHX0VWRU5UX1RZUEUgPSBcImRyYWdcIjtcbmV4cG9ydCBjb25zdCBEUk9QX0VWRU5UX1RZUEUgPSBcImRyb3BcIjtcbmV4cG9ydCBjb25zdCBXSEVFTF9FVkVOVF9UWVBFID0gXCJ3aGVlbFwiO1xuZXhwb3J0IGNvbnN0IElOUFVUX0VWRU5UX1RZUEUgPSBcImlucHV0XCI7XG5leHBvcnQgY29uc3QgRk9DVVNfRVZFTlRfVFlQRSA9IFwiZm9jdXNcIjtcbmV4cG9ydCBjb25zdCBDTElDS19FVkVOVF9UWVBFID0gXCJjbGlja1wiO1xuZXhwb3J0IGNvbnN0IEtFWVVQX0VWRU5UX1RZUEUgPSBcImtleXVwXCI7XG5leHBvcnQgY29uc3QgUkVNT1ZFX0VWRU5UX1RZUEUgPSBcInJlbW92ZVwiO1xuZXhwb3J0IGNvbnN0IENIQU5HRV9FVkVOVF9UWVBFID0gXCJjaGFuZ2VcIjtcbmV4cG9ydCBjb25zdCBSRVNJWkVfRVZFTlRfVFlQRSA9IFwicmVzaXplXCI7XG5leHBvcnQgY29uc3QgU0NST0xMX0VWRU5UX1RZUEUgPSBcInNjcm9sbFwiO1xuZXhwb3J0IGNvbnN0IEtFWURPV05fRVZFTlRfVFlQRSA9IFwia2V5ZG93blwiO1xuZXhwb3J0IGNvbnN0IE1PVVNFVVBfRVZFTlRfVFlQRSA9IFwibW91c2V1cFwiO1xuZXhwb3J0IGNvbnN0IEFVWENMSUNLX0VWRU5UX1RZUEUgPSBcImF1eGNsaWNrXCI7XG5leHBvcnQgY29uc3QgRFJBR19PVVRfRVZFTlRfVFlQRSA9IFwiZHJhZ291dFwiO1xuZXhwb3J0IGNvbnN0IE1PVVNFT1VUX0VWRU5UX1RZUEUgPSBcIm1vdXNlb3V0XCI7XG5leHBvcnQgY29uc3QgREJMQ0xJQ0tfRVZFTlRfVFlQRSA9IFwiZGJsY2xpY2tcIjtcbmV4cG9ydCBjb25zdCBNT1VTRU9WRVJfRVZFTlRfVFlQRSA9IFwibW91c2VvdmVyXCI7XG5leHBvcnQgY29uc3QgTU9VU0VET1dOX0VWRU5UX1RZUEUgPSBcIm1vdXNlZG93blwiO1xuZXhwb3J0IGNvbnN0IE1PVVNFTU9WRV9FVkVOVF9UWVBFID0gXCJtb3VzZW1vdmVcIjtcbmV4cG9ydCBjb25zdCBEUkFHX09WRVJfRVZFTlRfVFlQRSA9IFwiZHJhZ292ZXJcIjtcbmV4cG9ydCBjb25zdCBTVE9QX0RSQUdfRVZFTlRfVFlQRSA9IFwic3RvcGRyYWdcIjtcbmV4cG9ydCBjb25zdCBTVEFSVF9EUkFHX0VWRU5UX1RZUEUgPSBcInN0YXJ0ZHJhZ1wiO1xuZXhwb3J0IGNvbnN0IENPTlRFWFRNRU5VX0VWRU5UX1RZUEUgPSBcImNvbnRleHRtZW51XCI7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgT1BFTl9FVkVOVF9UWVBFLFxuICBNT1ZFX0VWRU5UX1RZUEUsXG4gIEJMVVJfRVZFTlRfVFlQRSxcbiAgRFJBR19FVkVOVF9UWVBFLFxuICBEUk9QX0VWRU5UX1RZUEUsXG4gIFdIRUVMX0VWRU5UX1RZUEUsXG4gIElOUFVUX0VWRU5UX1RZUEUsXG4gIEZPQ1VTX0VWRU5UX1RZUEUsXG4gIENMSUNLX0VWRU5UX1RZUEUsXG4gIEtFWVVQX0VWRU5UX1RZUEUsXG4gIFJFTU9WRV9FVkVOVF9UWVBFLFxuICBDSEFOR0VfRVZFTlRfVFlQRSxcbiAgUkVTSVpFX0VWRU5UX1RZUEUsXG4gIFNDUk9MTF9FVkVOVF9UWVBFLFxuICBLRVlET1dOX0VWRU5UX1RZUEUsXG4gIE1PVVNFVVBfRVZFTlRfVFlQRSxcbiAgQVVYQ0xJQ0tfRVZFTlRfVFlQRSxcbiAgRFJBR19PVVRfRVZFTlRfVFlQRSxcbiAgTU9VU0VPVVRfRVZFTlRfVFlQRSxcbiAgREJMQ0xJQ0tfRVZFTlRfVFlQRSxcbiAgTU9VU0VPVkVSX0VWRU5UX1RZUEUsXG4gIE1PVVNFRE9XTl9FVkVOVF9UWVBFLFxuICBNT1VTRU1PVkVfRVZFTlRfVFlQRSxcbiAgRFJBR19PVkVSX0VWRU5UX1RZUEUsXG4gIFNUT1BfRFJBR19FVkVOVF9UWVBFLFxuICBTVEFSVF9EUkFHX0VWRU5UX1RZUEUsXG4gIENPTlRFWFRNRU5VX0VWRU5UX1RZUEVcbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEtFWVVQX0VWRU5UX1RZUEUsIEtFWURPV05fRVZFTlRfVFlQRSB9IGZyb20gXCIuLi9ldmVudFR5cGVzXCI7XG5cbmZ1bmN0aW9uIG9uS2V5VXAoa2V5VXBIYW5kbGVyLCBlbGVtZW50KSB7IHRoaXMub24oS0VZVVBfRVZFTlRfVFlQRSwga2V5VXBIYW5kbGVyLCBlbGVtZW50KTsgfVxuXG5mdW5jdGlvbiBvZmZLZXlVcChrZXlVcEhhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vZmYoS0VZVVBfRVZFTlRfVFlQRSwga2V5VXBIYW5kbGVyLCBlbGVtZW50KTsgfVxuXG5mdW5jdGlvbiBvbktleURvd24oa2V5RG93bkhhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vbihLRVlET1dOX0VWRU5UX1RZUEUsIGtleURvd25IYW5kbGVyLCBlbGVtZW50KTsgfVxuXG5mdW5jdGlvbiBvZmZLZXlEb3duKGtleURvd25IYW5kbGVyLCBlbGVtZW50KSB7IHRoaXMub2ZmKEtFWURPV05fRVZFTlRfVFlQRSwga2V5RG93bkhhbmRsZXIsIGVsZW1lbnQpOyB9XG5cbmNvbnN0IGtleU1peGlucyA9IHtcbiAgb25LZXlVcCxcbiAgb2ZmS2V5VXAsXG4gIG9uS2V5RG93bixcbiAgb2ZmS2V5RG93blxufTtcblxuZXhwb3J0IGRlZmF1bHQga2V5TWl4aW5zO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBDTElDS19FVkVOVF9UWVBFLCBEQkxDTElDS19FVkVOVF9UWVBFIH0gZnJvbSBcIi4uL2V2ZW50VHlwZXNcIjtcblxuZnVuY3Rpb24gb25DbGljayhjbGlja0hhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vbihDTElDS19FVkVOVF9UWVBFLCBjbGlja0hhbmRsZXIsIGVsZW1lbnQpOyB9XG5cbmZ1bmN0aW9uIG9mZkNsaWNrKGNsaWNrSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9mZihDTElDS19FVkVOVF9UWVBFLCBjbGlja0hhbmRsZXIsIGVsZW1lbnQpOyB9XG5cbmZ1bmN0aW9uIG9uRG91YmxlQ2xpY2soY2xpY2tIYW5kbGVyLCBlbGVtZW50KSB7IHRoaXMub24oREJMQ0xJQ0tfRVZFTlRfVFlQRSwgY2xpY2tIYW5kbGVyLCBlbGVtZW50KTsgfVxuXG5mdW5jdGlvbiBvZmZEb3VibGVDbGljayhjbGlja0hhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vZmYoREJMQ0xJQ0tfRVZFTlRfVFlQRSwgY2xpY2tIYW5kbGVyLCBlbGVtZW50KTsgfVxuXG5jb25zdCBjbGlja01peGlucyA9IHtcbiAgb25DbGljayxcbiAgb2ZmQ2xpY2ssXG4gIG9uRG91YmxlQ2xpY2ssXG4gIG9mZkRvdWJsZUNsaWNrXG59O1xuXG5leHBvcnQgZGVmYXVsdCBjbGlja01peGlucztcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZnVuY3Rpb24gZ2V0U3RhdGUoKSB7XG4gIHJldHVybiB0aGlzLnN0YXRlO1xufVxuXG5mdW5jdGlvbiBzZXRTdGF0ZShzdGF0ZSkge1xuICB0aGlzLnN0YXRlID0gc3RhdGU7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVN0YXRlKHN0YXRlKSB7XG4gIE9iamVjdC5hc3NpZ24odGhpcy5zdGF0ZSwgc3RhdGUpO1xufVxuXG5jb25zdCBzdGF0ZU1peGlucyA9IHtcbiAgZ2V0U3RhdGUsXG4gIHNldFN0YXRlLFxuICB1cGRhdGVTdGF0ZVxufTtcblxuZXhwb3J0IGRlZmF1bHQgc3RhdGVNaXhpbnM7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBURVhUX0hUTUxfQ09OVEVOVF9UWVBFID0gXCJ0ZXh0L2h0bWxcIjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgUkVTSVpFX0VWRU5UX1RZUEUgfSBmcm9tIFwiLi4vZXZlbnRUeXBlc1wiO1xuaW1wb3J0IHsgT0JKRUNULCBBQk9VVF9CTEFOSyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IFRFWFRfSFRNTF9DT05URU5UX1RZUEUgfSBmcm9tIFwiLi4vY29udGVudFR5cGVzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBvblJlc2l6ZShyZXNpemVIYW5kbGVyLCBlbGVtZW50KSB7IHRoaXMub24oUkVTSVpFX0VWRU5UX1RZUEUsIHJlc2l6ZUhhbmRsZXIsIGVsZW1lbnQpOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBvZmZSZXNpemUocmVzaXplSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9mZihSRVNJWkVfRVZFTlRfVFlQRSwgcmVzaXplSGFuZGxlciwgZWxlbWVudCk7IH1cblxuZnVuY3Rpb24gYWRkUmVzaXplT2JqZWN0KCkge1xuICBjb25zdCByZXNpemVPYmplY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KE9CSkVDVCksXG4gICAgICAgIHN0eWxlID0gYGRpc3BsYXk6IGJsb2NrOyBcbiAgICAgICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlOyBcbiAgICAgICAgICAgICAgICAgdG9wOiAwOyBcbiAgICAgICAgICAgICAgICAgbGVmdDogMDsgXG4gICAgICAgICAgICAgICAgIGhlaWdodDogMTAwJTsgXG4gICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAlOyBcbiAgICAgICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsgXG4gICAgICAgICAgICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOyBcbiAgICAgICAgICAgICAgICAgei1pbmRleDogLTE7YCxcbiAgICAgICAgZGF0YSA9IEFCT1VUX0JMQU5LLFxuICAgICAgICB0eXBlID0gVEVYVF9IVE1MX0NPTlRFTlRfVFlQRTtcblxuICByZXNpemVPYmplY3Quc2V0QXR0cmlidXRlKFwic3R5bGVcIiwgc3R5bGUpO1xuXG4gIHJlc2l6ZU9iamVjdC5kYXRhID0gZGF0YTtcblxuICByZXNpemVPYmplY3QudHlwZSA9IHR5cGU7XG5cbiAgdGhpcy5fX3Jlc2l6ZU9iamVjdF9fID0gcmVzaXplT2JqZWN0O1xuXG4gIHJlc2l6ZU9iamVjdC5vbmxvYWQgPSAoKSA9PiByZXNpemVPYmplY3RMb2FkSGFuZGxlcih0aGlzKTtcblxuICB0aGlzLmRvbUVsZW1lbnQuYXBwZW5kQ2hpbGQocmVzaXplT2JqZWN0KTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlUmVzaXplT2JqZWN0KCkge1xuICBjb25zdCByZXNpemVPYmplY3QgPSB0aGlzLl9fcmVzaXplT2JqZWN0X18sXG4gICAgICAgIG9iamVjdFdpbmRvdyA9IHJlc2l6ZU9iamVjdC5jb250ZW50RG9jdW1lbnQuZGVmYXVsdFZpZXc7ICAvLy9cblxuICBvYmplY3RXaW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihSRVNJWkVfRVZFTlRfVFlQRSwgcmVzaXplRXZlbnRMaXN0ZW5lcik7XG5cbiAgdGhpcy5kb21FbGVtZW50LnJlbW92ZUNoaWxkKHJlc2l6ZU9iamVjdCk7XG5cbiAgZGVsZXRlIHRoaXMuX19yZXNpemVPYmplY3RfXztcbn1cblxuY29uc3QgcmVzaXplTWl4aW5zID0ge1xuICBvblJlc2l6ZSxcbiAgb2ZmUmVzaXplLFxuICBhZGRSZXNpemVPYmplY3QsXG4gIHJlbW92ZVJlc2l6ZU9iamVjdFxufTtcblxuZXhwb3J0IGRlZmF1bHQgcmVzaXplTWl4aW5zO1xuXG5mdW5jdGlvbiByZXNpemVPYmplY3RMb2FkSGFuZGxlcihlbGVtZW50KSB7XG4gIGNvbnN0IHJlc2l6ZU9iamVjdCA9IGVsZW1lbnQuX19yZXNpemVPYmplY3RfXyxcbiAgICAgICAgcmVzaXplT2JqZWN0V2luZG93ID0gcmVzaXplT2JqZWN0LmNvbnRlbnREb2N1bWVudC5kZWZhdWx0VmlldzsgIC8vL1xuXG4gIHJlc2l6ZU9iamVjdFdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFJFU0laRV9FVkVOVF9UWVBFLCAoZXZlbnQpID0+IHtcbiAgICBjb25zdCByZXNpemVFdmVudExpc3RlbmVycyA9IGVsZW1lbnQuZmluZEV2ZW50TGlzdGVuZXJzKFJFU0laRV9FVkVOVF9UWVBFKTtcblxuICAgIHJlc2l6ZUV2ZW50TGlzdGVuZXJzLmZvckVhY2goKHJlc2l6ZUV2ZW50TGlzdGVuZXIpID0+IHJlc2l6ZUV2ZW50TGlzdGVuZXIoZXZlbnQpKTtcbiAgfSk7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IFNQQUNFIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgUkVTSVpFX0VWRU5UX1RZUEUgfSBmcm9tIFwiLi4vZXZlbnRUeXBlc1wiO1xuaW1wb3J0IHsgcmVtb3ZlUmVzaXplT2JqZWN0IH0gZnJvbSBcIi4uL21peGlucy9yZXNpemVcIjtcblxuZnVuY3Rpb24gb24oZXZlbnRUeXBlcywgaGFuZGxlciwgZWxlbWVudCA9IHRoaXMpIHtcbiAgZXZlbnRUeXBlcyA9IGV2ZW50VHlwZXMuc3BsaXQoU1BBQ0UpO1xuXG4gIGV2ZW50VHlwZXMuZm9yRWFjaCgoZXZlbnRUeXBlKSA9PiB7XG4gICAgaWYgKGV2ZW50VHlwZSA9PT0gUkVTSVpFX0VWRU5UX1RZUEUpIHtcbiAgICAgIGNvbnN0IHJlc2l6ZUV2ZW50TGlzdGVuZXJzID0gdGhpcy5maW5kRXZlbnRMaXN0ZW5lcnMoUkVTSVpFX0VWRU5UX1RZUEUpLFxuICAgICAgICAgICAgcmVzaXplRXZlbnRMaXN0ZW5lcnNMZW5ndGggPSByZXNpemVFdmVudExpc3RlbmVycy5sZW5ndGg7XG5cbiAgICAgIGlmIChyZXNpemVFdmVudExpc3RlbmVyc0xlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aGlzLmFkZFJlc2l6ZU9iamVjdCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGV2ZW50TGlzdGVuZXIgPSB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KTtcblxuICAgIHRoaXMuZG9tRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgZXZlbnRMaXN0ZW5lcik7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBvZmYoZXZlbnRUeXBlcywgaGFuZGxlciwgZWxlbWVudCA9IHRoaXMpIHtcbiAgZXZlbnRUeXBlcyA9IGV2ZW50VHlwZXMuc3BsaXQoU1BBQ0UpO1xuXG4gIGV2ZW50VHlwZXMuZm9yRWFjaCgoZXZlbnRUeXBlKSA9PiB7XG4gICAgY29uc3QgZXZlbnRMaXN0ZW5lciA9IHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpO1xuXG4gICAgdGhpcy5kb21FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBldmVudExpc3RlbmVyKTtcblxuICAgIGlmIChldmVudFR5cGUgPT09IFJFU0laRV9FVkVOVF9UWVBFKSB7XG4gICAgICBjb25zdCByZXNpemVFdmVudExpc3RlbmVycyA9IHRoaXMuZmluZEV2ZW50TGlzdGVuZXJzKFJFU0laRV9FVkVOVF9UWVBFKSxcbiAgICAgICAgICAgIHJlc2l6ZUV2ZW50TGlzdGVuZXJzTGVuZ3RoID0gcmVzaXplRXZlbnRMaXN0ZW5lcnMubGVuZ3RoO1xuXG4gICAgICBpZiAocmVzaXplRXZlbnRMaXN0ZW5lcnNMZW5ndGggPT09IDApIHtcbiAgICAgICAgcmVtb3ZlUmVzaXplT2JqZWN0KHRoaXMpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KSB7XG4gIGlmICh0aGlzLmV2ZW50TGlzdGVuZXJzID09PSB1bmRlZmluZWQpIHtcbiAgICB0aGlzLmV2ZW50TGlzdGVuZXJzID0gW107XG4gIH1cblxuICBjb25zdCBldmVudExpc3RlbmVyID0gdGhpcy5jcmVhdGVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgZWxlbWVudCk7XG5cbiAgdGhpcy5ldmVudExpc3RlbmVycy5wdXNoKGV2ZW50TGlzdGVuZXIpO1xuXG4gIHJldHVybiBldmVudExpc3RlbmVyO1xufVxuXG5mdW5jdGlvbiByZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgZWxlbWVudCkge1xuICBjb25zdCBldmVudExpc3RlbmVyID0gdGhpcy5maW5kRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpLFxuICAgICAgICBpbmRleCA9IHRoaXMuZXZlbnRMaXN0ZW5lcnMuaW5kZXhPZihldmVudExpc3RlbmVyKSxcbiAgICAgICAgc3RhcnQgPSBpbmRleCwgIC8vL1xuICAgICAgICBkZWxldGVDb3VudCA9IDE7XG5cbiAgdGhpcy5ldmVudExpc3RlbmVycy5zcGxpY2Uoc3RhcnQsIGRlbGV0ZUNvdW50KTtcblxuICBpZiAodGhpcy5ldmVudExpc3RlbmVycy5sZW5ndGggPT09IDApIHtcbiAgICBkZWxldGUgdGhpcy5ldmVudExpc3RlbmVycztcbiAgfVxuXG4gIHJldHVybiBldmVudExpc3RlbmVyO1xufVxuXG5mdW5jdGlvbiBmaW5kRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpIHtcbiAgY29uc3QgZXZlbnRMaXN0ZW5lciA9IHRoaXMuZXZlbnRMaXN0ZW5lcnMuZmluZCgoZXZlbnRMaXN0ZW5lcikgPT4ge1xuICAgIGlmICgoZXZlbnRMaXN0ZW5lci5lbGVtZW50ID09PSBlbGVtZW50KSAmJiAoZXZlbnRMaXN0ZW5lci5oYW5kbGVyID09PSBoYW5kbGVyKSAmJiAoZXZlbnRMaXN0ZW5lci5ldmVudFR5cGUgPT09IGV2ZW50VHlwZSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGV2ZW50TGlzdGVuZXI7XG59XG5cbmZ1bmN0aW9uIGZpbmRFdmVudExpc3RlbmVycyhldmVudFR5cGUpIHtcbiAgY29uc3QgZXZlbnRMaXN0ZW5lcnMgPSBbXTtcblxuICBpZiAodGhpcy5ldmVudExpc3RlbmVycyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5ldmVudExpc3RlbmVycy5mb3JFYWNoKChldmVudExpc3RlbmVyKSA9PiB7XG4gICAgICBjb25zdCBmb3VuZCA9IChldmVudExpc3RlbmVyLmV2ZW50VHlwZSA9PT0gZXZlbnRUeXBlKTtcblxuICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgIGV2ZW50TGlzdGVuZXJzLnB1c2goZXZlbnRMaXN0ZW5lcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gZXZlbnRMaXN0ZW5lcnM7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KSB7XG4gIGxldCBldmVudExpc3RlbmVyO1xuXG4gIGNvbnN0IGhhbmRsZXJFbGVtZW50ID0gZWxlbWVudDsgLy8vXG5cbiAgZXZlbnRMaXN0ZW5lciA9IChldmVudCkgPT4ge1xuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzOyAvLy9cblxuICAgIGhhbmRsZXIuY2FsbChoYW5kbGVyRWxlbWVudCwgZXZlbnQsIGVsZW1lbnQpO1xuICB9O1xuXG4gIE9iamVjdC5hc3NpZ24oZXZlbnRMaXN0ZW5lciwge1xuICAgIGVsZW1lbnQsXG4gICAgaGFuZGxlcixcbiAgICBldmVudFR5cGVcbiAgfSk7XG5cbiAgcmV0dXJuIGV2ZW50TGlzdGVuZXI7XG59XG5cbmNvbnN0IGV2ZW50TWl4aW5zID0ge1xuICBvbixcbiAgb2ZmLFxuICBhZGRFdmVudExpc3RlbmVyLFxuICByZW1vdmVFdmVudExpc3RlbmVyLFxuICBjcmVhdGVFdmVudExpc3RlbmVyLFxuICBmaW5kRXZlbnRMaXN0ZW5lcixcbiAgZmluZEV2ZW50TGlzdGVuZXJzXG59O1xuXG5leHBvcnQgZGVmYXVsdCBldmVudE1peGlucztcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgTU9VU0VVUF9FVkVOVF9UWVBFLFxuICAgICAgICAgTU9VU0VPVVRfRVZFTlRfVFlQRSxcbiAgICAgICAgIE1PVVNFRE9XTl9FVkVOVF9UWVBFLFxuICAgICAgICAgTU9VU0VPVkVSX0VWRU5UX1RZUEUsXG4gICAgICAgICBNT1VTRU1PVkVfRVZFTlRfVFlQRSB9IGZyb20gXCIuLi9ldmVudFR5cGVzXCI7XG5cbmZ1bmN0aW9uIG9uTW91c2VVcChtb3VzZVVwSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9uKE1PVVNFVVBfRVZFTlRfVFlQRSwgbW91c2VVcEhhbmRsZXIsIGVsZW1lbnQpOyB9XG5cbmZ1bmN0aW9uIG9mZk1vdXNlVXAobW91c2VVcEhhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vZmYoTU9VU0VVUF9FVkVOVF9UWVBFLCBtb3VzZVVwSGFuZGxlciwgZWxlbWVudCk7IH1cblxuZnVuY3Rpb24gb25Nb3VzZU91dChtb3VzZU91dEhhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vbihNT1VTRU9VVF9FVkVOVF9UWVBFLCBtb3VzZU91dEhhbmRsZXIsIGVsZW1lbnQpOyB9XG5cbmZ1bmN0aW9uIG9mZk1vdXNlT3V0KG1vdXNlT3V0SGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9mZihNT1VTRU9VVF9FVkVOVF9UWVBFLCBtb3VzZU91dEhhbmRsZXIsIGVsZW1lbnQpOyB9XG5cbmZ1bmN0aW9uIG9uTW91c2VEb3duKG1vdXNlRG93bkhhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vbihNT1VTRURPV05fRVZFTlRfVFlQRSwgbW91c2VEb3duSGFuZGxlciwgZWxlbWVudCk7IH1cblxuZnVuY3Rpb24gb2ZmTW91c2VEb3duKG1vdXNlRG93bkhhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vZmYoTU9VU0VET1dOX0VWRU5UX1RZUEUsIG1vdXNlRG93bkhhbmRsZXIsIGVsZW1lbnQpOyB9XG5cbmZ1bmN0aW9uIG9uTW91c2VPdmVyKG1vdXNlT3ZlckhhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vbihNT1VTRU9WRVJfRVZFTlRfVFlQRSwgbW91c2VPdmVySGFuZGxlciwgZWxlbWVudCk7IH1cblxuZnVuY3Rpb24gb2ZmTW91c2VPdmVyKG1vdXNlT3ZlckhhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vZmYoTU9VU0VPVkVSX0VWRU5UX1RZUEUsIG1vdXNlT3ZlckhhbmRsZXIsIGVsZW1lbnQpOyB9XG5cbmZ1bmN0aW9uIG9uTW91c2VNb3ZlKG1vdXNlTW92ZUhhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vbihNT1VTRU1PVkVfRVZFTlRfVFlQRSwgbW91c2VNb3ZlSGFuZGxlciwgZWxlbWVudCk7IH1cblxuZnVuY3Rpb24gb2ZmTW91c2VNb3ZlKG1vdXNlTW92ZUhhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vZmYoTU9VU0VNT1ZFX0VWRU5UX1RZUEUsIG1vdXNlTW92ZUhhbmRsZXIsIGVsZW1lbnQpOyB9XG5cbmNvbnN0IG1vdXNlTWl4aW5zID0ge1xuICBvbk1vdXNlVXAsXG4gIG9mZk1vdXNlVXAsXG4gIG9uTW91c2VPdXQsXG4gIG9mZk1vdXNlT3V0LFxuICBvbk1vdXNlRG93bixcbiAgb2ZmTW91c2VEb3duLFxuICBvbk1vdXNlT3ZlcixcbiAgb2ZmTW91c2VPdmVyLFxuICBvbk1vdXNlTW92ZSxcbiAgb2ZmTW91c2VNb3ZlXG59O1xuXG5leHBvcnQgZGVmYXVsdCBtb3VzZU1peGlucztcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgU0NST0xMX0VWRU5UX1RZUEUgfSBmcm9tIFwiLi4vZXZlbnRUeXBlc1wiO1xuXG5mdW5jdGlvbiBvblNjcm9sbChzY3JvbGxIYW5kbGVyLCBlbGVtZW50KSB7IHRoaXMub24oU0NST0xMX0VWRU5UX1RZUEUsIHNjcm9sbEhhbmRsZXIsIGVsZW1lbnQpOyB9XG5cbmZ1bmN0aW9uIG9mZlNjcm9sbChzY3JvbGxIYW5kbGVyLCBlbGVtZW50KSB7IHRoaXMub2ZmKFNDUk9MTF9FVkVOVF9UWVBFLCBzY3JvbGxIYW5kbGVyLCBlbGVtZW50KTsgfVxuXG5mdW5jdGlvbiBnZXRTY3JvbGxUb3AoKSB7IHJldHVybiB0aGlzLmRvbUVsZW1lbnQuc2Nyb2xsVG9wOyB9XG5cbmZ1bmN0aW9uIGdldFNjcm9sbExlZnQoKSB7IHJldHVybiB0aGlzLmRvbUVsZW1lbnQuc2Nyb2xsTGVmdDsgfVxuXG5mdW5jdGlvbiBzZXRTY3JvbGxUb3Aoc2Nyb2xsVG9wKSB7IHRoaXMuZG9tRWxlbWVudC5zY3JvbGxUb3AgPSBzY3JvbGxUb3A7IH1cblxuZnVuY3Rpb24gc2V0U2Nyb2xsTGVmdChzY3JvbGxMZWZ0KSB7IHRoaXMuZG9tRWxlbWVudC5zY3JvbGxMZWZ0ID0gc2Nyb2xsTGVmdDsgfVxuXG5jb25zdCBzY3JvbGxNaXhpbnMgPSB7XG4gIG9uU2Nyb2xsLFxuICBvZmZTY3JvbGwsXG4gIGdldFNjcm9sbFRvcCxcbiAgZ2V0U2Nyb2xsTGVmdCxcbiAgc2V0U2Nyb2xsVG9wLFxuICBzZXRTY3JvbGxMZWZ0XG59O1xuXG5leHBvcnQgZGVmYXVsdCBzY3JvbGxNaXhpbnM7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBPZmZzZXQgZnJvbSBcIi4vb2Zmc2V0XCI7XG5pbXBvcnQgQm91bmRzIGZyb20gXCIuL2JvdW5kc1wiO1xuaW1wb3J0IGpzeE1peGlucyBmcm9tIFwiLi9taXhpbnMvanN4XCI7XG5pbXBvcnQga2V5TWl4aW5zIGZyb20gXCIuL21peGlucy9rZXlcIjtcbmltcG9ydCBjbGlja01peGlucyBmcm9tIFwiLi9taXhpbnMvY2xpY2tcIjtcbmltcG9ydCBzdGF0ZU1peGlucyBmcm9tIFwiLi9taXhpbnMvc3RhdGVcIjtcbmltcG9ydCBldmVudE1peGlucyBmcm9tIFwiLi9taXhpbnMvZXZlbnRcIjtcbmltcG9ydCBtb3VzZU1peGlucyBmcm9tIFwiLi9taXhpbnMvbW91c2VcIjtcbmltcG9ydCByZXNpemVNaXhpbnMgZnJvbSBcIi4vbWl4aW5zL3Jlc2l6ZVwiO1xuaW1wb3J0IHNjcm9sbE1peGlucyBmcm9tIFwiLi9taXhpbnMvc2Nyb2xsXCI7XG5pbXBvcnQgZWxlbWVudE1peGlucyBmcm9tIFwiLi9taXhpbnMvZWxlbWVudFwiO1xuXG5pbXBvcnQgeyBjb21iaW5lIH0gZnJvbSBcIi4vdXRpbGl0aWVzL29iamVjdFwiO1xuaW1wb3J0IHsgaXNTVkdUYWdOYW1lIH0gZnJvbSBcIi4vdXRpbGl0aWVzL25hbWVcIjtcbmltcG9ydCB7IGZpcnN0LCBhdWdtZW50IH0gZnJvbSBcIi4vdXRpbGl0aWVzL2FycmF5XCI7XG5pbXBvcnQgeyBOT05FLFxuICAgICAgICAgQkxPQ0ssXG4gICAgICAgICBXSURUSCxcbiAgICAgICAgIFNUUklORyxcbiAgICAgICAgIEhFSUdIVCxcbiAgICAgICAgIERJU1BMQVksXG4gICAgICAgICBESVNBQkxFRCxcbiAgICAgICAgIEVNUFRZX1NUUklORyxcbiAgICAgICAgIFNWR19OQU1FU1BBQ0VfVVJJLFxuICAgICAgICAgREVGQVVMVF9QUk9QRVJUSUVTLFxuICAgICAgICAgSUdOT1JFRF9QUk9QRVJUSUVTIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5cbmNsYXNzIEVsZW1lbnQge1xuICBjb25zdHJ1Y3RvcihzZWxlY3Rvcikge1xuICAgIGlmIChzZWxlY3Rvcikge1xuICAgICAgdGhpcy5kb21FbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7XG5cbiAgICAgIHRoaXMuZG9tRWxlbWVudC5fX2VsZW1lbnRfXyA9IHRoaXM7IC8vL1xuICAgIH1cbiAgfVxuXG4gIGdldERPTUVsZW1lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZG9tRWxlbWVudDtcbiAgfVxuXG4gIGdldE9mZnNldCgpIHtcbiAgICBjb25zdCB0b3AgPSB0aGlzLmRvbUVsZW1lbnQub2Zmc2V0VG9wLCAgLy8vXG4gICAgICAgICAgbGVmdCA9IHRoaXMuZG9tRWxlbWVudC5vZmZzZXRMZWZ0LCAgLy8vXG4gICAgICAgICAgb2Zmc2V0ID0gbmV3IE9mZnNldCh0b3AsIGxlZnQpO1xuXG4gICAgcmV0dXJuIG9mZnNldDtcbiAgfVxuXG4gIGdldEJvdW5kcygpIHtcbiAgICBjb25zdCBib3VuZGluZ0NsaWVudFJlY3QgPSB0aGlzLmRvbUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksXG4gICAgICAgICAgYm91bmRzID0gQm91bmRzLmZyb21Cb3VuZGluZ0NsaWVudFJlY3QoYm91bmRpbmdDbGllbnRSZWN0KTtcblxuICAgIHJldHVybiBib3VuZHM7XG4gIH1cblxuICBnZXRXaWR0aChpbmNsdWRlQm9yZGVyID0gdHJ1ZSkge1xuICAgIGNvbnN0IHdpZHRoID0gaW5jbHVkZUJvcmRlciA/XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZG9tRWxlbWVudC5vZmZzZXRXaWR0aCA6XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5kb21FbGVtZW50LmNsaWVudFdpZHRoO1xuXG4gICAgcmV0dXJuIHdpZHRoO1xuICB9XG5cbiAgc2V0V2lkdGgod2lkdGgpIHtcbiAgICB3aWR0aCA9IGAke3dpZHRofXB4YDsgLy8vXG5cbiAgICB0aGlzLnN0eWxlKFdJRFRILCB3aWR0aCk7XG4gIH1cblxuICBnZXRIZWlnaHQoaW5jbHVkZUJvcmRlciA9IHRydWUpIHtcbiAgICBjb25zdCBoZWlnaHQgPSBpbmNsdWRlQm9yZGVyID9cbiAgICAgICAgICAgICAgICAgICAgIHRoaXMuZG9tRWxlbWVudC5vZmZzZXRIZWlnaHQgOlxuICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRvbUVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuXG4gICAgcmV0dXJuIGhlaWdodDtcbiAgfVxuXG4gIHNldEhlaWdodChoZWlnaHQpIHtcbiAgICBoZWlnaHQgPSBgJHtoZWlnaHR9cHhgOyAvLy9cblxuICAgIHRoaXMuc3R5bGUoSEVJR0hULCBoZWlnaHQpO1xuICB9XG5cbiAgaGFzQXR0cmlidXRlKG5hbWUpIHsgcmV0dXJuIHRoaXMuZG9tRWxlbWVudC5oYXNBdHRyaWJ1dGUobmFtZSk7IH1cblxuICBnZXRBdHRyaWJ1dGUobmFtZSkgeyByZXR1cm4gdGhpcy5kb21FbGVtZW50LmdldEF0dHJpYnV0ZShuYW1lKTsgfVxuXG4gIHNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSkgeyB0aGlzLmRvbUVsZW1lbnQuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKTsgfVxuXG4gIGNsZWFyQXR0cmlidXRlKG5hbWUpIHsgdGhpcy5kb21FbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShuYW1lKTsgfVxuXG4gIGFkZEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSkgeyB0aGlzLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7IH1cblxuICByZW1vdmVBdHRyaWJ1dGUobmFtZSkgeyB0aGlzLmNsZWFyQXR0cmlidXRlKG5hbWUpOyB9XG5cbiAgc2V0Q2xhc3MoY2xhc3NOYW1lKSB7IHRoaXMuZG9tRWxlbWVudC5jbGFzc05hbWUgPSBjbGFzc05hbWU7IH1cblxuICBhZGRDbGFzcyhjbGFzc05hbWUpIHsgdGhpcy5kb21FbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKTsgfVxuXG4gIHJlbW92ZUNsYXNzKGNsYXNzTmFtZSkgeyB0aGlzLmRvbUVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShjbGFzc05hbWUpOyB9XG5cbiAgdG9nZ2xlQ2xhc3MoY2xhc3NOYW1lKSB7IHRoaXMuZG9tRWxlbWVudC5jbGFzc0xpc3QudG9nZ2xlKGNsYXNzTmFtZSk7IH1cblxuICBoYXNDbGFzcyhjbGFzc05hbWUpIHsgcmV0dXJuIHRoaXMuZG9tRWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lKTsgfVxuXG4gIGNsZWFyQ2xhc3NlcygpIHsgdGhpcy5kb21FbGVtZW50LmNsYXNzTmFtZSA9IEVNUFRZX1NUUklORzsgfVxuXG4gIHByZXBlbmRUbyhwYXJlbnRFbGVtZW50KSB7IHBhcmVudEVsZW1lbnQucHJlcGVuZCh0aGlzKTsgfVxuXG4gIGFwcGVuZFRvKHBhcmVudEVsZW1lbnQpIHsgcGFyZW50RWxlbWVudC5hcHBlbmQodGhpcyk7IH1cblxuICBhZGRUbyhwYXJlbnRFbGVtZW50KSB7IHBhcmVudEVsZW1lbnQuYWRkKHRoaXMpOyB9XG5cbiAgcmVtb3ZlRnJvbShwYXJlbnRFbGVtZW50KSB7IHBhcmVudEVsZW1lbnQucmVtb3ZlKHRoaXMpOyB9XG5cbiAgaW5zZXJ0QmVmb3JlKHNpYmxpbmdFbGVtZW50KSB7XG4gICAgY29uc3QgcGFyZW50RE9NTm9kZSA9IHNpYmxpbmdFbGVtZW50LmRvbUVsZW1lbnQucGFyZW50Tm9kZSxcbiAgICAgICAgICBzaWJsaW5nRE9NRWxlbWVudCA9IHNpYmxpbmdFbGVtZW50LmRvbUVsZW1lbnQ7XG5cbiAgICBwYXJlbnRET01Ob2RlLmluc2VydEJlZm9yZSh0aGlzLmRvbUVsZW1lbnQsIHNpYmxpbmdET01FbGVtZW50KTtcbiAgfVxuXG4gIGluc2VydEFmdGVyKHNpYmxpbmdFbGVtZW50KSB7XG4gICAgY29uc3QgcGFyZW50RE9NTm9kZSA9IHNpYmxpbmdFbGVtZW50LmRvbUVsZW1lbnQucGFyZW50Tm9kZSxcbiAgICAgICAgICBzaWJsaW5nRE9NRWxlbWVudCA9IHNpYmxpbmdFbGVtZW50LmRvbUVsZW1lbnQ7XG5cbiAgICBwYXJlbnRET01Ob2RlLmluc2VydEJlZm9yZSh0aGlzLmRvbUVsZW1lbnQsIHNpYmxpbmdET01FbGVtZW50Lm5leHRTaWJsaW5nKTsgIC8vL1xuICB9XG5cbiAgcHJlcGVuZChlbGVtZW50KSB7XG4gICAgY29uc3QgZG9tRWxlbWVudCA9IGVsZW1lbnQuZG9tRWxlbWVudCxcbiAgICAgICAgICBmaXJzdENoaWxkRE9NRWxlbWVudCA9IHRoaXMuZG9tRWxlbWVudC5maXJzdENoaWxkO1xuXG4gICAgdGhpcy5kb21FbGVtZW50Lmluc2VydEJlZm9yZShkb21FbGVtZW50LCBmaXJzdENoaWxkRE9NRWxlbWVudCk7XG4gIH1cblxuICBhcHBlbmQoZWxlbWVudCkge1xuICAgIGNvbnN0IGRvbUVsZW1lbnQgPSBlbGVtZW50LmRvbUVsZW1lbnQ7XG5cbiAgICB0aGlzLmRvbUVsZW1lbnQuaW5zZXJ0QmVmb3JlKGRvbUVsZW1lbnQsIG51bGwpOyAvLy9cbiAgfVxuXG4gIGFkZChlbGVtZW50KSB7IHRoaXMuYXBwZW5kKGVsZW1lbnQpOyB9XG5cbiAgcmVtb3ZlKGVsZW1lbnQpIHtcbiAgICBpZiAoZWxlbWVudCkge1xuICAgICAgY29uc3QgZG9tRWxlbWVudCA9IGVsZW1lbnQuZG9tRWxlbWVudDtcblxuICAgICAgdGhpcy5kb21FbGVtZW50LnJlbW92ZUNoaWxkKGRvbUVsZW1lbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRvbUVsZW1lbnQucmVtb3ZlKCk7XG4gICAgfVxuICB9XG5cbiAgbW91bnQoZWxlbWVudCkge1xuICAgIGNvbnN0IGRlc2NlbmRhbnRFbGVtZW50cyA9IGVsZW1lbnQuZ2V0RGVzY2VuZGFudEVsZW1lbnRzKCksXG4gICAgICAgICAgZWxlbWVudHMgPSBbXG4gICAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgICAgLi4uZGVzY2VuZGFudEVsZW1lbnRzXG4gICAgICAgICAgXTtcblxuICAgIHRoaXMuYWRkKGVsZW1lbnQpO1xuXG4gICAgZWxlbWVudHMucmV2ZXJzZSgpOyAvLy9cblxuICAgIGVsZW1lbnRzLmZvckVhY2goKGVsZW1lbnQpID0+IChlbGVtZW50LmRpZE1vdW50ICYmIGVsZW1lbnQuZGlkTW91bnQoKSkpOyAgLy8vXG4gIH1cblxuICB1bm1vdW50KGVsZW1lbnQpIHtcbiAgICBjb25zdCBkZXNjZW5kYW50RWxlbWVudHMgPSBlbGVtZW50LmdldERlc2NlbmRhbnRFbGVtZW50cygpLFxuICAgICAgICAgIGVsZW1lbnRzID0gW1xuICAgICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICAgIC4uLmRlc2NlbmRhbnRFbGVtZW50c1xuICAgICAgICAgIF07XG5cbiAgICBlbGVtZW50cy5mb3JFYWNoKChlbGVtZW50KSA9PiAoZWxlbWVudC53aWxsVW5tb3VudCAmJiBlbGVtZW50LndpbGxVbm1vdW50KCkpKTsgIC8vL1xuXG4gICAgdGhpcy5yZW1vdmUoZWxlbWVudCk7XG4gIH1cblxuICBzaG93KGRpc3BsYXlTdHlsZSA9IEJMT0NLKSB7IHRoaXMuZGlzcGxheShkaXNwbGF5U3R5bGUpOyB9XG5cbiAgaGlkZSgpIHsgdGhpcy5zdHlsZShESVNQTEFZLCBOT05FKTsgfVxuXG4gIGRpc3BsYXkoZGlzcGxheSkgeyB0aGlzLnN0eWxlKERJU1BMQVksIGRpc3BsYXkpOyB9XG5cbiAgZW5hYmxlKCkgeyB0aGlzLmNsZWFyQXR0cmlidXRlKERJU0FCTEVEKTsgfVxuXG4gIGRpc2FibGUoKSB7IHRoaXMuc2V0QXR0cmlidXRlKERJU0FCTEVELCBESVNBQkxFRCk7IH1cblxuICBpc0VuYWJsZWQoKSB7XG4gICAgY29uc3QgZGlzYWJsZWQgPSB0aGlzLmlzRGlzYWJsZWQoKSxcbiAgICAgICAgICBlbmFibGVkID0gIWRpc2FibGVkO1xuXG4gICAgcmV0dXJuIGVuYWJsZWQ7XG4gIH1cblxuICBpc0Rpc2FibGVkKCkge1xuICAgIGNvbnN0IGRpc2FibGVkID0gdGhpcy5oYXNBdHRyaWJ1dGUoRElTQUJMRUQpO1xuXG4gICAgcmV0dXJuIGRpc2FibGVkO1xuICB9XG4gIFxuICBpc0Rpc3BsYXllZCgpIHtcbiAgICBjb25zdCBkaXNwbGF5ID0gdGhpcy5jc3MoRElTUExBWSksXG4gICAgICAgICAgZGlzcGxheWVkID0gKGRpc3BsYXkgIT09IE5PTkUpO1xuICAgIFxuICAgIHJldHVybiBkaXNwbGF5ZWQ7XG4gIH1cblxuICBpc1Nob3dpbmcoKSB7XG4gICAgY29uc3QgZGlzcGxheWVkID0gdGhpcy5pc0Rpc3BsYXllZCgpLFxuICAgICAgICAgIHNob3dpbmcgPSBkaXNwbGF5ZWQ7ICAvLy9cblxuICAgIHJldHVybiBzaG93aW5nO1xuICB9XG5cbiAgaXNIaWRkZW4oKSB7XG4gICAgY29uc3QgZGlzcGxheWVkID0gdGhpcy5pc0Rpc3BsYXllZCgpLFxuICAgICAgICAgIGhpZGRlbiA9ICFkaXNwbGF5ZWQ7XG5cbiAgICByZXR1cm4gaGlkZGVuO1xuICB9XG5cbiAgc3R5bGUobmFtZSwgdmFsdWUpIHtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5kb21FbGVtZW50LnN0eWxlW25hbWVdID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHN0eWxlID0gdGhpcy5kb21FbGVtZW50LnN0eWxlW25hbWVdO1xuXG4gICAgICByZXR1cm4gc3R5bGU7XG4gICAgfVxuICB9XG5cbiAgaHRtbChodG1sKSB7XG4gICAgaWYgKGh0bWwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgaW5uZXJIVE1MID0gdGhpcy5kb21FbGVtZW50LmlubmVySFRNTDtcblxuICAgICAgaHRtbCA9IGlubmVySFRNTDsgLy8vXG5cbiAgICAgIHJldHVybiBodG1sO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBpbm5lckhUTUwgPSBodG1sOyAvLy9cblxuICAgICAgdGhpcy5kb21FbGVtZW50LmlubmVySFRNTCA9IGlubmVySFRNTFxuICAgIH1cbiAgfVxuXG4gIGNzcyhjc3MpIHtcbiAgICBpZiAoY3NzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGNvbXB1dGVkU3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKHRoaXMuZG9tRWxlbWVudCksXG4gICAgICAgICAgICBjc3MgPSB7fTtcblxuICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGNvbXB1dGVkU3R5bGUubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgIGNvbnN0IGZpcnN0Q29tcHV0ZWRTdHlsZSA9IGZpcnN0W2NvbXB1dGVkU3R5bGVdLFxuICAgICAgICAgICAgICBuYW1lID0gZmlyc3RDb21wdXRlZFN0eWxlLCAgLy8vXG4gICAgICAgICAgICAgIHZhbHVlID0gY29tcHV0ZWRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKG5hbWUpOyAvLy9cblxuICAgICAgICBjc3NbbmFtZV0gPSB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNzcztcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBjc3MgPT09IFNUUklORykge1xuICAgICAgbGV0IG5hbWUgPSBjc3M7IC8vL1xuXG4gICAgICBjb25zdCBjb21wdXRlZFN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLmRvbUVsZW1lbnQpLFxuICAgICAgICAgICAgdmFsdWUgPSBjb21wdXRlZFN0eWxlLmdldFByb3BlcnR5VmFsdWUobmFtZSk7IC8vL1xuXG4gICAgICBjc3MgPSB2YWx1ZTsgIC8vL1xuXG4gICAgICByZXR1cm4gY3NzO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBuYW1lcyA9IE9iamVjdC5rZXlzKGNzcyk7IC8vL1xuXG4gICAgICBuYW1lcy5mb3JFYWNoKChuYW1lKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gY3NzW25hbWVdO1xuXG4gICAgICAgIHRoaXMuc3R5bGUobmFtZSwgdmFsdWUpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIFxuICBibHVyKCkgeyB0aGlzLmRvbUVsZW1lbnQuYmx1cigpOyB9XG5cbiAgZm9jdXMoKSB7IHRoaXMuZG9tRWxlbWVudC5mb2N1cygpOyB9XG5cbiAgaGFzRm9jdXMoKSB7XG4gICAgY29uc3QgZm9jdXMgPSAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gdGhpcy5kb21FbGVtZW50KTsgIC8vL1xuXG4gICAgcmV0dXJuIGZvY3VzO1xuICB9XG5cbiAgc3RhdGljIGZyb21DbGFzcyhDbGFzcywgcHJvcGVydGllcywgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XG4gICAgY29uc3QgeyB0YWdOYW1lIH0gPSBDbGFzcyxcbiAgICAgICAgICBlbGVtZW50ID0gZWxlbWVudEZyb21UYWdOYW1lKENsYXNzLCB0YWdOYW1lLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpLFxuICAgICAgICAgIGRlZmF1bHRQcm9wZXJ0aWVzID0gZGVmYXVsdFByb3BlcnRpZXNGcm9tQ2xhc3MoQ2xhc3MpLFxuICAgICAgICAgIGlnbm9yZWRQcm9wZXJ0aWVzID0gaWdub3JlZFByb3BlcnRpZXNGcm9tQ2xhc3MoQ2xhc3MpO1xuXG4gICAgZWxlbWVudC5hcHBseVByb3BlcnRpZXMocHJvcGVydGllcywgZGVmYXVsdFByb3BlcnRpZXMsIGlnbm9yZWRQcm9wZXJ0aWVzKTtcblxuICAgIGVsZW1lbnQuaW5pdGlhbGlzZSAmJiBlbGVtZW50LmluaXRpYWxpc2UoKTsgLy8vXG5cbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tVGFnTmFtZSh0YWdOYW1lLCBwcm9wZXJ0aWVzLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHtcbiAgICBjb25zdCBDbGFzcyA9IEVsZW1lbnQsICAvLy9cbiAgICAgICAgICBlbGVtZW50ID0gZWxlbWVudEZyb21UYWdOYW1lKENsYXNzLCB0YWdOYW1lLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpLFxuICAgICAgICAgIGRlZmF1bHRQcm9wZXJ0aWVzID0ge30sIC8vL1xuICAgICAgICAgIGlnbm9yZWRQcm9wZXJ0aWVzID0gW107IC8vL1xuXG4gICAgZWxlbWVudC5hcHBseVByb3BlcnRpZXMocHJvcGVydGllcywgZGVmYXVsdFByb3BlcnRpZXMsIGlnbm9yZWRQcm9wZXJ0aWVzKTtcblxuICAgIGVsZW1lbnQuaW5pdGlhbGlzZSAmJiBlbGVtZW50LmluaXRpYWxpc2UoKTsgLy8vXG5cbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxufVxuXG5PYmplY3QuYXNzaWduKEVsZW1lbnQucHJvdG90eXBlLCBqc3hNaXhpbnMpO1xuT2JqZWN0LmFzc2lnbihFbGVtZW50LnByb3RvdHlwZSwga2V5TWl4aW5zKTtcbk9iamVjdC5hc3NpZ24oRWxlbWVudC5wcm90b3R5cGUsIGNsaWNrTWl4aW5zKTtcbk9iamVjdC5hc3NpZ24oRWxlbWVudC5wcm90b3R5cGUsIHN0YXRlTWl4aW5zKTtcbk9iamVjdC5hc3NpZ24oRWxlbWVudC5wcm90b3R5cGUsIGV2ZW50TWl4aW5zKTtcbk9iamVjdC5hc3NpZ24oRWxlbWVudC5wcm90b3R5cGUsIG1vdXNlTWl4aW5zKTtcbk9iamVjdC5hc3NpZ24oRWxlbWVudC5wcm90b3R5cGUsIHJlc2l6ZU1peGlucyk7XG5PYmplY3QuYXNzaWduKEVsZW1lbnQucHJvdG90eXBlLCBzY3JvbGxNaXhpbnMpO1xuT2JqZWN0LmFzc2lnbihFbGVtZW50LnByb3RvdHlwZSwgZWxlbWVudE1peGlucyk7XG5cbmV4cG9ydCBkZWZhdWx0IEVsZW1lbnQ7XG5cbmZ1bmN0aW9uIGVsZW1lbnRGcm9tVGFnTmFtZShDbGFzcywgdGFnTmFtZSwgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XG4gIGNvbnN0IHNlbGVjdG9yID0gbnVsbCxcbiAgICAgICAgZWxlbWVudCA9IG5ldyAoRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQuY2FsbChDbGFzcywgbnVsbCwgc2VsZWN0b3IsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cykpO1xuXG4gIGVsZW1lbnQuZG9tRWxlbWVudCA9IGlzU1ZHVGFnTmFtZSh0YWdOYW1lKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFNWR19OQU1FU1BBQ0VfVVJJLCB0YWdOYW1lKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpO1xuXG4gIGVsZW1lbnQuZG9tRWxlbWVudC5fX2VsZW1lbnRfXyA9IGVsZW1lbnQ7IC8vL1xuXG4gIHJldHVybiBlbGVtZW50O1xufVxuXG5mdW5jdGlvbiBkZWZhdWx0UHJvcGVydGllc0Zyb21DbGFzcyhDbGFzcywgZGVmYXVsdFByb3BlcnRpZXMgPSB7fSkge1xuICBpZiAoQ2xhc3MuaGFzT3duUHJvcGVydHkoREVGQVVMVF9QUk9QRVJUSUVTKSkge1xuICAgIGRlZmF1bHRQcm9wZXJ0aWVzID0gY29tYmluZShkZWZhdWx0UHJvcGVydGllcywgQ2xhc3NbREVGQVVMVF9QUk9QRVJUSUVTXSk7XG4gIH1cblxuICBjb25zdCBzdXBlckNsYXNzID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKENsYXNzKTtcblxuICBpZiAoc3VwZXJDbGFzcyAhPT0gbnVsbCkge1xuICAgIGRlZmF1bHRQcm9wZXJ0aWVzID0gZGVmYXVsdFByb3BlcnRpZXNGcm9tQ2xhc3Moc3VwZXJDbGFzcywgZGVmYXVsdFByb3BlcnRpZXMpO1xuICB9XG5cbiAgcmV0dXJuIGRlZmF1bHRQcm9wZXJ0aWVzO1xufVxuXG5mdW5jdGlvbiBpZ25vcmVkUHJvcGVydGllc0Zyb21DbGFzcyhDbGFzcywgaWdub3JlZFByb3BlcnRpZXMgPSBbXSkge1xuICBpZiAoQ2xhc3MuaGFzT3duUHJvcGVydHkoSUdOT1JFRF9QUk9QRVJUSUVTKSkge1xuICAgIGlnbm9yZWRQcm9wZXJ0aWVzID0gYXVnbWVudChpZ25vcmVkUHJvcGVydGllcywgQ2xhc3NbSUdOT1JFRF9QUk9QRVJUSUVTXSwgKGlnbm9yZWRQcm9wZXJ0eSkgPT4gIWlnbm9yZWRQcm9wZXJ0aWVzLmluY2x1ZGVzKGlnbm9yZWRQcm9wZXJ0eSkpO1xuICB9XG5cbiAgY29uc3Qgc3VwZXJDbGFzcyA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihDbGFzcyk7XG5cbiAgaWYgKHN1cGVyQ2xhc3MgIT09IG51bGwpIHtcbiAgICBpZ25vcmVkUHJvcGVydGllcyA9IGlnbm9yZWRQcm9wZXJ0aWVzRnJvbUNsYXNzKHN1cGVyQ2xhc3MsIGlnbm9yZWRQcm9wZXJ0aWVzKTtcbiAgfVxuXG4gIHJldHVybiBpZ25vcmVkUHJvcGVydGllcztcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQm91bmRzIHtcbiAgY29uc3RydWN0b3IodG9wLCBsZWZ0LCByaWdodCwgYm90dG9tKSB7XG4gICAgdGhpcy50b3AgPSB0b3A7XG4gICAgdGhpcy5sZWZ0ID0gbGVmdDtcbiAgICB0aGlzLnJpZ2h0ID0gcmlnaHQ7XG4gICAgdGhpcy5ib3R0b20gPSBib3R0b207XG4gIH1cblxuICBnZXRUb3AoKSB7XG4gICAgcmV0dXJuIHRoaXMudG9wO1xuICB9XG5cbiAgZ2V0TGVmdCgpIHtcbiAgICByZXR1cm4gdGhpcy5sZWZ0O1xuICB9XG5cbiAgZ2V0UmlnaHQoKSB7XG4gICAgcmV0dXJuIHRoaXMucmlnaHQ7XG4gIH1cblxuICBnZXRCb3R0b20oKSB7XG4gICAgcmV0dXJuIHRoaXMuYm90dG9tO1xuICB9XG5cbiAgZ2V0V2lkdGgoKSB7XG4gICAgY29uc3Qgd2lkdGggPSAodGhpcy5yaWdodCAtIHRoaXMubGVmdCk7XG5cbiAgICByZXR1cm4gd2lkdGg7XG4gIH1cblxuICBnZXRIZWlnaHQoKSB7XG4gICAgY29uc3QgaGVpZ2h0ID0gKHRoaXMuYm90dG9tIC0gdGhpcy50b3ApO1xuXG4gICAgcmV0dXJuIGhlaWdodDtcbiAgfVxuICBcbiAgc2V0VG9wKHRvcCkge1xuICAgIHRoaXMudG9wID0gdG9wO1xuICB9XG5cbiAgc2V0TGVmdChsZWZ0KSB7XG4gICAgdGhpcy5sZWZ0ID0gbGVmdDtcbiAgfVxuXG4gIHNldFJpZ2h0KHJpZ2h0KSB7XG4gICAgdGhpcy5yaWdodCA9IHJpZ2h0O1xuICB9XG5cbiAgc2V0Qm90dG9tKGJvdHRvbSkge1xuICAgIHRoaXMuYm90dG9tID0gYm90dG9tO1xuICB9XG5cbiAgc2hpZnQoaG9yaXpvbnRhbE9mZnNldCwgdmVydGljYWxPZmZzZXQpIHtcbiAgICB0aGlzLnRvcCArPSB2ZXJ0aWNhbE9mZnNldDtcbiAgICB0aGlzLmxlZnQgKz0gaG9yaXpvbnRhbE9mZnNldDtcbiAgICB0aGlzLnJpZ2h0ICs9IGhvcml6b250YWxPZmZzZXQ7XG4gICAgdGhpcy5ib3R0b20gKz0gdmVydGljYWxPZmZzZXQ7XG4gIH1cblxuICBpc092ZXJsYXBwaW5nTW91c2UobW91c2VUb3AsIG1vdXNlTGVmdCkge1xuICAgIHJldHVybiAoICAodGhpcy50b3AgPD0gbW91c2VUb3ApXG4gICAgICAgICAgICYmICh0aGlzLmxlZnQgPD0gbW91c2VMZWZ0KVxuICAgICAgICAgICAmJiAodGhpcy5yaWdodCA+IG1vdXNlTGVmdClcbiAgICAgICAgICAgJiYgKHRoaXMuYm90dG9tID4gbW91c2VUb3ApICApO1xuICB9XG5cbiAgYXJlT3ZlcmxhcHBpbmcoYm91bmRzKSB7XG4gICAgcmV0dXJuICggICh0aGlzLnRvcCA8IGJvdW5kcy5ib3R0b20pXG4gICAgICAgICAgICYmICh0aGlzLmxlZnQgPCBib3VuZHMucmlnaHQpXG4gICAgICAgICAgICYmICh0aGlzLnJpZ2h0ID4gYm91bmRzLmxlZnQpXG4gICAgICAgICAgICYmICh0aGlzLmJvdHRvbSA+IGJvdW5kcy50b3ApICApO1xuICB9XG5cbiAgc3RhdGljIGZyb21Cb3VuZGluZ0NsaWVudFJlY3QoYm91bmRpbmdDbGllbnRSZWN0KSB7XG4gICAgY29uc3Qgd2luZG93U2Nyb2xsVG9wID0gd2luZG93LnBhZ2VZT2Zmc2V0LCAvLy9cbiAgICAgICAgICB3aW5kb3dTY3JvbGxMZWZ0ID0gd2luZG93LnBhZ2VYT2Zmc2V0LCAgLy8vXG4gICAgICAgICAgdG9wID0gYm91bmRpbmdDbGllbnRSZWN0LnRvcCArIHdpbmRvd1Njcm9sbFRvcCxcbiAgICAgICAgICBsZWZ0ID0gYm91bmRpbmdDbGllbnRSZWN0LmxlZnQgKyB3aW5kb3dTY3JvbGxMZWZ0LFxuICAgICAgICAgIHJpZ2h0ID0gYm91bmRpbmdDbGllbnRSZWN0LnJpZ2h0ICsgd2luZG93U2Nyb2xsTGVmdCxcbiAgICAgICAgICBib3R0b20gPSBib3VuZGluZ0NsaWVudFJlY3QuYm90dG9tICsgd2luZG93U2Nyb2xsVG9wLFxuICAgICAgICAgIGJvdW5kcyA9IG5ldyBCb3VuZHModG9wLCBsZWZ0LCByaWdodCwgYm90dG9tKTtcblxuICAgIHJldHVybiBib3VuZHM7XG4gIH1cblxuICBzdGF0aWMgZnJvbVRvcExlZnRXaWR0aEFuZEhlaWdodCh0b3AsIGxlZnQsIHdpZHRoLCBoZWlnaHQpIHtcbiAgICBjb25zdCBib3R0b20gPSB0b3AgKyBoZWlnaHQsXG4gICAgICAgICAgcmlnaHQgPSBsZWZ0ICsgd2lkdGgsXG4gICAgICAgICAgYm91bmRzID0gbmV3IEJvdW5kcyh0b3AsIGxlZnQsIHJpZ2h0LCBib3R0b20pO1xuXG4gICAgcmV0dXJuIGJvdW5kcztcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRWxlbWVudCBmcm9tIFwiLi9lbGVtZW50XCI7XG5cbmltcG9ydCB7IGZsYXR0ZW4gfSBmcm9tIFwiLi91dGlsaXRpZXMvYXJyYXlcIjtcbmltcG9ydCB7IFNUUklORywgRlVOQ1RJT04gfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IHJlbW92ZUZhbHNleUVsZW1lbnRzLCByZXBsYWNlU3RyaW5nc1dpdGhUZXh0RWxlbWVudHMgfSBmcm9tIFwiLi91dGlsaXRpZXMvZWxlbWVudHNcIjtcblxuZnVuY3Rpb24gY3JlYXRlRWxlbWVudChmaXJzdEFyZ3VtZW50LCBwcm9wZXJ0aWVzLCAuLi5jaGlsZEVsZW1lbnRzKSB7XG4gIGxldCBlbGVtZW50ID0gbnVsbDtcblxuICBpZiAoZmlyc3RBcmd1bWVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY2hpbGRFbGVtZW50cyA9IHNhbml0aXNlQ2hpbGRFbGVtZW50cyhjaGlsZEVsZW1lbnRzKTtcblxuICAgIHByb3BlcnRpZXMgPSBPYmplY3QuYXNzaWduKHtcbiAgICAgIGNoaWxkRWxlbWVudHNcbiAgICB9LCBwcm9wZXJ0aWVzKTtcblxuICAgIGlmIChmYWxzZSkge1xuICAgICAgLy8vXG4gICAgfSBlbHNlIGlmIChpc1N1YmNsYXNzT2YoZmlyc3RBcmd1bWVudCwgRWxlbWVudCkpIHtcbiAgICAgIGNvbnN0IENsYXNzID0gZmlyc3RBcmd1bWVudDsgIC8vL1xuXG4gICAgICBlbGVtZW50ID0gQ2xhc3MuZnJvbUNsYXNzKENsYXNzLCBwcm9wZXJ0aWVzKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBmaXJzdEFyZ3VtZW50ID09PSBTVFJJTkcpIHtcbiAgICAgIGNvbnN0IHRhZ05hbWUgPSBmaXJzdEFyZ3VtZW50OyAvLy9cblxuICAgICAgZWxlbWVudCA9IEVsZW1lbnQuZnJvbVRhZ05hbWUodGFnTmFtZSwgcHJvcGVydGllcyk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZmlyc3RBcmd1bWVudCA9PT0gRlVOQ1RJT04pIHtcbiAgICAgIGNvbnN0IGVsZW1lbnRGdW5jdGlvbiA9IGZpcnN0QXJndW1lbnQ7ICAvLy9cblxuICAgICAgZWxlbWVudCA9IGVsZW1lbnRGdW5jdGlvbihwcm9wZXJ0aWVzKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZWxlbWVudDtcbn1cblxuY29uc3QgUmVhY3QgPSB7XG4gIGNyZWF0ZUVsZW1lbnRcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFJlYWN0O1xuXG5mdW5jdGlvbiBzYW5pdGlzZUNoaWxkRWxlbWVudHMoY2hpbGRFbGVtZW50cykge1xuICBjaGlsZEVsZW1lbnRzID0gZmxhdHRlbihjaGlsZEVsZW1lbnRzKTtcblxuICBjaGlsZEVsZW1lbnRzID0gcmVtb3ZlRmFsc2V5RWxlbWVudHMoY2hpbGRFbGVtZW50cyk7XG5cbiAgY2hpbGRFbGVtZW50cyA9IHJlcGxhY2VTdHJpbmdzV2l0aFRleHRFbGVtZW50cyhjaGlsZEVsZW1lbnRzKTtcblxuICByZXR1cm4gY2hpbGRFbGVtZW50cztcbn1cblxuZnVuY3Rpb24gaXNTdWJjbGFzc09mKGFyZ3VtZW50LCBDbGFzcykge1xuICBsZXQgc3ViY2xhc3NPZiA9IGZhbHNlO1xuXG4gIGlmIChhcmd1bWVudC5uYW1lID09PSBDbGFzcy5uYW1lKSB7IC8vL1xuICAgIHN1YmNsYXNzT2YgPSB0cnVlO1xuICB9IGVsc2Uge1xuICAgIGFyZ3VtZW50ID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKGFyZ3VtZW50KTsgLy8vXG5cbiAgICBpZiAoYXJndW1lbnQpIHtcbiAgICAgIHN1YmNsYXNzT2YgPSBpc1N1YmNsYXNzT2YoYXJndW1lbnQsIENsYXNzKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3ViY2xhc3NPZjtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQm91bmRzIHtcbiAgY29uc3RydWN0b3IodG9wLCBsZWZ0LCByaWdodCwgYm90dG9tKSB7XG4gICAgdGhpcy50b3AgPSB0b3A7XG4gICAgdGhpcy5sZWZ0ID0gbGVmdDtcbiAgICB0aGlzLnJpZ2h0ID0gcmlnaHQ7XG4gICAgdGhpcy5ib3R0b20gPSBib3R0b207XG4gIH1cblxuICBnZXRUb3AoKSB7XG4gICAgcmV0dXJuIHRoaXMudG9wO1xuICB9XG5cbiAgZ2V0TGVmdCgpIHtcbiAgICByZXR1cm4gdGhpcy5sZWZ0O1xuICB9XG5cbiAgZ2V0UmlnaHQoKSB7XG4gICAgcmV0dXJuIHRoaXMucmlnaHQ7XG4gIH1cblxuICBnZXRCb3R0b20oKSB7XG4gICAgcmV0dXJuIHRoaXMuYm90dG9tO1xuICB9XG5cbiAgZ2V0V2lkdGgoKSB7XG4gICAgY29uc3Qgd2lkdGggPSAodGhpcy5yaWdodCAtIHRoaXMubGVmdCk7XG5cbiAgICByZXR1cm4gd2lkdGg7XG4gIH1cblxuICBnZXRIZWlnaHQoKSB7XG4gICAgY29uc3QgaGVpZ2h0ID0gKHRoaXMuYm90dG9tIC0gdGhpcy50b3ApO1xuXG4gICAgcmV0dXJuIGhlaWdodDtcbiAgfVxuICBcbiAgc2V0VG9wKHRvcCkge1xuICAgIHRoaXMudG9wID0gdG9wO1xuICB9XG5cbiAgc2V0TGVmdChsZWZ0KSB7XG4gICAgdGhpcy5sZWZ0ID0gbGVmdDtcbiAgfVxuXG4gIHNldFJpZ2h0KHJpZ2h0KSB7XG4gICAgdGhpcy5yaWdodCA9IHJpZ2h0O1xuICB9XG5cbiAgc2V0Qm90dG9tKGJvdHRvbSkge1xuICAgIHRoaXMuYm90dG9tID0gYm90dG9tO1xuICB9XG5cbiAgc2hpZnQoaG9yaXpvbnRhbE9mZnNldCwgdmVydGljYWxPZmZzZXQpIHtcbiAgICB0aGlzLnRvcCArPSB2ZXJ0aWNhbE9mZnNldDtcbiAgICB0aGlzLmxlZnQgKz0gaG9yaXpvbnRhbE9mZnNldDtcbiAgICB0aGlzLnJpZ2h0ICs9IGhvcml6b250YWxPZmZzZXQ7XG4gICAgdGhpcy5ib3R0b20gKz0gdmVydGljYWxPZmZzZXQ7XG4gIH1cblxuICBpc092ZXJsYXBwaW5nTW91c2UobW91c2VUb3AsIG1vdXNlTGVmdCkge1xuICAgIHJldHVybiAoICAodGhpcy50b3AgPD0gbW91c2VUb3ApXG4gICAgICAgICAgICYmICh0aGlzLmxlZnQgPD0gbW91c2VMZWZ0KVxuICAgICAgICAgICAmJiAodGhpcy5yaWdodCA+IG1vdXNlTGVmdClcbiAgICAgICAgICAgJiYgKHRoaXMuYm90dG9tID4gbW91c2VUb3ApICApO1xuICB9XG5cbiAgYXJlT3ZlcmxhcHBpbmcoYm91bmRzKSB7XG4gICAgcmV0dXJuICggICh0aGlzLnRvcCA8IGJvdW5kcy5ib3R0b20pXG4gICAgICAgICAgICYmICh0aGlzLmxlZnQgPCBib3VuZHMucmlnaHQpXG4gICAgICAgICAgICYmICh0aGlzLnJpZ2h0ID4gYm91bmRzLmxlZnQpXG4gICAgICAgICAgICYmICh0aGlzLmJvdHRvbSA+IGJvdW5kcy50b3ApICApO1xuICB9XG5cbiAgc3RhdGljIGZyb21Cb3VuZGluZ0NsaWVudFJlY3QoYm91bmRpbmdDbGllbnRSZWN0KSB7XG4gICAgY29uc3Qgd2luZG93U2Nyb2xsVG9wID0gd2luZG93LnBhZ2VZT2Zmc2V0LCAvLy9cbiAgICAgICAgICB3aW5kb3dTY3JvbGxMZWZ0ID0gd2luZG93LnBhZ2VYT2Zmc2V0LCAgLy8vXG4gICAgICAgICAgdG9wID0gYm91bmRpbmdDbGllbnRSZWN0LnRvcCArIHdpbmRvd1Njcm9sbFRvcCxcbiAgICAgICAgICBsZWZ0ID0gYm91bmRpbmdDbGllbnRSZWN0LmxlZnQgKyB3aW5kb3dTY3JvbGxMZWZ0LFxuICAgICAgICAgIHJpZ2h0ID0gYm91bmRpbmdDbGllbnRSZWN0LnJpZ2h0ICsgd2luZG93U2Nyb2xsTGVmdCxcbiAgICAgICAgICBib3R0b20gPSBib3VuZGluZ0NsaWVudFJlY3QuYm90dG9tICsgd2luZG93U2Nyb2xsVG9wLFxuICAgICAgICAgIGJvdW5kcyA9IG5ldyBCb3VuZHModG9wLCBsZWZ0LCByaWdodCwgYm90dG9tKTtcblxuICAgIHJldHVybiBib3VuZHM7XG4gIH1cblxuICBzdGF0aWMgZnJvbVRvcExlZnRXaWR0aEFuZEhlaWdodCh0b3AsIGxlZnQsIHdpZHRoLCBoZWlnaHQpIHtcbiAgICBjb25zdCBib3R0b20gPSB0b3AgKyBoZWlnaHQsXG4gICAgICAgICAgcmlnaHQgPSBsZWZ0ICsgd2lkdGgsXG4gICAgICAgICAgYm91bmRzID0gbmV3IEJvdW5kcyh0b3AsIGxlZnQsIHJpZ2h0LCBib3R0b20pO1xuXG4gICAgcmV0dXJuIGJvdW5kcztcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRWxlbWVudCBmcm9tIFwiLi4vZWxlbWVudFwiO1xuXG5pbXBvcnQgeyBCT0RZIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCb2R5IGV4dGVuZHMgRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKHNlbGVjdG9yID0gQk9EWSkge1xuICAgIHN1cGVyKHNlbGVjdG9yKTtcbiAgfVxuXG4gIHN0YXRpYyB0YWdOYW1lID0gXCJib2R5XCI7XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IEVsZW1lbnQgZnJvbSBcIi4uL2VsZW1lbnRcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTGluayBleHRlbmRzIEVsZW1lbnQge1xuICBnZXRIUmVmKCkgeyByZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGUoXCJocmVmXCIpOyB9XG5cbiAgc2V0SFJlZihocmVmKSB7IHJldHVybiB0aGlzLnNldEF0dHJpYnV0ZShcImhyZWZcIiwgaHJlZik7IH1cblxuICBzdGF0aWMgdGFnTmFtZSA9IFwiYVwiO1xufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IENIQU5HRV9FVkVOVF9UWVBFIH0gZnJvbSBcIi4uL2V2ZW50VHlwZXNcIjtcblxuZnVuY3Rpb24gb25DaGFuZ2UoY2hhbmdlSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9uKENIQU5HRV9FVkVOVF9UWVBFLCBjaGFuZ2VIYW5kbGVyLCBlbGVtZW50KTsgfVxuXG5mdW5jdGlvbiBvZmZDaGFuZ2UoY2hhbmdlSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9mZihDSEFOR0VfRVZFTlRfVFlQRSwgY2hhbmdlSGFuZGxlciwgZWxlbWVudCk7IH1cblxuY29uc3QgY2hhbmdlTWl4aW5zID0ge1xuICBvbkNoYW5nZSxcbiAgb2ZmQ2hhbmdlXG59O1xuXG5leHBvcnQgZGVmYXVsdCBjaGFuZ2VNaXhpbnM7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBFbGVtZW50IGZyb20gXCIuL2VsZW1lbnRcIjtcbmltcG9ydCBjaGFuZ2VNaXhpbnMgZnJvbSBcIi4vbWl4aW5zL2NoYW5nZVwiO1xuXG5pbXBvcnQgeyBDSEFOR0VfRVZFTlRfVFlQRSB9IGZyb20gXCIuL2V2ZW50VHlwZXNcIjtcblxuY2xhc3MgSW5wdXRFbGVtZW50IGV4dGVuZHMgRWxlbWVudCB7XG4gIG9uQ2hhbmdlKGNoYW5nZUhhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vbihDSEFOR0VfRVZFTlRfVFlQRSwgY2hhbmdlSGFuZGxlciwgZWxlbWVudCk7IH1cblxuICBvZmZDaGFuZ2UoY2hhbmdlSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9mZihDSEFOR0VfRVZFTlRfVFlQRSwgY2hhbmdlSGFuZGxlciwgZWxlbWVudCk7IH1cblxuICBvblJlc2l6ZShyZXNpemVIYW5kbGVyLCBlbGVtZW50KSB7fSAvLy9cblxuICBvZmZSZXNpemUocmVzaXplSGFuZGxlciwgZWxlbWVudCkge30gIC8vL1xuXG4gIGdldFZhbHVlKCkgeyByZXR1cm4gdGhpcy5kb21FbGVtZW50LnZhbHVlOyB9XG5cbiAgZ2V0U2VsZWN0aW9uU3RhcnQoKSB7IHJldHVybiB0aGlzLmRvbUVsZW1lbnQuc2VsZWN0aW9uU3RhcnQ7IH1cblxuICBnZXRTZWxlY3Rpb25FbmQoKSB7IHJldHVybiB0aGlzLmRvbUVsZW1lbnQuc2VsZWN0aW9uRW5kOyB9XG4gIFxuICBpc1JlYWRPbmx5KCkgeyByZXR1cm4gdGhpcy5kb21FbGVtZW50LnJlYWRPbmx5OyB9XG5cbiAgc2V0VmFsdWUodmFsdWUpIHsgdGhpcy5kb21FbGVtZW50LnZhbHVlID0gdmFsdWU7IH1cblxuICBzZXRTZWxlY3Rpb25TdGFydChzZWxlY3Rpb25TdGFydCkgeyB0aGlzLmRvbUVsZW1lbnQuc2VsZWN0aW9uU3RhcnQgPSBzZWxlY3Rpb25TdGFydDsgfVxuXG4gIHNldFNlbGVjdGlvbkVuZChzZWxlY3Rpb25FbmQpIHsgdGhpcy5kb21FbGVtZW50LnNlbGVjdGlvbkVuZCA9IHNlbGVjdGlvbkVuZDsgfVxuXG4gIHNldFJlYWRPbmx5KHJlYWRPbmx5KSB7IHRoaXMuZG9tRWxlbWVudC5yZWFkT25seSA9IHJlYWRPbmx5OyB9XG5cbiAgc2VsZWN0KCkgeyB0aGlzLmRvbUVsZW1lbnQuc2VsZWN0KCk7IH1cbn1cblxuT2JqZWN0LmFzc2lnbihJbnB1dEVsZW1lbnQucHJvdG90eXBlLCBjaGFuZ2VNaXhpbnMpO1xuXG5leHBvcnQgZGVmYXVsdCBJbnB1dEVsZW1lbnQ7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBJbnB1dEVsZW1lbnQgZnJvbSBcIi4uL2lucHV0RWxlbWVudFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJbnB1dCBleHRlbmRzIElucHV0RWxlbWVudCB7XG4gIHN0YXRpYyB0YWdOYW1lID0gXCJpbnB1dFwiO1xufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBFbGVtZW50IGZyb20gXCIuLi9lbGVtZW50XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJ1dHRvbiBleHRlbmRzIEVsZW1lbnQge1xuICBzdGF0aWMgdGFnTmFtZSA9IFwiYnV0dG9uXCI7XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IEVsZW1lbnQgZnJvbSBcIi4uL2VsZW1lbnRcIjtcbmltcG9ydCBjaGFuZ2VNaXhpbnMgZnJvbSBcIi4uL21peGlucy9jaGFuZ2VcIjtcblxuY2xhc3MgU2VsZWN0IGV4dGVuZHMgRWxlbWVudCB7XG4gIG9uUmVzaXplKHJlc2l6ZUhhbmRsZXIsIGVsZW1lbnQpIHt9IC8vL1xuXG4gIG9mZlJlc2l6ZShyZXNpemVIYW5kbGVyLCBlbGVtZW50KSB7fSAgLy8vXG5cbiAgZ2V0VmFsdWUoKSB7IHJldHVybiB0aGlzLmRvbUVsZW1lbnQudmFsdWU7IH1cblxuICBzZXRWYWx1ZSh2YWx1ZSkgeyB0aGlzLmRvbUVsZW1lbnQudmFsdWUgPSB2YWx1ZTsgfVxuXG4gIHN0YXRpYyB0YWdOYW1lID0gXCJzZWxlY3RcIjtcbn1cblxuT2JqZWN0LmFzc2lnbihTZWxlY3QucHJvdG90eXBlLCBjaGFuZ2VNaXhpbnMpO1xuXG5leHBvcnQgZGVmYXVsdCBTZWxlY3Q7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBFbGVtZW50IGZyb20gXCIuLi9lbGVtZW50XCI7XG5pbXBvcnQgY2hhbmdlTWl4aW5zIGZyb20gXCIuLi9taXhpbnMvY2hhbmdlXCI7XG5cbmNsYXNzIENoZWNrYm94IGV4dGVuZHMgRWxlbWVudCB7XG4gIGlzQ2hlY2tlZCgpIHsgcmV0dXJuIHRoaXMuZG9tRWxlbWVudC5jaGVja2VkOyB9XG5cbiAgY2hlY2soY2hlY2tlZCA9IHRydWUpIHsgdGhpcy5kb21FbGVtZW50LmNoZWNrZWQgPSBjaGVja2VkOyB9XG5cbiAgc3RhdGljIHRhZ05hbWUgPSBcImlucHV0XCI7XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIHR5cGU6IFwiY2hlY2tib3hcIlxuICB9O1xufVxuXG5PYmplY3QuYXNzaWduKENoZWNrYm94LnByb3RvdHlwZSwgY2hhbmdlTWl4aW5zKTtcblxuZXhwb3J0IGRlZmF1bHQgQ2hlY2tib3g7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBJbnB1dEVsZW1lbnQgZnJvbSBcIi4uL2lucHV0RWxlbWVudFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXh0YXJlYSBleHRlbmRzIElucHV0RWxlbWVudCB7XG4gIHN0YXRpYyB0YWdOYW1lID0gXCJ0ZXh0YXJlYVwiO1xufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IG9uUmVzaXplLCBvZmZSZXNpemUgfSBmcm9tIFwiLi4vbWl4aW5zL3Jlc2l6ZVwiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG9uUmVzaXplLFxuICBvZmZSZXNpemVcbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBrZXlNaXhpbnMgZnJvbSBcIi4vbWl4aW5zL2tleVwiO1xuaW1wb3J0IGV2ZW50TWl4aW5zIGZyb20gXCIuL21peGlucy9ldmVudFwiO1xuaW1wb3J0IG1vdXNlTWl4aW5zIGZyb20gXCIuL21peGlucy9tb3VzZVwiO1xuaW1wb3J0IGNsaWNrTWl4aW5zIGZyb20gXCIuL21peGlucy9jbGlja1wiO1xuaW1wb3J0IHdpbmRvd01peGlucyBmcm9tIFwiLi9taXhpbnMvd2luZG93XCI7XG5cbmltcG9ydCB7IFVOREVGSU5FRCB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuXG5jbGFzcyBXaW5kb3cge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmRvbUVsZW1lbnQgPSB3aW5kb3c7IC8vL1xuICB9XG5cbiAgYXNzaWduKC4uLnNvdXJjZXMpIHtcbiAgICBjb25zdCB0YXJnZXQgPSB0aGlzLmRvbUVsZW1lbnQ7IC8vL1xuXG4gICAgT2JqZWN0LmFzc2lnbih0YXJnZXQsIC4uLnNvdXJjZXMpO1xuICB9XG5cbiAgYWRkUmVzaXplT2JqZWN0KCkge30gLy8vXG5cbiAgcmVtb3ZlUmVzaXplT2JqZWN0KCkge30gLy8vXG5cbiAgZ2V0V2lkdGgoKSB7IHJldHVybiB0aGlzLmRvbUVsZW1lbnQuaW5uZXJXaWR0aDsgfSAvLy9cbiAgXG4gIGdldEhlaWdodCgpIHsgcmV0dXJuIHRoaXMuZG9tRWxlbWVudC5pbm5lckhlaWdodDsgfSAvLy9cblxuICBnZXRTY3JvbGxUb3AoKSB7IHJldHVybiB0aGlzLmRvbUVsZW1lbnQucGFnZVlPZmZzZXQ7IH0gIC8vL1xuXG4gIGdldFNjcm9sbExlZnQoKSB7IHJldHVybiB0aGlzLmRvbUVsZW1lbnQucGFnZVhPZmZzZXQ7IH0gLy8vXG59XG5cbk9iamVjdC5hc3NpZ24oV2luZG93LnByb3RvdHlwZSwga2V5TWl4aW5zKTtcbk9iamVjdC5hc3NpZ24oV2luZG93LnByb3RvdHlwZSwgZXZlbnRNaXhpbnMpO1xuT2JqZWN0LmFzc2lnbihXaW5kb3cucHJvdG90eXBlLCBtb3VzZU1peGlucyk7XG5PYmplY3QuYXNzaWduKFdpbmRvdy5wcm90b3R5cGUsIGNsaWNrTWl4aW5zKTtcbk9iamVjdC5hc3NpZ24oV2luZG93LnByb3RvdHlwZSwgd2luZG93TWl4aW5zKTtcblxuZXhwb3J0IGRlZmF1bHQgKHR5cGVvZiB3aW5kb3cgPT09IFVOREVGSU5FRCkgPyB1bmRlZmluZWQgOiBuZXcgV2luZG93KCk7ICAvLy9cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQm91bmRzIHtcbiAgY29uc3RydWN0b3IodG9wLCBsZWZ0LCByaWdodCwgYm90dG9tKSB7XG4gICAgdGhpcy50b3AgPSB0b3A7XG4gICAgdGhpcy5sZWZ0ID0gbGVmdDtcbiAgICB0aGlzLnJpZ2h0ID0gcmlnaHQ7XG4gICAgdGhpcy5ib3R0b20gPSBib3R0b207XG4gIH1cblxuICBnZXRUb3AoKSB7XG4gICAgcmV0dXJuIHRoaXMudG9wO1xuICB9XG5cbiAgZ2V0TGVmdCgpIHtcbiAgICByZXR1cm4gdGhpcy5sZWZ0O1xuICB9XG5cbiAgZ2V0UmlnaHQoKSB7XG4gICAgcmV0dXJuIHRoaXMucmlnaHQ7XG4gIH1cblxuICBnZXRCb3R0b20oKSB7XG4gICAgcmV0dXJuIHRoaXMuYm90dG9tO1xuICB9XG5cbiAgZ2V0V2lkdGgoKSB7XG4gICAgY29uc3Qgd2lkdGggPSAodGhpcy5yaWdodCAtIHRoaXMubGVmdCk7XG5cbiAgICByZXR1cm4gd2lkdGg7XG4gIH1cblxuICBnZXRIZWlnaHQoKSB7XG4gICAgY29uc3QgaGVpZ2h0ID0gKHRoaXMuYm90dG9tIC0gdGhpcy50b3ApO1xuXG4gICAgcmV0dXJuIGhlaWdodDtcbiAgfVxuICBcbiAgc2V0VG9wKHRvcCkge1xuICAgIHRoaXMudG9wID0gdG9wO1xuICB9XG5cbiAgc2V0TGVmdChsZWZ0KSB7XG4gICAgdGhpcy5sZWZ0ID0gbGVmdDtcbiAgfVxuXG4gIHNldFJpZ2h0KHJpZ2h0KSB7XG4gICAgdGhpcy5yaWdodCA9IHJpZ2h0O1xuICB9XG5cbiAgc2V0Qm90dG9tKGJvdHRvbSkge1xuICAgIHRoaXMuYm90dG9tID0gYm90dG9tO1xuICB9XG5cbiAgc2hpZnQoaG9yaXpvbnRhbE9mZnNldCwgdmVydGljYWxPZmZzZXQpIHtcbiAgICB0aGlzLnRvcCArPSB2ZXJ0aWNhbE9mZnNldDtcbiAgICB0aGlzLmxlZnQgKz0gaG9yaXpvbnRhbE9mZnNldDtcbiAgICB0aGlzLnJpZ2h0ICs9IGhvcml6b250YWxPZmZzZXQ7XG4gICAgdGhpcy5ib3R0b20gKz0gdmVydGljYWxPZmZzZXQ7XG4gIH1cblxuICBpc092ZXJsYXBwaW5nTW91c2UobW91c2VUb3AsIG1vdXNlTGVmdCkge1xuICAgIHJldHVybiAoICAodGhpcy50b3AgPD0gbW91c2VUb3ApXG4gICAgICAgICAgICYmICh0aGlzLmxlZnQgPD0gbW91c2VMZWZ0KVxuICAgICAgICAgICAmJiAodGhpcy5yaWdodCA+IG1vdXNlTGVmdClcbiAgICAgICAgICAgJiYgKHRoaXMuYm90dG9tID4gbW91c2VUb3ApICApO1xuICB9XG5cbiAgYXJlT3ZlcmxhcHBpbmcoYm91bmRzKSB7XG4gICAgcmV0dXJuICggICh0aGlzLnRvcCA8IGJvdW5kcy5ib3R0b20pXG4gICAgICAgICAgICYmICh0aGlzLmxlZnQgPCBib3VuZHMucmlnaHQpXG4gICAgICAgICAgICYmICh0aGlzLnJpZ2h0ID4gYm91bmRzLmxlZnQpXG4gICAgICAgICAgICYmICh0aGlzLmJvdHRvbSA+IGJvdW5kcy50b3ApICApO1xuICB9XG5cbiAgc3RhdGljIGZyb21Cb3VuZGluZ0NsaWVudFJlY3QoYm91bmRpbmdDbGllbnRSZWN0KSB7XG4gICAgY29uc3Qgd2luZG93U2Nyb2xsVG9wID0gd2luZG93LnBhZ2VZT2Zmc2V0LCAvLy9cbiAgICAgICAgICB3aW5kb3dTY3JvbGxMZWZ0ID0gd2luZG93LnBhZ2VYT2Zmc2V0LCAgLy8vXG4gICAgICAgICAgdG9wID0gYm91bmRpbmdDbGllbnRSZWN0LnRvcCArIHdpbmRvd1Njcm9sbFRvcCxcbiAgICAgICAgICBsZWZ0ID0gYm91bmRpbmdDbGllbnRSZWN0LmxlZnQgKyB3aW5kb3dTY3JvbGxMZWZ0LFxuICAgICAgICAgIHJpZ2h0ID0gYm91bmRpbmdDbGllbnRSZWN0LnJpZ2h0ICsgd2luZG93U2Nyb2xsTGVmdCxcbiAgICAgICAgICBib3R0b20gPSBib3VuZGluZ0NsaWVudFJlY3QuYm90dG9tICsgd2luZG93U2Nyb2xsVG9wLFxuICAgICAgICAgIGJvdW5kcyA9IG5ldyBCb3VuZHModG9wLCBsZWZ0LCByaWdodCwgYm90dG9tKTtcblxuICAgIHJldHVybiBib3VuZHM7XG4gIH1cblxuICBzdGF0aWMgZnJvbVRvcExlZnRXaWR0aEFuZEhlaWdodCh0b3AsIGxlZnQsIHdpZHRoLCBoZWlnaHQpIHtcbiAgICBjb25zdCBib3R0b20gPSB0b3AgKyBoZWlnaHQsXG4gICAgICAgICAgcmlnaHQgPSBsZWZ0ICsgd2lkdGgsXG4gICAgICAgICAgYm91bmRzID0gbmV3IEJvdW5kcyh0b3AsIGxlZnQsIHJpZ2h0LCBib3R0b20pO1xuXG4gICAgcmV0dXJuIGJvdW5kcztcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgTEVGVF9NT1VTRV9CVVRUT04gPSAwO1xuZXhwb3J0IGNvbnN0IFJJR0hUX01PVVNFX0JVVFRPTiA9IDI7XG5leHBvcnQgY29uc3QgTUlERExFX01PVVNFX0JVVFRPTiA9IDE7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgTEVGVF9NT1VTRV9CVVRUT04sXG4gIFJJR0hUX01PVVNFX0JVVFRPTixcbiAgTUlERExFX01PVVNFX0JVVFRPTlxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IGtleU1peGlucyBmcm9tIFwiLi9taXhpbnMva2V5XCI7XG5pbXBvcnQgY2xpY2tNaXhpbnMgZnJvbSBcIi4vbWl4aW5zL2NsaWNrXCI7XG5pbXBvcnQgZXZlbnRNaXhpbnMgZnJvbSBcIi4vbWl4aW5zL2V2ZW50XCI7XG5pbXBvcnQgbW91c2VNaXhpbnMgZnJvbSBcIi4vbWl4aW5zL21vdXNlXCI7XG5cbmltcG9ydCB7IFVOREVGSU5FRCB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuXG5jbGFzcyBEb2N1bWVudCB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuZG9tRWxlbWVudCA9IGRvY3VtZW50OyAvLy9cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCAodHlwZW9mIGRvY3VtZW50ID09PSBVTkRFRklORUQpID8gdW5kZWZpbmVkIDogbmV3IERvY3VtZW50KCk7ICAvLy9cblxuT2JqZWN0LmFzc2lnbihEb2N1bWVudC5wcm90b3R5cGUsIGtleU1peGlucyk7XG5PYmplY3QuYXNzaWduKERvY3VtZW50LnByb3RvdHlwZSwgY2xpY2tNaXhpbnMpO1xuT2JqZWN0LmFzc2lnbihEb2N1bWVudC5wcm90b3R5cGUsIGV2ZW50TWl4aW5zKTtcbk9iamVjdC5hc3NpZ24oRG9jdW1lbnQucHJvdG90eXBlLCBtb3VzZU1peGlucyk7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgUmVhY3QgfSBmcm9tIFwiLi9yZWFjdFwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBCb3VuZHMgfSBmcm9tIFwiLi9ib3VuZHNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgT2Zmc2V0IH0gZnJvbSBcIi4vb2Zmc2V0XCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgQm9keSB9IGZyb20gXCIuL2VsZW1lbnQvYm9keVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBMaW5rIH0gZnJvbSBcIi4vZWxlbWVudC9saW5rXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIElucHV0IH0gZnJvbSBcIi4vaW5wdXRFbGVtZW50L2lucHV0XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEJ1dHRvbiB9IGZyb20gXCIuL2VsZW1lbnQvYnV0dG9uXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFNlbGVjdCB9IGZyb20gXCIuL2VsZW1lbnQvc2VsZWN0XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEVsZW1lbnQgfSBmcm9tIFwiLi9lbGVtZW50XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENoZWNrYm94IH0gZnJvbSBcIi4vZWxlbWVudC9jaGVja2JveFwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBUZXh0YXJlYSB9IGZyb20gXCIuL2lucHV0RWxlbWVudC90ZXh0YXJlYVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBUZXh0RWxlbWVudCB9IGZyb20gXCIuL3RleHRFbGVtZW50XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIElucHV0RWxlbWVudCB9IGZyb20gXCIuL2lucHV0RWxlbWVudFwiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIHdpbmRvdyB9IGZyb20gXCIuL3dpbmRvd1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBidXR0b25zIH0gZnJvbSBcIi4vYnV0dG9uc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBkb2N1bWVudCB9IGZyb20gXCIuL2RvY3VtZW50XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGV2ZW50VHlwZXMgfSBmcm9tIFwiLi9ldmVudFR5cGVzXCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IFJlYWN0LCB3aW5kb3cgfSBmcm9tIFwiZWFzeVwiO1xuXG53aW5kb3cuYXNzaWduKHtcbiAgUmVhY3Rcbn0pO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgXCIuL2p1eHRhcG9zZVwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCB0YWdOYW1lcyA9IFtcbiAgXCJhXCIsIFwiYWJiclwiLCBcImFkZHJlc3NcIiwgXCJhc2lkZVwiLCBcImF1ZGlvXCIsXG4gIFwiYlwiLCBcImJhc2VcIiwgXCJiZGlcIiwgXCJiZG9cIiwgXCJibG9ja3F1b3RlXCIsIFwiYm9keVwiLCBcImJyXCIsIFwiYnV0dG9uXCIsXG4gIFwiY2FudmFzXCIsIFwiY2FwdGlvblwiLCBcImNpdGVcIiwgXCJjb2RlXCIsIFwiY29sXCIsIFwiY29sZ3JvdXBcIixcbiAgXCJkYXRhXCIsIFwiZGF0YWxpc3RcIiwgXCJkZFwiLCBcImRlbFwiLCBcImRldGFpbHNcIiwgXCJkZm5cIiwgXCJkaWFsb2dcIiwgXCJkaXZcIiwgXCJkbFwiLCBcImR0XCIsIFwiZW1cIiwgXCJlbWJlZFwiLCBcImZpZWxkc2V0XCIsIFwiZmlnY2FwdGlvblwiLCBcImZpZ3VyZVwiLCBcImZvb3RlclwiLCBcImZvcm1cIixcbiAgXCJoMVwiLCBcImgyXCIsIFwiaDNcIiwgXCJoNFwiLCBcImg1XCIsIFwiaDZcIiwgXCJoZWFkXCIsIFwiaGVhZGVyXCIsIFwiaHJcIiwgXCJodG1sXCIsXG4gIFwiaVwiLCBcImlmcmFtZVwiLCBcImltZ1wiLCBcImlucHV0XCIsIFwiaW5zXCIsIFwia2JkXCIsIFwibGFiZWxcIiwgXCJsZWdlbmRcIiwgXCJsaVwiLCBcImxpbmtcIixcbiAgXCJtYWluXCIsIFwibWFwXCIsIFwibWFya1wiLCBcIm1ldGFcIiwgXCJtZXRlclwiLCBcIm5hdlwiLCBcIm5vc2NyaXB0XCIsXG4gIFwib2JqZWN0XCIsIFwib2xcIiwgXCJvcHRncm91cFwiLCBcIm9wdGlvblwiLCBcIm91dHB1dFwiLFxuICBcInBcIiwgXCJwYXJhbVwiLCBcInBpY3R1cmVcIiwgXCJwcmVcIiwgXCJwcm9ncmVzc1wiLFxuICBcInFcIiwgXCJycFwiLCBcInJ0XCIsIFwicnVieVwiLFxuICBcInNcIiwgXCJzYW1wXCIsIFwic2NyaXB0XCIsIFwic2VjdGlvblwiLCBcInNlbGVjdFwiLCBcInNtYWxsXCIsIFwic291cmNlXCIsIFwic3BhblwiLCBcInN0cm9uZ1wiLCBcInN0eWxlXCIsIFwic3ViXCIsIFwic3VtbWFyeVwiLCBcInN1cFwiLCBcInN2Z1wiLFxuICBcInRhYmxlXCIsIFwidGJvZHlcIiwgXCJ0ZFwiLCBcInRlbXBsYXRlXCIsIFwidGV4dGFyZWFcIiwgXCJ0Zm9vdFwiLCBcInRoXCIsIFwidGhlYWRcIiwgXCJ0aW1lXCIsIFwidGl0bGVcIiwgXCJ0clwiLCBcInRyYWNrXCIsXG4gIFwidVwiLCBcInVsXCIsXG4gIFwidmFyXCIsIFwidmlkZW9cIixcbiAgXCJ3YnJcIlxuXTtcblxuZXhwb3J0IGRlZmF1bHQgdGFnTmFtZXM7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBUUkFDRV9MRVZFTCA9IFwidHJhY2VcIjtcbmV4cG9ydCBjb25zdCBERUJVR19MRVZFTCA9IFwiZGVidWdcIjtcbmV4cG9ydCBjb25zdCBJTkZPX0xFVkVMID0gXCJpbmZvXCI7XG5leHBvcnQgY29uc3QgV0FSTklOR19MRVZFTCA9IFwid2FybmluZ1wiO1xuZXhwb3J0IGNvbnN0IEVSUk9SX0xFVkVMID0gXCJlcnJvclwiO1xuZXhwb3J0IGNvbnN0IEZBVEFMX0xFVkVMID0gXCJmYXRhbFwiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIFRSQUNFX0xFVkVMLFxuICBERUJVR19MRVZFTCxcbiAgSU5GT19MRVZFTCxcbiAgV0FSTklOR19MRVZFTCxcbiAgRVJST1JfTEVWRUwsXG4gIEZBVEFMX0xFVkVMXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgR0VUX01FVEhPRCA9IFwiR0VUXCI7XG5leHBvcnQgY29uc3QgUE9TVF9NRVRIT0QgPSBcIlBPU1RcIjtcbmV4cG9ydCBjb25zdCBQQVRDSF9NRVRIT0QgPSBcIlBBVENIXCI7XG5leHBvcnQgY29uc3QgREVMRVRFX01FVEhPRCA9IFwiREVMRVRFXCI7XG5leHBvcnQgY29uc3QgT1BUSU9OU19NRVRIT0QgPSBcIk9QVElPTlNcIjtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBHRVRfTUVUSE9ELFxuICBQT1NUX01FVEhPRCxcbiAgUEFUQ0hfTUVUSE9ELFxuICBERUxFVEVfTUVUSE9ELFxuICBPUFRJT05TX01FVEhPRFxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IFBSQUdNQV9IRUFERVIgPSBcInByYWdtYVwiO1xuZXhwb3J0IGNvbnN0IEFDQ0VQVF9IRUFERVIgPSBcImFjY2VwdFwiO1xuZXhwb3J0IGNvbnN0IExPQ0FUSU9OX0hFQURFUiA9IFwibG9jYXRpb25cIjtcbmV4cG9ydCBjb25zdCBVU0VSX0FHRU5UX0hFQURFUiA9IFwidXNlci1hZ2VudFwiO1xuZXhwb3J0IGNvbnN0IENPTlRFTlRfVFlQRV9IRUFERVIgPSBcImNvbnRlbnQtdHlwZVwiO1xuZXhwb3J0IGNvbnN0IEFVVEhPUklaQVRJT05fSEVBREVSID0gXCJhdXRob3JpemF0aW9uXCI7XG5leHBvcnQgY29uc3QgQ0FDSEVfQ09OVFJPTF9IRUFERVIgPSBcImNhY2hlLWNvbnRyb2xcIjtcbmV4cG9ydCBjb25zdCBDT05URU5UX0xFTkdUSF9IRUFERVIgPSBcImNvbnRlbnQtbGVuZ3RoXCI7XG5leHBvcnQgY29uc3QgVFJBTlNGRVJfRU5DT0RJTkdfSEVBREVSID0gXCJ0cmFuc2Zlci1lbmNvZGluZ1wiO1xuZXhwb3J0IGNvbnN0IENPTlRFTlRfRElTUE9TSVRJT05fSEVBREVSID0gXCJjb250ZW50LWRpc3Bvc2l0aW9uXCI7XG5leHBvcnQgY29uc3QgQUNDRVNTX0NPTlRST0xfQUxMT1dfT1JJR0lOX0hFQURFUiA9IFwiYWNjZXNzLWNvbnRyb2wtYWxsb3ctb3JpZ2luXCI7XG5leHBvcnQgY29uc3QgQUNDRVNTX0NPTlRST0xfQUxMT1dfTUVUSE9EU19IRUFERVIgPSBcImFjY2Vzcy1jb250cm9sLWFsbG93LW1ldGhvZHNcIjtcbmV4cG9ydCBjb25zdCBBQ0NFU1NfQ09OVFJPTF9BTExPV19IRUFERVJTX0hFQURFUiA9IFwiYWNjZXNzLWNvbnRyb2wtYWxsb3ctaGVhZGVyc1wiO1xuZXhwb3J0IGNvbnN0IEFDQ0VTU19DT05UUk9MX1JFUVVFU1RfTUVUSE9EX0hFQURFUiA9IFwiYWNjZXNzLWNvbnRyb2wtcmVxdWVzdC1tZXRob2RcIjtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBQUkFHTUFfSEVBREVSLFxuICBBQ0NFUFRfSEVBREVSLFxuICBMT0NBVElPTl9IRUFERVIsXG4gIFVTRVJfQUdFTlRfSEVBREVSLFxuICBDT05URU5UX1RZUEVfSEVBREVSLFxuICBBVVRIT1JJWkFUSU9OX0hFQURFUixcbiAgQ0FDSEVfQ09OVFJPTF9IRUFERVIsXG4gIENPTlRFTlRfTEVOR1RIX0hFQURFUixcbiAgVFJBTlNGRVJfRU5DT0RJTkdfSEVBREVSLFxuICBDT05URU5UX0RJU1BPU0lUSU9OX0hFQURFUixcbiAgQUNDRVNTX0NPTlRST0xfQUxMT1dfT1JJR0lOX0hFQURFUixcbiAgQUNDRVNTX0NPTlRST0xfQUxMT1dfTUVUSE9EU19IRUFERVIsXG4gIEFDQ0VTU19DT05UUk9MX0FMTE9XX0hFQURFUlNfSEVBREVSLFxuICBBQ0NFU1NfQ09OVFJPTF9SRVFVRVNUX01FVEhPRF9IRUFERVJcbn07IiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgU0hJRlRfS0VZX0NPREUgPSAxNjtcbmV4cG9ydCBjb25zdCBFU0NBUEVfS0VZQ09ERSA9IDI3O1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIFNISUZUX0tFWV9DT0RFLFxuICBFU0NBUEVfS0VZQ09ERVxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IFVURjhfRU5DT0RJTkcgPSBcInV0ZjhcIjtcbmV4cG9ydCBjb25zdCBVVEZfOF9FTkNPRElORyA9IFwidXRmLThcIjtcbmV4cG9ydCBjb25zdCBCQVNFNjRfRU5DT0RJTkcgPSBcImJhc2U2NFwiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIFVURjhfRU5DT0RJTkcsXG4gIFVURl84X0VOQ09ESU5HLFxuICBCQVNFNjRfRU5DT0RJTkdcbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBFVFhfQ0hBUkFDVEVSID0gXCJcXHUwMDAzXCI7XG5leHBvcnQgY29uc3QgQkFSX0NIQVJBQ1RFUiA9IFwifFwiO1xuZXhwb3J0IGNvbnN0IERBU0hfQ0hBUkFDVEVSID0gXCItXCI7XG5leHBvcnQgY29uc3QgU1BBQ0VfQ0hBUkFDVEVSID0gXCIgXCI7XG5leHBvcnQgY29uc3QgQ09NTUFfQ0hBUkFDVEVSID0gXCIsXCI7XG5leHBvcnQgY29uc3QgQ09MT05fQ0hBUkFDVEVSID0gXCI6XCI7XG5leHBvcnQgY29uc3QgUEVSSU9EX0NIQVJBQ1RFUiA9IFwiLlwiO1xuZXhwb3J0IGNvbnN0IENUUkxfQ19DSEFSQUNURVIgPSBcIl5DXCI7XG5leHBvcnQgY29uc3QgV0lMRENBUkRfQ0hBUkFDVEVSID0gXCIqXCI7XG5leHBvcnQgY29uc3QgQkFDS1RJQ0tfREVMSU1JVEVSID0gXCJgXCI7XG5leHBvcnQgY29uc3QgTkVXX0xJTkVfQ0hBUkFDVEVSID0gXCJcXG5cIjtcbmV4cG9ydCBjb25zdCBCQUNLU1BBQ0VfQ0hBUkFDVEVSID0gU3RyaW5nLmZyb21DaGFyQ29kZSgxMjcpO1xuZXhwb3J0IGNvbnN0IEFNUEVSU0FORF9DSEFSQUNURVIgPSBcIiZcIjtcbmV4cG9ydCBjb25zdCBMRVNTX1RIQU5fQ0hBUkFDVEVSID0gXCImbHQ7XCI7XG5leHBvcnQgY29uc3QgR1JFQVRFUl9USEFOX0NIQVJBQ1RFUiA9IFwiJmd0O1wiO1xuZXhwb3J0IGNvbnN0IEZPUldBUkRfU0xBU0hfQ0hBUkFDVEVSID0gXCIvXCI7XG5leHBvcnQgY29uc3QgQ0FSUklBR0VfUkVUVVJOX0NIQVJBQ1RFUiA9IFwiXFxyXCI7XG5leHBvcnQgY29uc3QgRVhDTEFNQVRJT05fTUFSS19DSEFSQUNURVIgPSBcIiFcIjtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBFVFhfQ0hBUkFDVEVSLFxuICBCQVJfQ0hBUkFDVEVSLFxuICBEQVNIX0NIQVJBQ1RFUixcbiAgU1BBQ0VfQ0hBUkFDVEVSLFxuICBDT01NQV9DSEFSQUNURVIsXG4gIENPTE9OX0NIQVJBQ1RFUixcbiAgUEVSSU9EX0NIQVJBQ1RFUixcbiAgQ1RSTF9DX0NIQVJBQ1RFUixcbiAgV0lMRENBUkRfQ0hBUkFDVEVSLFxuICBCQUNLVElDS19ERUxJTUlURVIsXG4gIE5FV19MSU5FX0NIQVJBQ1RFUixcbiAgQU1QRVJTQU5EX0NIQVJBQ1RFUixcbiAgQkFDS1NQQUNFX0NIQVJBQ1RFUixcbiAgTEVTU19USEFOX0NIQVJBQ1RFUixcbiAgR1JFQVRFUl9USEFOX0NIQVJBQ1RFUixcbiAgRk9SV0FSRF9TTEFTSF9DSEFSQUNURVIsXG4gIENBUlJJQUdFX1JFVFVSTl9DSEFSQUNURVIsXG4gIEVYQ0xBTUFUSU9OX01BUktfQ0hBUkFDVEVSXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgWkVST18wX1NUQVRVU19DT0RFID0gMDtcbmV4cG9ydCBjb25zdCBPS18yMDBfU1RBVFVTX0NPREUgPSAyMDA7XG5leHBvcnQgY29uc3QgRk9VTkRfMzAyX1NUQVRVU19DT0RFID0gMzAyO1xuZXhwb3J0IGNvbnN0IENSRUFURURfMjAxX1NUQVRVU19DT0RFID0gMjAxO1xuZXhwb3J0IGNvbnN0IFNFRV9PVEhFUl8zMDNfU1RBVFVTX0NPREUgPSAzMDM7XG5leHBvcnQgY29uc3QgRk9SQklEREVOXzQwM19TVEFUVVNfQ09ERSA9IDQwMztcbmV4cG9ydCBjb25zdCBOT1RfRk9VTkRfNDA0X1NUQVRVU19DT0RFID0gNDA0O1xuZXhwb3J0IGNvbnN0IE5PX0NPTlRFTlRfMjA0X1NUQVRVU19DT0RFID0gMjA0O1xuZXhwb3J0IGNvbnN0IEJBRF9HQVRFV0FZXzUwMl9TVEFUVVNfQ09ERSA9IDUwMjtcbmV4cG9ydCBjb25zdCBCQURfUkVRVUVTVF80MDBfU1RBVFVTX0NPREUgPSA0MDA7XG5leHBvcnQgY29uc3QgVU5BVVRIT1JJU0VEXzQwMV9TVEFUVVNfQ09ERSA9IDQwMTtcbmV4cG9ydCBjb25zdCBSRVFVRVNUX1RJTUVPVVRfNDA4X1NUQVRVU19DT0RFID0gNDA4O1xuZXhwb3J0IGNvbnN0IFRPT19NQU5ZX1JFUVVFU1RTXzQyOV9TVEFUVVNfQ09ERSA9IDQyOTtcbmV4cG9ydCBjb25zdCBTRVJWSUNFX1VOQVZBSUxBQkxFXzUwM19TVEFUVVNfQ09ERSA9IDUwMztcbmV4cG9ydCBjb25zdCBJTlRFUk5BTF9TRVJWRVJfRVJST1JfNTAwX1NUQVRVU19DT0RFID0gNTAwO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIFpFUk9fMF9TVEFUVVNfQ09ERSxcbiAgT0tfMjAwX1NUQVRVU19DT0RFLFxuICBGT1VORF8zMDJfU1RBVFVTX0NPREUsXG4gIENSRUFURURfMjAxX1NUQVRVU19DT0RFLFxuICBTRUVfT1RIRVJfMzAzX1NUQVRVU19DT0RFLFxuICBGT1JCSURERU5fNDAzX1NUQVRVU19DT0RFLFxuICBOT1RfRk9VTkRfNDA0X1NUQVRVU19DT0RFLFxuICBOT19DT05URU5UXzIwNF9TVEFUVVNfQ09ERSxcbiAgQkFEX0dBVEVXQVlfNTAyX1NUQVRVU19DT0RFLFxuICBCQURfUkVRVUVTVF80MDBfU1RBVFVTX0NPREUsXG4gIFVOQVVUSE9SSVNFRF80MDFfU1RBVFVTX0NPREUsXG4gIFJFUVVFU1RfVElNRU9VVF80MDhfU1RBVFVTX0NPREUsXG4gIFRPT19NQU5ZX1JFUVVFU1RTXzQyOV9TVEFUVVNfQ09ERSxcbiAgU0VSVklDRV9VTkFWQUlMQUJMRV81MDNfU1RBVFVTX0NPREUsXG4gIElOVEVSTkFMX1NFUlZFUl9FUlJPUl81MDBfU1RBVFVTX0NPREVcbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBURVhUX0hUTUxfQ09OVEVOVF9UWVBFID0gXCJ0ZXh0L2h0bWxcIjtcbmV4cG9ydCBjb25zdCBURVhUX1BMQUlOX0NPTlRFTlRfVFlQRSA9IFwidGV4dC9wbGFpblwiO1xuZXhwb3J0IGNvbnN0IEFQUExJQ0FUSU9OX0pTT05fQ09OVEVOVF9UWVBFID0gXCJhcHBsaWNhdGlvbi9qc29uXCI7XG5leHBvcnQgY29uc3QgQVBQTElDQVRJT05fT0NURVRfU1RSRUFNX0NPTlRFTlRfVFlQRSA9IFwiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtXCI7XG5leHBvcnQgY29uc3QgQVBQTElDQVRJT05fWF9XV1dfRk9STV9FTkNPREVEX0NPTlRFTlRfVFlQRSA9IFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCI7XG5leHBvcnQgY29uc3QgVEVYVF9IVE1MX0NIQVJTRVRfVVRGXzhfQ09OVEVOVF9UWVBFID0gXCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLThcIjtcbmV4cG9ydCBjb25zdCBURVhUX1BMQUlOX0NIQVJTRVRfVVRGXzhfQ09OVEVOVF9UWVBFID0gXCJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04XCI7XG5leHBvcnQgY29uc3QgQVBQTElDQVRJT05fSlNPTl9DSEFSU0VUX1VURl84X0NPTlRFTlRfVFlQRSA9IFwiYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOFwiO1xuZXhwb3J0IGNvbnN0IEFQUExJQ0FUSU9OX1hfV1dXX0ZPUk1fRU5DT0RFRF9DSEFSU0VUX1VURl84X0NPTlRFTlRfVFlQRSA9IFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkOyBjaGFyc2V0PXV0Zi04XCI7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgVEVYVF9IVE1MX0NPTlRFTlRfVFlQRSxcbiAgVEVYVF9QTEFJTl9DT05URU5UX1RZUEUsXG4gIEFQUExJQ0FUSU9OX0pTT05fQ09OVEVOVF9UWVBFLFxuICBBUFBMSUNBVElPTl9PQ1RFVF9TVFJFQU1fQ09OVEVOVF9UWVBFLFxuICBBUFBMSUNBVElPTl9KU09OX0NIQVJTRVRfVVRGXzhfQ09OVEVOVF9UWVBFLFxuICBURVhUX0hUTUxfQ0hBUlNFVF9VVEZfOF9DT05URU5UX1RZUEUsXG4gIFRFWFRfUExBSU5fQ0hBUlNFVF9VVEZfOF9DT05URU5UX1RZUEUsXG4gIEFQUExJQ0FUSU9OX1hfV1dXX0ZPUk1fRU5DT0RFRF9DT05URU5UX1RZUEUsXG4gIEFQUExJQ0FUSU9OX1hfV1dXX0ZPUk1fRU5DT0RFRF9DSEFSU0VUX1VURl84X0NPTlRFTlRfVFlQRVxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IFpFUk9fMF9TVEFUVVNfTUVTU0FHRSA9IFwiXCI7XG5leHBvcnQgY29uc3QgT0tfMjAwX1NUQVRVU19NRVNTQUdFID0gXCJPS1wiO1xuZXhwb3J0IGNvbnN0IEZPVU5EXzMwMl9TVEFUVVNfTUVTU0FHRSA9IFwiRm91bmRcIjtcbmV4cG9ydCBjb25zdCBDUkVBVEVEXzIwMV9TVEFUVVNfTUVTU0FHRSA9IFwiQ3JlYXRlZFwiO1xuZXhwb3J0IGNvbnN0IFNFRV9PVEhFUl8zMDNfU1RBVFVTX01FU1NBR0UgPSBcIlNlZSBvdGhlclwiO1xuZXhwb3J0IGNvbnN0IEZPUkJJRERFTl80MDNfU1RBVFVTX01FU1NBR0UgPSBcIkZvcmJpZGRlblwiO1xuZXhwb3J0IGNvbnN0IE5PVF9GT1VORF80MDRfU1RBVFVTX01FU1NBR0UgPSBcIk5vdCBmb3VuZFwiO1xuZXhwb3J0IGNvbnN0IE5PX0NPTlRFTlRfMjA0X1NUQVRVU19NRVNTQUdFID0gXCJObyBjb250ZW50XCI7XG5leHBvcnQgY29uc3QgQkFEX0dBVEVXQVlfNTAyX1NUQVRVU19NRVNTQUdFID0gXCJCYWQgZ2F0ZXdheVwiO1xuZXhwb3J0IGNvbnN0IEJBRF9SRVFVRVNUXzQwMF9TVEFUVVNfTUVTU0FHRSA9IFwiQmFkIHJlcXVlc3RcIjtcbmV4cG9ydCBjb25zdCBVTkFVVEhPUklTRURfNDAxX1NUQVRVU19NRVNTQUdFID0gXCJVbmF1dGhvcmlzZWRcIjtcbmV4cG9ydCBjb25zdCBSRVFVRVNUX1RJTUVPVVRfNDA4X1NUQVRVU19NRVNTQUdFID0gXCJSZXF1ZXN0IHRpbWVvdXRcIjtcbmV4cG9ydCBjb25zdCBUT09fTUFOWV9SRVFVRVNUU180MjlfU1RBVFVTX01FU1NBR0UgPSBcIlRvbyBtYW55IHJlcXVlc3RzXCI7XG5leHBvcnQgY29uc3QgU0VSVklDRV9VTkFWQUlMQUJMRV81MDNfU1RBVFVTX01FU1NBR0UgPSBcIlNlcnZpY2UgdW5hdmFpbGFibGVcIjtcbmV4cG9ydCBjb25zdCBJTlRFUk5BTF9TRVJWRVJfRVJST1JfNTAwX1NUQVRVU19NRVNTQUdFID0gXCJJbnRlcm5hbCBzZXJ2ZXIgZXJyb3JcIjtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBaRVJPXzBfU1RBVFVTX01FU1NBR0UsXG4gIE9LXzIwMF9TVEFUVVNfTUVTU0FHRSxcbiAgRk9VTkRfMzAyX1NUQVRVU19NRVNTQUdFLFxuICBDUkVBVEVEXzIwMV9TVEFUVVNfTUVTU0FHRSxcbiAgU0VFX09USEVSXzMwM19TVEFUVVNfTUVTU0FHRSxcbiAgRk9SQklEREVOXzQwM19TVEFUVVNfTUVTU0FHRSxcbiAgTk9UX0ZPVU5EXzQwNF9TVEFUVVNfTUVTU0FHRSxcbiAgTk9fQ09OVEVOVF8yMDRfU1RBVFVTX01FU1NBR0UsXG4gIEJBRF9HQVRFV0FZXzUwMl9TVEFUVVNfTUVTU0FHRSxcbiAgQkFEX1JFUVVFU1RfNDAwX1NUQVRVU19NRVNTQUdFLFxuICBVTkFVVEhPUklTRURfNDAxX1NUQVRVU19NRVNTQUdFLFxuICBSRVFVRVNUX1RJTUVPVVRfNDA4X1NUQVRVU19NRVNTQUdFLFxuICBUT09fTUFOWV9SRVFVRVNUU180MjlfU1RBVFVTX01FU1NBR0UsXG4gIFNFUlZJQ0VfVU5BVkFJTEFCTEVfNTAzX1NUQVRVU19NRVNTQUdFLFxuICBJTlRFUk5BTF9TRVJWRVJfRVJST1JfNTAwX1NUQVRVU19NRVNTQUdFXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gZmlyc3QoYXJyYXkpIHsgcmV0dXJuIGFycmF5WzBdO31cblxuZXhwb3J0IGZ1bmN0aW9uIHNlY29uZChhcnJheSkgeyByZXR1cm4gYXJyYXlbMV07IH1cblxuZXhwb3J0IGZ1bmN0aW9uIHRoaXJkKGFycmF5KSB7IHJldHVybiBhcnJheVsyXTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gZm91cnRoKGFycmF5KSB7IHJldHVybiBhcnJheVszXTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gZmlmdGgoYXJyYXkpIHsgcmV0dXJuIGFycmF5WzRdOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWZ0aExhc3QoYXJyYXkpIHsgcmV0dXJuIGFycmF5W2FycmF5Lmxlbmd0aCAtIDVdOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3VydGhMYXN0KGFycmF5KSB7IHJldHVybiBhcnJheVthcnJheS5sZW5ndGggLSA0XTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gdGhpcmRMYXN0KGFycmF5KSB7IHJldHVybiBhcnJheVthcnJheS5sZW5ndGggLSAzXTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gc2Vjb25kTGFzdChhcnJheSkgeyByZXR1cm4gYXJyYXlbYXJyYXkubGVuZ3RoIC0gMl07IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpcnN0TGFzdChhcnJheSkgeyByZXR1cm4gYXJyYXlbYXJyYXkubGVuZ3RoIC0gMV07IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhc3QoYXJyYXkpIHsgcmV0dXJuIGFycmF5W2FycmF5Lmxlbmd0aCAtIDFdOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBoZWFkKGFycmF5KSB7IHJldHVybiBhcnJheS5zbGljZSgwLCAxKTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gdGFpbChhcnJheSkgeyByZXR1cm4gYXJyYXkuc2xpY2UoMSk7IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGJhY2soYXJyYXkpIHsgcmV0dXJuIGFycmF5LnNsaWNlKGFycmF5Lmxlbmd0aCAtIDEpOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9udChhcnJheSkgeyByZXR1cm4gYXJyYXkuc2xpY2UoMCwgYXJyYXkubGVuZ3RoIC0gMSk7IH1cblxuZXhwb3J0IGZ1bmN0aW9uIHB1c2goYXJyYXkxLCBhcnJheTIpIHsgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoYXJyYXkxLCBhcnJheTIpOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiB1bnNoaWZ0KGFycmF5MSwgYXJyYXkyKSB7IEFycmF5LnByb3RvdHlwZS51bnNoaWZ0LmFwcGx5KGFycmF5MSwgYXJyYXkyKTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gY29uY2F0KGFycmF5MSwgZWxlbWVudE9yQXJyYXkyKSB7XG4gIGNvbnN0IGFycmF5MiA9IChlbGVtZW50T3JBcnJheTIgaW5zdGFuY2VvZiBBcnJheSkgP1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50T3JBcnJheTIgOlxuICAgICAgICAgICAgICAgICAgICAgW2VsZW1lbnRPckFycmF5Ml07XG4gIFxuICBwdXNoKGFycmF5MSwgYXJyYXkyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsZWFyKGFycmF5KSB7XG4gIGNvbnN0IHN0YXJ0ID0gMDtcbiAgXG4gIHJldHVybiBhcnJheS5zcGxpY2Uoc3RhcnQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29weShhcnJheTEsIGFycmF5Mikge1xuICBjb25zdCBzdGFydCA9IDAsXG4gICAgICAgIGRlbGV0ZUNvdW50ID0gYXJyYXkyLmxlbmd0aDsgIC8vL1xuICBcbiAgc3BsaWNlKGFycmF5MSwgc3RhcnQsIGRlbGV0ZUNvdW50LCBhcnJheTIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2UoYXJyYXkxLCBhcnJheTIpIHsgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoYXJyYXkxLCBhcnJheTIpOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBzcGxpY2UoYXJyYXkxLCBzdGFydCwgZGVsZXRlQ291bnQgPSBJbmZpbml0eSwgYXJyYXkyID0gW10pIHtcbiAgY29uc3QgYXJncyA9IFtzdGFydCwgZGVsZXRlQ291bnQsIC4uLmFycmF5Ml0sXG4gICAgICAgIGRlbGV0ZWRJdGVtc0FycmF5ID0gQXJyYXkucHJvdG90eXBlLnNwbGljZS5hcHBseShhcnJheTEsIGFyZ3MpO1xuXG4gIHJldHVybiBkZWxldGVkSXRlbXNBcnJheTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2UoYXJyYXksIGVsZW1lbnQsIHRlc3QpIHtcbiAgbGV0IHN0YXJ0O1xuICBcbiAgY29uc3QgZm91bmQgPSBhcnJheS5zb21lKChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHBhc3NlZCA9IHRlc3QoZWxlbWVudCwgaW5kZXgpO1xuXG4gICAgaWYgKHBhc3NlZCkge1xuICAgICAgc3RhcnQgPSBpbmRleDsgIC8vL1xuICAgICAgXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuICBcbiAgaWYgKGZvdW5kKSB7XG4gICAgY29uc3QgZGVsZXRlQ291bnQgPSAxO1xuXG4gICAgYXJyYXkuc3BsaWNlKHN0YXJ0LCBkZWxldGVDb3VudCwgZWxlbWVudCk7XG4gIH1cblxuICByZXR1cm4gZm91bmQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXIoYXJyYXksIHRlc3QpIHtcbiAgY29uc3QgZmlsdGVyZWRFbGVtZW50cyA9IFtdO1xuICBcbiAgYmFja3dhcmRzRm9yRWFjaChhcnJheSwgKGVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgcGFzc2VkID0gdGVzdChlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAoIXBhc3NlZCkge1xuICAgICAgY29uc3Qgc3RhcnQgPSBpbmRleCwgIC8vL1xuICAgICAgICAgICAgZGVsZXRlQ291bnQgPSAxLFxuICAgICAgICAgICAgZGVsZXRlZEVsZW1lbnRzID0gYXJyYXkuc3BsaWNlKHN0YXJ0LCBkZWxldGVDb3VudCksXG4gICAgICAgICAgICBmaXJzdERlbGV0ZWRFbGVtZW50ID0gZmlyc3QoZGVsZXRlZEVsZW1lbnRzKTtcbiAgICAgIFxuICAgICAgZmlsdGVyZWRFbGVtZW50cy51bnNoaWZ0KGZpcnN0RGVsZXRlZEVsZW1lbnQpOyAgLy8vXG4gICAgfVxuICB9KTtcbiAgXG4gIHJldHVybiBmaWx0ZXJlZEVsZW1lbnRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmluZChhcnJheSwgdGVzdCkge1xuICBjb25zdCBlbGVtZW50cyA9IFtdO1xuXG4gIGZvcndhcmRzRm9yRWFjaChhcnJheSwgKGVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgcGFzc2VkID0gdGVzdChlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAocGFzc2VkKSB7XG4gICAgICBlbGVtZW50cy5wdXNoKGVsZW1lbnQpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGVsZW1lbnRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJ1bmUoYXJyYXksIHRlc3QpIHtcbiAgbGV0IHBydW5lZEVsZW1lbnQgPSB1bmRlZmluZWQ7XG4gIFxuICBhcnJheS5zb21lKChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHBhc3NlZCA9IHRlc3QoZWxlbWVudCwgaW5kZXgpO1xuXG4gICAgaWYgKCFwYXNzZWQpIHtcbiAgICAgIGNvbnN0IHN0YXJ0ID0gaW5kZXgsICAvLy9cbiAgICAgICAgICAgIGRlbGV0ZUNvdW50ID0gMSxcbiAgICAgICAgICAgIGRlbGV0ZWRFbGVtZW50cyA9IGFycmF5LnNwbGljZShzdGFydCwgZGVsZXRlQ291bnQpLFxuICAgICAgICAgICAgZmlyc3REZWxldGVkRWxlbWVudCA9IGZpcnN0KGRlbGV0ZWRFbGVtZW50cyk7XG4gICAgICBcbiAgICAgIHBydW5lZEVsZW1lbnQgPSBmaXJzdERlbGV0ZWRFbGVtZW50OyAgLy8vXG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG4gIFxuICByZXR1cm4gcHJ1bmVkRWxlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhdGNoKGFycmF5LCBlbGVtZW50LCB0ZXN0KSB7XG4gIGNvbnN0IGZvdW5kID0gYXJyYXkuc29tZSgoZWxlbWVudCwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBwYXNzZWQgPSB0ZXN0KGVsZW1lbnQsIGluZGV4KTtcblxuICAgIGlmIChwYXNzZWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG5cblxuICBpZiAoZm91bmQpIHtcbiAgICBhcnJheS5wdXNoKGVsZW1lbnQpO1xuICB9XG5cbiAgcmV0dXJuIGZvdW5kO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXVnbWVudChhcnJheTEsIGFycmF5MiwgdGVzdCkge1xuICBhcnJheTIuZm9yRWFjaCgoZWxlbWVudCwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBwYXNzZWQgPSB0ZXN0KGVsZW1lbnQsIGluZGV4KTtcblxuICAgIGlmIChwYXNzZWQpIHtcbiAgICAgIGFycmF5MS5wdXNoKGVsZW1lbnQpO1xuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXBhcmF0ZShhcnJheSwgYXJyYXkxLCBhcnJheTIsIHRlc3QpIHtcbiAgYXJyYXkuZm9yRWFjaCgoZWxlbWVudCwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBwYXNzZWQgPSB0ZXN0KGVsZW1lbnQsIGluZGV4KTtcblxuICAgIHBhc3NlZCA/XG4gICAgICBhcnJheTEucHVzaChlbGVtZW50KSA6XG4gICAgICAgIGFycmF5Mi5wdXNoKGVsZW1lbnQpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcndhcmRzU29tZShhcnJheSwgY2FsbGJhY2spIHtcbiAgY29uc3QgYXJyYXlMZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGFycmF5TGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgICByZXN1bHQgPSBjYWxsYmFjayhlbGVtZW50LCBpbmRleCk7XG4gICAgXG4gICAgaWYgKHJlc3VsdCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmFja3dhcmRzU29tZShhcnJheSwgY2FsbGJhY2spIHtcbiAgY29uc3QgYXJyYXlMZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgZm9yIChsZXQgaW5kZXggPSBhcnJheUxlbmd0aCAtIDE7IGluZGV4ID49IDA7IGluZGV4LS0pIHtcbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdLFxuICAgICAgICAgIHJlc3VsdCA9IGNhbGxiYWNrKGVsZW1lbnQsIGluZGV4KTtcblxuICAgIGlmIChyZXN1bHQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcndhcmRzRXZlcnkoYXJyYXksIGNhbGxiYWNrKSB7XG4gIGNvbnN0IGFycmF5TGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBhcnJheUxlbmd0aDsgaW5kZXgrKykge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF0sXG4gICAgICAgICAgcmVzdWx0ID0gY2FsbGJhY2soZWxlbWVudCwgaW5kZXgpO1xuXG4gICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJhY2t3YXJkc0V2ZXJ5KGFycmF5LCBjYWxsYmFjaykge1xuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IGFycmF5TGVuZ3RoIC0gMTsgaW5kZXggPj0gMDsgaW5kZXgtLSkge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF0sXG4gICAgICAgICAgcmVzdWx0ID0gY2FsbGJhY2soZWxlbWVudCwgaW5kZXgpO1xuXG4gICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcndhcmRzUmVkdWNlKGFycmF5LCBjYWxsYmFjaywgaW5pdGlhbFZhbHVlKSB7XG4gIGxldCB2YWx1ZSA9IGluaXRpYWxWYWx1ZTtcblxuICBmb3J3YXJkc0ZvckVhY2goYXJyYXksIChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgIHZhbHVlID0gY2FsbGJhY2sodmFsdWUsIGVsZW1lbnQsIGluZGV4KTtcbiAgfSk7XG5cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmFja3dhcmRzUmVkdWNlKGFycmF5LCBjYWxsYmFjaywgaW5pdGlhbFZhbHVlKSB7XG4gIGxldCB2YWx1ZSA9IGluaXRpYWxWYWx1ZTtcblxuICBiYWNrd2FyZHNGb3JFYWNoKGFycmF5LCAoZWxlbWVudCwgaW5kZXgpID0+IHtcbiAgICB2YWx1ZSA9IGNhbGxiYWNrKHZhbHVlLCBlbGVtZW50LCBpbmRleCk7XG4gIH0pO1xuXG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcndhcmRzRm9yRWFjaChhcnJheSwgY2FsbGJhY2spIHtcbiAgY29uc3QgYXJyYXlMZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGFycmF5TGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcblxuICAgIGNhbGxiYWNrKGVsZW1lbnQsIGluZGV4KTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYmFja3dhcmRzRm9yRWFjaChhcnJheSwgY2FsbGJhY2spIHtcbiAgY29uc3QgYXJyYXlMZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgZm9yIChsZXQgaW5kZXggPSBhcnJheUxlbmd0aCAtIDE7IGluZGV4ID49IDA7IGluZGV4LS0pIHtcbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgY2FsbGJhY2soZWxlbWVudCwgaW5kZXgpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZmlyc3QsXG4gIHNlY29uZCxcbiAgdGhpcmQsXG4gIGZvdXJ0aCxcbiAgZmlmdGgsXG4gIGZpZnRoTGFzdCxcbiAgZm91cnRoTGFzdCxcbiAgdGhpcmRMYXN0LFxuICBzZWNvbmRMYXN0LFxuICBmaXJzdExhc3QsXG4gIGxhc3QsXG4gIGhlYWQsXG4gIHRhaWwsXG4gIGJhY2ssXG4gIGZyb250LFxuICBwdXNoLFxuICB1bnNoaWZ0LFxuICBjb25jYXQsXG4gIGNsZWFyLFxuICBjb3B5LFxuICBtZXJnZSxcbiAgc3BsaWNlLFxuICByZXBsYWNlLFxuICBmaWx0ZXIsXG4gIGZpbmQsXG4gIHBydW5lLFxuICBwYXRjaCxcbiAgYXVnbWVudCxcbiAgc2VwYXJhdGUsXG4gIGZvcndhcmRzU29tZSxcbiAgYmFja3dhcmRzU29tZSxcbiAgZm9yd2FyZHNFdmVyeSxcbiAgYmFja3dhcmRzRXZlcnksXG4gIGZvcndhcmRzUmVkdWNlLFxuICBiYWNrd2FyZHNSZWR1Y2UsXG4gIGZvcndhcmRzRm9yRWFjaCxcbiAgYmFja3dhcmRzRm9yRWFjaFxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IERBVEEgPSBcImRhdGFcIjtcbmV4cG9ydCBjb25zdCBFUlJPUiA9IFwiZXJyb3JcIjtcbmV4cG9ydCBjb25zdCBTVFJJTkcgPSBcInN0cmluZ1wiO1xuZXhwb3J0IGNvbnN0IE5VTUJFUiA9IFwibnVtYmVyXCI7XG5leHBvcnQgY29uc3QgQk9PTEVBTiA9IFwiYm9vbGVhblwiO1xuZXhwb3J0IGNvbnN0IERFRkFVTFQgPSBcImRlZmF1bHRcIjtcbmV4cG9ydCBjb25zdCBFTlZJUk9OTUVOVCA9IFwiRU5WSVJPTk1FTlRcIjtcbmV4cG9ydCBjb25zdCBFTVBUWV9TVFJJTkcgPSBcIlwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzZWNvbmQgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBDT0xPTl9DSEFSQUNURVIsIEFNUEVSU0FORF9DSEFSQUNURVIgfSBmcm9tIFwiLi4vY2hhcmFjdGVyc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gb3ZlcndyaXRlKGhlYWRlcnMsIG5hbWUsIHZhbHVlKSB7XG4gIGNvbnN0IGxvd2VyQ2FzZU5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCksXG4gICAgICAgIGV4aXN0aW5nTmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhoZWFkZXJzKSwgIC8vL1xuICAgICAgICBleGlzdGluZ05hbWUgPSBleGlzdGluZ05hbWVzLmZpbmQoKGV4aXN0aW5nTmFtZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGV4aXN0aW5nTG93ZXJDYXNlTmFtZSA9IGV4aXN0aW5nTmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICAgICAgaWYgKGV4aXN0aW5nTG93ZXJDYXNlTmFtZSA9PT0gbG93ZXJDYXNlTmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KSB8fCBudWxsO1xuXG4gIGlmIChleGlzdGluZ05hbWUgIT09IG51bGwpIHtcbiAgICBoZWFkZXJzW2V4aXN0aW5nTmFtZV0gPSB2YWx1ZTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdW5kZXJ3cml0ZShoZWFkZXJzLCBuYW1lLCB2YWx1ZSkge1xuICBjb25zdCBsb3dlckNhc2VOYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpLFxuICAgICAgICBleGlzdGluZ05hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoaGVhZGVycyksICAvLy9cbiAgICAgICAgZXhpc3RpbmdOYW1lID0gZXhpc3RpbmdOYW1lcy5maW5kKChleGlzdGluZ05hbWUpID0+IHtcbiAgICAgICAgICBjb25zdCBleGlzdGluZ0xvd2VyQ2FzZU5hbWUgPSBleGlzdGluZ05hbWUudG9Mb3dlckNhc2UoKTtcblxuICAgICAgICAgIGlmIChleGlzdGluZ0xvd2VyQ2FzZU5hbWUgPT09IGxvd2VyQ2FzZU5hbWUpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSkgfHwgbnVsbDtcblxuICBpZiAoZXhpc3RpbmdOYW1lID09PSBudWxsKSB7XG4gICAgaGVhZGVyc1tuYW1lXSA9IHZhbHVlO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwb3J0RnJvbUhvc3QoaG9zdCkge1xuICBsZXQgcG9ydDtcblxuICBjb25zdCBtYXRjaGVzID0gaG9zdC5tYXRjaCgvXmh0dHBzPzpcXC9cXC8oW15cXC9dKykvKSxcbiAgICAgICAgc2Vjb25kTWF0Y2ggPSBzZWNvbmQobWF0Y2hlcyksXG4gICAgICAgIGluZGV4ID0gc2Vjb25kTWF0Y2guaW5kZXhPZihDT0xPTl9DSEFSQUNURVIpO1xuXG4gIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICBjb25zdCBzZWN1cmUgPSBzZWN1cmVGcm9tSG9zdChob3N0KTtcblxuICAgIHBvcnQgPSBzZWN1cmUgPyA0NDMgOiA4MDsgLy8vXG4gIH0gZWxzZSB7XG4gICAgY29uc3Qgc3RhcnQgPSBpbmRleCArIDEsXG4gICAgICAgICAgcG9ydFN0cmluZyA9IHNlY29uZE1hdGNoLnN1YnN0cmluZyhzdGFydCk7XG5cbiAgICBwb3J0ID0gTnVtYmVyKHBvcnRTdHJpbmcpO1xuICB9XG5cbiAgcmV0dXJuIHBvcnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZWN1cmVGcm9tSG9zdChob3N0KSB7XG4gIGNvbnN0IHNlY3VyZSA9IC9eaHR0cHM6XFwvXFwvLy50ZXN0KGhvc3QpO1xuXG4gIHJldHVybiBzZWN1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBob3N0bmFtZUZyb21Ib3N0KGhvc3QpIHtcbiAgY29uc3QgbWF0Y2hlcyA9IGhvc3QubWF0Y2goL15odHRwcz86XFwvXFwvKFteOlxcL10rKS8pLFxuICAgICAgICBzZWNvbmRNYXRjaCA9IHNlY29uZChtYXRjaGVzKSxcbiAgICAgICAgaG9zdG5hbWUgPSBzZWNvbmRNYXRjaDsgLy8vXG5cbiAgcmV0dXJuIGhvc3RuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcXVlcnlTdHJpbmdGcm9tUXVlcnkocXVlcnkpIHtcbiAgY29uc3QgbmFtZXMgPSBPYmplY3Qua2V5cyhxdWVyeSksXG4gICAgICAgIG5hbWVzTGVuZ3RoID0gbmFtZXMubGVuZ3RoLFxuICAgICAgICBsYXN0SW5kZXggPSBuYW1lc0xlbmd0aCAtIDEsXG4gICAgICAgIHF1ZXJ5U3RyaW5nID0gbmFtZXMucmVkdWNlKChxdWVyeVN0cmluZywgbmFtZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHF1ZXJ5W25hbWVdLFxuICAgICAgICAgICAgICAgIGVuY29kZWROYW1lID0gZW5jb2RlVVJJQ29tcG9uZW50KG5hbWUpLFxuICAgICAgICAgICAgICAgIGVuY29kZWRWYWx1ZSA9IGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSksXG4gICAgICAgICAgICAgICAgYW1wZXJzYW5kT3JOb3RoaW5nID0gKGluZGV4ICE9PSBsYXN0SW5kZXgpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFNUEVSU0FORF9DSEFSQUNURVIgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFTVBUWV9TVFJJTkc7XG4gIFxuICAgICAgICAgIHF1ZXJ5U3RyaW5nICs9IGAke2VuY29kZWROYW1lfT0ke2VuY29kZWRWYWx1ZX0ke2FtcGVyc2FuZE9yTm90aGluZ31gO1xuICBcbiAgICAgICAgICByZXR1cm4gcXVlcnlTdHJpbmc7XG4gICAgICAgIH0sIEVNUFRZX1NUUklORyk7XG5cbiAgcmV0dXJuIHF1ZXJ5U3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXJsRnJvbUhvc3RVUklBbmRRdWVyeShob3N0LCB1cmksIHF1ZXJ5KSB7XG4gIGNvbnN0IHF1ZXJ5U3RyaW5nID0gcXVlcnlTdHJpbmdGcm9tUXVlcnkocXVlcnkpLFxuICAgICAgICB1cmwgPSAocXVlcnlTdHJpbmcgPT09IEVNUFRZX1NUUklORykgP1xuICAgICAgICAgICAgICAgIGAke2hvc3R9JHt1cml9YCA6XG4gICAgICAgICAgICAgICAgICBgJHtob3N0fSR7dXJpfT8ke3F1ZXJ5U3RyaW5nfWA7XG5cbiAgcmV0dXJuIHVybDtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBvdmVyd3JpdGUsXG4gIHVuZGVyd3JpdGUsXG4gIHBvcnRGcm9tSG9zdCxcbiAgc2VjdXJlRnJvbUhvc3QsXG4gIGhvc3RuYW1lRnJvbUhvc3QsXG4gIHF1ZXJ5U3RyaW5nRnJvbVF1ZXJ5LFxuICB1cmxGcm9tSG9zdFVSSUFuZFF1ZXJ5XG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBHRVRfTUVUSE9ELCBQT1NUX01FVEhPRCB9IGZyb20gXCIuLi9tZXRob2RzXCI7XG5pbXBvcnQgeyBBUFBMSUNBVElPTl9KU09OX0NPTlRFTlRfVFlQRSB9IGZyb20gXCIuLi9jb250ZW50VHlwZXNcIjtcbmltcG9ydCB7IEFDQ0VQVF9IRUFERVIsIENPTlRFTlRfVFlQRV9IRUFERVIgfSBmcm9tIFwiLi4vaGVhZGVyc1wiO1xuaW1wb3J0IHsgdW5kZXJ3cml0ZSwgdXJsRnJvbUhvc3RVUklBbmRRdWVyeSB9IGZyb20gXCIuLi91dGlsaXRpZXMvaHR0cFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0KGhvc3QsIHVyaSwgcXVlcnksIGhlYWRlcnMsIGNhbGxiYWNrKSB7XG4gIGlmIChjYWxsYmFjayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgY2FsbGJhY2sgPSBoZWFkZXJzOyAvLy9cbiAgICBoZWFkZXJzID0ge307XG4gIH1cblxuICBjb25zdCBtZXRob2QgPSBHRVRfTUVUSE9ELFxuICAgICAgICBhY2NlcHQgPSBBUFBMSUNBVElPTl9KU09OX0NPTlRFTlRfVFlQRSxcbiAgICAgICAgY29udGVudCA9IG51bGw7XG5cbiAgdW5kZXJ3cml0ZUFjY2VwdEhlYWRlcihoZWFkZXJzLCBhY2NlcHQpO1xuXG4gIHJlcXVlc3QoaG9zdCwgdXJpLCBxdWVyeSwgbWV0aG9kLCBoZWFkZXJzLCBjb250ZW50LCBjYWxsYmFjayk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwb3N0KGhvc3QsIHVyaSwgcXVlcnksIGhlYWRlcnMsIGNvbnRlbnQsIGNhbGxiYWNrKSB7XG4gIGlmIChjYWxsYmFjayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgY2FsbGJhY2sgPSBjb250ZW50O1xuICAgIGNvbnRlbnQgPSBoZWFkZXJzO1xuICAgIGhlYWRlcnMgPSB7fTtcbiAgfVxuXG4gIGNvbnN0IG1ldGhvZCA9IFBPU1RfTUVUSE9ELFxuICAgICAgICBhY2NlcHQgPSBBUFBMSUNBVElPTl9KU09OX0NPTlRFTlRfVFlQRSxcbiAgICAgICAgY29udGVudFR5cGUgPSBBUFBMSUNBVElPTl9KU09OX0NPTlRFTlRfVFlQRTtcblxuICB1bmRlcndyaXRlQWNjZXB0SGVhZGVyKGhlYWRlcnMsIGFjY2VwdCk7XG5cbiAgdW5kZXJ3cml0ZUNvbnRlbnRUeXBlSGVhZGVyKGhlYWRlcnMsIGNvbnRlbnRUeXBlKTtcblxuICByZXF1ZXN0KGhvc3QsIHVyaSwgcXVlcnksIG1ldGhvZCwgaGVhZGVycywgY29udGVudCwgY2FsbGJhY2spO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVxdWVzdChob3N0LCB1cmksIHF1ZXJ5LCBtZXRob2QsIGhlYWRlcnMsIGNvbnRlbnQsIGNhbGxiYWNrKSB7XG4gIGNvbnN0IHVybCA9IHVybEZyb21Ib3N0VVJJQW5kUXVlcnkoaG9zdCwgdXJpLCBxdWVyeSksXG4gICAgICAgIGFjY2VwdCA9IGhlYWRlcnNbQUNDRVBUX0hFQURFUl0gfHwgbnVsbCxcbiAgICAgICAgY29udGVudFR5cGUgPSBoZWFkZXJzW0NPTlRFTlRfVFlQRV9IRUFERVJdIHx8IG51bGwsXG4gICAgICAgIHhtbEh0dHBSZXF1ZXN0ID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cbiAgaWYgKGNvbnRlbnRUeXBlID09PSBBUFBMSUNBVElPTl9KU09OX0NPTlRFTlRfVFlQRSkge1xuICAgIGNvbnN0IGpzb24gPSBjb250ZW50LCAgLy8vXG4gICAgICAgICAganNvblN0cmluZyA9IEpTT04uc3RyaW5naWZ5KGpzb24pO1xuXG4gICAgY29udGVudCA9IGpzb25TdHJpbmc7ICAvLy9cbiAgfVxuXG4gIHhtbEh0dHBSZXF1ZXN0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9ICgpID0+IHtcbiAgICBjb25zdCB7IHJlYWR5U3RhdGUsIHN0YXR1cywgcmVzcG9uc2UgfSA9IHhtbEh0dHBSZXF1ZXN0LFxuICAgICAgICAgIHN0YXR1c0NvZGUgPSBzdGF0dXM7XG5cbiAgICBpZiAocmVhZHlTdGF0ZSA9PSA0KSB7XG4gICAgICBsZXQgY29udGVudCA9IHJlc3BvbnNlO1xuXG4gICAgICBpZiAoYWNjZXB0ID09PSBBUFBMSUNBVElPTl9KU09OX0NPTlRFTlRfVFlQRSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGpzb25TdHJpbmcgPSBjb250ZW50LCAgLy8vXG4gICAgICAgICAgICAgICAganNvbiA9IEpTT04ucGFyc2UoanNvblN0cmluZyk7XG5cbiAgICAgICAgICBjb250ZW50ID0ganNvbjsgIC8vL1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGNvbnRlbnQgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNhbGxiYWNrKGNvbnRlbnQsIHN0YXR1c0NvZGUpO1xuICAgIH1cbiAgfTtcblxuICB4bWxIdHRwUmVxdWVzdC5vcGVuKG1ldGhvZCwgdXJsKTtcblxuICBpZiAoYWNjZXB0ICE9PSBudWxsKSB7XG4gICAgeG1sSHR0cFJlcXVlc3Quc2V0UmVxdWVzdEhlYWRlcihBQ0NFUFRfSEVBREVSLCBhY2NlcHQpO1xuICB9XG5cbiAgaWYgKGNvbnRlbnRUeXBlICE9PSBudWxsKSB7XG4gICAgeG1sSHR0cFJlcXVlc3Quc2V0UmVxdWVzdEhlYWRlcihDT05URU5UX1RZUEVfSEVBREVSLCBjb250ZW50VHlwZSk7XG4gIH1cblxuICAoY29udGVudCAhPT0gbnVsbCkgP1xuICAgIHhtbEh0dHBSZXF1ZXN0LnNlbmQoY29udGVudCkgOlxuICAgICAgeG1sSHR0cFJlcXVlc3Quc2VuZCgpO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGdldCxcbiAgcG9zdCxcbiAgcmVxdWVzdFxufVxuXG5mdW5jdGlvbiB1bmRlcndyaXRlQWNjZXB0SGVhZGVyKGhlYWRlcnMsIGFjY2VwdCkge1xuICBjb25zdCBuYW1lID0gQUNDRVBUX0hFQURFUiwgIC8vL1xuICAgICAgICB2YWx1ZSA9IGFjY2VwdDsgLy8vXG5cbiAgdW5kZXJ3cml0ZShoZWFkZXJzLCBuYW1lLCB2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIHVuZGVyd3JpdGVDb250ZW50VHlwZUhlYWRlcihoZWFkZXJzLCBjb250ZW50VFlwZSkge1xuICBjb25zdCBuYW1lID0gQ09OVEVOVF9UWVBFX0hFQURFUiwgIC8vL1xuICAgICAgICB2YWx1ZSA9IGNvbnRlbnRUWXBlOyAvLy9cblxuICB1bmRlcndyaXRlKGhlYWRlcnMsIG5hbWUsIHZhbHVlKTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgZmlyc3QsIHNlY29uZCwgbGFzdCB9IGZyb20gXCIuLi91dGlsaXRpZXMvYXJyYXlcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzUGF0aE5hbWUocGF0aCkge1xuICBwYXRoID0gcGF0aC5yZXBsYWNlKC9eXFwvLywgRU1QVFlfU1RSSU5HKS5yZXBsYWNlKC9cXC8kLywgRU1QVFlfU1RSSU5HKTsgLy8vXG5cbiAgY29uc3QgcGF0aE5hbWUgPSAoL1xcLy8udGVzdChwYXRoKSA9PT0gZmFsc2UpO1xuXG4gIHJldHVybiBwYXRoTmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUGF0aFRvcG1vc3ROYW1lKHBhdGgpIHtcbiAgY29uc3QgcGF0aE5hbWUgPSBpc1BhdGhOYW1lKHBhdGgpLFxuICAgICAgICBwYXRoQWJzb2x1dGVQYXRoID0gaXNQYXRoQWJzb2x1dGVQYXRoKHBhdGgpLFxuICAgICAgICBwYXRoVG9wbW9zdE5hbWUgPSAocGF0aE5hbWUgJiYgcGF0aEFic29sdXRlUGF0aCk7XG5cbiAgcmV0dXJuIHBhdGhUb3Btb3N0TmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUGF0aFJlbGF0aXZlUGF0aChwYXRoKSB7XG4gIGNvbnN0IHBhdGhSZWxhdGl2ZVBhdGggPSAhL15cXC8vLnRlc3QocGF0aCk7XG5cbiAgcmV0dXJuIHBhdGhSZWxhdGl2ZVBhdGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1BhdGhBYnNvbHV0ZVBhdGgocGF0aCkge1xuICBjb25zdCBwYXRoQWJzb2x1dGVQYXRoID0gL15cXC8vLnRlc3QocGF0aCk7XG5cbiAgcmV0dXJuIHBhdGhBYnNvbHV0ZVBhdGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1RvcG1vc3ROYW1lSW5BYnNvbHV0ZVBhdGgodG9wbW9zdE5hbWUsIGFic29sdXRlUGF0aCkge1xuICBjb25zdCByZWdFeHAgPSBuZXcgUmVnRXhwKGBeJHt0b3Btb3N0TmFtZX0oPzpcXFxcLy4rKT8kYCksXG4gICAgICAgIHRvcG1vc3ROYW1lSW5BYnNvbHV0ZVBhdGggPSByZWdFeHAudGVzdChhYnNvbHV0ZVBhdGgpO1xuXG4gIHJldHVybiB0b3Btb3N0TmFtZUluQWJzb2x1dGVQYXRoXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5lUGF0aHMocGF0aCwgcmVsYXRpdmVQYXRoKSB7XG4gIGxldCBjb21iaW5lZFBhdGggPSBudWxsO1xuXG4gIGNvbnN0IHBhdGhOYW1lcyA9IHBhdGguc3BsaXQoL1xcLy8pLFxuICAgICAgICByZWxhdGl2ZVBhdGhOYW1lcyA9IHJlbGF0aXZlUGF0aC5zcGxpdCgvXFwvLyk7XG5cbiAgbGV0IGxhc3RQYXRoTmFtZSxcbiAgICAgIGZpcnN0UmVsYXRpdmVQYXRoTmFtZSA9IGZpcnN0KHJlbGF0aXZlUGF0aE5hbWVzKTtcblxuICBpZiAoZmlyc3RSZWxhdGl2ZVBhdGhOYW1lID09PSBcIi5cIikge1xuICAgIHJlbGF0aXZlUGF0aE5hbWVzLnNoaWZ0KCk7XG4gIH1cblxuICBmaXJzdFJlbGF0aXZlUGF0aE5hbWUgPSBmaXJzdChyZWxhdGl2ZVBhdGhOYW1lcyk7XG4gIGxhc3RQYXRoTmFtZSA9IGxhc3QocGF0aE5hbWVzKTtcblxuICB3aGlsZSAoKGZpcnN0UmVsYXRpdmVQYXRoTmFtZSA9PT0gXCIuLlwiKSAmJiAobGFzdFBhdGhOYW1lICE9PSB1bmRlZmluZWQpKSB7XG4gICAgcmVsYXRpdmVQYXRoTmFtZXMuc2hpZnQoKTtcbiAgICBwYXRoTmFtZXMucG9wKCk7XG5cbiAgICBmaXJzdFJlbGF0aXZlUGF0aE5hbWUgPSBmaXJzdChyZWxhdGl2ZVBhdGhOYW1lcyk7XG4gICAgbGFzdFBhdGhOYW1lID0gbGFzdChwYXRoTmFtZXMpO1xuICB9XG5cbiAgaWYgKGxhc3RQYXRoTmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgY29tYmluZWRQYXRoTmFtZXMgPSBbXS5jb25jYXQocGF0aE5hbWVzKS5jb25jYXQocmVsYXRpdmVQYXRoTmFtZXMpO1xuXG4gICAgY29tYmluZWRQYXRoID0gY29tYmluZWRQYXRoTmFtZXMuam9pbihcIi9cIik7XG4gIH1cblxuICByZXR1cm4gY29tYmluZWRQYXRoO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uY2F0ZW5hdGVQYXRocyhwYXRoLCByZWxhdGl2ZVBhdGgpIHtcbiAgcGF0aCA9IHBhdGgucmVwbGFjZSgvXFwvJC8sIEVNUFRZX1NUUklORyk7ICAvLy9cblxuICBjb25zdCBjb25jYXRlbmF0ZWRQYXRoID0gYCR7cGF0aH0vJHtyZWxhdGl2ZVBhdGh9YDtcblxuICByZXR1cm4gY29uY2F0ZW5hdGVkUGF0aDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJvdHRvbW1vc3ROYW1lRnJvbVBhdGgocGF0aCkge1xuICBsZXQgYm90dG9tbW9zdE5hbWUgPSBudWxsO1xuXG4gIGNvbnN0IG1hdGNoZXMgPSBwYXRoLm1hdGNoKC9eLipcXC8oW15cXC9dK1xcLz8pJC8pO1xuXG4gIGlmIChtYXRjaGVzICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc2Vjb25kTWF0Y2ggPSBzZWNvbmQobWF0Y2hlcyk7XG5cbiAgICBib3R0b21tb3N0TmFtZSA9IHNlY29uZE1hdGNoOyAgLy8vXG4gIH1cblxuICByZXR1cm4gYm90dG9tbW9zdE5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b3Btb3N0RGlyZWN0b3J5UGF0aEZyb21QYXRoKHBhdGgpIHtcbiAgY29uc3QgbWF0Y2hlcyA9IHBhdGgubWF0Y2goL14oLispXFwvW15cXC9dK1xcLz8kLyksXG4gICAgICAgIHNlY29uZE1hdGNoID0gc2Vjb25kKG1hdGNoZXMpLFxuICAgICAgICB0b3Btb3N0RGlyZWN0b3J5UGF0aCA9IHNlY29uZE1hdGNoOyAvLy9cblxuICByZXR1cm4gdG9wbW9zdERpcmVjdG9yeVBhdGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b3Btb3N0RGlyZWN0b3J5TmFtZUZyb21QYXRoKHBhdGgpIHtcbiAgbGV0IHRvcG1vc3REaXJlY3RvcnlOYW1lID0gbnVsbDtcblxuICBjb25zdCBtYXRjaGVzID0gcGF0aC5tYXRjaCgvXihbXlxcL10rKVxcLy4rJC8pO1xuXG4gIGlmIChtYXRjaGVzICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc2Vjb25kTWF0Y2ggPSBzZWNvbmQobWF0Y2hlcyk7XG5cbiAgICB0b3Btb3N0RGlyZWN0b3J5TmFtZSA9IHNlY29uZE1hdGNoOyAgLy8vXG4gIH1cblxuICByZXR1cm4gdG9wbW9zdERpcmVjdG9yeU5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXRoV2l0aG91dEJvdHRvbW1vc3ROYW1lRnJvbVBhdGgocGF0aCkge1xuICBsZXQgcGF0aFdpdGhvdXRCb3R0b21tb3N0TmFtZSA9IG51bGw7XG5cbiAgY29uc3QgbWF0Y2hlcyA9IHBhdGgubWF0Y2goL14oLiopXFwvW15cXC9dK1xcLz8kLyk7XG5cbiAgaWYgKG1hdGNoZXMgIT09IG51bGwpIHtcbiAgICBjb25zdCBzZWNvbmRNYXRjaCA9IHNlY29uZChtYXRjaGVzKTtcblxuICAgIHBhdGhXaXRob3V0Qm90dG9tbW9zdE5hbWUgPSBzZWNvbmRNYXRjaDsgLy8vXG4gIH1cblxuICByZXR1cm4gcGF0aFdpdGhvdXRCb3R0b21tb3N0TmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhdGhXaXRob3V0VG9wbW9zdERpcmVjdG9yeU5hbWVGcm9tUGF0aChwYXRoKSB7XG4gIGxldCBwYXRoV2l0aG91dFRvcG1vc3REaXJlY3RvcnlOYW1lID0gbnVsbDtcblxuICBjb25zdCBtYXRjaGVzID0gcGF0aC5tYXRjaCgvXlteXFwvXStcXC8oLispJC8pO1xuXG4gIGlmIChtYXRjaGVzICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc2Vjb25kTWF0Y2ggPSBzZWNvbmQobWF0Y2hlcyk7XG5cbiAgICBwYXRoV2l0aG91dFRvcG1vc3REaXJlY3RvcnlOYW1lID0gc2Vjb25kTWF0Y2g7XG4gIH1cblxuICByZXR1cm4gcGF0aFdpdGhvdXRUb3Btb3N0RGlyZWN0b3J5TmFtZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBpc1BhdGhOYW1lLFxuICBpc1BhdGhUb3Btb3N0TmFtZSxcbiAgaXNQYXRoUmVsYXRpdmVQYXRoLFxuICBpc1BhdGhBYnNvbHV0ZVBhdGgsXG4gIGlzVG9wbW9zdE5hbWVJbkFic29sdXRlUGF0aCxcbiAgY29tYmluZVBhdGhzLFxuICBjb25jYXRlbmF0ZVBhdGhzLFxuICBib3R0b21tb3N0TmFtZUZyb21QYXRoLFxuICB0b3Btb3N0RGlyZWN0b3J5UGF0aEZyb21QYXRoLFxuICB0b3Btb3N0RGlyZWN0b3J5TmFtZUZyb21QYXRoLFxuICBwYXRoV2l0aG91dEJvdHRvbW1vc3ROYW1lRnJvbVBhdGgsXG4gIHBhdGhXaXRob3V0VG9wbW9zdERpcmVjdG9yeU5hbWVGcm9tUGF0aFxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiB3aGlsc3Qob3BlcmF0aW9uLCBkb25lLCBjb250ZXh0KSB7XHJcbiAgbGV0IGNvdW50ID0gLTE7XHJcblxyXG4gIGZ1bmN0aW9uIG5leHQoKSB7XHJcbiAgICBjb3VudCsrO1xyXG5cclxuICAgIGNvbnN0IGluZGV4ID0gY291bnQsICAvLy9cclxuICAgICAgICAgIHRlcm1pbmF0ZSA9IG9wZXJhdGlvbihuZXh0LCBkb25lLCBjb250ZXh0LCBpbmRleCk7XHJcblxyXG4gICAgaWYgKHRlcm1pbmF0ZSkge1xyXG4gICAgICBkb25lKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZXh0KCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBmb3JFYWNoKGFycmF5LCBvcGVyYXRpb24sIGRvbmUsIGNvbnRleHQpIHtcclxuICBjb25zdCBsZW5ndGggPSBhcnJheS5sZW5ndGg7ICAvLy9cclxuXHJcbiAgbGV0IGNvdW50ID0gLTE7XHJcblxyXG4gIGZ1bmN0aW9uIG5leHQoKSB7XHJcbiAgICBjb3VudCsrO1xyXG5cclxuICAgIGNvbnN0IHRlcm1pbmF0ZSA9IChjb3VudCA9PT0gbGVuZ3RoKTtcclxuXHJcbiAgICBpZiAodGVybWluYXRlKSB7XHJcbiAgICAgIGRvbmUoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGluZGV4ID0gY291bnQsICAvLy9cclxuICAgICAgICAgICAgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcclxuXHJcbiAgICAgIG9wZXJhdGlvbihlbGVtZW50LCBuZXh0LCBkb25lLCBjb250ZXh0LCBpbmRleCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZXh0KCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzZXF1ZW5jZShvcGVyYXRpb25zLCBkb25lLCBjb250ZXh0KSB7XHJcbiAgY29uc3QgbGVuZ3RoID0gb3BlcmF0aW9ucy5sZW5ndGg7ICAvLy9cclxuXHJcbiAgbGV0IGNvdW50ID0gLTE7XHJcblxyXG4gIGZ1bmN0aW9uIG5leHQoKSB7XHJcbiAgICBjb3VudCsrO1xyXG5cclxuICAgIGNvbnN0IHRlcm1pbmF0ZSA9IChjb3VudCA9PT0gbGVuZ3RoKTtcclxuXHJcbiAgICBpZiAodGVybWluYXRlKSB7XHJcbiAgICAgIGRvbmUoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGluZGV4ID0gY291bnQsICAvLy9cclxuICAgICAgICAgICAgb3BlcmF0aW9uID0gb3BlcmF0aW9uc1tpbmRleF07XHJcblxyXG4gICAgICBvcGVyYXRpb24obmV4dCwgZG9uZSwgY29udGV4dCwgaW5kZXgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmV4dCgpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZXZlbnR1YWxseShvcGVyYXRpb25zLCBkb25lLCBjb250ZXh0KSB7XHJcbiAgY29uc3QgbGVuZ3RoID0gb3BlcmF0aW9ucy5sZW5ndGg7ICAvLy9cclxuXHJcbiAgbGV0IGNvdW50ID0gMDtcclxuXHJcbiAgZnVuY3Rpb24gbmV4dCgpIHtcclxuICAgIGNvdW50Kys7XHJcblxyXG4gICAgY29uc3QgdGVybWluYXRlID0gKGNvdW50ID09PSBsZW5ndGgpO1xyXG5cclxuICAgIGlmICh0ZXJtaW5hdGUpIHtcclxuICAgICAgZG9uZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb3BlcmF0aW9ucy5mb3JFYWNoKChvcGVyYXRpb24sIGluZGV4KSA9PiB7XHJcbiAgICBvcGVyYXRpb24obmV4dCwgZG9uZSwgY29udGV4dCwgaW5kZXgpO1xyXG4gIH0pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmVwZWF0ZWRseShvcGVyYXRpb24sIGxlbmd0aCwgZG9uZSwgY29udGV4dCkge1xyXG4gIGxldCBjb3VudCA9IDA7XHJcblxyXG4gIGZ1bmN0aW9uIG5leHQoKSB7XHJcbiAgICBjb3VudCsrO1xyXG5cclxuICAgIGNvbnN0IHRlcm1pbmF0ZSA9IChjb3VudCA9PT0gbGVuZ3RoKTtcclxuXHJcbiAgICBpZiAodGVybWluYXRlKSB7XHJcbiAgICAgIGRvbmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcclxuICAgIG9wZXJhdGlvbihuZXh0LCBkb25lLCBjb250ZXh0LCBpbmRleCk7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZHNGb3JFYWNoKGFycmF5LCBvcGVyYXRpb24sIGRvbmUsIGNvbnRleHQpIHtcclxuICBjb25zdCBsZW5ndGggPSBhcnJheS5sZW5ndGg7ICAvLy9cclxuXHJcbiAgbGV0IGNvdW50ID0gLTE7XHJcblxyXG4gIGZ1bmN0aW9uIG5leHQoKSB7XHJcbiAgICBjb3VudCsrO1xyXG5cclxuICAgIGNvbnN0IHRlcm1pbmF0ZSA9IChjb3VudCA9PT0gbGVuZ3RoKTtcclxuXHJcbiAgICBpZiAodGVybWluYXRlKSB7XHJcbiAgICAgIGRvbmUoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGluZGV4ID0gY291bnQsICAvLy9cclxuICAgICAgICAgICAgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcclxuXHJcbiAgICAgIG9wZXJhdGlvbihlbGVtZW50LCBuZXh0LCBkb25lLCBjb250ZXh0LCBpbmRleCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZXh0KCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBiYWNrd2FyZHNGb3JFYWNoKGFycmF5LCBvcGVyYXRpb24sIGRvbmUsIGNvbnRleHQpIHtcclxuICBjb25zdCBsZW5ndGggPSBhcnJheS5sZW5ndGg7ICAvLy9cclxuXHJcbiAgbGV0IGNvdW50ID0gbGVuZ3RoO1xyXG5cclxuICBmdW5jdGlvbiBuZXh0KCkge1xyXG4gICAgY291bnQtLTtcclxuXHJcbiAgICBjb25zdCB0ZXJtaW5hdGUgPSAoY291bnQgPT09IC0xKTtcclxuXHJcbiAgICBpZiAodGVybWluYXRlKSB7XHJcbiAgICAgIGRvbmUoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGluZGV4ID0gY291bnQsICAvLy9cclxuICAgICAgICAgICAgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcclxuXHJcbiAgICAgIG9wZXJhdGlvbihlbGVtZW50LCBuZXh0LCBkb25lLCBjb250ZXh0LCBpbmRleCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZXh0KCk7XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICB3aGlsc3QsXHJcbiAgZm9yRWFjaCxcclxuICBzZXF1ZW5jZSxcclxuICBldmVudHVhbGx5LFxyXG4gIHJlcGVhdGVkbHksXHJcbiAgZm9yd2FyZHNGb3JFYWNoLFxyXG4gIGJhY2t3YXJkc0ZvckVhY2hcclxufTtcclxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIGxldmVscyB9IGZyb20gXCIuL2xldmVsc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBtZXRob2RzIH0gZnJvbSBcIi4vbWV0aG9kc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBoZWFkZXJzIH0gZnJvbSBcIi4vaGVhZGVyc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBrZXlDb2RlcyB9IGZyb20gXCIuL2tleUNvZGVzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGVuY29kaW5ncyB9IGZyb20gXCIuL2VuY29kaW5nc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBjaGFyYWN0ZXJzIH0gZnJvbSBcIi4vY2hhcmFjdGVyc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBzdGF0dXNDb2RlcyB9IGZyb20gXCIuL3N0YXR1c0NvZGVzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGNvbnRlbnRUeXBlcyB9IGZyb20gXCIuL2NvbnRlbnRUeXBlc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBzdGF0dXNNZXNzYWdlcyB9IGZyb20gXCIuL3N0YXR1c01lc3NhZ2VzXCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgYWpheFV0aWxpdGllcyB9IGZyb20gXCIuL3V0aWxpdGllcy9hamF4XCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgcGF0aFV0aWxpdGllcyB9IGZyb20gXCIuL3V0aWxpdGllcy9wYXRoXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGh0dHBVdGlsaXRpZXMgfSBmcm9tIFwiLi91dGlsaXRpZXMvaHR0cFwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCIuL3V0aWxpdGllcy9hcnJheVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBhc3luY2hyb25vdXNVdGlsaXRpZXMgfSBmcm9tIFwiLi91dGlsaXRpZXMvYXN5bmNocm9ub3VzXCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5pbXBvcnQgeyBjaGFyYWN0ZXJzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xyXG5cclxuY29uc3QgeyBMRVNTX1RIQU5fQ0hBUkFDVEVSLCBBTVBFUlNBTkRfQ0hBUkFDVEVSLCBHUkVBVEVSX1RIQU5fQ0hBUkFDVEVSIH0gPSBjaGFyYWN0ZXJzO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNhbml0aXNlQ29udGVudChjb250ZW50KSB7XHJcbiAgY29uc3Qgc2FuaXRpc2VkQ29udGVudCA9IGNvbnRlbnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC8mLywgQU1QRVJTQU5EX0NIQVJBQ1RFUilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC88LywgTEVTU19USEFOX0NIQVJBQ1RFUilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC8+LywgR1JFQVRFUl9USEFOX0NIQVJBQ1RFUik7XHJcblxyXG4gIHJldHVybiBzYW5pdGlzZWRDb250ZW50O1xyXG59XHJcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IHR5cGVUeXBlID0gXCJ0eXBlXCI7XG5leHBvcnQgY29uc3QgbmFtZVR5cGUgPSBcIm5hbWVcIjtcbmV4cG9ydCBjb25zdCBjb21tZW50VHlwZSA9IFwiY29tbWVudFwiO1xuZXhwb3J0IGNvbnN0IGVuZE9mTGluZVR5cGUgPSBcImVuZC1vZi1saW5lXCI7XG5leHBvcnQgY29uc3Qgd2hpdGVzcGFjZVR5cGUgPSBcIndoaXRlc3BhY2VcIjtcbmV4cG9ydCBjb25zdCBzdHJpbmdMaXRlcmFsVHlwZSA9IFwic3RyaW5nLWxpdGVyYWxcIjtcbmV4cG9ydCBjb25zdCBlbmRPZkxpbmVDb21tZW50VHlwZSA9IGAke2VuZE9mTGluZVR5cGV9ICR7Y29tbWVudFR5cGV9YDtcbmV4cG9ydCBjb25zdCBzaW5nbGVMaW5lQ29tbWVudFR5cGUgPSBgc2luZ2xlLWxpbmUgJHtjb21tZW50VHlwZX1gO1xuZXhwb3J0IGNvbnN0IHJlZ3VsYXJFeHByZXNzaW9uVHlwZSA9IFwicmVndWxhci1leHByZXNzaW9uXCI7XG5leHBvcnQgY29uc3QgZW5kT2ZNdWx0aUxpbmVDb21tZW50VHlwZSA9IGBlbmQtb2YtbXVsdGktbGluZSAke2NvbW1lbnRUeXBlfWA7XG5leHBvcnQgY29uc3Qgc3RhcnRPZk11bHRpTGluZUNvbW1lbnRUeXBlID0gYHN0YXJ0LW9mLW11bHRpLWxpbmUgJHtjb21tZW50VHlwZX1gO1xuZXhwb3J0IGNvbnN0IG1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFR5cGUgPSBgbWlkZGxlLW9mLW11bHRpLWxpbmUgJHtjb21tZW50VHlwZX1gO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIHR5cGVUeXBlLFxuICBuYW1lVHlwZSxcbiAgY29tbWVudFR5cGUsXG4gIGVuZE9mTGluZVR5cGUsXG4gIHdoaXRlc3BhY2VUeXBlLFxuICBzdHJpbmdMaXRlcmFsVHlwZSxcbiAgZW5kT2ZMaW5lQ29tbWVudFR5cGUsXG4gIHNpbmdsZUxpbmVDb21tZW50VHlwZSxcbiAgcmVndWxhckV4cHJlc3Npb25UeXBlLFxuICBlbmRPZk11bHRpTGluZUNvbW1lbnRUeXBlLFxuICBzdGFydE9mTXVsdGlMaW5lQ29tbWVudFR5cGUsXG4gIG1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFR5cGVcbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5pbXBvcnQgeyBzYW5pdGlzZUNvbnRlbnQgfSBmcm9tIFwiLi91dGlsaXRpZXMvY29udGVudFwiO1xuaW1wb3J0IHsgY29tbWVudFR5cGUsIGVuZE9mTGluZVR5cGUsIHdoaXRlc3BhY2VUeXBlIH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuY29uc3QgeyBmaXJzdCB9ID0gYXJyYXlVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRva2VuIHtcbiAgY29uc3RydWN0b3IodHlwZSwgY29udGVudCwgaW5uZXJIVE1MLCBzaWduaWZpY2FudCkge1xuICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgdGhpcy5jb250ZW50ID0gY29udGVudDtcbiAgICB0aGlzLmlubmVySFRNTCA9IGlubmVySFRNTDtcbiAgICB0aGlzLnNpZ25pZmljYW50ID0gc2lnbmlmaWNhbnQ7XG4gIH1cblxuICBnZXRUeXBlKCkge1xuICAgIHJldHVybiB0aGlzLnR5cGU7XG4gIH1cblxuICBnZXRDb250ZW50KCkge1xuICAgIHJldHVybiB0aGlzLmNvbnRlbnQ7XG4gIH1cbiAgXG4gIGdldElubmVySFRNTCgpIHtcbiAgICByZXR1cm4gdGhpcy5pbm5lckhUTUw7XG4gIH1cblxuICBnZXRDb250ZW50TGVuZ3RoKCkge1xuICAgIGNvbnN0IGNvbnRlbnRMZW5ndGggPSB0aGlzLmNvbnRlbnQubGVuZ3RoO1xuXG4gICAgcmV0dXJuIGNvbnRlbnRMZW5ndGg7XG4gIH1cblxuICBpc1NpZ25pZmljYW50KCkge1xuICAgIHJldHVybiB0aGlzLnNpZ25pZmljYW50O1xuICB9XG4gIFxuICBpc0NvbW1lbnRUb2tlbigpIHtcbiAgICBjb25zdCB0eXBlSW5jbHVkZXNDb21tZW50VHlwZSA9IHRoaXMudHlwZS5pbmNsdWRlcyhjb21tZW50VHlwZSksXG4gICAgICAgICAgY29tbWVudFRva2VuID0gdHlwZUluY2x1ZGVzQ29tbWVudFR5cGU7IC8vL1xuXG4gICAgcmV0dXJuIGNvbW1lbnRUb2tlbjtcbiAgfVxuXG4gIGlzRW5kT2ZMaW5lVG9rZW4oKSB7XG4gICAgY29uc3QgdHlwZUVuZE9mTGluZVR5cGUgPSAodGhpcy50eXBlLmluY2x1ZGVzKGVuZE9mTGluZVR5cGUpKSxcbiAgICAgICAgICBlbmRPZkxpbmVUb2tlbiA9IHR5cGVFbmRPZkxpbmVUeXBlOyAvLy9cblxuICAgIHJldHVybiBlbmRPZkxpbmVUb2tlbjtcbiAgfVxuXG4gIGlzV2hpdGVzcGFjZVRva2VuKCkge1xuICAgIGNvbnN0IHR5cGVXaGl0ZXNwYWNlVHlwZSA9ICh0aGlzLnR5cGUgPT09IHdoaXRlc3BhY2VUeXBlKSxcbiAgICAgICAgICB3aGl0ZXNwYWNlVG9rZW4gPSB0eXBlV2hpdGVzcGFjZVR5cGU7IC8vL1xuXG4gICAgcmV0dXJuIHdoaXRlc3BhY2VUb2tlbjtcbiAgfVxuXG4gIGlzRXF1YWxUbyh0b2tlbikge1xuICAgIGNvbnN0IGVxdWFsVG9Ub2tlbiA9ICh0aGlzID09PSB0b2tlbik7XG5cbiAgICByZXR1cm4gZXF1YWxUb1Rva2VuO1xuICB9XG5cbiAgbWF0Y2godG9rZW4pIHtcbiAgICBjb25zdCB0eXBlID0gdG9rZW4uZ2V0VHlwZSgpLFxuICAgICAgICAgIGNvbnRlbnQgPSB0b2tlbi5nZXRDb250ZW50KCksXG4gICAgICAgICAgc2lnbmlmaWNhbnQgPSB0b2tlbi5pc1NpZ25pZmljYW50KCksXG4gICAgICAgICAgbWF0Y2hlcyA9ICgodGhpcy50eXBlID09PSB0eXBlKSAmJiAodGhpcy5jb250ZW50ID09PSBjb250ZW50KSAmJiAodGhpcy5zaWduaWZpY2FudCA9PT0gc2lnbmlmaWNhbnQpKTtcblxuICAgIHJldHVybiBtYXRjaGVzO1xuICB9XG5cbiAgYXNIVE1MKCkge1xuICAgIGNvbnN0IGNsYXNzTmFtZSA9IHRoaXMudHlwZSwgIC8vL1xuICAgICAgICAgIGh0bWwgPSBgPHNwYW4gY2xhc3M9XCIke2NsYXNzTmFtZX1cIj4ke3RoaXMuaW5uZXJIVE1MfTwvc3Bhbj5gO1xuXG4gICAgcmV0dXJuIGh0bWw7XG4gIH1cblxuICBjbG9uZShDbGFzcywgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24sIHNpZ25pZmljYW50LCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHtcbiAgICBsZXQgdG9rZW4gPSBudWxsO1xuXG4gICAgaWYgKHN0YXJ0UG9zaXRpb24gIT09IGVuZFBvc2l0aW9uKSB7XG4gICAgICBsZXQgY29udGVudCA9IHRoaXMuZ2V0Q29udGVudCgpO1xuXG4gICAgICBjb250ZW50ID0gY29udGVudC5zdWJzdHJpbmcoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOyAgLy8vXG5cbiAgICAgIGNvbnN0IHR5cGUgPSB0aGlzLmdldFR5cGUoKSxcbiAgICAgICAgICAgIHNhbml0aXNlZENvbnRlbnQgPSBzYW5pdGlzZUNvbnRlbnQoY29udGVudCksXG4gICAgICAgICAgICBpbm5lckhUTUwgPSBzYW5pdGlzZWRDb250ZW50OyAvLy9cblxuICAgICAgdG9rZW4gPSBuZXcgQ2xhc3ModHlwZSwgY29udGVudCwgaW5uZXJIVE1MLCBzaWduaWZpY2FudCwgLi4ucmVtYWluaW5nQXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdG9rZW47XG4gIH1cblxuICBzdGF0aWMgbWF0Y2goQ2xhc3MsIGNvbnRlbnQsIHNpZ25pZmljYW50LCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHtcbiAgICBsZXQgdG9rZW4gPSBudWxsO1xuXG4gICAgY29uc3QgeyByZWd1bGFyRXhwcmVzc2lvbiB9ID0gQ2xhc3MsXG4gICAgICAgICAgbWF0Y2hlcyA9IGNvbnRlbnQubWF0Y2gocmVndWxhckV4cHJlc3Npb24pO1xuXG4gICAgaWYgKG1hdGNoZXMgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHsgaW5kZXggfSA9IG1hdGNoZXM7XG5cbiAgICAgIGlmIChpbmRleCA9PT0gMCkge1xuICAgICAgICBjb25zdCBmaXJzdE1hdGNoID0gZmlyc3QobWF0Y2hlcyk7XG5cbiAgICAgICAgY29udGVudCA9IGZpcnN0TWF0Y2g7IC8vL1xuXG4gICAgICAgIGNvbnN0IGNvbnRlbnRMZW5ndGggPSBjb250ZW50Lmxlbmd0aDtcblxuICAgICAgICBpZiAoY29udGVudExlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25zdCB7IHR5cGUgfSA9IENsYXNzLFxuICAgICAgICAgICAgICAgIHNhbml0aXNlZENvbnRlbnQgPSBzYW5pdGlzZUNvbnRlbnQoY29udGVudCksXG4gICAgICAgICAgICAgICAgaW5uZXJIVE1MID0gc2FuaXRpc2VkQ29udGVudDsgLy8vXG5cbiAgICAgICAgICB0b2tlbiA9IG5ldyBDbGFzcyh0eXBlLCBjb250ZW50LCBpbm5lckhUTUwsIHNpZ25pZmljYW50LCAuLi5yZW1haW5pbmdBcmd1bWVudHMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRva2VuO1xuICB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KENsYXNzLCBjb250ZW50LCBzaWduaWZpY2FudCwgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XG4gICAgY29uc3QgeyB0eXBlIH0gPSBDbGFzcyxcbiAgICAgICAgICBzYW5pdGlzZWRDb250ZW50ID0gc2FuaXRpc2VDb250ZW50KGNvbnRlbnQpLFxuICAgICAgICAgIGlubmVySFRNTCA9IHNhbml0aXNlZENvbnRlbnQsIC8vL1xuICAgICAgICAgIHRva2VuID0gbmV3IENsYXNzKHR5cGUsIGNvbnRlbnQsIGlubmVySFRNTCwgc2lnbmlmaWNhbnQsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cyk7XG5cbiAgICByZXR1cm4gdG9rZW47XG4gIH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnRBbmRUeXBlKENsYXNzLCBjb250ZW50LCB0eXBlLCBzaWduaWZpY2FudCwgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XG4gICAgY29uc3Qgc2FuaXRpc2VkQ29udGVudCA9IHNhbml0aXNlQ29udGVudChjb250ZW50KSxcbiAgICAgICAgICBpbm5lckhUTUwgPSBzYW5pdGlzZWRDb250ZW50LCAvLy9cbiAgICAgICAgICB0b2tlbiA9IG5ldyBDbGFzcyh0eXBlLCBjb250ZW50LCBpbm5lckhUTUwsIHNpZ25pZmljYW50LCAuLi5yZW1haW5pbmdBcmd1bWVudHMpO1xuXG4gICAgcmV0dXJuIHRva2VuO1xuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IFUgPSBcInVcIjtcbmV4cG9ydCBjb25zdCBFTVBUWV9TVFJJTkcgPSBcIlwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVG9rZW4gZnJvbSBcIi4uL3Rva2VuXCI7XG5cbmNvbnN0IHNpZ25pZmljYW50ID0gdHJ1ZTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2lnbmlmaWNhbnRUb2tlbiBleHRlbmRzIFRva2VuIHtcbiAgY2xvbmUoQ2xhc3MsIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHtcbiAgICBpZiAoZW5kUG9zaXRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgZW5kUG9zaXRpb24gPSBzdGFydFBvc2l0aW9uOyAgLy8vXG4gICAgICBzdGFydFBvc2l0aW9uID0gQ2xhc3M7ICAvLy9cbiAgICAgIENsYXNzID0gU2lnbmlmaWNhbnRUb2tlbjsgLy8vXG4gICAgfVxuXG4gICAgY29uc3Qgc2lnbmlmaWNhbnRUb2tlbiA9IHN1cGVyLmNsb25lKENsYXNzLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbiwgc2lnbmlmaWNhbnQsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cyk7XG5cbiAgICByZXR1cm4gc2lnbmlmaWNhbnRUb2tlbjtcbiAgfVxuXG4gIHN0YXRpYyBtYXRjaChDbGFzcywgY29udGVudCwgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XG4gICAgaWYgKGNvbnRlbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29udGVudCA9IENsYXNzOyAgLy8vXG4gICAgICBDbGFzcyA9IFNpZ25pZmljYW50VG9rZW47IC8vL1xuICAgIH1cblxuICAgIGNvbnN0IHNpZ25pZmljYW50VG9rZW4gPSBUb2tlbi5tYXRjaChDbGFzcywgY29udGVudCwgc2lnbmlmaWNhbnQsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cyk7XG5cbiAgICByZXR1cm4gc2lnbmlmaWNhbnRUb2tlbjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChDbGFzcywgY29udGVudCwgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XG4gICAgaWYgKGNvbnRlbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29udGVudCA9IENsYXNzOyAgLy8vXG4gICAgICBDbGFzcyA9IFNpZ25pZmljYW50VG9rZW47IC8vL1xuICAgIH1cblxuICAgIGNvbnN0IHNpZ25pZmljYW50VG9rZW4gPSBUb2tlbi5mcm9tQ29udGVudChDbGFzcywgY29udGVudCwgc2lnbmlmaWNhbnQsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cyk7XG5cbiAgICByZXR1cm4gc2lnbmlmaWNhbnRUb2tlbjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudEFuZFR5cGUoQ2xhc3MsIGNvbnRlbnQsIHR5cGUsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cykge1xuICAgIGlmICh0eXBlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHR5cGUgPSBjb250ZW50OyAvLy9cbiAgICAgIGNvbnRlbnQgPSBDbGFzczsgIC8vL1xuICAgICAgQ2xhc3MgPSBTaWduaWZpY2FudFRva2VuOyAvLy9cbiAgICB9XG5cbiAgICBjb25zdCBzaWduaWZpY2FudFRva2VuID0gVG9rZW4uZnJvbUNvbnRlbnRBbmRUeXBlKENsYXNzLCBjb250ZW50LCB0eXBlLCBzaWduaWZpY2FudCwgLi4ucmVtYWluaW5nQXJndW1lbnRzKTtcblxuICAgIHJldHVybiBzaWduaWZpY2FudFRva2VuO1xuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IFUgPSBcInVcIjtcbmV4cG9ydCBjb25zdCBFTVBUWV9TVFJJTkcgPSBcIlwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgVSA9IFwidVwiO1xuZXhwb3J0IGNvbnN0IEVNUFRZX1NUUklORyA9IFwiXCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5pbXBvcnQgU2lnbmlmaWNhbnRUb2tlbiBmcm9tIFwiLi90b2tlbi9zaWduaWZpY2FudFwiO1xuXG5pbXBvcnQgeyBVLCBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcblxuY29uc3QgeyBmaXJzdCB9ID0gYXJyYXlVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ1bGUge1xuICBjb25zdHJ1Y3Rvcih0eXBlLCByZWd1bGFyRXhwcmVzc2lvbikge1xuICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgdGhpcy5yZWd1bGFyRXhwcmVzc2lvbiA9IHJlZ3VsYXJFeHByZXNzaW9uO1xuICB9XG4gIFxuICBnZXRUeXBlKCkge1xuICAgIHJldHVybiB0aGlzLnR5cGU7XG4gIH1cbiAgXG4gIGdldFJlZ3VsYXJFeHByZXNzaW9uKCkge1xuICAgIHJldHVybiB0aGlzLnJlZ3VsYXJFeHByZXNzaW9uO1xuICB9XG5cbiAgbWF0Y2goY29udGVudCkge1xuICAgIGxldCBzaWduaWZpY2FudFRva2VuID0gbnVsbDtcblxuICAgIGNvbnN0IG1hdGNoZXMgPSBjb250ZW50Lm1hdGNoKHRoaXMucmVndWxhckV4cHJlc3Npb24pO1xuXG4gICAgaWYgKG1hdGNoZXMgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHsgaW5kZXggfSA9IG1hdGNoZXM7XG5cbiAgICAgIGlmIChpbmRleCA9PT0gMCkge1xuICAgICAgICBjb25zdCBmaXJzdE1hdGNoID0gZmlyc3QobWF0Y2hlcyk7XG5cbiAgICAgICAgY29udGVudCA9IGZpcnN0TWF0Y2g7IC8vL1xuXG4gICAgICAgIGNvbnN0IGNvbnRlbnRMZW5ndGggPSBjb250ZW50Lmxlbmd0aDtcblxuICAgICAgICBpZiAoY29udGVudExlbmd0aCA+IDApIHtcbiAgICAgICAgICBzaWduaWZpY2FudFRva2VuID0gU2lnbmlmaWNhbnRUb2tlbi5mcm9tQ29udGVudEFuZFR5cGUoY29udGVudCwgdGhpcy50eXBlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzaWduaWZpY2FudFRva2VuO1xuICB9XG4gIFxuICBhc0VudHJ5KCkge1xuICAgIGNvbnN0IGVudHJ5ID0ge30sXG4gICAgICAgICAgcmVndWxhckV4cHJlc3Npb25QYXR0ZXJuID0gYCR7dGhpcy5yZWd1bGFyRXhwcmVzc2lvbn1gO1xuXG4gICAgZW50cnlbdGhpcy50eXBlXSA9IHJlZ3VsYXJFeHByZXNzaW9uUGF0dGVybjtcblxuICAgIHJldHVybiBlbnRyeTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tVG9rZW4oVG9rZW4pIHtcbiAgICBjb25zdCB7IHR5cGUsIHJlZ3VsYXJFeHByZXNzaW9uIH0gPSBUb2tlbixcbiAgICAgICAgICBydWxlID0gbmV3IFJ1bGUodHlwZSwgcmVndWxhckV4cHJlc3Npb24pO1xuXG4gICAgcmV0dXJuIHJ1bGU7XG4gIH1cblxuICBzdGF0aWMgZnJvbUVudHJ5KGVudHJ5KSB7XG4gICAgY29uc3QgZW50cnlLZXlzID0gT2JqZWN0LmtleXMoZW50cnkpLFxuICAgICAgICAgIGZpcnN0RW50cnlLZXkgPSBmaXJzdChlbnRyeUtleXMpLFxuICAgICAgICAgIHR5cGUgPSBmaXJzdEVudHJ5S2V5LCAvLy9cbiAgICAgICAgICByZWd1bGFyRXhwcmVzc2lvblBhdHRlcm4gPSBlbnRyeVt0eXBlXSxcbiAgICAgICAgICBydWxlID0gUnVsZS5mcm9tVHlwZUFuZFJlZ3VsYXJFeHByZXNzaW9uUGF0dGVybih0eXBlLCByZWd1bGFyRXhwcmVzc2lvblBhdHRlcm4pO1xuICAgICAgICBcbiAgICByZXR1cm4gcnVsZTsgXG4gIH1cblxuICBzdGF0aWMgZnJvbVR5cGVBbmRSZWd1bGFyRXhwcmVzc2lvblBhdHRlcm4odHlwZSwgcmVndWxhckV4cHJlc3Npb25QYXR0ZXJuKSB7XG4gICAgY29uc3QgdW5pY29kZSA9IGlzVW5pY29kZShyZWd1bGFyRXhwcmVzc2lvblBhdHRlcm4pLFxuICAgICAgICAgIGZsYWdzID0gdW5pY29kZSA/XG4gICAgICAgICAgICAgICAgICAgIFUgOlxuICAgICAgICAgICAgICAgICAgICAgIEVNUFRZX1NUUklORyxcbiAgICAgICAgICByZWdFeHAgPSBuZXcgUmVnRXhwKHJlZ3VsYXJFeHByZXNzaW9uUGF0dGVybiwgZmxhZ3MpLFxuICAgICAgICAgIHJlZ3VsYXJFeHByZXNzaW9uID0gcmVnRXhwLCAvLy9cbiAgICAgICAgICBydWxlID0gbmV3IFJ1bGUodHlwZSwgcmVndWxhckV4cHJlc3Npb24pO1xuXG4gICAgcmV0dXJuIHJ1bGU7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNVbmljb2RlKHJlZ3VsYXJFeHByZXNzaW9uUGF0dGVybikge1xuICBjb25zdCB1bmljb2RlUmVndWxhckV4cHJlc3Npb24gPSAvdXsvLCAvLy9cbiAgICAgICAgaW5kZXggPSByZWd1bGFyRXhwcmVzc2lvblBhdHRlcm4uc2VhcmNoKHVuaWNvZGVSZWd1bGFyRXhwcmVzc2lvbiksXG4gICAgICAgIHVuaWNvZGUgPSAoaW5kZXggIT09IC0xKTtcblxuICByZXR1cm4gdW5pY29kZTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmV4cG9ydCBjb25zdCBwbHVzID0gXCIrXCI7XHJcbmV4cG9ydCBjb25zdCB3aWxkY2FyZCA9IFwiLlwiO1xyXG5leHBvcnQgY29uc3QgYXN0ZXJpc2sgPSBcIipcIjtcclxuZXhwb3J0IGNvbnN0IGVsbGlwc2lzID0gXCIuLi5cIjtcclxuZXhwb3J0IGNvbnN0IHNlcGFyYXRvciA9IFwiOjo9XCI7XHJcbmV4cG9ydCBjb25zdCB0ZXJtaW5hdG9yID0gXCI7XCI7XHJcbmV4cG9ydCBjb25zdCB2ZXJ0aWNhbEJhciA9IFwifFwiO1xyXG5leHBvcnQgY29uc3Qgb3BlbkJyYWNrZXQgPSBcIihcIjtcclxuZXhwb3J0IGNvbnN0IGNsb3NlQnJhY2tldCA9IFwiKVwiO1xyXG5leHBvcnQgY29uc3QgcXVlc3Rpb25NYXJrID0gXCI/XCI7XHJcbmV4cG9ydCBjb25zdCBleGNsYW1hdGlvbk1hcmsgPSBcIiFcIjtcclxuZXhwb3J0IGNvbnN0IE5PX1dISVRFU1BBQ0UgPSBcIjxOT19XSElURVNQQUNFPlwiO1xyXG5leHBvcnQgY29uc3QgRU5EX09GX0xJTkUgPSBcIjxFTkRfT0ZfTElORT5cIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICBwbHVzLFxyXG4gIHdpbGRjYXJkLFxyXG4gIGFzdGVyaXNrLFxyXG4gIGVsbGlwc2lzLFxyXG4gIHNlcGFyYXRvcixcclxuICB0ZXJtaW5hdG9yLFxyXG4gIHZlcnRpY2FsQmFyLFxyXG4gIG9wZW5CcmFja2V0LFxyXG4gIGNsb3NlQnJhY2tldCxcclxuICBxdWVzdGlvbk1hcmssXHJcbiAgZXhjbGFtYXRpb25NYXJrLFxyXG4gIE5PX1dISVRFU1BBQ0UsXHJcbiAgRU5EX09GX0xJTkVcclxufTtcclxuIiwgIlwidXNlIHN0cmljdFwiO1xyXG5cclxuY29uc3QgZW50cmllcyA9IFtcclxuICB7XHJcbiAgICBcInNwZWNpYWxcIjogXCJeKD86Ojo9fFxcXFx8fFxcXFwofFxcXFwpfFxcXFw/fFxcXFwhfFxcXFwqfFxcXFwrfFxcXFwuXFxcXC5cXFxcLnxcXFxcLnxcdTAzQjV8O3w8Tk9fV0hJVEVTUEFDRT58PEVORF9PRl9MSU5FPilcIlxyXG4gIH0sXHJcbiAge1xyXG4gICAgXCJ0eXBlXCI6IFwiXlxcXFxbW15cXFxcXV0rXFxcXF1cIlxyXG4gIH0sXHJcbiAge1xyXG4gICAgXCJuYW1lXCI6IFwiXltcXFxcd35dK1wiXHJcbiAgfSxcclxuICB7XHJcbiAgICBcInVuYXNzaWduZWRcIjogXCJeW15cXFxcc10rXCJcclxuICB9XHJcbl07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBlbnRyaWVzO1xyXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBpbkNvbW1lbnRGcm9tVG9rZW5BbmRJbkNvbW1lbnQodG9rZW4sIGluQ29tbWVudCkge1xuICBjb25zdCB0b2tlbkNvbW1lbnRUb2tlbiA9IHRva2VuLmlzQ29tbWVudFRva2VuKCk7XG5cbiAgaWYgKHRva2VuQ29tbWVudFRva2VuKSB7XG4gICAgY29uc3QgY29tbWVudFRva2VuID0gdG9rZW4sIC8vL1xuICAgICAgICAgIGNvbW1lbnRUb2tlbkluQ29tbWVudFByZXNlcnZpbmcgPSBjb21tZW50VG9rZW4uaXNJbkNvbW1lbnRQcmVzZXJ2aW5nKCk7XG5cbiAgICBpbkNvbW1lbnQgPSBjb21tZW50VG9rZW5JbkNvbW1lbnRQcmVzZXJ2aW5nOyAgLy8vXG4gIH1cblxuICByZXR1cm4gaW5Db21tZW50O1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xyXG5cclxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcclxuXHJcbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcclxuaW1wb3J0IHsgaW5Db21tZW50RnJvbVRva2VuQW5kSW5Db21tZW50IH0gZnJvbSBcIi4uL3V0aWxpdGllcy90b2tlblwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29tbW9uTGV4ZXIge1xyXG4gIGNvbnN0cnVjdG9yKHJ1bGVzLCBJbkNvbW1lbnRDbGFzc2VzLCBOb3RJbkNvbW1lbnRDbGFzc2VzKSB7XHJcbiAgICB0aGlzLnJ1bGVzID0gcnVsZXM7XHJcbiAgICB0aGlzLkluQ29tbWVudENsYXNzZXMgPSBJbkNvbW1lbnRDbGFzc2VzO1xyXG4gICAgdGhpcy5Ob3RJbkNvbW1lbnRDbGFzc2VzID0gTm90SW5Db21tZW50Q2xhc3NlcztcclxuICB9XHJcbiAgXHJcbiAgZ2V0UnVsZXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5ydWxlcztcclxuICB9XHJcblxyXG4gIGdldEluQ29tbWVudENsYXNzZXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5JbkNvbW1lbnRDbGFzc2VzO1xyXG4gIH1cclxuXHJcbiAgZ2V0Tm90SW5Db21tZW50Q2xhc3NlcygpIHtcclxuICAgIHJldHVybiB0aGlzLk5vdEluQ29tbWVudENsYXNzZXM7XHJcbiAgfVxyXG5cclxuICB0b2tlbmlzZShjb250ZW50LCBpbkNvbW1lbnQgPSBmYWxzZSkge1xyXG4gICAgY29uc3QgdG9rZW5zID0gW107XHJcblxyXG4gICAgd2hpbGUgKGNvbnRlbnQgIT09IEVNUFRZX1NUUklORykge1xyXG4gICAgICBsZXQgdG9rZW4gPSBudWxsO1xyXG5cclxuICAgICAgY29uc3QgQ2xhc3NlcyA9IGluQ29tbWVudCA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuSW5Db21tZW50Q2xhc3NlcyA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5Ob3RJbkNvbW1lbnRDbGFzc2VzO1xyXG5cclxuICAgICAgQ2xhc3Nlcy5zb21lKChDbGFzcykgPT4ge1xyXG4gICAgICAgIGlmIChDbGFzcyAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgdG9rZW4gPSBDbGFzcy5tYXRjaChjb250ZW50KTtcclxuXHJcbiAgICAgICAgICBpZiAodG9rZW4gIT09IG51bGwpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGlmICh0b2tlbiA9PT0gbnVsbCkge1xyXG4gICAgICAgIGxldCBzaWduaWZpY2FudFRva2VuID0gbnVsbDtcclxuXHJcbiAgICAgICAgdGhpcy5ydWxlcy5zb21lKChydWxlKSA9PiB7XHJcbiAgICAgICAgICBzaWduaWZpY2FudFRva2VuID0gcnVsZS5tYXRjaChjb250ZW50KTtcclxuXHJcbiAgICAgICAgICBpZiAoc2lnbmlmaWNhbnRUb2tlbiAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0b2tlbiA9IHNpZ25pZmljYW50VG9rZW47IC8vL1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0b2tlbiA9PT0gbnVsbCkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIGNvbnRlbnQgJyR7Y29udGVudH0nIGNhbm5vdCBiZSB0b2tlbmlzZWQuYCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRva2Vucy5wdXNoKHRva2VuKTtcclxuXHJcbiAgICAgIGluQ29tbWVudCA9IGluQ29tbWVudEZyb21Ub2tlbkFuZEluQ29tbWVudCh0b2tlbiwgaW5Db21tZW50KTtcclxuXHJcbiAgICAgIGNvbnN0IHRva2VuQ29udGVudExlbmd0aCA9IHRva2VuLmdldENvbnRlbnRMZW5ndGgoKSxcclxuICAgICAgICAgICAgc3RhcnQgPSB0b2tlbkNvbnRlbnRMZW5ndGg7IC8vL1xyXG5cclxuICAgICAgY29udGVudCA9IGNvbnRlbnQuc3Vic3RyaW5nKHN0YXJ0KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdG9rZW5zO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGZyb21Ob3RoaW5nKENsYXNzKSB7XHJcbiAgICBjb25zdCB7IGVudHJpZXMgfSA9IENsYXNzLFxyXG4gICAgICAgICAgSW5Db21tZW50Q2xhc3NlcyA9IEluQ29tbWVudENsYXNzZXNGcm9tQ2xhc3MoQ2xhc3MpLFxyXG4gICAgICAgICAgTm90SW5Db21tZW50Q2xhc3NlcyA9IE5vdEluQ29tbWVudENsYXNzZXNGcm9tQ2xhc3MoQ2xhc3MpLFxyXG4gICAgICAgICAgcnVsZXMgPSBlbnRyaWVzLm1hcCgoZW50cnkpID0+IFJ1bGUuZnJvbUVudHJ5KGVudHJ5KSksXHJcbiAgICAgICAgICBsZXhlciA9IG5ldyBDbGFzcyhydWxlcywgSW5Db21tZW50Q2xhc3NlcywgTm90SW5Db21tZW50Q2xhc3Nlcyk7XHJcblxyXG4gICAgcmV0dXJuIGxleGVyO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGZyb21SdWxlcyhDbGFzcywgcnVsZXMpIHtcclxuICAgIGNvbnN0IEluQ29tbWVudENsYXNzZXMgPSBJbkNvbW1lbnRDbGFzc2VzRnJvbUNsYXNzKENsYXNzKSxcclxuICAgICAgICAgIE5vdEluQ29tbWVudENsYXNzZXMgPSBOb3RJbkNvbW1lbnRDbGFzc2VzRnJvbUNsYXNzKENsYXNzKSxcclxuICAgICAgICAgIGxleGVyID0gbmV3IENsYXNzKHJ1bGVzLCBJbkNvbW1lbnRDbGFzc2VzLCBOb3RJbkNvbW1lbnRDbGFzc2VzKTtcclxuXHJcbiAgICByZXR1cm4gbGV4ZXI7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZnJvbUVudHJpZXMoQ2xhc3MsIGVudHJpZXMpIHtcclxuICAgIGNvbnN0IHJ1bGVzID0gZW50cmllcy5tYXAoKGVudHJ5KSA9PiBSdWxlLmZyb21FbnRyeShlbnRyeSkpLFxyXG4gICAgICAgICAgSW5Db21tZW50Q2xhc3NlcyA9IEluQ29tbWVudENsYXNzZXNGcm9tQ2xhc3MoQ2xhc3MpLFxyXG4gICAgICAgICAgTm90SW5Db21tZW50Q2xhc3NlcyA9IE5vdEluQ29tbWVudENsYXNzZXNGcm9tQ2xhc3MoQ2xhc3MpLFxyXG4gICAgICAgICAgbGV4ZXIgPSBuZXcgQ2xhc3MocnVsZXMsIEluQ29tbWVudENsYXNzZXMsIE5vdEluQ29tbWVudENsYXNzZXMpO1xyXG5cclxuICAgIHJldHVybiBsZXhlcjtcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIEluQ29tbWVudENsYXNzZXNGcm9tQ2xhc3MoQ2xhc3MpIHtcclxuICBjb25zdCB7IEVuZE9mTGluZUNvbW1lbnRUb2tlbiwgRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sIE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuIH0gPSBDbGFzcyxcclxuICAgICAgICBJbkNvbW1lbnRDbGFzc2VzID0gW1xyXG4gICAgICAgICAgRW5kT2ZMaW5lQ29tbWVudFRva2VuLFxyXG4gICAgICAgICAgRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sXHJcbiAgICAgICAgICBNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlblxyXG4gICAgICAgIF07XHJcblxyXG4gIHJldHVybiBJbkNvbW1lbnRDbGFzc2VzO1xyXG59XHJcblxyXG5mdW5jdGlvbiBOb3RJbkNvbW1lbnRDbGFzc2VzRnJvbUNsYXNzKENsYXNzKSB7XHJcbiAgY29uc3QgeyBFbmRPZkxpbmVUb2tlbixcclxuICAgICAgICAgIFdoaXRlc3BhY2VUb2tlbixcclxuICAgICAgICAgIFNpbmdsZUxpbmVDb21tZW50VG9rZW4sXHJcbiAgICAgICAgICBSZWd1bGFyRXhwcmVzc2lvblRva2VuLFxyXG4gICAgICAgICAgU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbixcclxuICAgICAgICAgIFNpbmdseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbixcclxuICAgICAgICAgIERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiB9ID0gQ2xhc3MsXHJcbiAgICAgIE5vdEluQ29tbWVudENsYXNzZXMgPSBbXHJcbiAgICAgICAgRW5kT2ZMaW5lVG9rZW4sXHJcbiAgICAgICAgV2hpdGVzcGFjZVRva2VuLFxyXG4gICAgICAgIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sXHJcbiAgICAgICAgU2luZ2xlTGluZUNvbW1lbnRUb2tlbixcclxuICAgICAgICBSZWd1bGFyRXhwcmVzc2lvblRva2VuLFxyXG4gICAgICAgIFNpbmdseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbixcclxuICAgICAgICBEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW5cclxuICAgICAgXTtcclxuXHJcbiAgcmV0dXJuIE5vdEluQ29tbWVudENsYXNzZXM7XHJcbn0iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBUb2tlbiBmcm9tIFwiLi4vdG9rZW5cIjtcblxuY29uc3Qgc2lnbmlmaWNhbnQgPSBmYWxzZTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTm9uU2lnbmlmaWNhbnRUb2tlbiBleHRlbmRzIFRva2VuIHtcbiAgY2xvbmUoQ2xhc3MsIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSB7IHJldHVybiBzdXBlci5jbG9uZShDbGFzcywgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24sIHNpZ25pZmljYW50KTsgfVxuXG4gIHN0YXRpYyBtYXRjaChDbGFzcywgY29udGVudCkgeyByZXR1cm4gVG9rZW4ubWF0Y2goQ2xhc3MsIGNvbnRlbnQsIHNpZ25pZmljYW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChDbGFzcywgY29udGVudCkgeyByZXR1cm4gVG9rZW4uZnJvbUNvbnRlbnQoQ2xhc3MsIGNvbnRlbnQsIHNpZ25pZmljYW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudEFuZFR5cGUoQ2xhc3MsIGNvbnRlbnQsIHR5cGUpIHsgcmV0dXJuIFRva2VuLmZyb21Db250ZW50QW5kVHlwZShDbGFzcywgY29udGVudCwgdHlwZSwgc2lnbmlmaWNhbnQpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblNpZ25pZmljYW50VG9rZW4gZnJvbSBcIi4uLy4uL3Rva2VuL25vblNpZ25pZmljYW50XCI7XG5cbmltcG9ydCB7IHdoaXRlc3BhY2VUeXBlIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFdoaXRlc3BhY2VUb2tlbiBleHRlbmRzIE5vblNpZ25pZmljYW50VG9rZW4ge1xuICBhc0hUTUwoKSB7XG4gICAgY29uc3QgaHRtbCA9IHRoaXMuaW5uZXJIVE1MOyAgLy8vXG5cbiAgICByZXR1cm4gaHRtbDtcbiAgfVxuXG4gIGNsb25lKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSB7IHJldHVybiBzdXBlci5jbG9uZShXaGl0ZXNwYWNlVG9rZW4sIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsgfVxuXG4gIHN0YXRpYyB0eXBlID0gd2hpdGVzcGFjZVR5cGU7XG5cbiAgc3RhdGljIHJlZ3VsYXJFeHByZXNzaW9uID0gL15bXFx0IF0rLztcblxuICBzdGF0aWMgbWF0Y2goY29udGVudCkgeyByZXR1cm4gTm9uU2lnbmlmaWNhbnRUb2tlbi5tYXRjaChXaGl0ZXNwYWNlVG9rZW4sIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIE5vblNpZ25pZmljYW50VG9rZW4uZnJvbUNvbnRlbnQoV2hpdGVzcGFjZVRva2VuLCBjb250ZW50KTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBTaWduaWZpY2FudFRva2VuIGZyb20gXCIuLi8uLi90b2tlbi9zaWduaWZpY2FudFwiO1xuXG5pbXBvcnQgeyByZWd1bGFyRXhwcmVzc2lvblR5cGUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVndWxhckV4cHJlc3Npb25Ub2tlbiBleHRlbmRzIFNpZ25pZmljYW50VG9rZW4ge1xuICBjbG9uZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikgeyByZXR1cm4gc3VwZXIuY2xvbmUoUmVndWxhckV4cHJlc3Npb25Ub2tlbiwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOyB9XG5cbiAgc3RhdGljIHR5cGUgPSByZWd1bGFyRXhwcmVzc2lvblR5cGU7XG5cbiAgc3RhdGljIHJlZ3VsYXJFeHByZXNzaW9uID0gL15cXC8oPzpcXFxcW15cXHNdfFteXFwvXFxyXFxuXSkqXFwvLztcblxuICBzdGF0aWMgbWF0Y2goY29udGVudCkgeyByZXR1cm4gU2lnbmlmaWNhbnRUb2tlbi5tYXRjaChSZWd1bGFyRXhwcmVzc2lvblRva2VuLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChjb250ZW50KSB7IHJldHVybiBTaWduaWZpY2FudFRva2VuLmZyb21Db250ZW50KFJlZ3VsYXJFeHByZXNzaW9uVG9rZW4sIGNvbnRlbnQpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblNpZ25pZmljYW50VG9rZW4gZnJvbSBcIi4uLy4uL3Rva2VuL25vblNpZ25pZmljYW50XCI7XG5cbmltcG9ydCB7IGVuZE9mTGluZVR5cGUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW5kT2ZMaW5lTm9uU2lnbmlmaWNhbnRUb2tlbiBleHRlbmRzIE5vblNpZ25pZmljYW50VG9rZW4ge1xuICBjbG9uZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikgeyByZXR1cm4gc3VwZXIuY2xvbmUoRW5kT2ZMaW5lTm9uU2lnbmlmaWNhbnRUb2tlbiwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOyB9XG5cbiAgYXNIVE1MKCkge1xuICAgIGNvbnN0IGh0bWwgPSB0aGlzLmlubmVySFRNTDsgIC8vL1xuXG4gICAgcmV0dXJuIGh0bWw7XG4gIH1cblxuICBzdGF0aWMgdHlwZSA9IGVuZE9mTGluZVR5cGU7XG5cbiAgc3RhdGljIHJlZ3VsYXJFeHByZXNzaW9uID0gL14oPzpcXHJcXG58XFxyfFxcbikvO1xuXG4gIHN0YXRpYyBtYXRjaChjb250ZW50KSB7IHJldHVybiBOb25TaWduaWZpY2FudFRva2VuLm1hdGNoKEVuZE9mTGluZU5vblNpZ25pZmljYW50VG9rZW4sIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIE5vblNpZ25pZmljYW50VG9rZW4uZnJvbUNvbnRlbnQoRW5kT2ZMaW5lTm9uU2lnbmlmaWNhbnRUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgU2lnbmlmaWNhbnRUb2tlbiBmcm9tIFwiLi4vLi4vdG9rZW4vc2lnbmlmaWNhbnRcIjtcblxuaW1wb3J0IHsgc3RyaW5nTGl0ZXJhbFR5cGUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3RyaW5nTGl0ZXJhbFRva2VuIGV4dGVuZHMgU2lnbmlmaWNhbnRUb2tlbiB7XG4gIGNsb25lKENsYXNzLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikgeyByZXR1cm4gc3VwZXIuY2xvbmUoQ2xhc3MsIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsgfVxuXG4gIGdldFN0cmluZygpIHtcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5nZXRDb250ZW50KCksXG4gICAgICAgICAgY29udGVudExlbmd0aCA9IGNvbnRlbnQubGVuZ3RoLFxuICAgICAgICAgIHN0YXJ0ID0gMSxcbiAgICAgICAgICBlbmQgPSBjb250ZW50TGVuZ3RoIC0gMSxcbiAgICAgICAgICBzdHJpbmcgPSBjb250ZW50LnN1YnN0cmluZyhzdGFydCwgZW5kKTtcblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuICBzdGF0aWMgdHlwZSA9IHN0cmluZ0xpdGVyYWxUeXBlO1xuXG4gIHN0YXRpYyBtYXRjaChDbGFzcywgY29udGVudCkgeyByZXR1cm4gU2lnbmlmaWNhbnRUb2tlbi5tYXRjaChDbGFzcywgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoQ2xhc3MsIGNvbnRlbnQpIHsgcmV0dXJuIFNpZ25pZmljYW50VG9rZW4uZnJvbUNvbnRlbnQoQ2xhc3MsIGNvbnRlbnQpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFN0cmluZ0xpdGVyYWxUb2tlbiBmcm9tIFwiLi4vLi4vc2lnbmlmaWNhbnQvc3RyaW5nTGl0ZXJhbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gZXh0ZW5kcyBTdHJpbmdMaXRlcmFsVG9rZW4ge1xuICBjbG9uZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikgeyByZXR1cm4gc3VwZXIuY2xvbmUoRG91Ymx5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7IH1cblxuICBzdGF0aWMgcmVndWxhckV4cHJlc3Npb24gPSAvXlwiKD86XFxcXFteXFxzXXxbXlwiXFxcXFxcclxcbl0pKlwiLztcblxuICBzdGF0aWMgbWF0Y2goY29udGVudCkgeyByZXR1cm4gU3RyaW5nTGl0ZXJhbFRva2VuLm1hdGNoKERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiwgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoY29udGVudCkgeyByZXR1cm4gU3RyaW5nTGl0ZXJhbFRva2VuLmZyb21Db250ZW50KERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xyXG5cclxuaW1wb3J0IGVudHJpZXMgZnJvbSBcIi4vZW50cmllc1wiO1xyXG5pbXBvcnQgQ29tbW9uTGV4ZXIgZnJvbSBcIi4uL2NvbW1vbi9sZXhlclwiO1xyXG5pbXBvcnQgV2hpdGVzcGFjZVRva2VuIGZyb20gXCIuLi90b2tlbi9ub25TaWduaWZpY2FudC93aGl0ZXNwYWNlXCI7XHJcbmltcG9ydCBSZWd1bGFyRXhwcmVzc2lvblRva2VuIGZyb20gXCIuLi90b2tlbi9zaWduaWZpY2FudC9yZWd1bGFyRXhwcmVzc2lvblwiO1xyXG5pbXBvcnQgRW5kT2ZMaW5lTm9uU2lnbmlmaWNhbnRUb2tlbiBmcm9tIFwiLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvZW5kT2ZMaW5lXCI7XHJcbmltcG9ydCBEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gZnJvbSBcIi4uL3Rva2VuL3NpZ25pZmljYW50L3N0cmluZ0xpdGVyYWwvZG91Ymx5UXVvdGVkXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCTkZMZXhlciBleHRlbmRzIENvbW1vbkxleGVyIHtcclxuICB0b2tlbnNGcm9tQk5GKGJuZikge1xyXG4gICAgY29uc3QgY29udGVudCA9IGJuZiwgIC8vL1xyXG4gICAgICAgICAgdG9rZW5zID0gc3VwZXIudG9rZW5pc2UoY29udGVudCk7XHJcblxyXG4gICAgcmV0dXJuIHRva2VucztcclxuICB9XHJcblxyXG4gIHN0YXRpYyBlbnRyaWVzID0gZW50cmllcztcclxuXHJcbiAgc3RhdGljIEVuZE9mTGluZVRva2VuID0gRW5kT2ZMaW5lTm9uU2lnbmlmaWNhbnRUb2tlbjsgLy8vXHJcblxyXG4gIHN0YXRpYyBXaGl0ZXNwYWNlVG9rZW4gPSBXaGl0ZXNwYWNlVG9rZW47XHJcblxyXG4gIHN0YXRpYyBFbmRPZkxpbmVDb21tZW50VG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgUmVndWxhckV4cHJlc3Npb25Ub2tlbiA9IFJlZ3VsYXJFeHByZXNzaW9uVG9rZW47XHJcblxyXG4gIHN0YXRpYyBTaW5nbGVMaW5lQ29tbWVudFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgU2luZ2x5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiA9IERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbjtcclxuXHJcbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkgeyByZXR1cm4gQ29tbW9uTGV4ZXIuZnJvbU5vdGhpbmcoQk5GTGV4ZXIpOyB9XHJcblxyXG4gIHN0YXRpYyBmcm9tUnVsZXMocnVsZXMpIHsgcmV0dXJuIENvbW1vbkxleGVyLmZyb21SdWxlcyhCTkZMZXhlciwgcnVsZXMpOyB9XHJcblxyXG4gIHN0YXRpYyBmcm9tRW50cmllcyhlbnRyaWVzKSB7IHJldHVybiBDb21tb25MZXhlci5mcm9tRW50cmllcyhCTkZMZXhlciwgZW50cmllcyk7IH1cclxufVxyXG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmNvbnN0IGVudHJpZXMgPSBbXHJcbiAge1xyXG4gICAgXCJkaWdpdFwiOiBcIl5cXFxcZCtcIlxyXG4gIH0sXHJcbiAge1xyXG4gICAgXCJicmFja2V0XCI6IFwiXig/OlxcXFwofFxcXFwpKVwiXHJcbiAgfSxcclxuICB7XHJcbiAgICBcIm9wZXJhdG9yXCI6IFwiXig/OlxcXFwrfFxcXFwtfFxcXFwqfFxcXFwvKVwiXHJcbiAgfSxcclxuICB7XHJcbiAgICBcInVuYXNzaWduZWRcIjogXCJeW15cXFxcc10rXCJcclxuICB9XHJcbl07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBlbnRyaWVzO1xyXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBTdHJpbmdMaXRlcmFsVG9rZW4gZnJvbSBcIi4uLy4uL3NpZ25pZmljYW50L3N0cmluZ0xpdGVyYWxcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2luZ2x5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuIGV4dGVuZHMgU3RyaW5nTGl0ZXJhbFRva2VuIHtcbiAgY2xvbmUoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pIHsgcmV0dXJuIHN1cGVyLmNsb25lKFNpbmdseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOyB9XG5cbiAgc3RhdGljIHJlZ3VsYXJFeHByZXNzaW9uID0gL14nKD86XFxcXFteXFxzXXxbXidcXFxcXFxyXFxuXSkqJy87XG5cbiAgc3RhdGljIG1hdGNoKGNvbnRlbnQpIHsgcmV0dXJuIFN0cmluZ0xpdGVyYWxUb2tlbi5tYXRjaChTaW5nbHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4sIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIFN0cmluZ0xpdGVyYWxUb2tlbi5mcm9tQ29udGVudChTaW5nbHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4sIGNvbnRlbnQpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblNpZ25pZmljYW50VG9rZW4gZnJvbSBcIi4uLy4uLy4uL3Rva2VuL25vblNpZ25pZmljYW50XCI7XG5cbmltcG9ydCB7IHNpbmdsZUxpbmVDb21tZW50VHlwZSB9IGZyb20gXCIuLi8uLi8uLi90eXBlc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTaW5nbGVMaW5lQ29tbWVudFRva2VuIGV4dGVuZHMgTm9uU2lnbmlmaWNhbnRUb2tlbiB7XG4gIGNsb25lKENsYXNzLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikgeyByZXR1cm4gc3VwZXIuY2xvbmUoQ2xhc3MsIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsgfVxuXG4gIGlzSW5Db21tZW50UHJlc2VydmluZygpIHtcbiAgICBjb25zdCBpbkNvbW1lbnRQcmVzZXJ2aW5nID0gZmFsc2U7XG5cbiAgICByZXR1cm4gaW5Db21tZW50UHJlc2VydmluZztcbiAgfVxuXG4gIHN0YXRpYyB0eXBlID0gc2luZ2xlTGluZUNvbW1lbnRUeXBlO1xuXG4gIHN0YXRpYyBtYXRjaChDbGFzcywgY29udGVudCkgeyByZXR1cm4gTm9uU2lnbmlmaWNhbnRUb2tlbi5tYXRjaChDbGFzcywgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoQ2xhc3MsIGNvbnRlbnQpIHsgcmV0dXJuIE5vblNpZ25pZmljYW50VG9rZW4uZnJvbUNvbnRlbnQoQ2xhc3MsIGNvbnRlbnQpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFNpbmdsZUxpbmVDb21tZW50VG9rZW4gZnJvbSBcIi4uLy4uLy4uLy4uL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvc2luZ2xlTGluZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQeXRob25TdHlsZVNpbmdsZUxpbmVDb21tZW50VG9rZW4gZXh0ZW5kcyBTaW5nbGVMaW5lQ29tbWVudFRva2VuIHtcbiAgY2xvbmUoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pIHsgcmV0dXJuIHN1cGVyLmNsb25lKFB5dGhvblN0eWxlU2luZ2xlTGluZUNvbW1lbnRUb2tlbiwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOyB9XG5cbiAgc3RhdGljIHJlZ3VsYXJFeHByZXNzaW9uID0gL14jW15cXHJcXG5dKi87XG5cbiAgc3RhdGljIG1hdGNoKGNvbnRlbnQpIHsgcmV0dXJuIFNpbmdsZUxpbmVDb21tZW50VG9rZW4ubWF0Y2goUHl0aG9uU3R5bGVTaW5nbGVMaW5lQ29tbWVudFRva2VuLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChjb250ZW50KSB7IHJldHVybiBTaW5nbGVMaW5lQ29tbWVudFRva2VuLmZyb21Db250ZW50KFB5dGhvblN0eWxlU2luZ2xlTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uU2lnbmlmaWNhbnRUb2tlbiBmcm9tIFwiLi4vLi4vLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnRcIjtcblxuaW1wb3J0IHsgZW5kT2ZMaW5lQ29tbWVudFR5cGUgfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW5kT2ZMaW5lQ29tbWVudE5vblNpZ25pZmljYW50VG9rZW4gZXh0ZW5kcyBOb25TaWduaWZpY2FudFRva2VuIHtcbiAgY2xvbmUoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pIHsgcmV0dXJuIHN1cGVyLmNsb25lKEVuZE9mTGluZUNvbW1lbnROb25TaWduaWZpY2FudFRva2VuLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7IH1cblxuICBhc0hUTUwoKSB7XG4gICAgY29uc3QgaHRtbCA9IHRoaXMuaW5uZXJIVE1MOyAgLy8vXG5cbiAgICByZXR1cm4gaHRtbDtcbiAgfVxuXG4gIGlzSW5Db21tZW50UHJlc2VydmluZygpIHtcbiAgICBjb25zdCBpbkNvbW1lbnRQcmVzZXJ2aW5nID0gdHJ1ZTtcblxuICAgIHJldHVybiBpbkNvbW1lbnRQcmVzZXJ2aW5nO1xuICB9XG5cbiAgc3RhdGljIHR5cGUgPSBlbmRPZkxpbmVDb21tZW50VHlwZTtcblxuICBzdGF0aWMgcmVndWxhckV4cHJlc3Npb24gPSAvXig/OlxcclxcbnxcXHJ8XFxuKS87XG5cbiAgc3RhdGljIG1hdGNoKGNvbnRlbnQpIHsgcmV0dXJuIE5vblNpZ25pZmljYW50VG9rZW4ubWF0Y2goRW5kT2ZMaW5lQ29tbWVudE5vblNpZ25pZmljYW50VG9rZW4sIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIE5vblNpZ25pZmljYW50VG9rZW4uZnJvbUNvbnRlbnQoRW5kT2ZMaW5lQ29tbWVudE5vblNpZ25pZmljYW50VG9rZW4sIGNvbnRlbnQpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblNpZ25pZmljYW50VG9rZW4gZnJvbSBcIi4uLy4uLy4uLy4uL3Rva2VuL25vblNpZ25pZmljYW50XCI7XG5cbmltcG9ydCB7IGVuZE9mTXVsdGlMaW5lQ29tbWVudFR5cGUgfSBmcm9tIFwiLi4vLi4vLi4vLi4vdHlwZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gZXh0ZW5kcyBOb25TaWduaWZpY2FudFRva2VuIHtcbiAgY2xvbmUoQ2xhc3MsIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSB7IHJldHVybiBzdXBlci5jbG9uZShDbGFzcywgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOyB9XG5cbiAgaXNJbkNvbW1lbnRQcmVzZXJ2aW5nKCkge1xuICAgIGNvbnN0IGluQ29tbWVudFByZXNlcnZpbmcgPSBmYWxzZTtcblxuICAgIHJldHVybiBpbkNvbW1lbnRQcmVzZXJ2aW5nO1xuICB9XG5cbiAgc3RhdGljIHR5cGUgPSBlbmRPZk11bHRpTGluZUNvbW1lbnRUeXBlO1xuXG4gIHN0YXRpYyBtYXRjaChDbGFzcywgY29udGVudCkgeyByZXR1cm4gTm9uU2lnbmlmaWNhbnRUb2tlbi5tYXRjaChDbGFzcywgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoQ2xhc3MsIGNvbnRlbnQpIHsgcmV0dXJuIE5vblNpZ25pZmljYW50VG9rZW4uZnJvbUNvbnRlbnQoQ2xhc3MsIGNvbnRlbnQpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIGZyb20gXCIuLi8uLi8uLi8uLi8uLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9lbmRPZlwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQeXRob25TdHlsZUVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIGV4dGVuZHMgRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4ge1xuICBjbG9uZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikgeyByZXR1cm4gc3VwZXIuY2xvbmUoUHl0aG9uU3R5bGVFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOyB9XG5cbiAgc3RhdGljIHJlZ3VsYXJFeHByZXNzaW9uID0gL14jIyMvO1xuXG4gIHN0YXRpYyBtYXRjaChjb250ZW50KSB7IHJldHVybiBFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbi5tYXRjaChQeXRob25TdHlsZUVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChjb250ZW50KSB7IHJldHVybiBFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbi5mcm9tQ29udGVudChQeXRob25TdHlsZUVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLCBjb250ZW50KTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25TaWduaWZpY2FudFRva2VuIGZyb20gXCIuLi8uLi8uLi8uLi90b2tlbi9ub25TaWduaWZpY2FudFwiO1xuXG5pbXBvcnQgeyBzdGFydE9mTXVsdGlMaW5lQ29tbWVudFR5cGUgfSBmcm9tIFwiLi4vLi4vLi4vLi4vdHlwZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiBleHRlbmRzIE5vblNpZ25pZmljYW50VG9rZW4ge1xuICBjbG9uZShDbGFzcywgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pIHsgcmV0dXJuIHN1cGVyLmNsb25lKENsYXNzLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7IH1cblxuICBpc0luQ29tbWVudFByZXNlcnZpbmcoKSB7XG4gICAgY29uc3QgaW5Db21tZW50UHJlc2VydmluZyA9IHRydWU7XG5cbiAgICByZXR1cm4gaW5Db21tZW50UHJlc2VydmluZztcbiAgfVxuXG4gIHN0YXRpYyB0eXBlID0gc3RhcnRPZk11bHRpTGluZUNvbW1lbnRUeXBlO1xuXG4gIHN0YXRpYyBtYXRjaChDbGFzcywgY29udGVudCkgeyByZXR1cm4gTm9uU2lnbmlmaWNhbnRUb2tlbi5tYXRjaChDbGFzcywgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoQ2xhc3MsIGNvbnRlbnQpIHsgcmV0dXJuIE5vblNpZ25pZmljYW50VG9rZW4uZnJvbUNvbnRlbnQoQ2xhc3MsIGNvbnRlbnQpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL3N0YXJ0T2ZcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUHl0aG9uU3R5bGVTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIGV4dGVuZHMgU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiB7XG4gIGNsb25lKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSB7IHJldHVybiBzdXBlci5jbG9uZShQeXRob25TdHlsZVN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsgfVxuXG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eIyMjLztcblxuICBzdGF0aWMgbWF0Y2goY29udGVudCkgeyByZXR1cm4gU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbi5tYXRjaChQeXRob25TdHlsZVN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4uZnJvbUNvbnRlbnQoUHl0aG9uU3R5bGVTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLCBjb250ZW50KTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25TaWduaWZpY2FudFRva2VuIGZyb20gXCIuLi8uLi8uLi8uLi90b2tlbi9ub25TaWduaWZpY2FudFwiO1xuXG5pbXBvcnQgeyBtaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUeXBlIH0gZnJvbSBcIi4uLy4uLy4uLy4uL3R5cGVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuIGV4dGVuZHMgTm9uU2lnbmlmaWNhbnRUb2tlbiB7XG4gIGNsb25lKENsYXNzLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikgeyByZXR1cm4gc3VwZXIuY2xvbmUoQ2xhc3MsIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsgfVxuXG4gIGlzSW5Db21tZW50UHJlc2VydmluZygpIHtcbiAgICBjb25zdCBpbkNvbW1lbnRQcmVzZXJ2aW5nID0gdHJ1ZTtcblxuICAgIHJldHVybiBpbkNvbW1lbnRQcmVzZXJ2aW5nO1xuICB9XG5cbiAgc3RhdGljIHR5cGUgPSBtaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUeXBlO1xuXG4gIHN0YXRpYyBtYXRjaChDbGFzcywgY29udGVudCkgeyByZXR1cm4gTm9uU2lnbmlmaWNhbnRUb2tlbi5tYXRjaChDbGFzcywgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoQ2xhc3MsIGNvbnRlbnQpIHsgcmV0dXJuIE5vblNpZ25pZmljYW50VG9rZW4uZnJvbUNvbnRlbnQoQ2xhc3MsIGNvbnRlbnQpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuIGZyb20gXCIuLi8uLi8uLi8uLi8uLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9taWRkbGVPZlwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQeXRob25TdHlsZU1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuIGV4dGVuZHMgTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4ge1xuICBjbG9uZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikgeyByZXR1cm4gc3VwZXIuY2xvbmUoUHl0aG9uU3R5bGVNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOyB9XG5cbiAgc3RhdGljIHJlZ3VsYXJFeHByZXNzaW9uID0gL14oPzpbXlxcclxcbl0rPyg/PSMjIyl8W15cXHJcXG5dKykvO1xuXG4gIHN0YXRpYyBtYXRjaChjb250ZW50KSB7IHJldHVybiBNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbi5tYXRjaChQeXRob25TdHlsZU1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChjb250ZW50KSB7IHJldHVybiBNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbi5mcm9tQ29udGVudChQeXRob25TdHlsZU1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuLCBjb250ZW50KTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5pbXBvcnQgZW50cmllcyBmcm9tIFwiLi9lbnRyaWVzXCI7XHJcbmltcG9ydCBDb21tb25MZXhlciBmcm9tIFwiLi4vY29tbW9uL2xleGVyXCI7XHJcbmltcG9ydCBXaGl0ZXNwYWNlVG9rZW4gZnJvbSBcIi4uL3Rva2VuL25vblNpZ25pZmljYW50L3doaXRlc3BhY2VcIjtcclxuaW1wb3J0IFJlZ3VsYXJFeHByZXNzaW9uVG9rZW4gZnJvbSBcIi4uL3Rva2VuL3NpZ25pZmljYW50L3JlZ3VsYXJFeHByZXNzaW9uXCI7XHJcbmltcG9ydCBFbmRPZkxpbmVOb25TaWduaWZpY2FudFRva2VuIGZyb20gXCIuLi90b2tlbi9ub25TaWduaWZpY2FudC9lbmRPZkxpbmVcIjtcclxuaW1wb3J0IFNpbmdseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiBmcm9tIFwiLi4vdG9rZW4vc2lnbmlmaWNhbnQvc3RyaW5nTGl0ZXJhbC9zaW5nbHlRdW90ZWRcIjtcclxuaW1wb3J0IERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiBmcm9tIFwiLi4vdG9rZW4vc2lnbmlmaWNhbnQvc3RyaW5nTGl0ZXJhbC9kb3VibHlRdW90ZWRcIjtcclxuaW1wb3J0IFB5dGhvblN0eWxlU2luZ2xlTGluZUNvbW1lbnRUb2tlbiBmcm9tIFwiLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9zaW5nbGVMaW5lL3B5dGhvblN0eWxlXCI7XHJcbmltcG9ydCBFbmRPZkxpbmVDb21tZW50Tm9uU2lnbmlmaWNhbnRUb2tlbiBmcm9tIFwiLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9lbmRPZkxpbmVcIjtcclxuaW1wb3J0IFB5dGhvblN0eWxlRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gZnJvbSBcIi4uL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL2VuZE9mL3B5dGhvblN0eWxlXCI7XHJcbmltcG9ydCBQeXRob25TdHlsZVN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gZnJvbSBcIi4uL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL3N0YXJ0T2YvcHl0aG9uU3R5bGVcIjtcclxuaW1wb3J0IFB5dGhvblN0eWxlTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gZnJvbSBcIi4uL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL21pZGRsZU9mL3B5dGhvblN0eWxlXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCYXNpY0xleGVyIGV4dGVuZHMgQ29tbW9uTGV4ZXIge1xyXG4gIHN0YXRpYyBlbnRyaWVzID0gZW50cmllcztcclxuXHJcbiAgc3RhdGljIEVuZE9mTGluZVRva2VuID0gRW5kT2ZMaW5lTm9uU2lnbmlmaWNhbnRUb2tlbjsgLy8vXHJcblxyXG4gIHN0YXRpYyBXaGl0ZXNwYWNlVG9rZW4gPSBXaGl0ZXNwYWNlVG9rZW47XHJcblxyXG4gIHN0YXRpYyBFbmRPZkxpbmVDb21tZW50VG9rZW4gPSBFbmRPZkxpbmVDb21tZW50Tm9uU2lnbmlmaWNhbnRUb2tlbjsgLy8vXHJcblxyXG4gIHN0YXRpYyBSZWd1bGFyRXhwcmVzc2lvblRva2VuID0gUmVndWxhckV4cHJlc3Npb25Ub2tlbjtcclxuXHJcbiAgc3RhdGljIFNpbmdsZUxpbmVDb21tZW50VG9rZW4gPSBQeXRob25TdHlsZVNpbmdsZUxpbmVDb21tZW50VG9rZW47IC8vL1xyXG5cclxuICBzdGF0aWMgRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBQeXRob25TdHlsZUVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuOyAvLy9cclxuXHJcbiAgc3RhdGljIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBQeXRob25TdHlsZVN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW47IC8vL1xyXG5cclxuICBzdGF0aWMgTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBQeXRob25TdHlsZU1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuOyAvLy9cclxuXHJcbiAgc3RhdGljIFNpbmdseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiA9IFNpbmdseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbjtcclxuXHJcbiAgc3RhdGljIERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiA9IERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbjtcclxuXHJcbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkgeyByZXR1cm4gQ29tbW9uTGV4ZXIuZnJvbU5vdGhpbmcoQmFzaWNMZXhlcik7IH1cclxuXHJcbiAgc3RhdGljIGZyb21SdWxlcyhydWxlcykgeyByZXR1cm4gQ29tbW9uTGV4ZXIuZnJvbVJ1bGVzKEJhc2ljTGV4ZXIsIHJ1bGVzKTsgfVxyXG5cclxuICBzdGF0aWMgZnJvbUVudHJpZXMoZW50cmllcykgeyByZXR1cm4gQ29tbW9uTGV4ZXIuZnJvbUVudHJpZXMoQmFzaWNMZXhlciwgZW50cmllcyk7IH1cclxufVxyXG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFNpZ25pZmljYW50VG9rZW4gZnJvbSBcIi4uLy4uL3Rva2VuL3NpZ25pZmljYW50XCI7XG5cbmltcG9ydCB7IGVuZE9mTGluZVR5cGUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW5kT2ZMaW5lU2lnbmlmaWNhbnRUb2tlbiBleHRlbmRzIFNpZ25pZmljYW50VG9rZW4ge1xuICBjbG9uZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikgeyByZXR1cm4gc3VwZXIuY2xvbmUoRW5kT2ZMaW5lU2lnbmlmaWNhbnRUb2tlbiwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOyB9XG5cbiAgYXNIVE1MKCkge1xuICAgIGNvbnN0IGh0bWwgPSB0aGlzLmlubmVySFRNTDsgIC8vL1xuXG4gICAgcmV0dXJuIGh0bWw7XG4gIH1cblxuICBzdGF0aWMgdHlwZSA9IGVuZE9mTGluZVR5cGU7XG5cbiAgc3RhdGljIHJlZ3VsYXJFeHByZXNzaW9uID0gL14oPzpcXHJcXG58XFxyfFxcbikvO1xuXG4gIHN0YXRpYyBtYXRjaChjb250ZW50KSB7IHJldHVybiBTaWduaWZpY2FudFRva2VuLm1hdGNoKEVuZE9mTGluZVNpZ25pZmljYW50VG9rZW4sIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIFNpZ25pZmljYW50VG9rZW4uZnJvbUNvbnRlbnQoRW5kT2ZMaW5lU2lnbmlmaWNhbnRUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgU2lnbmlmaWNhbnRUb2tlbiBmcm9tIFwiLi4vLi4vLi4vdG9rZW4vc2lnbmlmaWNhbnRcIjtcblxuaW1wb3J0IHsgZW5kT2ZMaW5lQ29tbWVudFR5cGUgfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW5kT2ZMaW5lQ29tbWVudFNpZ25pZmljYW50VG9rZW4gZXh0ZW5kcyBTaWduaWZpY2FudFRva2VuIHtcbiAgY2xvbmUoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pIHsgcmV0dXJuIHN1cGVyLmNsb25lKEVuZE9mTGluZUNvbW1lbnRTaWduaWZpY2FudFRva2VuLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7IH1cblxuICBhc0hUTUwoKSB7XG4gICAgY29uc3QgaHRtbCA9IHRoaXMuaW5uZXJIVE1MOyAgLy8vXG5cbiAgICByZXR1cm4gaHRtbDtcbiAgfVxuXG4gIGlzSW5Db21tZW50UHJlc2VydmluZygpIHtcbiAgICBjb25zdCBpbkNvbW1lbnRQcmVzZXJ2aW5nID0gdHJ1ZTtcblxuICAgIHJldHVybiBpbkNvbW1lbnRQcmVzZXJ2aW5nO1xuICB9XG5cbiAgc3RhdGljIHR5cGUgPSBlbmRPZkxpbmVDb21tZW50VHlwZTtcblxuICBzdGF0aWMgcmVndWxhckV4cHJlc3Npb24gPSAvXig/OlxcclxcbnxcXHJ8XFxuKS87XG5cbiAgc3RhdGljIG1hdGNoKGNvbnRlbnQpIHsgcmV0dXJuIFNpZ25pZmljYW50VG9rZW4ubWF0Y2goRW5kT2ZMaW5lQ29tbWVudFNpZ25pZmljYW50VG9rZW4sIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIFNpZ25pZmljYW50VG9rZW4uZnJvbUNvbnRlbnQoRW5kT2ZMaW5lQ29tbWVudFNpZ25pZmljYW50VG9rZW4sIGNvbnRlbnQpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFNpbmdsZUxpbmVDb21tZW50VG9rZW4gZnJvbSBcIi4uLy4uLy4uLy4uL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvc2luZ2xlTGluZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDU3R5bGVTaW5nbGVMaW5lQ29tbWVudFRva2VuIGV4dGVuZHMgU2luZ2xlTGluZUNvbW1lbnRUb2tlbiB7XG4gIGNsb25lKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSB7IHJldHVybiBzdXBlci5jbG9uZShDU3R5bGVTaW5nbGVMaW5lQ29tbWVudFRva2VuLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7IH1cblxuICBzdGF0aWMgcmVndWxhckV4cHJlc3Npb24gPSAvXlxcL1xcL1teXFxyXFxuXSovO1xuXG4gIHN0YXRpYyBtYXRjaChjb250ZW50KSB7IHJldHVybiBTaW5nbGVMaW5lQ29tbWVudFRva2VuLm1hdGNoKENTdHlsZVNpbmdsZUxpbmVDb21tZW50VG9rZW4sIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIFNpbmdsZUxpbmVDb21tZW50VG9rZW4uZnJvbUNvbnRlbnQoQ1N0eWxlU2luZ2xlTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL2VuZE9mXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENTdHlsZUVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIGV4dGVuZHMgRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4ge1xuICBjbG9uZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikgeyByZXR1cm4gc3VwZXIuY2xvbmUoQ1N0eWxlRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsgfVxuXG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eXFwqXFwvLztcblxuICBzdGF0aWMgbWF0Y2goY29udGVudCkgeyByZXR1cm4gRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4ubWF0Y2goQ1N0eWxlRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLmZyb21Db250ZW50KENTdHlsZUVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLCBjb250ZW50KTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIGZyb20gXCIuLi8uLi8uLi8uLi8uLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9zdGFydE9mXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENTdHlsZVN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gZXh0ZW5kcyBTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIHtcbiAgY2xvbmUoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pIHsgcmV0dXJuIHN1cGVyLmNsb25lKENTdHlsZVN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsgfVxuXG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eXFwvXFwqLztcblxuICBzdGF0aWMgbWF0Y2goY29udGVudCkgeyByZXR1cm4gU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbi5tYXRjaChDU3R5bGVTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChjb250ZW50KSB7IHJldHVybiBTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLmZyb21Db250ZW50KENTdHlsZVN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sIGNvbnRlbnQpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuIGZyb20gXCIuLi8uLi8uLi8uLi8uLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9taWRkbGVPZlwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDU3R5bGVNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiBleHRlbmRzIE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuIHtcbiAgY2xvbmUoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pIHsgcmV0dXJuIHN1cGVyLmNsb25lKENTdHlsZU1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7IH1cblxuICBzdGF0aWMgcmVndWxhckV4cHJlc3Npb24gPSAvXig/OlteXFxyXFxuXSs/KD89XFwqXFwvKXxbXlxcclxcbl0rKS87XG5cbiAgc3RhdGljIG1hdGNoKGNvbnRlbnQpIHsgcmV0dXJuIE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuLm1hdGNoKENTdHlsZU1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChjb250ZW50KSB7IHJldHVybiBNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbi5mcm9tQ29udGVudChDU3R5bGVNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIFJ1bGUgfSBmcm9tIFwiLi9ydWxlXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHR5cGVzIH0gZnJvbSBcIi4vdHlwZXNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwiLi9zcGVjaWFsU3ltYm9sc1wiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIEJORkxleGVyIH0gZnJvbSBcIi4vYm5mL2xleGVyXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEJhc2ljTGV4ZXIgfSBmcm9tIFwiLi9iYXNpYy9sZXhlclwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDb21tb25MZXhlciB9IGZyb20gXCIuL2NvbW1vbi9sZXhlclwiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIFNpZ25pZmljYW50VG9rZW4gfSBmcm9tIFwiLi90b2tlbi9zaWduaWZpY2FudFwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBOb25TaWduaWZpY2FudFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vbm9uU2lnbmlmaWNhbnRcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRW5kT2ZMaW5lU2lnbmlmaWNhbnRUb2tlbiB9IGZyb20gXCIuL3Rva2VuL3NpZ25pZmljYW50L2VuZE9mTGluZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBFbmRPZkxpbmVOb25TaWduaWZpY2FudFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvZW5kT2ZMaW5lXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEVuZE9mTGluZUNvbW1lbnRTaWduaWZpY2FudFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vc2lnbmlmaWNhbnQvY29tbWVudC9lbmRPZkxpbmVcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRW5kT2ZMaW5lQ29tbWVudE5vblNpZ25pZmljYW50VG9rZW4gfSBmcm9tIFwiLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L2VuZE9mTGluZVwiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIFdoaXRlc3BhY2VUb2tlbiB9IGZyb20gXCIuL3Rva2VuL25vblNpZ25pZmljYW50L3doaXRlc3BhY2VcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBTdHJpbmdMaXRlcmFsVG9rZW4gfSBmcm9tIFwiLi90b2tlbi9zaWduaWZpY2FudC9zdHJpbmdMaXRlcmFsXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFJlZ3VsYXJFeHByZXNzaW9uVG9rZW4gfSBmcm9tIFwiLi90b2tlbi9zaWduaWZpY2FudC9yZWd1bGFyRXhwcmVzc2lvblwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBTaW5nbHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gfSBmcm9tIFwiLi90b2tlbi9zaWduaWZpY2FudC9zdHJpbmdMaXRlcmFsL3NpbmdseVF1b3RlZFwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gfSBmcm9tIFwiLi90b2tlbi9zaWduaWZpY2FudC9zdHJpbmdMaXRlcmFsL2RvdWJseVF1b3RlZFwiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIFNpbmdsZUxpbmVDb21tZW50VG9rZW4gfSBmcm9tIFwiLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L3NpbmdsZUxpbmVcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gfSBmcm9tIFwiLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9lbmRPZlwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvc3RhcnRPZlwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiB9IGZyb20gXCIuL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL21pZGRsZU9mXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENTdHlsZVNpbmdsZUxpbmVDb21tZW50VG9rZW4gfSBmcm9tIFwiLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L3NpbmdsZUxpbmUvY1N0eWxlXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENTdHlsZUVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvZW5kT2YvY1N0eWxlXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENTdHlsZVN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gfSBmcm9tIFwiLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9zdGFydE9mL2NTdHlsZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDU3R5bGVNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiB9IGZyb20gXCIuL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL21pZGRsZU9mL2NTdHlsZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBQeXRob25TdHlsZVNpbmdsZUxpbmVDb21tZW50VG9rZW4gfSBmcm9tIFwiLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L3NpbmdsZUxpbmUvcHl0aG9uU3R5bGVcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUHl0aG9uU3R5bGVFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiB9IGZyb20gXCIuL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL2VuZE9mL3B5dGhvblN0eWxlXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFB5dGhvblN0eWxlU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiB9IGZyb20gXCIuL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL3N0YXJ0T2YvcHl0aG9uU3R5bGVcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUHl0aG9uU3R5bGVNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiB9IGZyb20gXCIuL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL21pZGRsZU9mL3B5dGhvblN0eWxlXCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5jb25zdCBlbnRyaWVzID0gW1xyXG5cclxuICB7IFwiY29sb3VyXCI6IFwiXiMoPzpbMC05YS1mQS1GXXs2fXxbMC05YS1mQS1GXXszfSlcIiB9LFxyXG5cclxuICB7IFwia2V5d29yZFwiOiBcIl4oPzohaW1wb3J0YW50fEBtZWRpYSlcIiB9LFxyXG5cclxuICB7IFwicGVyY2VudGFnZVwiOiBcIl4oPzpbMC05XSt8WzAtOV0qXFxcXC5bMC05XSspXFxcXCVcIiB9LFxyXG5cclxuICB7IFwiZnJlcXVlbmN5XCI6IFwiXig/OlswLTldK3xbMC05XSpcXFxcLlswLTldKykoPzpoenxraHopXCIgfSxcclxuXHJcbiAgeyBcImZyYWN0aW9uXCI6IFwiXlsxLTldWzAtOV0qP2ZyXCIgfSxcclxuXHJcbiAgeyBcImxlbmd0aFwiOiBcIl4oPzpbMC05XSt8WzAtOV0qXFxcXC5bMC05XSspKD86cHh8Y218bW18aW58cHR8cGMpXCIgfSxcclxuXHJcbiAgeyBcImFuZ2xlXCI6IFwiXig/OlswLTldK3xbMC05XSpcXFxcLlswLTldKykoPzpkZWd8cmFkfGdyYWQpXCIgfSxcclxuXHJcbiAgeyBcInRpbWVcIjogXCJeKD86WzAtOV0rfFswLTldKlxcXFwuWzAtOV0rKSg/OnN8bXMpXCIgfSxcclxuXHJcbiAgeyBcInJlbXNcIjogXCJeKD86WzAtOV0rfFswLTldKlxcXFwuWzAtOV0rKXJlbVwiIH0sXHJcblxyXG4gIHsgXCJlbXNcIjogXCJeKD86WzAtOV0rfFswLTldKlxcXFwuWzAtOV0rKWVtXCIgfSxcclxuXHJcbiAgeyBcIm51bWJlclwiOiBcIl5bMC05XSt8WzAtOV0qXFxcXC5bMC05XStcIiB9LFxyXG5cclxuICB7IFwic3BlY2lhbFwiOiBcIl47fDo6fDp8XFxcXC58LHwvfFxcXFx8PXx+PXw9fD58XFxcXHt8XFxcXH18XFxcXCh8XFxcXCl8XFxcXFt8XFxcXF1cIiB9LFxyXG5cclxuICB7IFwib3BlcmF0b3JcIjogXCJeXig/OmFuZHxub3R8b25seSkkXCIgfSxcclxuXHJcbiAgeyBcImlkZW50aWZpZXJcIjogXCJeW19hLXpBLVowLTktXStcIiB9LFxyXG5cclxuICB7IFwidW5hcnktb3BlcmF0b3JcIjogXCJeXFxcXCt8XFxcXC1cIiB9LFxyXG5cclxuICB7IFwidW5hc3NpZ25lZFwiOiBcIl5bXlxcXFxzXStcIiB9XHJcblxyXG5dO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZW50cmllcztcclxuIiwgIlwidXNlIHN0cmljdFwiO1xyXG5cclxuaW1wb3J0IHsgQ29tbW9uTGV4ZXIsIFdoaXRlc3BhY2VUb2tlbiwgRW5kT2ZMaW5lTm9uU2lnbmlmaWNhbnRUb2tlbiwgRG91Ymx5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xyXG5cclxuaW1wb3J0IGVudHJpZXMgZnJvbSBcIi4vZW50cmllc1wiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ1NTTGV4ZXIgZXh0ZW5kcyBDb21tb25MZXhlciB7XHJcbiAgc3RhdGljIGVudHJpZXMgPSBlbnRyaWVzO1xyXG5cclxuICBzdGF0aWMgRW5kT2ZMaW5lVG9rZW4gPSBFbmRPZkxpbmVOb25TaWduaWZpY2FudFRva2VuOyAvLy9cclxuXHJcbiAgc3RhdGljIFdoaXRlc3BhY2VUb2tlbiA9IFdoaXRlc3BhY2VUb2tlbjtcclxuXHJcbiAgc3RhdGljIEVuZE9mTGluZUNvbW1lbnRUb2tlbiA9IG51bGw7IC8vL1xyXG5cclxuICBzdGF0aWMgUmVndWxhckV4cHJlc3Npb25Ub2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBTaW5nbGVMaW5lQ29tbWVudFRva2VuID0gbnVsbDsgLy8vXHJcblxyXG4gIHN0YXRpYyBFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiA9IG51bGw7IC8vL1xyXG5cclxuICBzdGF0aWMgU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiA9IG51bGw7IC8vL1xyXG5cclxuICBzdGF0aWMgTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBudWxsOyAvLy9cclxuXHJcbiAgc3RhdGljIFNpbmdseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gPSBEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW47XHJcblxyXG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHsgcmV0dXJuIENvbW1vbkxleGVyLmZyb21Ob3RoaW5nKENTU0xleGVyKTsgfVxyXG5cclxuICBzdGF0aWMgZnJvbVJ1bGVzKHJ1bGVzKSB7IHJldHVybiBDb21tb25MZXhlci5mcm9tUnVsZXMoQ1NTTGV4ZXIsIHJ1bGVzKTsgfVxyXG5cclxuICBzdGF0aWMgZnJvbUVudHJpZXMoZW50cmllcykgeyByZXR1cm4gQ29tbW9uTGV4ZXIuZnJvbUVudHJpZXMoQ1NTTGV4ZXIsIGVudHJpZXMpOyB9XHJcbn1cclxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBibmYgPSBgXG5cbiAgICAgIGRvY3VtZW50ICAgICAgICAgICAgICAgICA6Oj0gICggcnVsZSB8IGVycm9yICkrIDtcblxuICAgICAgcnVsZSAgICAgICAgICAgICAgICAgICAgIDo6PSAgbmFtZSBhbWJpZ3VvdXNNb2RpZmllcj8gXCI6Oj1cIiBkZWZpbml0aW9ucyBcIjtcIiA7XG5cbiAgICAgIG5hbWUgICAgICAgICAgICAgICAgICAgICA6Oj0gIFtuYW1lXSA7XG5cbiAgICAgIGRlZmluaXRpb25zICAgICAgICAgICAgICA6Oj0gIGRlZmluaXRpb24gKCBcInxcIiBkZWZpbml0aW9uICkqIDtcblxuICAgICAgZGVmaW5pdGlvbiAgICAgICAgICAgICAgIDo6PSAgcGFydCsgO1xuIFxuICAgICAgcGFydCAgICAgICAgICAgICAgICAgICAgIDo6PSAgbm9uVGVybWluYWxQYXJ0IHF1YW50aWZpZXIqXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIHRlcm1pbmFsUGFydCBxdWFudGlmaWVyKlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBub1doaXRlc3BhY2VQYXJ0XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDtcblxuICAgICAgbm9uVGVybWluYWxQYXJ0ICAgICAgICAgIDo6PSAgY2hvaWNlT2ZQYXJ0c1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBzZXF1ZW5jZU9mUGFydHNcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgcnVsZU5hbWUgbG9va0FoZWFkTW9kaWZpZXI/XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDtcblxuICAgICAgdGVybWluYWxQYXJ0ICAgICAgICAgICAgIDo6PSAgc2lnbmlmaWNhbnRUb2tlblR5cGVcbiAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICByZWd1bGFyRXhwcmVzc2lvblxuIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgdGVybWluYWxTeW1ib2xcbiAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBlbmRPZkxpbmVcbiAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICB3aWxkY2FyZFxuICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgbm9XaGl0ZXNwYWNlUGFydCAgICAgICAgIDo6PSAgXCI8Tk9fV0hJVEVTUEFDRT5cIiA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cbiAgICAgIGNob2ljZU9mUGFydHMgICAgICAgICAgICA6Oj0gIFwiKFwiIHBhcnQgKCBcInxcIiBwYXJ0ICkrIFwiKVwiIDtcblxuICAgICAgc2VxdWVuY2VPZlBhcnRzICAgICAgICAgIDo6PSAgXCIoXCIgcGFydCBwYXJ0KyBcIilcIiA7XG5cbiAgICAgIHJ1bGVOYW1lICAgICAgICAgICAgICAgICA6Oj0gIFtuYW1lXSA7XG5cbiAgICAgIHNpZ25pZmljYW50VG9rZW5UeXBlICAgICA6Oj0gIFt0eXBlXSA7XG5cbiAgICAgIHJlZ3VsYXJFeHByZXNzaW9uICAgICAgICA6Oj0gIFtyZWd1bGFyLWV4cHJlc3Npb25dIDtcblxuICAgICAgdGVybWluYWxTeW1ib2wgICAgICAgICAgIDo6PSAgW3N0cmluZy1saXRlcmFsXSA7XG5cbiAgICAgIGVuZE9mTGluZSAgICAgICAgICAgICAgICA6Oj0gIFwiPEVORF9PRl9MSU5FPlwiIDtcblxuICAgICAgd2lsZGNhcmQgICAgICAgICAgICAgICAgIDo6PSAgXCIuXCIgO1xuXG4gICAgICBxdWFudGlmaWVyICAgICAgICAgICAgICAgOjo9ICBvcHRpb25hbFF1YW50aWZpZXJcbiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIG9uZU9yTW9yZVF1YW50aWZpZXJcbiAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICB6ZXJvT3JNb3JlUXVhbnRpZmllclxuICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDtcblxuICAgICAgYW1iaWd1b3VzTW9kaWZpZXIgICAgICAgIDo6PSAgPE5PX1dISVRFU1BBQ0U+XCIhXCIgO1xuXG4gICAgICBsb29rQWhlYWRNb2RpZmllciAgICAgICAgOjo9ICA8Tk9fV0hJVEVTUEFDRT5cIi4uLlwiIDtcblxuICAgICAgb3B0aW9uYWxRdWFudGlmaWVyICAgICAgIDo6PSAgPE5PX1dISVRFU1BBQ0U+XCI/XCIgO1xuXG4gICAgICBvbmVPck1vcmVRdWFudGlmaWVyICAgICAgOjo9ICA8Tk9fV0hJVEVTUEFDRT5cIitcIiA7XG5cbiAgICAgIHplcm9Pck1vcmVRdWFudGlmaWVyICAgICA6Oj0gIDxOT19XSElURVNQQUNFPlwiKlwiIDtcblxuICAgICAgZXJyb3IgICAgICAgICAgICAgICAgICAgIDo6PSAgLiA7XG5cbmA7XG5cbmV4cG9ydCBkZWZhdWx0IGJuZjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IEVNUFRZX1NUUklORyA9IFwiXCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGNoYXJhY3RlcnMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcblxuY29uc3QgeyBTUEFDRV9DSEFSQUNURVIgfSA9IGNoYXJhY3RlcnM7XG5cbmV4cG9ydCBmdW5jdGlvbiBwYWRkaW5nRnJvbVBhZGRpbmdMZW5ndGgocGFkZGluZ0xlbmd0aCkge1xuICBsZXQgcGFkZGluZyA9IEVNUFRZX1NUUklORztcblxuICBmb3IgKGxldCBwb3NpdGlvbiA9IDA7IHBvc2l0aW9uIDwgcGFkZGluZ0xlbmd0aDsgcG9zaXRpb24rKykge1xuICAgIHBhZGRpbmcgKz0gU1BBQ0VfQ0hBUkFDVEVSO1xuICB9XG5cbiAgcmV0dXJuIHBhZGRpbmc7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IHBhZGRpbmdGcm9tUGFkZGluZ0xlbmd0aCB9IGZyb20gXCIuL3V0aWxpdGllcy9zdHJpbmdcIjtcblxuY29uc3QgeyBleGNsYW1hdGlvbk1hcmsgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSdWxlIHtcbiAgY29uc3RydWN0b3IobmFtZSwgYW1iaWd1b3VzLCBkZWZpbml0aW9ucywgTm9uVGVybWluYWxOb2RlKSB7XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICB0aGlzLmFtYmlndW91cyA9IGFtYmlndW91cztcbiAgICB0aGlzLmRlZmluaXRpb25zID0gZGVmaW5pdGlvbnM7XG4gICAgdGhpcy5Ob25UZXJtaW5hbE5vZGUgPSBOb25UZXJtaW5hbE5vZGU7XG4gIH1cblxuICBnZXROYW1lKCkge1xuICAgIHJldHVybiB0aGlzLm5hbWU7XG4gIH1cblxuICBpc0FtYmlndW91cygpIHtcbiAgICByZXR1cm4gdGhpcy5hbWJpZ3VvdXM7XG4gIH1cblxuICBnZXREZWZpbml0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5kZWZpbml0aW9ucztcbiAgfVxuXG4gIGdldE5vblRlcm1pbmFsTm9kZSgpIHtcbiAgICByZXR1cm4gdGhpcy5Ob25UZXJtaW5hbE5vZGU7XG4gIH1cblxuICBzZXROYW1lKG5hbWUpIHtcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICB9XG5cbiAgc2V0QW1iaWd1b3VzKGFtYmlndW91cykge1xuICAgIHRoaXMuYW1iaWd1b3VzID0gYW1iaWd1b3VzO1xuICB9XG5cbiAgc2V0RGVmaW5pdGlvbnMoZGVmaW5pdGlvbnMpIHtcbiAgICB0aGlzLmRlZmluaXRpb25zID0gZGVmaW5pdGlvbnM7XG4gIH1cblxuICBzZXROb25UZXJtaW5hbE5vZGUoTm9uVGVybWluYWxOb2RlKSB7XG4gICAgdGhpcy5Ob25UZXJtaW5hbE5vZGUgPSBOb25UZXJtaW5hbE5vZGU7XG4gIH1cblxuICBhZGREZWZpbml0aW9uKGRlZmluaXRpb24sIHBvc2l0aW9uKSB7XG4gICAgY29uc3QgZGVmaW5pdGlvbnNJbmNsdWRlc0RlZmluaXRpb24gPSB0aGlzLmRlZmluaXRpb25zLmluY2x1ZGVzKGRlZmluaXRpb24pO1xuXG4gICAgaWYgKCFkZWZpbml0aW9uc0luY2x1ZGVzRGVmaW5pdGlvbikge1xuICAgICAgaWYgKHBvc2l0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgZGVmaW5pdGlvbnNMZW5ndGggPSB0aGlzLmRlZmluaXRpb25zLmxlbmd0aDtcblxuICAgICAgICBwb3NpdGlvbiA9IGRlZmluaXRpb25zTGVuZ3RoOyAvLy9cbiAgICAgIH1cblxuICAgICAgY29uc3Qgc3RhcnQgPSBwb3NpdGlvbiwgLy8vXG4gICAgICAgICAgICBkZWxldGVDb3VudCA9IDA7XG5cbiAgICAgIHRoaXMuZGVmaW5pdGlvbnMuc3BsaWNlKHN0YXJ0LCBkZWxldGVDb3VudCwgZGVmaW5pdGlvbik7XG4gICAgfVxuICB9XG5cbiAgcmVtb3ZlRGVmaW5pdGlvbihkZWZpbml0aW9uKSB7XG4gICAgY29uc3QgZGVmaW5pdGlvbnNJbmNsdWRlc0RlZmluaXRpb24gPSB0aGlzLmRlZmluaXRpb25zLmluY2x1ZGVzKGRlZmluaXRpb24pO1xuXG4gICAgaWYgKGRlZmluaXRpb25zSW5jbHVkZXNEZWZpbml0aW9uKSB7XG4gICAgICBjb25zdCBkZWZpbml0aW9uSW5kZXggPSB0aGlzLmRlZmluaXRpb25zLmluZGV4T2YoZGVmaW5pdGlvbiksXG4gICAgICAgICAgICBzdGFydCA9IGRlZmluaXRpb25JbmRleCwgIC8vL1xuICAgICAgICAgICAgZGVsZXRlQ291bnQgPSAxO1xuXG4gICAgICB0aGlzLmRlZmluaXRpb25zLnNwbGljZShzdGFydCwgZGVsZXRlQ291bnQpO1xuICAgIH1cbiAgfVxuXG4gIHJlcGxhY2VEZWZpbml0aW9uKHJlcGxhY2VEZWZpbml0aW9uLCByZXBsYWNlbWVudERlZmluaXRpb24pIHtcbiAgICBjb25zdCByZXBsYWNlRGVmaW5pdGlvbkluZGV4ID0gdGhpcy5kZWZpbml0aW9ucy5pbmRleE9mKHJlcGxhY2VEZWZpbml0aW9uKTtcblxuICAgIGlmIChyZXBsYWNlRGVmaW5pdGlvbkluZGV4ID4gLTEpIHtcbiAgICAgIGNvbnN0IHN0YXJ0ID0gcmVwbGFjZURlZmluaXRpb25JbmRleCwgLy8vXG4gICAgICAgICAgICBkZWxldGVDb3VudCA9IDE7XG5cbiAgICAgIHRoaXMuZGVmaW5pdGlvbnMuc3BsaWNlKHN0YXJ0LCBkZWxldGVDb3VudCwgcmVwbGFjZW1lbnREZWZpbml0aW9uKVxuICAgIH1cbiAgfVxuXG4gIHBhcnNlKHN0YXRlLCBjYWxsYmFjaykge1xuICAgIGxldCBydWxlTm9kZSA9IG51bGw7XG5cbiAgICBzdGF0ZS5pbmNyZWFzZURlcHRoKCk7XG5cbiAgICBjb25zdCB0b29EZWVwID0gc3RhdGUuaXNUb29EZWVwKCk7XG5cbiAgICBpZiAodG9vRGVlcCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgcGFyc2UgdHJlZSBpcyB0b28gZGVlcCBhdCBydWxlIFwiJHt0aGlzLm5hbWV9XCIuYCk7XG4gICAgfVxuXG4gICAgbGV0IHBhcnNlZCxcbiAgICAgICAgZGVmaW5pdGlvbk5vZGVzO1xuXG4gICAgdGhpcy5kZWZpbml0aW9ucy5zb21lKChkZWZpbml0aW9uKSA9PiB7XG4gICAgICBkZWZpbml0aW9uTm9kZXMgPSBbXTtcblxuICAgICAgcGFyc2VkID0gdGhpcy5wYXJzZURlZmluaXRpb24oZGVmaW5pdGlvbiwgZGVmaW5pdGlvbk5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spO1xuXG4gICAgICBpZiAocGFyc2VkKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKHBhcnNlZCkge1xuICAgICAgY29uc3QgcnVsZU5hbWUgPSB0aGlzLm5hbWUsIC8vL1xuICAgICAgICAgICAgY2hpbGROb2RlcyA9IGRlZmluaXRpb25Ob2RlcywgIC8vL1xuICAgICAgICAgICAgbm9uVGVybWluYWxOb2RlID0gdGhpcy5Ob25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2Rlcyk7XG5cbiAgICAgIHJ1bGVOb2RlID0gbm9uVGVybWluYWxOb2RlOyAvLy9cbiAgICB9XG5cbiAgICBzdGF0ZS5kZWNyZWFzZURlcHRoKCk7XG5cbiAgICByZXR1cm4gcnVsZU5vZGU7XG4gIH1cblxuICBwYXJzZURlZmluaXRpb24oZGVmaW5pdGlvbiwgbm9kZXMsIHN0YXRlLCBjYWxsYmFjaykge1xuICAgIGxldCBwYXJzZWQ7XG5cbiAgICBjb25zdCBzYXZlZEluZGV4ID0gc3RhdGUuZ2V0U2F2ZWRJbmRleCgpO1xuXG4gICAgcGFyc2VkID0gZGVmaW5pdGlvbi5wYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrKTtcblxuICAgIGlmICghcGFyc2VkKSB7XG4gICAgICBzdGF0ZS5iYWNrdHJhY2soc2F2ZWRJbmRleCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfVxuXG4gIGFzU3RyaW5nKG1heGltdW1SdWxlTmFtZUxlbmd0aCwgbXVsdGlMaW5lID0gdHJ1ZSkge1xuICAgIGNvbnN0IGRlZmluaXRpb25zTGVuZ3RoID0gdGhpcy5kZWZpbml0aW9ucy5sZW5ndGg7XG5cbiAgICBtdWx0aUxpbmUgPSBtdWx0aUxpbmUgJiYgKGRlZmluaXRpb25zTGVuZ3RoID4gMSk7ICAvLy9cblxuICAgIGNvbnN0IG1heGltdW1QYWRkaW5nID0gcGFkZGluZ0Zyb21QYWRkaW5nTGVuZ3RoKG1heGltdW1SdWxlTmFtZUxlbmd0aCksXG4gICAgICAgICAgZGVmaW5pdGlvbnNTdHJpbmcgPSB0aGlzLmRlZmluaXRpb25zLnJlZHVjZSgoZGVmaW5pdGlvbnNTdHJpbmcsIGRlZmluaXRpb24pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRlZmluaXRpb25TdHJpbmcgPSBkZWZpbml0aW9uLmFzU3RyaW5nKCk7XG5cbiAgICAgICAgICAgIGlmIChkZWZpbml0aW9uc1N0cmluZyA9PT0gRU1QVFlfU1RSSU5HKSB7XG4gICAgICAgICAgICAgIGRlZmluaXRpb25zU3RyaW5nID0gZGVmaW5pdGlvblN0cmluZzsgLy8vXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBkZWZpbml0aW9uc1N0cmluZyA9IG11bHRpTGluZSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAke2RlZmluaXRpb25zU3RyaW5nfVxuXG4ke21heGltdW1QYWRkaW5nfSAgIHwgJHtkZWZpbml0aW9uU3RyaW5nfWAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAke2RlZmluaXRpb25zU3RyaW5nfSB8ICR7ZGVmaW5pdGlvblN0cmluZ31gO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gZGVmaW5pdGlvbnNTdHJpbmc7XG4gICAgICAgICAgfSwgRU1QVFlfU1RSSU5HKSxcbiAgICAgICAgICBydWxlTmFtZSA9IHRoaXMubmFtZSwgLy8vXG4gICAgICAgICAgcnVsZU5hbWVMZW5ndGggPSBydWxlTmFtZS5sZW5ndGgsXG4gICAgICAgICAgYW1iaWd1b3VzU3RyaW5nID0gdGhpcy5hbWJpZ3VvdXMgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjbGFtYXRpb25NYXJrIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRU1QVFlfU1RSSU5HLFxuICAgICAgICAgIGFtYmlndW91c1N0cmluZ0xlbmd0aCA9IGFtYmlndW91c1N0cmluZy5sZW5ndGgsXG4gICAgICAgICAgcGFkZGluZ0xlbmd0aCA9IG1heGltdW1SdWxlTmFtZUxlbmd0aCAtIHJ1bGVOYW1lTGVuZ3RoIC0gYW1iaWd1b3VzU3RyaW5nTGVuZ3RoLFxuICAgICAgICAgIHBhZGRpbmcgPSBwYWRkaW5nRnJvbVBhZGRpbmdMZW5ndGgocGFkZGluZ0xlbmd0aCk7XG5cbiAgICBjb25zdCBzZW1pY29sb25TdHJpbmcgPSBtdWx0aUxpbmUgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgXG5cbiR7bWF4aW11bVBhZGRpbmd9ICAgO2AgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiIDtcIixcbiAgICAgICAgICBzdHJpbmcgPSBgXG5cbiR7dGhpcy5uYW1lfSR7YW1iaWd1b3VzU3RyaW5nfSR7cGFkZGluZ30gOjo9ICR7ZGVmaW5pdGlvbnNTdHJpbmd9JHtzZW1pY29sb25TdHJpbmd9YDtcblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGUoQ2xhc3MsIHJ1bGUpIHtcbiAgICBpZiAocnVsZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBydWxlID0gQ2xhc3M7XG4gICAgICBDbGFzcyA9IFJ1bGU7XG4gICAgfVxuICAgIFxuICAgIGNvbnN0IG5hbWUgPSBydWxlLmdldE5hbWUoKSxcbiAgICAgICAgICBhbWJpZ3VvdXMgPSBydWxlLmlzQW1iaWd1b3VzKCksXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBydWxlLmdldERlZmluaXRpb25zKCksXG4gICAgICAgICAgTm9uVGVybWluYWxOb2RlID0gcnVsZS5nZXROb25UZXJtaW5hbE5vZGUoKTtcblxuICAgIHJ1bGUgPSBuZXcgQ2xhc3MobmFtZSwgYW1iaWd1b3VzLCBkZWZpbml0aW9ucywgTm9uVGVybWluYWxOb2RlKTtcblxuICAgIHJldHVybiBydWxlO1xuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfTUFYSU1VTV9ERVBUSCA9IDk5O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBERUZBVUxUX01BWElNVU1fREVQVEggfSBmcm9tIFwiLi9kZWZhdWx0c1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdGF0ZSB7XG4gIGNvbnN0cnVjdG9yKHJ1bGVNYXAsIHRva2VucywgaW5kZXgsIGRlcHRoLCBtYXhpbXVtRGVwdGgpIHtcbiAgICB0aGlzLnJ1bGVNYXAgPSBydWxlTWFwO1xuICAgIHRoaXMudG9rZW5zID0gdG9rZW5zO1xuXHRcdHRoaXMuaW5kZXggPSBpbmRleDtcblx0XHR0aGlzLmRlcHRoID0gZGVwdGg7XG4gICAgdGhpcy5tYXhpbXVtRGVwdGggPSBtYXhpbXVtRGVwdGg7XG4gIH1cblxuICBnZXRSdWxlTWFwKCkge1xuICAgIHJldHVybiB0aGlzLnJ1bGVNYXA7XG4gIH1cblxuICBnZXRUb2tlbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMudG9rZW5zO1xuICB9XG5cblx0Z2V0SW5kZXgoKSB7XG5cdFx0cmV0dXJuIHRoaXMuaW5kZXg7XG5cdH1cblxuICBnZXREZXB0aCgpIHtcbiAgICByZXR1cm4gdGhpcy5kZXB0aDtcbiAgfVxuXG5cdGdldE1heGltdW1EZXB0aCgpIHtcblx0XHRyZXR1cm4gdGhpcy5tYXhpbXVtRGVwdGg7XG5cdH1cblxuXHRnZXRTYXZlZEluZGV4KCkge1xuICAgIGNvbnN0IHNhdmVkSW5kZXggPSB0aGlzLmluZGV4OyAvLy9cbiAgXG4gICAgcmV0dXJuIHNhdmVkSW5kZXg7XG4gIH1cblxuICBnZXROZXh0VG9rZW4oKSB7XG4gICAgbGV0IG5leHRUb2tlbiA9IG51bGw7XG5cbiAgICBjb25zdCB0b2tlbnNMZW5ndGggPSB0aGlzLnRva2Vucy5sZW5ndGg7XG5cbiAgICBpZiAodGhpcy5pbmRleCA8IHRva2Vuc0xlbmd0aCkge1xuICAgICAgbmV4dFRva2VuID0gdGhpcy50b2tlbnNbdGhpcy5pbmRleCsrXTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV4dFRva2VuO1xuICB9XG5cbiAgZ2V0TmV4dFNpZ25pZmljYW50VG9rZW4oKSB7XG5cdFx0bGV0IG5leHRTaWduaWZpY2FudFRva2VuID0gbnVsbDtcblxuICBcdGNvbnN0IHRva2Vuc0xlbmd0aCA9IHRoaXMudG9rZW5zLmxlbmd0aDtcblxuICBcdHdoaWxlICh0aGlzLmluZGV4IDwgdG9rZW5zTGVuZ3RoKSB7XG4gIFx0XHRjb25zdCB0b2tlbiA9IHRoaXMudG9rZW5zW3RoaXMuaW5kZXgrK10sXG5cdFx0XHRcdFx0XHR0b2tlblNpZ25pZmljYW50ID0gdG9rZW4uaXNTaWduaWZpY2FudCgpO1xuXG4gIFx0XHRpZiAodG9rZW5TaWduaWZpY2FudCkge1xuICBcdFx0ICBjb25zdCBzaWduaWZpY2FudFRva2VuID0gdG9rZW47IC8vL1xuXG5cdFx0XHRcdG5leHRTaWduaWZpY2FudFRva2VuID0gc2lnbmlmaWNhbnRUb2tlbjtcdC8vL1xuXG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuICBcdH1cblxuXHRcdHJldHVybiBuZXh0U2lnbmlmaWNhbnRUb2tlbjtcbiAgfVxuXG4gIGlzTmV4dFRva2VuV2hpdGVzcGFjZVRva2VuKCkge1xuICAgIGxldCBuZXh0VG9rZW5XaGl0ZXNwYWNlVG9rZW4gPSBmYWxzZTtcblxuICAgIGNvbnN0IHRva2Vuc0xlbmd0aCA9IHRoaXMudG9rZW5zLmxlbmd0aDtcblxuICAgIGlmICh0aGlzLmluZGV4IDwgdG9rZW5zTGVuZ3RoKSB7XG4gICAgICBjb25zdCBuZXh0VG9rZW4gPSB0aGlzLnRva2Vuc1t0aGlzLmluZGV4XTtcblxuICAgICAgbmV4dFRva2VuV2hpdGVzcGFjZVRva2VuID0gbmV4dFRva2VuLmlzV2hpdGVzcGFjZVRva2VuKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5leHRUb2tlbldoaXRlc3BhY2VUb2tlbjtcbiAgfVxuXG4gIGlzVG9vRGVlcCgpIHtcbiAgICBjb25zdCB0b29EZWVwID0gKHRoaXMuZGVwdGggPiB0aGlzLm1heGltdW1EZXB0aCk7XG5cbiAgICByZXR1cm4gdG9vRGVlcDtcbiAgfVxuXG5cdGJhY2t0cmFjayhzYXZlZEluZGV4KSB7XG5cdFx0dGhpcy5pbmRleCA9IHNhdmVkSW5kZXg7ICAvLy9cblx0fVxuXG4gIHNldEluZGV4KGluZGV4KSB7XG4gICAgdGhpcy5pbmRleCA9IGluZGV4O1xuICB9XG5cbiAgaW5jcmVhc2VEZXB0aCgpIHtcbiAgICB0aGlzLmRlcHRoKys7XG4gIH1cblxuICBkZWNyZWFzZURlcHRoKCkge1xuICAgIHRoaXMuZGVwdGgtLTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tVG9rZW5zQW5kUnVsZU1hcCh0b2tlbnMsIHJ1bGVNYXApIHtcbiAgICBjb25zdCBpbmRleCA9IDAsXG5cdFx0XHRcdFx0ZGVwdGggPSAwLFxuXHRcdFx0XHRcdG1heGltdW1EZXB0aCA9IERFRkFVTFRfTUFYSU1VTV9ERVBUSCxcblx0XHRcdFx0XHRzdGF0ZSA9IG5ldyBTdGF0ZShydWxlTWFwLCB0b2tlbnMsIGluZGV4LCBkZXB0aCwgbWF4aW11bURlcHRoKTtcblxuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5leHBvcnQgY29uc3QgeyBmaXJzdCwgc2Vjb25kLCB0aGlyZCwgZm91cnRoLCBsYXN0LCBwdXNoLCBmaWx0ZXIsIGZvcndhcmRzU29tZSwgYmFja3dhcmRzU29tZSB9ID0gYXJyYXlVdGlsaXRpZXM7XG5cbmV4cG9ydCBmdW5jdGlvbiBldmVuKGFycmF5KSB7IHJldHVybiBhcnJheS5maWx0ZXIoKGVudHJ5LCBpbmRleCkgPT4gaXNFdmVuKGluZGV4KSk7IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGFsbEJ1dEZpcnN0QW5kTGFzdChhcnJheSkge1xuICBhcnJheSA9IGFycmF5LnNsaWNlKCk7ICAvLy9cblxuICBhcnJheS5zaGlmdCgpO1xuXG4gIGFycmF5LnBvcCgpO1xuXG4gIHJldHVybiBhcnJheTtcbn1cblxuZnVuY3Rpb24gaXNFdmVuKGluZGV4KSB7XG4gIGNvbnN0IGV2ZW4gPSAoTWF0aC5mbG9vcihpbmRleC8yKSA9PT0gaW5kZXgvMik7XG5cbiAgcmV0dXJuIGV2ZW47XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGNoYXJhY3RlcnMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCB7IGxhc3QgfSBmcm9tIFwiLi91dGlsaXRpZXMvYXJyYXlcIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5cbmNvbnN0IHsgTkVXX0xJTkVfQ0hBUkFDVEVSLCBTUEFDRV9DSEFSQUNURVIgfSA9IGNoYXJhY3RlcnM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBhcnNlVHJlZSB7XG4gIGNvbnN0cnVjdG9yKGxpbmVzKSB7XG4gICAgdGhpcy5saW5lcyA9IGxpbmVzO1xuICB9XG5cbiAgY2xvbmUoKSB7XG4gICAgY29uc3QgbGluZXMgPSB0aGlzLmxpbmVzLnNsaWNlKCksICAvLy9cbiAgICAgICAgICBwYXJzZVRyZWUgPSBuZXcgUGFyc2VUcmVlKGxpbmVzKTtcblxuICAgIHJldHVybiBwYXJzZVRyZWU7XG4gIH1cblxuICBnZXRXaWR0aCgpIHtcbiAgICBsZXQgd2lkdGg7XG5cbiAgICBsZXQgbGluZXNMZW5ndGggPSB0aGlzLmxpbmVzLmxlbmd0aDtcblxuICAgIGlmIChsaW5lc0xlbmd0aCA9PT0gMCkge1xuICAgICAgd2lkdGggPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBsYXN0TGluZSA9IGxhc3QodGhpcy5saW5lcyksXG4gICAgICAgICAgICBsYXN0TGluZUxlbmd0aCA9IGxhc3RMaW5lLmxlbmd0aDtcblxuICAgICAgd2lkdGggPSBsYXN0TGluZUxlbmd0aDsgLy8vXG4gICAgfVxuXG4gICAgcmV0dXJuIHdpZHRoO1xuICB9XG5cbiAgZ2V0RGVwdGgoKSB7XG4gICAgY29uc3QgbGluZXNMZW5ndGggPSB0aGlzLmxpbmVzLmxlbmd0aCxcbiAgICAgICAgICBkZXB0aCA9IGxpbmVzTGVuZ3RoOyAgLy8vXG5cbiAgICByZXR1cm4gZGVwdGg7XG4gIH1cblxuICBmb3JFYWNoTGluZShjYWxsYmFjaykge1xuICAgIHRoaXMubGluZXMuZm9yRWFjaChjYWxsYmFjayk7XG4gIH1cblxuICBhcHBlbmRUb1RvcChwYXJzZVRyZWUpIHtcbiAgICBwYXJzZVRyZWUuZm9yRWFjaExpbmUoKGxpbmUpID0+IHtcbiAgICAgIHRoaXMubGluZXMudW5zaGlmdChsaW5lKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFwcGVuZFRvTGVmdChwYXJzZVRyZWUpIHtcbiAgICBwYXJzZVRyZWUuZm9yRWFjaExpbmUoKGxpbmUsIGluZGV4KSA9PiB7XG4gICAgICB0aGlzLmxpbmVzW2luZGV4XSA9IGxpbmUgKyB0aGlzLmxpbmVzW2luZGV4XTtcbiAgICB9KTtcbiAgfVxuXG4gIGFwcGVuZFRvUmlnaHQocGFyc2VUcmVlKSB7XG4gICAgcGFyc2VUcmVlLmZvckVhY2hMaW5lKChsaW5lLCBpbmRleCkgPT4ge1xuICAgICAgdGhpcy5saW5lc1tpbmRleF0gPSB0aGlzLmxpbmVzW2luZGV4XSArIGxpbmU7XG4gICAgfSk7XG4gIH1cblxuICBhcHBlbmRUb0JvdHRvbShwYXJzZVRyZWUpIHtcbiAgICBwYXJzZVRyZWUuZm9yRWFjaExpbmUoKGxpbmUpID0+IHtcbiAgICAgIHRoaXMubGluZXMucHVzaChsaW5lKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFkZFRvcE1hcmdpbih0b3BNYXJnaW5EZXB0aCkge1xuICAgIGNvbnN0IHdpZHRoID0gdGhpcy5nZXRXaWR0aCgpLFxuICAgICAgICAgIHRvcE1hcmdpbldpZHRoID0gd2lkdGgsICAvLy9cbiAgICAgICAgICB0b3BNYXJnaW5TdHJpbmcgPSBtYXJnaW5TdHJpbmdGcm9tTWFyZ2luV2lkdGgodG9wTWFyZ2luV2lkdGgpO1xuXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRvcE1hcmdpbkRlcHRoOyBpbmRleCsrKSB7XG4gICAgICB0aGlzLmxpbmVzLnVuc2hpZnQodG9wTWFyZ2luU3RyaW5nKTtcbiAgICB9XG4gIH1cblxuICBhZGRMZWZ0TWFyZ2luKGxlZnRNYXJnaW5XaWR0aCkge1xuICAgIGNvbnN0IGxlZnRNYXJnaW5TdHJpbmcgPSBtYXJnaW5TdHJpbmdGcm9tTWFyZ2luV2lkdGgobGVmdE1hcmdpbldpZHRoKSxcbiAgICAgICAgICBsaW5lc0xlbmd0aCA9IHRoaXMubGluZXMubGVuZ3RoO1xuXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGxpbmVzTGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICB0aGlzLmxpbmVzW2luZGV4XSA9IGxlZnRNYXJnaW5TdHJpbmcgKyB0aGlzLmxpbmVzW2luZGV4XTtcbiAgICB9XG4gIH1cblxuICBhZGRSaWdodE1hcmdpbihyaWdodE1hcmdpbldpZHRoKSB7XG4gICAgY29uc3QgcmlnaHRNYXJnaW5TdHJpbmcgPSBtYXJnaW5TdHJpbmdGcm9tTWFyZ2luV2lkdGgocmlnaHRNYXJnaW5XaWR0aCksXG4gICAgICAgICAgbGluZXNMZW5ndGggPSB0aGlzLmxpbmVzLmxlbmd0aDtcblxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBsaW5lc0xlbmd0aDsgaW5kZXgrKykge1xuICAgICAgdGhpcy5saW5lc1tpbmRleF0gPSB0aGlzLmxpbmVzW2luZGV4XSArIHJpZ2h0TWFyZ2luU3RyaW5nO1xuICAgIH1cbiAgfVxuXG4gIGFkZEJvdHRvbU1hcmdpbihib3R0b21NYXJnaW5EZXB0aCkge1xuICAgIGNvbnN0IHdpZHRoID0gdGhpcy5nZXRXaWR0aCgpLFxuICAgICAgICAgIGJvdHRvbU1hcmdpbldpZHRoID0gd2lkdGgsICAvLy9cbiAgICAgICAgICBib3R0b21NYXJnaW5TdHJpbmcgPSBtYXJnaW5TdHJpbmdGcm9tTWFyZ2luV2lkdGgoYm90dG9tTWFyZ2luV2lkdGgpO1xuXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGJvdHRvbU1hcmdpbkRlcHRoOyBpbmRleCsrKSB7XG4gICAgICB0aGlzLmxpbmVzLnB1c2goYm90dG9tTWFyZ2luU3RyaW5nKTtcbiAgICB9XG4gIH1cbiAgXG4gIHBvcExpbmUoKSB7IHJldHVybiB0aGlzLmxpbmVzLnBvcCgpOyB9XG4gIFxuICBzaGlmdExpbmUoKSB7IHJldHVybiB0aGlzLmxpbmVzLnNoaWZ0KCk7IH1cbiAgXG4gIHB1c2hMaW5lKGxpbmUpIHsgdGhpcy5saW5lcy5wdXNoKGxpbmUpOyB9XG4gIFxuICB1bnNoaWZ0TGluZShsaW5lKSB7IHRoaXMubGluZXMudW5zaGlmdChsaW5lKTsgfVxuXG4gIGFzU3RyaW5nKCkge1xuICAgIGNvbnN0IHN0cmluZyA9IHRoaXMubGluZXMucmVkdWNlKChzdHJpbmcsIGxpbmUpID0+IHtcbiAgICAgIHN0cmluZyArPSBsaW5lICsgTkVXX0xJTkVfQ0hBUkFDVEVSO1xuXG4gICAgICByZXR1cm4gc3RyaW5nO1xuICAgIH0sIEVNUFRZX1NUUklORyk7XG5cbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1hcmdpblN0cmluZ0Zyb21NYXJnaW5XaWR0aChtYXJnaW5XaWR0aCwgc3BhY2VDaGFyYWN0ZXIpIHtcbiAgc3BhY2VDaGFyYWN0ZXIgPSBzcGFjZUNoYXJhY3RlciB8fCBTUEFDRV9DSEFSQUNURVI7XG5cbiAgbGV0IG1hcmdpblN0cmluZyA9IEVNUFRZX1NUUklORztcblxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgbWFyZ2luV2lkdGg7IGluZGV4KyspIHtcbiAgICBtYXJnaW5TdHJpbmcgKz0gc3BhY2VDaGFyYWN0ZXI7XG4gIH1cblxuICByZXR1cm4gbWFyZ2luU3RyaW5nO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBjaGFyYWN0ZXJzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5pbXBvcnQgUGFyc2VUcmVlIGZyb20gXCIuLi9wYXJzZVRyZWVcIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5jb25zdCB7IEJBUl9DSEFSQUNURVIgfSA9IGNoYXJhY3RlcnM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlIGV4dGVuZHMgUGFyc2VUcmVlIHtcbiAgY29uc3RydWN0b3IobGluZXMsIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24pIHtcbiAgICBzdXBlcihsaW5lcyk7XG4gICAgXG4gICAgdGhpcy52ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID0gdmVydGljYWxCcmFuY2hQb3NpdGlvbjtcbiAgfVxuICBcbiAgZ2V0VmVydGljYWxCcmFuY2hQb3NpdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy52ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uO1xuICB9XG5cbiAgYWRkTGVmdE1hcmdpbihsZWZ0TWFyZ2luV2lkdGgpIHtcbiAgICBzdXBlci5hZGRMZWZ0TWFyZ2luKGxlZnRNYXJnaW5XaWR0aCk7XG5cbiAgICB0aGlzLnZlcnRpY2FsQnJhbmNoUG9zaXRpb24gKz0gbGVmdE1hcmdpbldpZHRoOyAvLy9cbiAgfVxuXG4gIHN0YXRpYyBmcm9tV2lkdGgod2lkdGgpIHtcbiAgICBjb25zdCBzdHJpbmcgPSBCQVJfQ0hBUkFDVEVSLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSAwLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlID0gVmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZnJvbVN0cmluZ0FuZFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oVmVydGljYWxCcmFuY2hQYXJzZVRyZWUsIHN0cmluZywgdmVydGljYWxCcmFuY2hQb3NpdGlvbiksXG4gICAgICAgICAgbGVmdE1hcmdpbldpZHRoID0gTWF0aC5mbG9vcih3aWR0aC8yKSxcbiAgICAgICAgICByaWdodE1hcmdpbldpZHRoID0gd2lkdGggLSBsZWZ0TWFyZ2luV2lkdGggLSAxO1xuXG4gICAgdmVydGljYWxCcmFuY2hQYXJzZVRyZWUuYWRkTGVmdE1hcmdpbihsZWZ0TWFyZ2luV2lkdGgpO1xuICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmFkZFJpZ2h0TWFyZ2luKHJpZ2h0TWFyZ2luV2lkdGgpO1xuXG4gICAgcmV0dXJuIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlO1xuICB9XG5cbiAgc3RhdGljIGZyb21EZXB0aEFuZFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oQ2xhc3MsIGRlcHRoLCB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKSB7XG4gICAgY29uc3QgbGluZXMgPSBsaW5lc0Zyb21EZXB0aChkZXB0aCksXG4gICAgICAgICAgYXJncyA9IFsgbnVsbCwgbGluZXMsIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24gXSxcbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSA9IG5ldyAoRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQuYXBwbHkoQ2xhc3MsIGFyZ3MpKTsgIC8vL1xuXG4gICAgcmV0dXJuIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlO1xuICB9XG5cbiAgc3RhdGljIGZyb21TdHJpbmdBbmRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKENsYXNzLCBzdHJpbmcsIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24pIHtcbiAgICBpZiAodmVydGljYWxCcmFuY2hQb3NpdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID0gc3RyaW5nOyAgLy8vXG4gICAgICBzdHJpbmcgPSBDbGFzczsgLy8vXG4gICAgICBDbGFzcyA9IFBhcnNlVHJlZTsgIC8vL1xuICAgIH1cbiAgICBcbiAgICBjb25zdCBsaW5lID0gc3RyaW5nLCAvLy9cbiAgICAgICAgICBsaW5lcyA9IFtsaW5lXSxcbiAgICAgICAgICBhcmdzID0gWyBudWxsLCBsaW5lcywgdmVydGljYWxCcmFuY2hQb3NpdGlvbiBdLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlID0gbmV3IChGdW5jdGlvbi5wcm90b3R5cGUuYmluZC5hcHBseShDbGFzcywgYXJncykpOyAgLy8vXG5cbiAgICByZXR1cm4gdmVydGljYWxCcmFuY2hQYXJzZVRyZWU7XG4gIH1cbn1cblxuZnVuY3Rpb24gbGluZXNGcm9tRGVwdGgoZGVwdGgpIHtcbiAgY29uc3QgbGluZXMgPSBbXTtcblxuICBsZXQgaW5kZXggPSAwO1xuXG4gIHdoaWxlIChpbmRleCA8IGRlcHRoKSB7XG4gICAgbGluZXNbaW5kZXgrK10gPSBFTVBUWV9TVFJJTkc7XG4gIH1cblxuICByZXR1cm4gbGluZXM7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBFTVBUWV9TVFJJTkcgPSBcIlwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVmVydGljYWxCcmFuY2hQYXJzZVRyZWUgZnJvbSBcIi4vdmVydGljYWxCcmFuY2hcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnVsZU5hbWVQYXJzZVRyZWUgZXh0ZW5kcyBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSB7XG4gIHN0YXRpYyBmcm9tTm9uVGVybWluYWxOb2RlVG9rZW5zQW5kQWJyaWRnZWQobm9uVGVybWluYWxOb2RlLCB0b2tlbnMsIGFicmlkZ2VkKSB7XG4gICAgY29uc3QgcnVsZU5hbWUgPSBub25UZXJtaW5hbE5vZGUuZ2V0UnVsZU5hbWUoKSxcbiAgICAgICAgICBmaXJzdFNpZ25pZmljYW50VG9rZW4gPSBub25UZXJtaW5hbE5vZGUuZ2V0Rmlyc3RTaWduaWZpY2FudFRva2VuKCksXG4gICAgICAgICAgbGFzdFNpZ25pZmljYW50VG9rZW4gPSBub25UZXJtaW5hbE5vZGUuZ2V0TGFzdFNpZ25pZmljYW50VG9rZW4oKSxcbiAgICAgICAgICBmaXJzdFNpZ25pZmljYW50VG9rZW5JbmRleCA9IHRva2Vucy5pbmRleE9mKGZpcnN0U2lnbmlmaWNhbnRUb2tlbiksXG4gICAgICAgICAgbGFzdFNpZ25pZmljYW50VG9rZW5JbmRleCA9IHRva2Vucy5pbmRleE9mKGxhc3RTaWduaWZpY2FudFRva2VuKSxcbiAgICAgICAgICB0b2tlbkluZGV4ZXMgPSAoZmlyc3RTaWduaWZpY2FudFRva2VuSW5kZXggIT09IGxhc3RTaWduaWZpY2FudFRva2VuSW5kZXgpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGAke2ZpcnN0U2lnbmlmaWNhbnRUb2tlbkluZGV4fS0ke2xhc3RTaWduaWZpY2FudFRva2VuSW5kZXh9YCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAke2ZpcnN0U2lnbmlmaWNhbnRUb2tlbkluZGV4fWAsXG4gICAgICAgICAgc3RyaW5nID0gYWJyaWRnZWQgP1xuICAgICAgICAgICAgICAgICAgICAgYCR7cnVsZU5hbWV9YCA6XG4gICAgICAgICAgICAgICAgICAgICAgIGAke3J1bGVOYW1lfSgke3Rva2VuSW5kZXhlc30pYCxcbiAgICAgICAgICBzdHJpbmdMZW5ndGggPSBzdHJpbmcubGVuZ3RoLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlV2lkdGggPSBzdHJpbmdMZW5ndGgsIC8vL1xuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlID0gVmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZnJvbVdpZHRoKHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlV2lkdGgpLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5nZXRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKCksXG4gICAgICAgICAgcnVsZU5hbWVQYXJzZVRyZWUgPSBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5mcm9tU3RyaW5nQW5kVmVydGljYWxCcmFuY2hQb3NpdGlvbihSdWxlTmFtZVBhcnNlVHJlZSwgc3RyaW5nLCB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKTtcblxuICAgIHJ1bGVOYW1lUGFyc2VUcmVlLmFwcGVuZFRvVG9wKHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlKTtcblxuICAgIHJldHVybiBydWxlTmFtZVBhcnNlVHJlZTtcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGNoYXJhY3RlcnMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCBQYXJzZVRyZWUgZnJvbSBcIi4uL3BhcnNlVHJlZVwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmNvbnN0IHsgREFTSF9DSEFSQUNURVIgfSA9IGNoYXJhY3RlcnM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEhvcml6b250YWxCcmFuY2hQYXJzZVRyZWUgZXh0ZW5kcyBQYXJzZVRyZWUge1xuICBzdGF0aWMgZnJvbVdpZHRoKHdpZHRoKSB7XG4gICAgY29uc3Qgc3RyaW5nID0gc3RyaW5nRnJvbUNoYXJhY3RlcnNXaWR0aCh3aWR0aCwgREFTSF9DSEFSQUNURVIpLFxuICAgICAgICAgIGxpbmUgPSBzdHJpbmcsIC8vL1xuICAgICAgICAgIGxpbmVzID0gW2xpbmVdLFxuICAgICAgICAgIGhvcml6b250YWxCcmFuY2hQYXJzZVRyZWUgPSBuZXcgSG9yaXpvbnRhbEJyYW5jaFBhcnNlVHJlZShsaW5lcyk7XG5cbiAgICByZXR1cm4gaG9yaXpvbnRhbEJyYW5jaFBhcnNlVHJlZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzdHJpbmdGcm9tQ2hhcmFjdGVyc1dpZHRoKGNoYXJhY3RlcnNXaWR0aCwgY2hhcmFjdGVyKSB7XG4gIGxldCBzdHJpbmcgPSBFTVBUWV9TVFJJTkc7XG5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGNoYXJhY3RlcnNXaWR0aDsgaW5kZXgrKykge1xuICAgIHN0cmluZyArPSBjaGFyYWN0ZXI7XG4gIH1cblxuICByZXR1cm4gc3RyaW5nO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVmVydGljYWxCcmFuY2hQYXJzZVRyZWUgZnJvbSBcIi4vdmVydGljYWxCcmFuY2hcIjtcbmltcG9ydCBIb3Jpem9udGFsQnJhbmNoUGFyc2VUcmVlIGZyb20gXCIuL2hvcml6b250YWxCcmFuY2hcIjtcblxuaW1wb3J0IHsgZmlyc3QgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENoaWxkTm9kZXNQYXJzZVRyZWUgZXh0ZW5kcyBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSB7XG4gIHN0YXRpYyBmcm9tQ2hpbGROb2Rlc1Rva2Vuc0FuZEFicmlkZ2VkKGNoaWxkTm9kZXMsIHRva2VucywgYWJyaWRnZWQpIHtcbiAgICBsZXQgY2hpbGROb2Rlc1BhcnNlVHJlZTtcblxuICAgIGNvbnN0IGNoaWxkTm9kZVBhcnNlVHJlZXMgPSBjaGlsZE5vZGVzLnJlZHVjZSgoY2hpbGROb2RlUGFyc2VUcmVlcywgY2hpbGROb2RlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjaGlsZE5vZGVQYXJzZVRyZWUgPSBjaGlsZE5vZGUuYXNQYXJzZVRyZWUodG9rZW5zLCBhYnJpZGdlZCk7XG5cbiAgICAgICAgICAgIGNoaWxkTm9kZVBhcnNlVHJlZXMucHVzaChjaGlsZE5vZGVQYXJzZVRyZWUpO1xuXG4gICAgICAgICAgICByZXR1cm4gY2hpbGROb2RlUGFyc2VUcmVlcztcbiAgICAgICAgICB9LCBbXSksXG4gICAgICAgICAgY2hpbGROb2RlUGFyc2VUcmVlc0xlbmd0aCA9IGNoaWxkTm9kZVBhcnNlVHJlZXMubGVuZ3RoO1xuXG4gICAgaWYgKGNoaWxkTm9kZVBhcnNlVHJlZXNMZW5ndGggPT09IDEpIHtcbiAgICAgIGNvbnN0IGZpcnN0Q2hpbGROb2RlUGFyc2VUcmVlID0gZmlyc3QoY2hpbGROb2RlUGFyc2VUcmVlcyk7XG5cbiAgICAgIGNoaWxkTm9kZXNQYXJzZVRyZWUgPSBmaXJzdENoaWxkTm9kZVBhcnNlVHJlZTsgIC8vL1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgZmlyc3RWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID0gdW5kZWZpbmVkLFxuICAgICAgICAgIGxhc3RWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID0gMCxcbiAgICAgICAgICBjaGlsZE5vZGVQYXJzZVRyZWVzV2lkdGggPSAwLFxuICAgICAgICAgIGNoaWxkTm9kZVBhcnNlVHJlZXNEZXB0aCA9IDA7XG5cbiAgICAgIGNoaWxkTm9kZVBhcnNlVHJlZXMuZm9yRWFjaCgoY2hpbGROb2RlUGFyc2VUcmVlLCBpbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBjaGlsZE5vZGVQYXJzZVRyZWVXaWR0aCA9IGNoaWxkTm9kZVBhcnNlVHJlZS5nZXRXaWR0aCgpLFxuICAgICAgICAgICAgICBjaGlsZE5vZGVQYXJzZVRyZWVEZXB0aCA9IGNoaWxkTm9kZVBhcnNlVHJlZS5nZXREZXB0aCgpO1xuXG4gICAgICAgIGlmIChpbmRleCA9PT0gMCkge1xuICAgICAgICAgIGNvbnN0IGZpcnN0Q2hpbGROb2RlUGFyc2VUcmVlID0gY2hpbGROb2RlUGFyc2VUcmVlLFxuICAgICAgICAgICAgICAgIGZpcnN0Q2hpbGROb2RlUGFyc2VUcmVlVmVydGljYWxCcmFuY2hQb3NpdGlvbiA9IGZpcnN0Q2hpbGROb2RlUGFyc2VUcmVlLmdldFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oKTtcblxuICAgICAgICAgIGZpcnN0VmVydGljYWxCcmFuY2hQb3NpdGlvbiA9IGZpcnN0Q2hpbGROb2RlUGFyc2VUcmVlVmVydGljYWxCcmFuY2hQb3NpdGlvbjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpbmRleCA9PT0gY2hpbGROb2RlUGFyc2VUcmVlc0xlbmd0aCAtIDEpIHtcbiAgICAgICAgICBjb25zdCBsYXN0Q2hpbGROb2RlUGFyc2VUcmVlID0gY2hpbGROb2RlUGFyc2VUcmVlLFxuICAgICAgICAgICAgICAgIGxhc3RDaGlsZE5vZGVQYXJzZVRyZWVWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID0gbGFzdENoaWxkTm9kZVBhcnNlVHJlZS5nZXRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKCk7XG5cbiAgICAgICAgICBsYXN0VmVydGljYWxCcmFuY2hQb3NpdGlvbiArPSBsYXN0Q2hpbGROb2RlUGFyc2VUcmVlVmVydGljYWxCcmFuY2hQb3NpdGlvbjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpbmRleCA8IGNoaWxkTm9kZVBhcnNlVHJlZXNMZW5ndGggLSAxKSB7XG4gICAgICAgICAgbGFzdFZlcnRpY2FsQnJhbmNoUG9zaXRpb24gKz0gY2hpbGROb2RlUGFyc2VUcmVlV2lkdGg7XG4gICAgICAgICAgbGFzdFZlcnRpY2FsQnJhbmNoUG9zaXRpb24gKz0gMTtcblxuICAgICAgICAgIGNoaWxkTm9kZVBhcnNlVHJlZXNXaWR0aCArPSAxO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGROb2RlUGFyc2VUcmVlc1dpZHRoICs9IGNoaWxkTm9kZVBhcnNlVHJlZVdpZHRoO1xuICAgICAgICBjaGlsZE5vZGVQYXJzZVRyZWVzRGVwdGggPSBNYXRoLm1heChjaGlsZE5vZGVQYXJzZVRyZWVzRGVwdGgsIGNoaWxkTm9kZVBhcnNlVHJlZURlcHRoKTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCB3aWR0aCA9IGxhc3RWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uIC0gZmlyc3RWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uICsgMSxcbiAgICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlID0gVmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZnJvbVdpZHRoKHdpZHRoKSxcbiAgICAgICAgICAgIGhvcml6b250YWxCcmFuY2hQYXJzZVRyZWUgPSBIb3Jpem9udGFsQnJhbmNoUGFyc2VUcmVlLmZyb21XaWR0aCh3aWR0aCksXG4gICAgICAgICAgICBsZWZ0TWFyZ2luV2lkdGggPSBmaXJzdFZlcnRpY2FsQnJhbmNoUG9zaXRpb24sXG4gICAgICAgICAgICByaWdodE1hcmdpbldpZHRoID0gY2hpbGROb2RlUGFyc2VUcmVlc1dpZHRoIC0gd2lkdGggLSBsZWZ0TWFyZ2luV2lkdGg7XG5cbiAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmFkZExlZnRNYXJnaW4obGVmdE1hcmdpbldpZHRoKTtcbiAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmFkZFJpZ2h0TWFyZ2luKHJpZ2h0TWFyZ2luV2lkdGgpO1xuICAgICAgaG9yaXpvbnRhbEJyYW5jaFBhcnNlVHJlZS5hZGRMZWZ0TWFyZ2luKGxlZnRNYXJnaW5XaWR0aCk7XG4gICAgICBob3Jpem9udGFsQnJhbmNoUGFyc2VUcmVlLmFkZFJpZ2h0TWFyZ2luKHJpZ2h0TWFyZ2luV2lkdGgpO1xuXG4gICAgICBjb25zdCB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID0gdmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZ2V0VmVydGljYWxCcmFuY2hQb3NpdGlvbigpO1xuXG4gICAgICBjaGlsZE5vZGVzUGFyc2VUcmVlID0gVmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZnJvbURlcHRoQW5kVmVydGljYWxCcmFuY2hQb3NpdGlvbihDaGlsZE5vZGVzUGFyc2VUcmVlLCBjaGlsZE5vZGVQYXJzZVRyZWVzRGVwdGgsIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24pO1xuXG4gICAgICBjaGlsZE5vZGVQYXJzZVRyZWVzLmZvckVhY2goKGNoaWxkTm9kZVBhcnNlVHJlZSwgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgY2hpbGROb2RlUGFyc2VUcmVlRGVwdGggPSBjaGlsZE5vZGVQYXJzZVRyZWUuZ2V0RGVwdGgoKSxcbiAgICAgICAgICAgICAgY2xvbmVkQ2hpbGROb2RlUGFyc2VUcmVlID0gY2hpbGROb2RlUGFyc2VUcmVlLmNsb25lKCk7XG5cbiAgICAgICAgaWYgKGluZGV4IDwgY2hpbGROb2RlUGFyc2VUcmVlc0xlbmd0aCAtIDEpIHtcbiAgICAgICAgICBjb25zdCByaWdodE1hcmdpbldpZHRoID0gMTtcblxuICAgICAgICAgIGNsb25lZENoaWxkTm9kZVBhcnNlVHJlZS5hZGRSaWdodE1hcmdpbihyaWdodE1hcmdpbldpZHRoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGlsZE5vZGVQYXJzZVRyZWVEZXB0aCA8IGNoaWxkTm9kZVBhcnNlVHJlZXNEZXB0aCkge1xuICAgICAgICAgIGNvbnN0IGJvdHRvbU1hcmdpbkRlcHRoID0gY2hpbGROb2RlUGFyc2VUcmVlc0RlcHRoIC0gY2hpbGROb2RlUGFyc2VUcmVlRGVwdGg7XG5cbiAgICAgICAgICBjbG9uZWRDaGlsZE5vZGVQYXJzZVRyZWUuYWRkQm90dG9tTWFyZ2luKGJvdHRvbU1hcmdpbkRlcHRoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoaWxkTm9kZXNQYXJzZVRyZWUuYXBwZW5kVG9SaWdodChjbG9uZWRDaGlsZE5vZGVQYXJzZVRyZWUpO1xuICAgICAgfSk7XG5cbiAgICAgIGNoaWxkTm9kZXNQYXJzZVRyZWUuYXBwZW5kVG9Ub3AoaG9yaXpvbnRhbEJyYW5jaFBhcnNlVHJlZSk7XG4gICAgICBjaGlsZE5vZGVzUGFyc2VUcmVlLmFwcGVuZFRvVG9wKHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlKTtcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIGNoaWxkTm9kZXNQYXJzZVRyZWU7XG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUnVsZU5hbWVQYXJzZVRyZWUgZnJvbSBcIi4vcnVsZU5hbWVcIjtcbmltcG9ydCBDaGlsZE5vZGVzUGFyc2VUcmVlIGZyb20gXCIuL2NoaWxkTm9kZXNcIjtcbmltcG9ydCBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSBmcm9tIFwiLi92ZXJ0aWNhbEJyYW5jaFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOb25UZXJtaW5hbE5vZGVQYXJzZVRyZWUgZXh0ZW5kcyBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSB7XG4gIHN0YXRpYyBmcm9tTm9uVGVybWluYWxOb2RlVG9rZW5zQW5kQWJyaWRnZWQobm9uVGVybWluYWxOb2RlLCB0b2tlbnMsIGFicmlkZ2VkKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IG5vblRlcm1pbmFsTm9kZS5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgcnVsZU5hbWVQYXJzZVRyZWUgPSBSdWxlTmFtZVBhcnNlVHJlZS5mcm9tTm9uVGVybWluYWxOb2RlVG9rZW5zQW5kQWJyaWRnZWQobm9uVGVybWluYWxOb2RlLCB0b2tlbnMsIGFicmlkZ2VkKSxcbiAgICAgICAgICBjaGlsZE5vZGVzUGFyc2VUcmVlID0gQ2hpbGROb2Rlc1BhcnNlVHJlZS5mcm9tQ2hpbGROb2Rlc1Rva2Vuc0FuZEFicmlkZ2VkKGNoaWxkTm9kZXMsIHRva2VucywgYWJyaWRnZWQpO1xuICAgIFxuICAgIGxldCBydWxlTmFtZVBhcnNlVHJlZVZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSBydWxlTmFtZVBhcnNlVHJlZS5nZXRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKCk7XG4gICAgXG4gICAgY29uc3QgY2hpbGROb2Rlc1BhcnNlVHJlZVZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSBjaGlsZE5vZGVzUGFyc2VUcmVlLmdldFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oKSxcbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uc0RpZmZlcmVuY2UgPSBydWxlTmFtZVBhcnNlVHJlZVZlcnRpY2FsQnJhbmNoUG9zaXRpb24gLSBjaGlsZE5vZGVzUGFyc2VUcmVlVmVydGljYWxCcmFuY2hQb3NpdGlvbjtcbiAgICBcbiAgICBsZXQgbGVmdE1hcmdpbldpZHRoID0gdW5kZWZpbmVkO1xuXG4gICAgaWYgKGZhbHNlKSB7XG4gICAgICAvLy9cbiAgICB9IGVsc2UgaWYgKHZlcnRpY2FsQnJhbmNoUG9zaXRpb25zRGlmZmVyZW5jZSA8IDApIHtcbiAgICAgIGxlZnRNYXJnaW5XaWR0aCA9IC12ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uc0RpZmZlcmVuY2U7XG5cbiAgICAgIHJ1bGVOYW1lUGFyc2VUcmVlLmFkZExlZnRNYXJnaW4obGVmdE1hcmdpbldpZHRoKTtcbiAgICB9IGVsc2UgaWYgKHZlcnRpY2FsQnJhbmNoUG9zaXRpb25zRGlmZmVyZW5jZSA+IDApIHtcbiAgICAgIGxlZnRNYXJnaW5XaWR0aCA9ICt2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uc0RpZmZlcmVuY2U7XG5cbiAgICAgIGNoaWxkTm9kZXNQYXJzZVRyZWUuYWRkTGVmdE1hcmdpbihsZWZ0TWFyZ2luV2lkdGgpO1xuICAgIH1cblxuICAgIGNvbnN0IHJ1bGVOYW1lUGFyc2VUcmVlV2lkdGggPSBydWxlTmFtZVBhcnNlVHJlZS5nZXRXaWR0aCgpLFxuICAgICAgICAgIGNoaWxkTm9kZXNQYXJzZVRyZWVXaWR0aCA9IGNoaWxkTm9kZXNQYXJzZVRyZWUuZ2V0V2lkdGgoKSxcbiAgICAgICAgICB3aWR0aHNEaWZmZXJlbmNlID0gcnVsZU5hbWVQYXJzZVRyZWVXaWR0aCAtIGNoaWxkTm9kZXNQYXJzZVRyZWVXaWR0aDtcbiAgICBcbiAgICBsZXQgcmlnaHRNYXJnaW5XaWR0aCA9IHVuZGVmaW5lZDtcblxuICAgIGlmIChmYWxzZSkge1xuICAgICAgLy8vXG4gICAgfSBlbHNlIGlmICh3aWR0aHNEaWZmZXJlbmNlIDwgMCkge1xuICAgICAgcmlnaHRNYXJnaW5XaWR0aCA9IC13aWR0aHNEaWZmZXJlbmNlO1xuICAgICAgXG4gICAgICBydWxlTmFtZVBhcnNlVHJlZS5hZGRSaWdodE1hcmdpbihyaWdodE1hcmdpbldpZHRoKTtcbiAgICB9IGVsc2UgaWYgKHdpZHRoc0RpZmZlcmVuY2UgPiAwKSB7XG4gICAgICByaWdodE1hcmdpbldpZHRoID0gK3dpZHRoc0RpZmZlcmVuY2U7XG5cbiAgICAgIGNoaWxkTm9kZXNQYXJzZVRyZWUuYWRkUmlnaHRNYXJnaW4ocmlnaHRNYXJnaW5XaWR0aCk7XG4gICAgfVxuXG4gICAgcnVsZU5hbWVQYXJzZVRyZWVWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID0gcnVsZU5hbWVQYXJzZVRyZWUuZ2V0VmVydGljYWxCcmFuY2hQb3NpdGlvbigpO1xuXG4gICAgY29uc3QgcnVsZU5hbWVQYXJzZVRyZWVEZXB0aCA9IHJ1bGVOYW1lUGFyc2VUcmVlLmdldERlcHRoKCksXG4gICAgICAgICAgbm9uVGVybWluYWxOb2RlUGFyc2VUcmVlRGVwdGggPSBydWxlTmFtZVBhcnNlVHJlZURlcHRoLCAvLy9cbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID0gcnVsZU5hbWVQYXJzZVRyZWVWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uLCAvLy9cbiAgICAgICAgICBub25UZXJtaW5hbE5vZGVQYXJzZVRyZWUgPSBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5mcm9tRGVwdGhBbmRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKE5vblRlcm1pbmFsTm9kZVBhcnNlVHJlZSwgbm9uVGVybWluYWxOb2RlUGFyc2VUcmVlRGVwdGgsIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24pO1xuXG4gICAgbm9uVGVybWluYWxOb2RlUGFyc2VUcmVlLmFwcGVuZFRvUmlnaHQocnVsZU5hbWVQYXJzZVRyZWUpO1xuICAgIG5vblRlcm1pbmFsTm9kZVBhcnNlVHJlZS5hcHBlbmRUb0JvdHRvbShjaGlsZE5vZGVzUGFyc2VUcmVlKTtcblxuICAgIHJldHVybiBub25UZXJtaW5hbE5vZGVQYXJzZVRyZWU7XG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxOb2RlUGFyc2VUcmVlIGZyb20gXCIuLi9wYXJzZVRyZWUvbm9uVGVybWluYWxOb2RlXCI7XG5cbmltcG9ydCB7IGZvcndhcmRzU29tZSwgYmFja3dhcmRzU29tZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvYXJyYXlcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTm9uVGVybWluYWxOb2RlIHtcbiAgY29uc3RydWN0b3IocnVsZU5hbWUsIGNoaWxkTm9kZXMpIHtcbiAgICB0aGlzLnJ1bGVOYW1lID0gcnVsZU5hbWU7XG4gICAgdGhpcy5jaGlsZE5vZGVzID0gY2hpbGROb2RlcztcbiAgfVxuXG4gIGlzVGVybWluYWxOb2RlKCkge1xuICAgIGNvbnN0IHRlcm1pbmFsTm9kZSA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIHRlcm1pbmFsTm9kZTtcbiAgfVxuXG4gIGlzTm9uVGVybWluYWxOb2RlKCkge1xuICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IHRydWU7XG5cbiAgICByZXR1cm4gbm9uVGVybWluYWxOb2RlO1xuICB9XG5cbiAgZ2V0UnVsZU5hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMucnVsZU5hbWU7XG4gIH1cblxuICBnZXRDaGlsZE5vZGVzKCkge1xuICAgIHJldHVybiB0aGlzLmNoaWxkTm9kZXM7XG4gIH1cblxuICBnZXRGaXJzdFNpZ25pZmljYW50VG9rZW4oKSB7XG4gICAgbGV0IGZpcnN0U2lnbmlmaWNhbnRUb2tlbiA9IG51bGw7XG5cbiAgICBmb3J3YXJkc1NvbWUodGhpcy5jaGlsZE5vZGVzLCAoY2hpbGROb2RlKSA9PiB7XG4gICAgICBmaXJzdFNpZ25pZmljYW50VG9rZW4gPSBjaGlsZE5vZGUuZ2V0Rmlyc3RTaWduaWZpY2FudFRva2VuKCk7XG5cbiAgICAgIGlmIChmaXJzdFNpZ25pZmljYW50VG9rZW4gIT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZmlyc3RTaWduaWZpY2FudFRva2VuO1xuICB9XG5cbiAgZ2V0TGFzdFNpZ25pZmljYW50VG9rZW4oKSB7XG4gICAgbGV0IGxhc3RTaWduaWZpY2FudFRva2VuID0gbnVsbDtcblxuICAgIGJhY2t3YXJkc1NvbWUodGhpcy5jaGlsZE5vZGVzLCAoY2hpbGROb2RlKSA9PiB7XG4gICAgICBsYXN0U2lnbmlmaWNhbnRUb2tlbiA9IGNoaWxkTm9kZS5nZXRMYXN0U2lnbmlmaWNhbnRUb2tlbigpO1xuXG4gICAgICBpZiAobGFzdFNpZ25pZmljYW50VG9rZW4gIT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbGFzdFNpZ25pZmljYW50VG9rZW47XG4gIH1cbiAgXG4gIHNldFJ1bGVOYW1lKHJ1bGVOYW1lKSB7XG4gICAgdGhpcy5ydWxlTmFtZSA9IHJ1bGVOYW1lO1xuICB9XG5cbiAgc2V0Q2hpbGROb2RlcyhjaGlsZE5vZGVzKSB7XG4gICAgdGhpcy5jaGlsZE5vZGVzID0gY2hpbGROb2RlcztcbiAgfVxuICBcbiAgYXNQYXJzZVRyZWUodG9rZW5zLCBhYnJpZGdlZCA9IGZhbHNlKSB7XG4gICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gdGhpcywgIC8vL1xuICAgICAgICAgIG5vblRlcm1pbmFsTm9kZVBhcnNlVHJlZSA9IE5vblRlcm1pbmFsTm9kZVBhcnNlVHJlZS5mcm9tTm9uVGVybWluYWxOb2RlVG9rZW5zQW5kQWJyaWRnZWQobm9uVGVybWluYWxOb2RlLCB0b2tlbnMsIGFicmlkZ2VkKSxcbiAgICAgICAgICBwYXJzZVRyZWUgPSBub25UZXJtaW5hbE5vZGVQYXJzZVRyZWU7ICAvLy9cblxuICAgIHJldHVybiBwYXJzZVRyZWU7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhDbGFzcywgcnVsZU5hbWUsIGNoaWxkTm9kZXMpIHtcbiAgICBpZiAoY2hpbGROb2RlcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjaGlsZE5vZGVzID0gcnVsZU5hbWU7ICAvLy9cbiAgICAgIHJ1bGVOYW1lID0gQ2xhc3M7IC8vL1xuICAgICAgQ2xhc3MgPSBOb25UZXJtaW5hbE5vZGU7ICAvLy9cbiAgICB9XG5cbiAgICBjb25zdCBjaGlsZE5vZGVzTGVuZ3RoID0gY2hpbGROb2Rlcy5sZW5ndGg7XG5cbiAgICBpZiAoY2hpbGROb2Rlc0xlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGVyZSBhcmUgbm8gY2hpbGQgbm9kZXMgYXQgcnVsZSAnJHtydWxlTmFtZX0nLmApO1xuICAgIH1cbiAgICBcbiAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBuZXcgQ2xhc3MocnVsZU5hbWUsIGNoaWxkTm9kZXMpO1xuXG4gICAgcmV0dXJuIG5vblRlcm1pbmFsTm9kZTtcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL25vZGUvbm9uVGVybWluYWxcIjtcblxuaW1wb3J0IHsgZmlyc3QgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5hbWVCTkZOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgZ2V0TmFtZSgpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gdGhpcy5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgZmlyc3RDaGlsZE5vZGUgPSBmaXJzdChjaGlsZE5vZGVzKSxcbiAgICAgICAgICB0ZXJtaW5hbE5vZGUgPSBmaXJzdENoaWxkTm9kZSwgIC8vL1xuICAgICAgICAgIHRlcm1pbmFsTm9kZUNvbnRlbnQgPSB0ZXJtaW5hbE5vZGUuZ2V0Q29udGVudCgpLFxuICAgICAgICAgIG5hbWUgPSB0ZXJtaW5hbE5vZGVDb250ZW50OyAvLy9cbiAgICBcbiAgICByZXR1cm4gbmFtZTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhOYW1lQk5GTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzUGFydFJ1bGVOYW1lUGFydFdpdGhMb29rQWhlYWQocGFydCkge1xuICBsZXQgcGFydFJ1bGVOYW1lUGFydFdpdGhMb29rQWhlYWQgPSBmYWxzZTtcblxuICBjb25zdCBwYXJ0UnVsZU5hbWVQYXJ0ID0gaXNQYXJ0UnVsZU5hbWVQYXJ0KHBhcnQpO1xuXG4gIGlmIChwYXJ0UnVsZU5hbWVQYXJ0KSB7XG4gICAgY29uc3QgcnVsZU5hbWVQYXJ0ID0gcGFydCwgIC8vL1xuICAgICAgICAgIGxvb2tBaGVhZCA9IHJ1bGVOYW1lUGFydC5pc0xvb2tBaGVhZCgpO1xuXG4gICAgaWYgKGxvb2tBaGVhZCkge1xuICAgICAgcGFydFJ1bGVOYW1lUGFydFdpdGhMb29rQWhlYWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYXJ0UnVsZU5hbWVQYXJ0V2l0aExvb2tBaGVhZDtcbn1cblxuZnVuY3Rpb24gaXNQYXJ0UnVsZU5hbWVQYXJ0KHBhcnQpIHtcbiAgbGV0IHBhcnRSdWxlTmFtZVBhcnQgPSBmYWxzZTtcblxuICBjb25zdCBwYXJ0VGVybWluYWxQYXJ0ID0gcGFydC5pc1Rlcm1pbmFsUGFydCgpLFxuICAgICAgICBwYXJ0Tm9uVGVybWluYWxQYXJ0ID0gIXBhcnRUZXJtaW5hbFBhcnQ7XG5cbiAgaWYgKHBhcnROb25UZXJtaW5hbFBhcnQpIHtcbiAgICBjb25zdCBub25UZXJtaW5hbFBhcnQgPSBwYXJ0LFxuICAgICAgICAgIG5vblRlcm1pbmFsUGFydFJ1bGVOYW1lUGFydCA9IG5vblRlcm1pbmFsUGFydC5pc1J1bGVOYW1lUGFydCgpO1xuXG4gICAgcGFydFJ1bGVOYW1lUGFydCA9IG5vblRlcm1pbmFsUGFydFJ1bGVOYW1lUGFydDsgLy8vXG4gIH1cblxuICByZXR1cm4gcGFydFJ1bGVOYW1lUGFydDtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgcHVzaCB9IGZyb20gXCIuLi91dGlsaXRpZXMvYXJyYXlcIjtcbmltcG9ydCB7IGlzUGFydFJ1bGVOYW1lUGFydFdpdGhMb29rQWhlYWQgfSBmcm9tIFwiLi9wYXJ0XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVBhcnRzKHBhcnRzLCBub2RlcywgaW5kZXgsIHN0YXRlLCBjYWxsYmFjaykge1xuICBsZXQgcGFyc2VkO1xuXG4gIGNvbnN0IHBhcnRzTGVuZ3RoID0gcGFydHMubGVuZ3RoO1xuXG4gIGlmIChpbmRleCA9PT0gcGFydHNMZW5ndGgpIHtcbiAgICBwYXJzZWQgPSAoY2FsbGJhY2sgIT09IG51bGwpID9cbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpIDpcbiAgICAgICAgICAgICAgICAgIHRydWU7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgcGFydCA9IHBhcnRzW2luZGV4XTtcblxuICAgIHBhcnNlZCA9IHBhcnNlUGFydE9mUGFydHMocGFydCwgcGFydHMsIG5vZGVzLCBpbmRleCwgc3RhdGUsIGNhbGxiYWNrKTtcbiAgfVxuXG4gIHJldHVybiBwYXJzZWQ7XG59XG5cbmZ1bmN0aW9uIHBhcnNlUGFydE9mUGFydHMocGFydCwgcGFydHMsIG5vZGVzLCBpbmRleCwgc3RhdGUsIGNhbGxiYWNrKSB7XG4gIGxldCBwYXJzZWQ7XG5cbiAgaWYgKGNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgY29uc3QgcGFydHNOb2RlcyA9IFtdO1xuXG4gICAgaW5kZXgrKztcblxuICAgIHBhcnNlZCA9IHBhcnQucGFyc2Uobm9kZXMsIHN0YXRlLCAoKSA9PiBwYXJzZVBhcnRzKHBhcnRzLCBwYXJ0c05vZGVzLCBpbmRleCwgc3RhdGUsIGNhbGxiYWNrKSk7XG5cbiAgICBpZiAocGFyc2VkKSB7XG4gICAgICBwdXNoKG5vZGVzLCBwYXJ0c05vZGVzKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgcGFydFJ1bGVOYW1lUGFydFdpdGhMb29rQWhlYWQgPSBpc1BhcnRSdWxlTmFtZVBhcnRXaXRoTG9va0FoZWFkKHBhcnQpO1xuXG4gICAgaWYgKHBhcnRSdWxlTmFtZVBhcnRXaXRoTG9va0FoZWFkKSB7XG4gICAgICBjb25zdCBydWxlTmFtZVBhcnQgPSBwYXJ0LCAvLy9cbiAgICAgICAgICAgIHBhcnRzTm9kZXMgPSBbXTtcblxuICAgICAgaW5kZXgrKztcblxuICAgICAgcGFyc2VkID0gcnVsZU5hbWVQYXJ0LnBhcnNlKG5vZGVzLCBzdGF0ZSwgKCkgPT4gcGFyc2VQYXJ0cyhwYXJ0cywgcGFydHNOb2RlcywgaW5kZXgsIHN0YXRlLCBjYWxsYmFjaykpO1xuXG4gICAgICBpZiAocGFyc2VkKSB7XG4gICAgICAgIHB1c2gobm9kZXMsIHBhcnRzTm9kZXMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwYXJzZWQgPSBwYXJ0LnBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spO1xuXG4gICAgICBpZiAocGFyc2VkKSB7XG4gICAgICAgIGluZGV4Kys7XG5cbiAgICAgICAgcGFyc2VkID0gcGFyc2VQYXJ0cyhwYXJ0cywgbm9kZXMsIGluZGV4LCBzdGF0ZSwgY2FsbGJhY2spO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYXJzZWQ7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGZpcnN0IH0gZnJvbSBcIi4vdXRpbGl0aWVzL2FycmF5XCI7XG5pbXBvcnQgeyBwYXJzZVBhcnRzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL2xvb2tBaGVhZFwiO1xuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERlZmluaXRpb24ge1xuICBjb25zdHJ1Y3RvcihwYXJ0cykge1xuICAgIHRoaXMucGFydHMgPSBwYXJ0cztcbiAgfVxuXG4gIGdldFBhcnRzKCkge1xuICAgIHJldHVybiB0aGlzLnBhcnRzO1xuICB9XG5cbiAgZ2V0Rmlyc3RQYXJ0KCkge1xuICAgIGNvbnN0IGZpcnN0UGFydCA9IGZpcnN0KHRoaXMucGFydHMpO1xuXG4gICAgcmV0dXJuIGZpcnN0UGFydDtcbiAgfVxuXG4gIGdldFBhcnRzTGVuZ3RoKCkge1xuICAgIGNvbnN0IHBhcnRzTGVuZ3RoID0gdGhpcy5wYXJ0cy5sZW5ndGg7XG5cbiAgICByZXR1cm4gcGFydHNMZW5ndGg7XG4gIH1cblxuICBhZGRQYXJ0KHBhcnQpIHtcbiAgICB0aGlzLnBhcnRzLnB1c2gocGFydCk7XG4gIH1cblxuICBwYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrKSB7XG4gICAgbGV0IHBhcnNlZDtcblxuICAgIGNvbnN0IGluZGV4ID0gMDtcblxuICAgIHBhcnNlZCA9IHBhcnNlUGFydHModGhpcy5wYXJ0cywgbm9kZXMsIGluZGV4LCBzdGF0ZSwgY2FsbGJhY2spO1xuXG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfVxuXG4gIGFzU3RyaW5nKCkge1xuICAgIGNvbnN0IHBhcnRzU3RyaW5nID0gdGhpcy5wYXJ0cy5yZWR1Y2UoKHBhcnRzU3RyaW5nLCBwYXJ0KSA9PiB7XG4gICAgICAgICAgY29uc3QgcGFydFN0cmluZyA9IHBhcnQuYXNTdHJpbmcoKTtcblxuICAgICAgICAgIGlmIChwYXJ0c1N0cmluZyA9PT0gRU1QVFlfU1RSSU5HKSB7XG4gICAgICAgICAgICBwYXJ0c1N0cmluZyA9IHBhcnRTdHJpbmc7IC8vL1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwYXJ0c1N0cmluZyA9IGAke3BhcnRzU3RyaW5nfSAke3BhcnRTdHJpbmd9YDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gcGFydHNTdHJpbmc7XG4gICAgICAgIH0sIEVNUFRZX1NUUklORyksXG4gICAgICAgIHN0cmluZyA9IHBhcnRzU3RyaW5nOyAvLy9cblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXJtaW5hbFBhcnQge1xuICBpc05vblRlcm1pbmFsUGFydCgpIHtcbiAgICBjb25zdCBub25UZXJtaW5hbFBhcnQgPSBmYWxzZTtcblxuICAgIHJldHVybiBub25UZXJtaW5hbFBhcnQ7XG4gIH1cblxuICBpc1Rlcm1pbmFsUGFydCgpIHtcbiAgICBjb25zdCB0ZXJtaW5hbFBhcnQgPSB0cnVlO1xuICAgIFxuICAgIHJldHVybiB0ZXJtaW5hbFBhcnQ7XG4gIH1cblxuICBpc05vV2hpdGVzcGFjZVBhcnQoKSB7XG4gICAgY29uc3Qgbm9XaGl0ZXNwYWNlUGFydCA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIG5vV2hpdGVzcGFjZVBhcnQ7XG4gIH1cblxuICBjbG9uZShQYXJ0LCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHsgcmV0dXJuIG5ldyBQYXJ0KC4uLnJlbWFpbmluZ0FyZ3VtZW50cyk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgRU1QVFlfU1RSSU5HID0gXCJcIjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlIGZyb20gXCIuL3ZlcnRpY2FsQnJhbmNoXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlcm1pbmFsTm9kZVBhcnNlVHJlZSBleHRlbmRzIFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlIHtcbiAgc3RhdGljIGZyb21UZXJtaW5hbE5vZGVUb2tlbnNBbmRBYnJpZGdlZCh0ZXJtaW5hbE5vZGUsIHRva2VucywgYWJyaWRnZWQpIHtcbiAgICBjb25zdCBzaWduaWZpY2FudFRva2VuID0gdGVybWluYWxOb2RlLmdldFNpZ25pZmljYW50VG9rZW4oKSxcbiAgICAgICAgICBjb250ZW50ID0gdGVybWluYWxOb2RlLmdldENvbnRlbnQoKSxcbiAgICAgICAgICB0eXBlID0gc2lnbmlmaWNhbnRUb2tlbi5nZXRUeXBlKCksXG4gICAgICAgICAgdG9rZW5JbmRleCA9IHRva2Vucy5pbmRleE9mKHNpZ25pZmljYW50VG9rZW4pLFxuICAgICAgICAgIHN0cmluZyA9IGFicmlkZ2VkID9cbiAgICAgICAgICAgICAgICAgICAgIGAke2NvbnRlbnR9WyR7dHlwZX1dYCA6XG4gICAgICAgICAgICAgICAgICAgICAgIGAke2NvbnRlbnR9WyR7dHlwZX1dKCR7dG9rZW5JbmRleH0pYCxcbiAgICAgICAgICBzdHJpbmdMZW5ndGggPSBzdHJpbmcubGVuZ3RoLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlV2lkdGggPSBzdHJpbmdMZW5ndGgsIC8vL1xuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlID0gVmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZnJvbVdpZHRoKHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlV2lkdGgpLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5nZXRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKCksXG4gICAgICAgICAgdGVybWluYWxOb2RlUGFyc2VUcmVlID0gVmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZnJvbVN0cmluZ0FuZFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oVGVybWluYWxOb2RlUGFyc2VUcmVlLCBzdHJpbmcsIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24pO1xuXG4gICAgdGVybWluYWxOb2RlUGFyc2VUcmVlLmFwcGVuZFRvVG9wKHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlKTtcblxuICAgIHJldHVybiB0ZXJtaW5hbE5vZGVQYXJzZVRyZWU7XG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVGVybWluYWxOb2RlUGFyc2VUcmVlIGZyb20gXCIuLi9wYXJzZVRyZWUvdGVybWluYWxOb2RlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlcm1pbmFsTm9kZSB7XG4gIGNvbnN0cnVjdG9yKHNpZ25pZmljYW50VG9rZW4pIHtcbiAgICB0aGlzLnNpZ25pZmljYW50VG9rZW4gPSBzaWduaWZpY2FudFRva2VuO1xuICB9XG5cbiAgZ2V0U2lnbmlmaWNhbnRUb2tlbigpIHtcbiAgICByZXR1cm4gdGhpcy5zaWduaWZpY2FudFRva2VuO1xuICB9XG5cbiAgZ2V0Rmlyc3RTaWduaWZpY2FudFRva2VuKCkge1xuICAgIGNvbnN0IGZpcnN0U2lnbmlmaWNhbnRUb2tlbiA9IHRoaXMuc2lnbmlmaWNhbnRUb2tlbjsgIC8vL1xuXG4gICAgcmV0dXJuIGZpcnN0U2lnbmlmaWNhbnRUb2tlbjtcbiAgfVxuXG4gIGdldExhc3RTaWduaWZpY2FudFRva2VuKCkge1xuICAgIGNvbnN0IGxhc3RTaWduaWZpY2FudFRva2VuID0gdGhpcy5zaWduaWZpY2FudFRva2VuOyAgLy8vXG5cbiAgICByZXR1cm4gbGFzdFNpZ25pZmljYW50VG9rZW47XG4gIH1cblxuICBpc05vV2hpdGVzcGFjZU5vZGUoKSB7XG4gICAgY29uc3Qgbm9XaGl0ZXNwYWNlTm9kZSA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIG5vV2hpdGVzcGFjZU5vZGU7XG4gIH1cblxuICBpc1Rlcm1pbmFsTm9kZSgpIHtcbiAgICBjb25zdCB0ZXJtaW5hbE5vZGUgPSB0cnVlO1xuICAgIFxuICAgIHJldHVybiB0ZXJtaW5hbE5vZGU7XG4gIH1cblxuICBpc05vblRlcm1pbmFsTm9kZSgpIHtcbiAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBmYWxzZTtcblxuICAgIHJldHVybiBub25UZXJtaW5hbE5vZGU7XG4gIH1cblxuICBnZXRUeXBlKCkgeyByZXR1cm4gdGhpcy5zaWduaWZpY2FudFRva2VuLmdldFR5cGUoKTsgfVxuXG4gIGdldENvbnRlbnQoKSB7IHJldHVybiB0aGlzLnNpZ25pZmljYW50VG9rZW4uZ2V0Q29udGVudCgpOyB9XG5cbiAgc2V0U2lnbmlmaWNhbnRUb2tlbihzaWduaWZpY2FudFRva2VuKSB7XG4gICAgdGhpcy5zaWduaWZpY2FudFRva2VuID0gc2lnbmlmaWNhbnRUb2tlbjtcbiAgfVxuXG4gIGFzUGFyc2VUcmVlKHRva2VucywgYWJyaWRnZWQgPSBmYWxzZSkge1xuICAgIGNvbnN0IHRlcm1pbmFsTm9kZSA9IHRoaXMsICAvLy9cbiAgICAgICAgICB0ZXJtaW5hbE5vZGVQYXJzZVRyZWUgPSBUZXJtaW5hbE5vZGVQYXJzZVRyZWUuZnJvbVRlcm1pbmFsTm9kZVRva2Vuc0FuZEFicmlkZ2VkKHRlcm1pbmFsTm9kZSwgdG9rZW5zLCBhYnJpZGdlZCksXG4gICAgICAgICAgcGFyc2VUcmVlID0gdGVybWluYWxOb2RlUGFyc2VUcmVlOyAgLy8vXG5cbiAgICByZXR1cm4gcGFyc2VUcmVlO1xuICB9XG5cbiAgc3RhdGljIGZyb21TaWduaWZpY2FudFRva2VuKENsYXNzLCBzaWduaWZpY2FudFRva2VuKSB7XG4gICAgaWYgKHNpZ25pZmljYW50VG9rZW4gPT09IHVuZGVmaW5lZCkge1xuICAgICAgc2lnbmlmaWNhbnRUb2tlbiA9IENsYXNzOyAvLy9cbiAgICAgIENsYXNzID0gVGVybWluYWxOb2RlOyAvLy9cbiAgICB9XG5cbiAgICBjb25zdCB0ZXJtaW5hbE5vZGUgPSBuZXcgQ2xhc3Moc2lnbmlmaWNhbnRUb2tlbik7XG4gICAgXG4gICAgcmV0dXJuIHRlcm1pbmFsTm9kZTtcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBUZXJtaW5hbFBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvdGVybWluYWxcIjtcbmltcG9ydCBUZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL25vZGUvdGVybWluYWxcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0IGV4dGVuZHMgVGVybWluYWxQYXJ0IHtcbiAgY29uc3RydWN0b3Ioc2lnbmlmaWNhbnRUb2tlblR5cGUpIHtcbiAgICBzdXBlcigpO1xuICAgIFxuICAgIHRoaXMuc2lnbmlmaWNhbnRUb2tlblR5cGUgPSBzaWduaWZpY2FudFRva2VuVHlwZTtcbiAgfVxuXG4gIHBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spIHtcbiAgICBsZXQgcGFyc2VkO1xuXG4gICAgbGV0IHRlcm1pbmFsTm9kZSA9IG51bGw7XG4gICAgXG4gICAgY29uc3Qgc2F2ZWRJbmRleCA9IHN0YXRlLmdldFNhdmVkSW5kZXgoKSxcblx0XHQgICAgICBuZXh0U2lnbmlmaWNhbnRUb2tlbiA9IHN0YXRlLmdldE5leHRTaWduaWZpY2FudFRva2VuKCksXG5cdFx0XHRcdFx0c2lnbmlmaWNhbnRUb2tlbiA9IG5leHRTaWduaWZpY2FudFRva2VuOyAvLy9cblxuICAgIGlmIChzaWduaWZpY2FudFRva2VuICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBzaWduaWZpY2FudFRva2VuVHlwZSA9IHNpZ25pZmljYW50VG9rZW4uZ2V0VHlwZSgpO1xuXG4gICAgICBpZiAoc2lnbmlmaWNhbnRUb2tlblR5cGUgPT09IHRoaXMuc2lnbmlmaWNhbnRUb2tlblR5cGUpIHtcbiAgICAgICAgdGVybWluYWxOb2RlID0gVGVybWluYWxOb2RlLmZyb21TaWduaWZpY2FudFRva2VuKHNpZ25pZmljYW50VG9rZW4pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHBhcnNlZCA9ICh0ZXJtaW5hbE5vZGUgIT09IG51bGwpO1xuXG4gICAgaWYgKHBhcnNlZCkge1xuICAgICAgbm9kZXMucHVzaCh0ZXJtaW5hbE5vZGUpO1xuXG4gICAgICBpZiAoY2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICAgICAgcGFyc2VkID0gY2FsbGJhY2soKTtcblxuICAgICAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgICAgIG5vZGVzLnBvcCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgIHN0YXRlLmJhY2t0cmFjayhzYXZlZEluZGV4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG5cbiAgYXNTdHJpbmcoKSB7XG4gICAgY29uc3Qgc3RyaW5nID0gYFske3RoaXMuc2lnbmlmaWNhbnRUb2tlblR5cGV9XWA7XG4gICAgXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxuXG4gIGNsb25lKCkgeyByZXR1cm4gc3VwZXIuY2xvbmUoU2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0LCB0aGlzLnNpZ25pZmljYW50VG9rZW5UeXBlKTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBFTVBUWV9TVFJJTkcgPSBcIlwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyB0eXBlcyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBTaWduaWZpY2FudFRva2VuVHlwZVBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvc2lnbmlmaWNhbnRUb2tlblR5cGVcIjtcblxuY29uc3QgeyBuYW1lVHlwZSB9ID0gdHlwZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5hbWVEZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IG5hbWVTaWduaWZpY2FudFRva2VuVHlwZSA9IG5hbWVUeXBlLCAgLy8vXG4gICAgICAgICAgbmFtZVNpZ25pZmljYW50VG9rZW5UeXBlUGFydCA9IG5ldyBTaWduaWZpY2FudFRva2VuVHlwZVBhcnQobmFtZVNpZ25pZmljYW50VG9rZW5UeXBlKSxcbiAgICAgICAgICBwYXJ0cyA9IFtcbiAgICAgICAgICAgIG5hbWVTaWduaWZpY2FudFRva2VuVHlwZVBhcnRcbiAgICAgICAgICBdO1xuXG4gICAgc3VwZXIocGFydHMpXG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgTmFtZVJ1bGVOYW1lID0gXCJuYW1lXCI7XG5leHBvcnQgY29uc3QgUGFydFJ1bGVOYW1lID0gXCJwYXJ0XCI7XG5leHBvcnQgY29uc3QgUnVsZVJ1bGVOYW1lID0gXCJydWxlXCI7XG5leHBvcnQgY29uc3QgRXJyb3JSdWxlTmFtZSA9IFwiZXJyb3JcIjtcbmV4cG9ydCBjb25zdCBSdWxlTmFtZVJ1bGVOYW1lID0gXCJydWxlTmFtZVwiO1xuZXhwb3J0IGNvbnN0IERvY3VtZW50UnVsZU5hbWUgPSBcImRvY3VtZW50XCI7XG5leHBvcnQgY29uc3QgV2lsZGNhcmRSdWxlTmFtZSA9IFwid2lsZGNhcmRcIjtcbmV4cG9ydCBjb25zdCBFbmRPZkxpbmVSdWxlTmFtZSA9IFwiZW5kT2ZMaW5lXCI7XG5leHBvcnQgY29uc3QgRGVmaW5pdGlvblJ1bGVOYW1lID0gXCJkZWZpbml0aW9uXCI7XG5leHBvcnQgY29uc3QgUXVhbnRpZmllclJ1bGVOYW1lID0gXCJxdWFudGlmaWVyXCI7XG5leHBvcnQgY29uc3QgRGVmaW5pdGlvbnNSdWxlTmFtZSA9IFwiZGVmaW5pdGlvbnNcIjtcbmV4cG9ydCBjb25zdCBUZXJtaW5hbFBhcnRSdWxlTmFtZSA9IFwidGVybWluYWxQYXJ0XCI7XG5leHBvcnQgY29uc3QgQ2hvaWNlT2ZQYXJ0c1J1bGVOYW1lID0gXCJjaG9pY2VPZlBhcnRzXCI7XG5leHBvcnQgY29uc3QgVGVybWluYWxTeW1ib2xSdWxlTmFtZSA9IFwidGVybWluYWxTeW1ib2xcIjtcbmV4cG9ydCBjb25zdCBOb25UZXJtaW5hbFBhcnRSdWxlTmFtZSA9IFwibm9uVGVybWluYWxQYXJ0XCI7XG5leHBvcnQgY29uc3QgU2VxdWVuY2VPZlBhcnRzUnVsZU5hbWUgPSBcInNlcXVlbmNlT2ZQYXJ0c1wiO1xuZXhwb3J0IGNvbnN0IE5vV2hpdGVzcGFjZVBhcnRSdWxlTmFtZSA9IFwibm9XaGl0ZXNwYWNlUGFydFwiO1xuZXhwb3J0IGNvbnN0IExvb2tBaGVhZE1vZGlmaWVyUnVsZU5hbWUgPSBcImxvb2tBaGVhZE1vZGlmaWVyXCI7XG5leHBvcnQgY29uc3QgQW1iaWd1b3VzTW9kaWZpZXJSdWxlTmFtZSA9IFwiQW1iaWd1b3VzTW9kaWZpZXJcIjtcbmV4cG9ydCBjb25zdCBSZWd1bGFyRXhwcmVzc2lvblJ1bGVOYW1lID0gXCJyZWd1bGFyRXhwcmVzc2lvblwiO1xuZXhwb3J0IGNvbnN0IE9wdGlvbmFsUXVhbnRpZmllclJ1bGVOYW1lID0gXCJvcHRpb25hbFF1YW50aWZpZXJcIjtcbmV4cG9ydCBjb25zdCBPbmVPck1vcmVRdWFudGlmaWVyUnVsZU5hbWUgPSBcIm9uZU9yTW9yZVF1YW50aWZpZXJcIjtcbmV4cG9ydCBjb25zdCBaZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lID0gXCJ6ZXJvT3JNb3JlUXVhbnRpZmllclwiO1xuZXhwb3J0IGNvbnN0IFNpZ25pZmljYW50VG9rZW5UeXBlUnVsZU5hbWUgPSBcInNpZ25pZmljYW50VG9rZW5UeXBlXCI7XG5cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBOYW1lQk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvbmFtZVwiO1xuaW1wb3J0IE5hbWVEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL25hbWVcIjtcblxuaW1wb3J0IHsgTmFtZVJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOYW1lUnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBuYW1lRGVmaW5pdGlvbiA9IG5ldyBOYW1lRGVmaW5pdGlvbigpLFxuICAgICAgICAgIG5hbWUgPSBOYW1lUnVsZU5hbWUsXG4gICAgICAgICAgYW1iaWd1b3VzID0gZmFsc2UsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBuYW1lRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IE5hbWVCTkZOb2RlO1xuICAgIFxuICAgIHN1cGVyKG5hbWUsIGFtYmlndW91cywgZGVmaW5pdGlvbnMsIE5vZGUpXG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOb25UZXJtaW5hbFBhcnQge1xuICBjb25zdHJ1Y3Rvcih0eXBlKSB7XG4gICAgdGhpcy50eXBlID0gdHlwZTsgIFxuICB9XG4gIFxuICBnZXRUeXBlKCkge1xuICAgIHJldHVybiB0aGlzLnR5cGU7XG4gIH1cblxuICBpc05vblRlcm1pbmFsUGFydCgpIHtcbiAgICBjb25zdCBub25UZXJtaW5hbFBhcnQgPSB0cnVlO1xuXG4gICAgcmV0dXJuIG5vblRlcm1pbmFsUGFydDtcbiAgfVxuXG4gIGlzVGVybWluYWxQYXJ0KCkge1xuICAgIGNvbnN0IHRlcm1pbmFsUGFydCA9IGZhbHNlO1xuICAgIFxuICAgIHJldHVybiB0ZXJtaW5hbFBhcnQ7XG4gIH1cblxuICBpc1J1bGVOYW1lUGFydCgpIHtcbiAgICBjb25zdCBydWxlTmFtZVBhcnQgPSBmYWxzZTtcblxuICAgIHJldHVybiBydWxlTmFtZVBhcnQ7XG4gIH1cblxuICBjbG9uZShQYXJ0LCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHsgcmV0dXJuIG5ldyBQYXJ0KC4uLnJlbWFpbmluZ0FyZ3VtZW50cyk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgRU1QVFlfU1RSSU5HID0gXCJcIjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IFJ1bGVOYW1lUGFydFR5cGUgPSBcInJ1bGVOYW1lUGFydFwiO1xuZXhwb3J0IGNvbnN0IE9wdGlvbmFsUGFydFBhcnRUeXBlID0gXCJvcHRpb25hbFBhcnRcIjtcbmV4cG9ydCBjb25zdCBDaG9pY2VPZlBhcnRzUGFydFR5cGUgPSBcImNob2ljZU9mUGFydHNcIjtcbmV4cG9ydCBjb25zdCBPbmVPck1vcmVQYXJ0c1BhcnRUeXBlID0gXCJvbmVPck1vcmVQYXJ0c1wiO1xuZXhwb3J0IGNvbnN0IFplcm9Pck1vcmVQYXJ0c1BhcnRUeXBlID0gXCJ6ZXJvT3JNb3JlUGFydHNcIjtcbmV4cG9ydCBjb25zdCBTZXF1ZW5jZU9mUGFydHNQYXJ0VHlwZSA9IFwic2VxdWVuY2VPZlBhcnRzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgUnVsZU5hbWVQYXJ0VHlwZSxcbiAgT3B0aW9uYWxQYXJ0UGFydFR5cGUsXG4gIENob2ljZU9mUGFydHNQYXJ0VHlwZSxcbiAgT25lT3JNb3JlUGFydHNQYXJ0VHlwZSxcbiAgWmVyb09yTW9yZVBhcnRzUGFydFR5cGUsXG4gIFNlcXVlbmNlT2ZQYXJ0c1BhcnRUeXBlXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsUGFydCBmcm9tIFwiLi4vLi4vcGFydC9ub25UZXJtaW5hbFwiO1xuXG5pbXBvcnQgeyBwdXNoIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9hcnJheVwiO1xuaW1wb3J0IHsgT3B0aW9uYWxQYXJ0UGFydFR5cGUgfSBmcm9tIFwiLi4vLi4vcGFydFR5cGVzXCI7XG5cbmNvbnN0IHsgcXVlc3Rpb25NYXJrIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgT3B0aW9uYWxQYXJ0UGFydCBleHRlbmRzIE5vblRlcm1pbmFsUGFydCB7XG4gIGNvbnN0cnVjdG9yKHBhcnQpIHtcbiAgICBjb25zdCB0eXBlID0gT3B0aW9uYWxQYXJ0UGFydFR5cGU7IC8vL1xuXG4gICAgc3VwZXIodHlwZSk7XG5cbiAgICB0aGlzLnBhcnQgPSBwYXJ0O1xuICB9XG5cbiAgZ2V0UGFydCgpIHtcbiAgICByZXR1cm4gdGhpcy5wYXJ0O1xuICB9XG5cbiAgcGFyc2Uobm9kZXMsIHN0YXRlLCBjYWxsYmFjaykge1xuICAgIGxldCBwYXJzZWQ7XG5cbiAgICBjb25zdCBwYXJ0ID0gdGhpcy5nZXRQYXJ0KCksXG4gICAgICAgICAgcGFydE5vZGVzID0gW10sXG4gICAgICAgICAgc2F2ZWRJbmRleCA9IHN0YXRlLmdldFNhdmVkSW5kZXgoKTtcblxuICAgIHBhcnNlZCA9IHBhcnNlUGFydChwYXJ0LCBwYXJ0Tm9kZXMsIHN0YXRlLCBjYWxsYmFjayk7XG5cbiAgICBpZiAocGFyc2VkKSB7XG4gICAgICBwdXNoKG5vZGVzLCBwYXJ0Tm9kZXMpO1xuICAgIH1cblxuICAgIGlmICghcGFyc2VkKSB7XG4gICAgICBzdGF0ZS5iYWNrdHJhY2soc2F2ZWRJbmRleCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfVxuXG4gIGFzU3RyaW5nKCkge1xuICAgIGNvbnN0IG9wZXJhdG9yU3RyaW5nID0gcXVlc3Rpb25NYXJrLCAgLy8vXG4gICAgICAgICAgcGFydFN0cmluZyA9IHRoaXMucGFydC5hc1N0cmluZygpLFxuICAgICAgICAgIHN0cmluZyA9IGAke3BhcnRTdHJpbmd9JHtvcGVyYXRvclN0cmluZ31gO1xuXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxuXG4gIGNsb25lKCkgeyByZXR1cm4gc3VwZXIuY2xvbmUoT3B0aW9uYWxQYXJ0UGFydCwgdGhpcy5wYXJ0KTsgfVxufVxuXG5mdW5jdGlvbiBwYXJzZVBhcnQocGFydCwgbm9kZXMsIHN0YXRlLCBjYWxsYmFjaykge1xuICBsZXQgcGFyc2VkO1xuXG4gIGlmIChjYWxsYmFjayAhPT0gbnVsbCkge1xuICAgIHBhcnNlZCA9IGNhbGxiYWNrKCk7XG5cbiAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgcGFyc2VkID0gcGFydC5wYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcGFydC5wYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrKTtcblxuICAgIHBhcnNlZCA9IHRydWU7XG4gIH1cblxuICByZXR1cm4gcGFyc2VkO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgRU1QVFlfU1RSSU5HID0gXCJcIjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsUGFydCBmcm9tIFwiLi4vLi4vcGFydC9ub25UZXJtaW5hbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb2xsZWN0aW9uT2ZQYXJ0c1BhcnQgZXh0ZW5kcyBOb25UZXJtaW5hbFBhcnQge1xuICBjb25zdHJ1Y3Rvcih0eXBlLCBwYXJ0KSB7XG4gICAgc3VwZXIodHlwZSk7XG5cbiAgICB0aGlzLnBhcnQgPSBwYXJ0O1xuICB9XG5cbiAgZ2V0UGFydCgpIHtcbiAgICByZXR1cm4gdGhpcy5wYXJ0O1xuICB9XG4gIFxuICBhc1N0cmluZyhvcGVyYXRvclN0cmluZykge1xuICAgIGNvbnN0IHBhcnRTdHJpbmcgPSB0aGlzLnBhcnQuYXNTdHJpbmcoKSxcbiAgICAgICAgICBzdHJpbmcgPSBgJHtwYXJ0U3RyaW5nfSR7b3BlcmF0b3JTdHJpbmd9YDtcblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuICBjbG9uZShQYXJ0KSB7IHJldHVybiBzdXBlci5jbG9uZShQYXJ0LCB0aGlzLnBhcnQpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IEVNUFRZX1NUUklORyA9IFwiXCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgQ29sbGVjdGlvbk9mUGFydHNQYXJ0IGZyb20gXCIuL2NvbGxlY3Rpb25PZlBhcnRzXCI7XG5cbmltcG9ydCB7IHB1c2ggfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5pbXBvcnQgeyBPbmVPck1vcmVQYXJ0c1BhcnRUeXBlIH0gZnJvbSBcIi4uLy4uL3BhcnRUeXBlc1wiO1xuXG5jb25zdCB7IHBsdXMgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBPbmVPck1vcmVQYXJ0c1BhcnQgZXh0ZW5kcyBDb2xsZWN0aW9uT2ZQYXJ0c1BhcnQge1xuICBjb25zdHJ1Y3RvcihwYXJ0KSB7XG4gICAgY29uc3QgdHlwZSA9IE9uZU9yTW9yZVBhcnRzUGFydFR5cGU7IC8vL1xuXG4gICAgc3VwZXIodHlwZSwgcGFydCk7XG4gIH1cblxuICBwYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrKSB7XG4gICAgbGV0IHBhcnNlZDtcblxuICAgIGNvbnN0IHBhcnQgPSB0aGlzLmdldFBhcnQoKSxcbiAgICAgICAgICBwYXJ0Tm9kZXMgPSBbXSxcbiAgICAgICAgICBzYXZlZEluZGV4ID0gc3RhdGUuZ2V0U2F2ZWRJbmRleCgpO1xuXG4gICAgcGFyc2VkID0gcGFyc2VQYXJ0KHBhcnQsIHBhcnROb2Rlcywgc3RhdGUsIGNhbGxiYWNrKTtcblxuICAgIGlmIChwYXJzZWQpIHtcbiAgICAgIHB1c2gobm9kZXMsIHBhcnROb2Rlcyk7XG4gICAgfVxuXG4gICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgIHN0YXRlLmJhY2t0cmFjayhzYXZlZEluZGV4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG5cbiAgYXNTdHJpbmcoKSB7XG4gICAgY29uc3Qgb3BlcmF0b3JTdHJpbmcgPSBwbHVzLCAgLy8vXG4gICAgICAgICAgc3RyaW5nID0gc3VwZXIuYXNTdHJpbmcob3BlcmF0b3JTdHJpbmcpO1xuXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxuXG4gIGNsb25lKCkgeyByZXR1cm4gc3VwZXIuY2xvbmUoT25lT3JNb3JlUGFydHNQYXJ0KTsgfVxufVxuXG5mdW5jdGlvbiBwYXJzZVBhcnQocGFydCwgbm9kZXMsIHN0YXRlLCBjYWxsYmFjaykge1xuICBsZXQgcGFyc2VkO1xuXG4gIGlmIChjYWxsYmFjayAhPT0gbnVsbCkge1xuICAgIHBhcnNlZCA9IHBhcnQucGFyc2Uobm9kZXMsIHN0YXRlLCAoKSA9PiB7XG4gICAgICBsZXQgcGFyc2VkID0gY2FsbGJhY2soKTtcblxuICAgICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgICAgcGFyc2VkID0gcGFyc2VQYXJ0KHBhcnQsIG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcGFyc2VkO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIHBhcnNlZCA9IHBhcnQucGFyc2Uobm9kZXMsIHN0YXRlLCBjYWxsYmFjayk7XG5cbiAgICBpZiAocGFyc2VkKSB7XG4gICAgICBwYXJzZVBhcnQocGFydCwgbm9kZXMsIHN0YXRlLCBjYWxsYmFjaylcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcGFyc2VkO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IENvbGxlY3Rpb25PZlBhcnRzUGFydCBmcm9tIFwiLi9jb2xsZWN0aW9uT2ZQYXJ0c1wiO1xuXG5pbXBvcnQgeyBwdXNoIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9hcnJheVwiO1xuaW1wb3J0IHsgWmVyb09yTW9yZVBhcnRzUGFydFR5cGUgfSBmcm9tIFwiLi4vLi4vcGFydFR5cGVzXCI7XG5cbmNvbnN0IHsgYXN0ZXJpc2sgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBaZXJvT3JNb3JlUGFydHNQYXJ0IGV4dGVuZHMgQ29sbGVjdGlvbk9mUGFydHNQYXJ0IHtcbiAgY29uc3RydWN0b3IocGFydCkge1xuICAgIGNvbnN0IHR5cGUgPSBaZXJvT3JNb3JlUGFydHNQYXJ0VHlwZTsgLy8vXG5cbiAgICBzdXBlcih0eXBlLCBwYXJ0KTtcbiAgfVxuXG4gIHBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spIHtcbiAgICBsZXQgcGFyc2VkO1xuXG4gICAgY29uc3QgcGFydCA9IHRoaXMuZ2V0UGFydCgpLFxuICAgICAgICAgIHBhcnROb2RlcyA9IFtdLFxuICAgICAgICAgIHNhdmVkSW5kZXggPSBzdGF0ZS5nZXRTYXZlZEluZGV4KCk7XG5cbiAgICBwYXJzZWQgPSBwYXJzZVBhcnQocGFydCwgcGFydE5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spO1xuXG4gICAgaWYgKHBhcnNlZCkge1xuICAgICAgcHVzaChub2RlcywgcGFydE5vZGVzKTtcbiAgICB9XG5cbiAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgc3RhdGUuYmFja3RyYWNrKHNhdmVkSW5kZXgpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZWQ7XG4gIH1cblxuICBhc1N0cmluZygpIHtcbiAgICBjb25zdCBvcGVyYXRvclN0cmluZyA9IGFzdGVyaXNrLCAgLy8vXG4gICAgICAgICAgc3RyaW5nID0gc3VwZXIuYXNTdHJpbmcob3BlcmF0b3JTdHJpbmcpO1xuXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxuXG4gIGNsb25lKCkgeyByZXR1cm4gc3VwZXIuY2xvbmUoWmVyb09yTW9yZVBhcnRzUGFydCk7IH1cbn1cblxuZnVuY3Rpb24gcGFyc2VQYXJ0KHBhcnQsIG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spIHtcbiAgbGV0IHBhcnNlZDtcblxuICBpZiAoY2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICBwYXJzZWQgPSBjYWxsYmFjaygpO1xuXG4gICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgIHBhcnNlZCA9IHBhcnQucGFyc2Uobm9kZXMsIHN0YXRlLCAoKSA9PiBwYXJzZVBhcnQocGFydCwgbm9kZXMsIHN0YXRlLCBjYWxsYmFjaykpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBwYXJzZWQgPSBwYXJ0LnBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spO1xuXG4gICAgaWYgKHBhcnNlZCkge1xuICAgICAgcGFyc2VQYXJ0KHBhcnQsIG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIHBhcnNlZCA9IHRydWU7XG4gIH1cblxuICByZXR1cm4gcGFyc2VkO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBmaXJzdCB9IGZyb20gXCIuLi91dGlsaXRpZXMvYXJyYXlcIjtcbmltcG9ydCB7IExvb2tBaGVhZE1vZGlmaWVyUnVsZU5hbWUsIFF1YW50aWZpZXJSdWxlTmFtZSwgUnVsZU5hbWVSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzTm9kZUNob2ljZU5vZGUobm9kZSkge1xuICBsZXQgbm9kZU5vQ2hvaWNlTm9kZSA9IGZhbHNlO1xuXG4gIGNvbnN0IG5vZGVUZXJtaW5hbE5vZGUgPSBub2RlLmlzVGVybWluYWxOb2RlKCk7XG5cbiAgaWYgKG5vZGVUZXJtaW5hbE5vZGUpIHtcbiAgICBjb25zdCB0ZXJtaW5hbE5vZGUgPSBub2RlLCAgLy8vXG4gICAgICAgICAgdGVybWluYWxOb2RlQ29udGVudCA9IHRlcm1pbmFsTm9kZS5nZXRDb250ZW50KCk7XG5cbiAgICBub2RlTm9DaG9pY2VOb2RlID0gKHRlcm1pbmFsTm9kZUNvbnRlbnQgPT09IFwifFwiKTtcbiAgfVxuXG4gIHJldHVybiBub2RlTm9DaG9pY2VOb2RlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNOb2RlUnVsZU5hbWVOb2RlKG5vZGUpIHtcbiAgbGV0IG5vZGVSdWxlTmFtZU5vZGUgPSBmYWxzZTtcblxuICBjb25zdCBub2RlVGVybWluYWxOb2RlID0gbm9kZS5pc1Rlcm1pbmFsTm9kZSgpLFxuICAgICAgICBub2RlTm9uVGVybWluYWxOb2RlID0gIW5vZGVUZXJtaW5hbE5vZGU7XG5cbiAgaWYgKG5vZGVOb25UZXJtaW5hbE5vZGUpIHtcbiAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBub2RlLCAvLy9cbiAgICAgICAgICBub25UZXJtaW5hbE5vZGVSdWxlTmFtZSA9IG5vblRlcm1pbmFsTm9kZS5nZXRSdWxlTmFtZSgpO1xuXG4gICAgbm9kZVJ1bGVOYW1lTm9kZSA9IChub25UZXJtaW5hbE5vZGVSdWxlTmFtZSA9PT0gUnVsZU5hbWVSdWxlTmFtZSk7XG4gIH1cblxuICByZXR1cm4gbm9kZVJ1bGVOYW1lTm9kZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTm9kZVF1YW50aWZpZXJOb2RlKG5vZGUpIHtcbiAgbGV0IG5vZGVRdWFudGlmaWVyTm9kZSA9IGZhbHNlO1xuXG4gIGNvbnN0IG5vZGVOb25UZXJtaW5hbE5vZGUgPSBub2RlLmlzTm9uVGVybWluYWxOb2RlKCk7XG5cbiAgaWYgKG5vZGVOb25UZXJtaW5hbE5vZGUpIHtcbiAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBub2RlLCAvLy9cbiAgICAgICAgICBydWxlTmFtZSA9IG5vblRlcm1pbmFsTm9kZS5nZXRSdWxlTmFtZSgpLFxuICAgICAgICAgIHJ1bGVOYW1lUXVhbnRpZmllclJ1bGVOYW1lID0gKHJ1bGVOYW1lID09PSBRdWFudGlmaWVyUnVsZU5hbWUpO1xuXG4gICAgbm9kZVF1YW50aWZpZXJOb2RlID0gcnVsZU5hbWVRdWFudGlmaWVyUnVsZU5hbWU7ICAvLy9cbiAgfVxuXG4gIHJldHVybiBub2RlUXVhbnRpZmllck5vZGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc05vZGVMb29rQWhlYWRNb2RpZmllck5vZGUobm9kZSkge1xuICBsZXQgbm9kZUxvb2tBaGVhZE1vZGlmaWVyTm9kZSA9IGZhbHNlO1xuXG4gIGNvbnN0IG5vZGVOb25UZXJtaW5hbE5vZGUgPSBub2RlLmlzTm9uVGVybWluYWxOb2RlKCk7XG5cbiAgaWYgKG5vZGVOb25UZXJtaW5hbE5vZGUpIHtcbiAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBub2RlLCAvLy9cbiAgICAgICAgICBydWxlTmFtZSA9IG5vblRlcm1pbmFsTm9kZS5nZXRSdWxlTmFtZSgpLFxuICAgICAgICAgIHJ1bGVOYW1lTG9va0FoZWFkTW9kaWZpZXJSdWxlTmFtZSA9IChydWxlTmFtZSA9PT0gTG9va0FoZWFkTW9kaWZpZXJSdWxlTmFtZSk7XG5cbiAgICBub2RlTG9va0FoZWFkTW9kaWZpZXJOb2RlID0gcnVsZU5hbWVMb29rQWhlYWRNb2RpZmllclJ1bGVOYW1lOyAgLy8vXG4gIH1cblxuICByZXR1cm4gbm9kZUxvb2tBaGVhZE1vZGlmaWVyTm9kZTtcblxufVxuXG5leHBvcnQgZnVuY3Rpb24gcnVsZU5hbWVGcm9tUXVhbnRpZmllck5vZGUocXVhbnRpZmllck5vZGUpIHtcbiAgbGV0IG5vblRlcm1pbmFsTm9kZTtcblxuICBub25UZXJtaW5hbE5vZGUgPSBxdWFudGlmaWVyTm9kZTsgLy8vXG5cbiAgY29uc3QgY2hpbGROb2RlcyA9IG5vblRlcm1pbmFsTm9kZS5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgIGZpcnN0Q2hpbGROb2RlID0gZmlyc3QoY2hpbGROb2Rlcyk7XG5cbiAgbm9uVGVybWluYWxOb2RlID0gZmlyc3RDaGlsZE5vZGU7ICAvLy9cblxuICBjb25zdCBydWxlTmFtZSA9IG5vblRlcm1pbmFsTm9kZS5nZXRSdWxlTmFtZSgpO1xuXG4gIHJldHVybiBydWxlTmFtZTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS9ub25UZXJtaW5hbFwiO1xuaW1wb3J0IE9wdGlvbmFsUGFydFBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvbm9uVGVybWluYWwvb3B0aW9uYWxQYXJ0XCI7XG5pbXBvcnQgT25lT3JNb3JlUGFydHNQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L25vblRlcm1pbmFsL29uZU9yTW9yZVBhcnRzXCI7XG5pbXBvcnQgWmVyb09yTW9yZVBhcnRzUGFydCBmcm9tIFwiLi4vLi4vcGFydC9ub25UZXJtaW5hbC96ZXJvT3JNb3JlUGFydHNcIjtcblxuaW1wb3J0IHsgbGFzdCB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvYXJyYXlcIjtcbmltcG9ydCB7IGlzTm9kZVF1YW50aWZpZXJOb2RlLCBydWxlTmFtZUZyb21RdWFudGlmaWVyTm9kZSB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvYm5mXCI7XG5pbXBvcnQgeyBPcHRpb25hbFF1YW50aWZpZXJSdWxlTmFtZSwgT25lT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lLCBaZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lIH0gZnJvbSBcIi4uLy4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQYXJ0Qk5GTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIGdlbmVyYXRlUGFydChsb29rQWhlYWQpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gdGhpcy5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgbm9kZXMgPSBjaGlsZE5vZGVzLnNsaWNlKCksXG4gICAgICAgICAgcGFydCA9IHBhcnRGcm9tTm9kZXMobm9kZXMpO1xuXG4gICAgcmV0dXJuIHBhcnQ7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2RlcykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoUGFydEJORk5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTsgfVxufVxuXG5mdW5jdGlvbiBwYXJ0RnJvbU5vZGVzKG5vZGVzKSB7XG4gIGxldCBwYXJ0ID0gbnVsbDtcblxuICBjb25zdCBub2Rlc0xlbmd0aCA9IG5vZGVzLmxlbmd0aDtcblxuICBpZiAobm9kZXNMZW5ndGggPT09IDEpIHtcbiAgICBjb25zdCBub2RlID0gbm9kZXMucG9wKCksXG4gICAgICAgICAgbG9va0FoZWFkID0gZmFsc2U7XG5cbiAgICBwYXJ0ID0gbm9kZS5nZW5lcmF0ZVBhcnQobG9va0FoZWFkKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBsYXN0Tm9kZVF1YW50aWZpZXJOb2RlID0gaXNMYXN0Tm9kZVF1YW50aWZpZXJOb2RlKG5vZGVzKTtcblxuICAgIGlmIChsYXN0Tm9kZVF1YW50aWZpZXJOb2RlKSB7XG4gICAgICBjb25zdCBub2RlID0gbm9kZXMucG9wKCksXG4gICAgICAgICAgICBxdWFudGlmaWVyTm9kZSA9IG5vZGU7ICAvLy9cblxuICAgICAgcGFydCA9IHBhcnRGcm9tTm9kZXMobm9kZXMpO1xuXG4gICAgICBjb25zdCBydWxlTmFtZSA9IHJ1bGVOYW1lRnJvbVF1YW50aWZpZXJOb2RlKHF1YW50aWZpZXJOb2RlKSxcbiAgICAgICAgICAgIGNvbGxlY3Rpb25PZlBhcnRzUGFydCA9IGNvbGxlY3Rpb25PZlBhcnRzUGFydEZyb21QYXJ0QW5kUnVsZU5hbWUocGFydCwgcnVsZU5hbWUpO1xuXG4gICAgICBwYXJ0ID0gY29sbGVjdGlvbk9mUGFydHNQYXJ0OyAvLy9cbiAgICB9IGVsc2Uge1xuICAgICAgbm9kZXMuc2hpZnQoKTtcblxuICAgICAgcGFydCA9IHBhcnRGcm9tTm9kZXMobm9kZXMpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYXJ0O1xufVxuXG5mdW5jdGlvbiBpc0xhc3ROb2RlUXVhbnRpZmllck5vZGUobm9kZXMpIHtcbiAgY29uc3QgbGFzdE5vZGUgPSBsYXN0KG5vZGVzKSxcbiAgICAgICAgbGFzdE5vZGVRdWFudGlmaWVyTm9kZSA9IGlzTm9kZVF1YW50aWZpZXJOb2RlKGxhc3ROb2RlKTtcblxuICByZXR1cm4gbGFzdE5vZGVRdWFudGlmaWVyTm9kZTtcbn1cblxuZnVuY3Rpb24gY29sbGVjdGlvbk9mUGFydHNQYXJ0RnJvbVBhcnRBbmRSdWxlTmFtZShwYXJ0LCBydWxlTmFtZSkge1xuICBsZXQgY29sbGVjdGlvbk9mUGFydHNQYXJ0O1xuXG4gIHN3aXRjaCAocnVsZU5hbWUpIHtcbiAgICBjYXNlIE9wdGlvbmFsUXVhbnRpZmllclJ1bGVOYW1lIDpcbiAgICAgIGNvbnN0IG9wdGlvbmFsUGFydFBhcnQgPSBuZXcgT3B0aW9uYWxQYXJ0UGFydChwYXJ0KTtcblxuICAgICAgY29sbGVjdGlvbk9mUGFydHNQYXJ0ID0gb3B0aW9uYWxQYXJ0UGFydDsgLy8vXG4gICAgICBicmVhaztcblxuICAgIGNhc2UgT25lT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lIDpcbiAgICAgIGNvbnN0IG9uZU9yTW9yZVBhcnRzUGFydCA9IG5ldyBPbmVPck1vcmVQYXJ0c1BhcnQocGFydCk7XG5cbiAgICAgIGNvbGxlY3Rpb25PZlBhcnRzUGFydCA9IG9uZU9yTW9yZVBhcnRzUGFydDsgLy8vXG4gICAgICBicmVhaztcblxuICAgIGNhc2UgWmVyb09yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSA6XG4gICAgICBjb25zdCB6ZXJvT3JNb3JlUGFydHNQYXJ0ID0gbmV3IFplcm9Pck1vcmVQYXJ0c1BhcnQocGFydCk7XG5cbiAgICAgIGNvbGxlY3Rpb25PZlBhcnRzUGFydCA9IHplcm9Pck1vcmVQYXJ0c1BhcnQ7ICAvLy9cbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgcmV0dXJuIGNvbGxlY3Rpb25PZlBhcnRzUGFydDtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbFBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvbm9uVGVybWluYWxcIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgUnVsZU5hbWVQYXJ0VHlwZSB9IGZyb20gXCIuLi8uLi9wYXJ0VHlwZXNcIjtcblxuY29uc3QgeyBlbGxpcHNpcyB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ1bGVOYW1lUGFydCBleHRlbmRzIE5vblRlcm1pbmFsUGFydCB7XG4gIGNvbnN0cnVjdG9yKHJ1bGVOYW1lLCBsb29rQWhlYWQgPSBmYWxzZSkge1xuICAgIGNvbnN0IHR5cGUgPSBSdWxlTmFtZVBhcnRUeXBlOyAvLy9cblxuICAgIHN1cGVyKHR5cGUpO1xuXG4gICAgdGhpcy5ydWxlTmFtZSA9IHJ1bGVOYW1lO1xuXG4gICAgdGhpcy5sb29rQWhlYWQgPSBsb29rQWhlYWQ7XG4gIH1cbiAgXG4gIGdldFJ1bGVOYW1lKCkge1xuICAgIHJldHVybiB0aGlzLnJ1bGVOYW1lO1xuICB9XG5cbiAgaXNMb29rQWhlYWQoKSB7XG4gICAgcmV0dXJuIHRoaXMubG9va0FoZWFkO1xuICB9XG5cbiAgaXNSdWxlTmFtZVBhcnQoKSB7XG4gICAgY29uc3QgcnVsZU5hbWVQYXJ0ID0gdHJ1ZTtcblxuICAgIHJldHVybiBydWxlTmFtZVBhcnQ7XG4gIH1cblxuICBzZXRMb29rQWhlYWQobG9va0FoZWFkKSB7XG4gICAgdGhpcy5sb29rQWhlYWQgPSBsb29rQWhlYWQ7XG4gIH1cblxuICBmaW5kUnVsZShzdGF0ZSkge1xuICAgIGNvbnN0IHJ1bGVNYXAgPSBzdGF0ZS5nZXRSdWxlTWFwKCksXG4gICAgICAgICAgcnVsZSA9IHJ1bGVNYXBbdGhpcy5ydWxlTmFtZV0gfHwgbnVsbDsgIC8vL1xuXG4gICAgcmV0dXJuIHJ1bGU7XG4gIH1cblxuICBwYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrKSB7XG4gICAgbGV0IHBhcnNlZDtcblxuICAgIGNvbnN0IHJ1bGUgPSB0aGlzLmZpbmRSdWxlKHN0YXRlKTtcblxuICAgIGlmIChydWxlID09PSBudWxsKSB7XG4gICAgICBwYXJzZWQgPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgcnVsZU5vZGUgPSBydWxlLnBhcnNlKHN0YXRlLCBjYWxsYmFjayk7XG5cbiAgICAgIHBhcnNlZCA9IChydWxlTm9kZSAhPT0gbnVsbCk7XG5cbiAgICAgIGlmIChwYXJzZWQpIHtcbiAgICAgICAgbm9kZXMucHVzaChydWxlTm9kZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfVxuXG4gIGFzU3RyaW5nKCkge1xuICAgIGNvbnN0IGxvb2tBaGVhZFN0cmluZyA9IHRoaXMubG9va0FoZWFkID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsbGlwc2lzIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRU1QVFlfU1RSSU5HLFxuICAgICAgICAgIHN0cmluZyA9IGAke3RoaXMucnVsZU5hbWV9JHtsb29rQWhlYWRTdHJpbmd9YDtcblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuICBjbG9uZSgpIHsgcmV0dXJuIHN1cGVyLmNsb25lKFJ1bGVOYW1lUGFydCwgdGhpcy5ydWxlTmFtZSwgdGhpcy5sb29rQWhlYWQpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IEVNUFRZX1NUUklORyA9IFwiXCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgUnVsZU5hbWVQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL3J1bGVOYW1lXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ1bGVOYW1lRGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBjb25zdHJ1Y3RvcihydWxlTmFtZSkge1xuICAgIGNvbnN0IHJ1bGVOYW1lUnVsZU5hbWVQYXJ0ID0gbmV3IFJ1bGVOYW1lUGFydChydWxlTmFtZSksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICBydWxlTmFtZVJ1bGVOYW1lUGFydFxuICAgICAgICAgIF07XG4gICAgXG4gICAgc3VwZXIocGFydHMpXG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IFJ1bGVOYW1lUGFydCBmcm9tIFwiLi4vLi4vcGFydC9ub25UZXJtaW5hbC9ydWxlTmFtZVwiO1xuaW1wb3J0IFplcm9Pck1vcmVQYXJ0c1BhcnQgZnJvbSBcIi4uLy4uL3BhcnQvbm9uVGVybWluYWwvemVyb09yTW9yZVBhcnRzXCI7XG5cbmltcG9ydCB7IFF1YW50aWZpZXJSdWxlTmFtZSwgVGVybWluYWxQYXJ0UnVsZU5hbWUgfSBmcm9tIFwiLi4vLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IHF1YW50aWZpZXJSdWxlTmFtZSA9IFF1YW50aWZpZXJSdWxlTmFtZSxcbiAgICAgICAgICB0ZXJtaW5hbFBhcnRSdWxlTmFtZSA9IFRlcm1pbmFsUGFydFJ1bGVOYW1lLFxuICAgICAgICAgIHF1YW50aWZpZXJSdWxlTmFtZVBhcnQgPSBuZXcgUnVsZU5hbWVQYXJ0KHF1YW50aWZpZXJSdWxlTmFtZSksXG4gICAgICAgICAgdGVybWluYWxQYXJ0UnVsZU5hbWVQYXJ0ID0gbmV3IFJ1bGVOYW1lUGFydCh0ZXJtaW5hbFBhcnRSdWxlTmFtZSksXG4gICAgICAgICAgemVyb09yTW9yZVF1YW50aWZpZXJSdWxlTmFtZVBhcnRzUGFydCA9IG5ldyBaZXJvT3JNb3JlUGFydHNQYXJ0KHF1YW50aWZpZXJSdWxlTmFtZVBhcnQpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgdGVybWluYWxQYXJ0UnVsZU5hbWVQYXJ0LFxuICAgICAgICAgICAgemVyb09yTW9yZVF1YW50aWZpZXJSdWxlTmFtZVBhcnRzUGFydFxuICAgICAgICAgIF07XG4gICAgXG4gICAgc3VwZXIocGFydHMpXG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IFJ1bGVOYW1lUGFydCBmcm9tIFwiLi4vLi4vcGFydC9ub25UZXJtaW5hbC9ydWxlTmFtZVwiO1xuaW1wb3J0IFplcm9Pck1vcmVQYXJ0c1BhcnQgZnJvbSBcIi4uLy4uL3BhcnQvbm9uVGVybWluYWwvemVyb09yTW9yZVBhcnRzXCI7XG5cbmltcG9ydCB7IFF1YW50aWZpZXJSdWxlTmFtZSwgTm9uVGVybWluYWxQYXJ0UnVsZU5hbWUgfSBmcm9tIFwiLi4vLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5vblRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IHF1YW50aWZpZXJSdWxlTmFtZSA9IFF1YW50aWZpZXJSdWxlTmFtZSxcbiAgICAgICAgICBub25UZXJtaW5hbFBhcnRSdWxlTmFtZSA9IE5vblRlcm1pbmFsUGFydFJ1bGVOYW1lLFxuICAgICAgICAgIHF1YW50aWZpZXJSdWxlTmFtZVBhcnQgPSBuZXcgUnVsZU5hbWVQYXJ0KHF1YW50aWZpZXJSdWxlTmFtZSksXG4gICAgICAgICAgbm9uVGVybWluYWxQYXJ0UnVsZU5hbWVQYXJ0ID0gbmV3IFJ1bGVOYW1lUGFydChub25UZXJtaW5hbFBhcnRSdWxlTmFtZSksXG4gICAgICAgICAgemVyb09yTW9yZVF1YW50aWZpZXJSdWxlTmFtZVBhcnRzUGFydCA9IG5ldyBaZXJvT3JNb3JlUGFydHNQYXJ0KHF1YW50aWZpZXJSdWxlTmFtZVBhcnQpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgbm9uVGVybWluYWxQYXJ0UnVsZU5hbWVQYXJ0LFxuICAgICAgICAgICAgemVyb09yTW9yZVF1YW50aWZpZXJSdWxlTmFtZVBhcnRzUGFydFxuICAgICAgICAgIF07XG4gICAgXG4gICAgc3VwZXIocGFydHMpXG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IFBhcnRCTkZOb2RlIGZyb20gXCIuLi9ub2RlL2JuZi9wYXJ0XCI7XG5pbXBvcnQgUnVsZU5hbWVEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3J1bGVOYW1lXCI7XG5pbXBvcnQgVGVybWluYWxQYXJ0UnVsZURlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vcGFydFJ1bGUvdGVybWluYWxcIjtcbmltcG9ydCBOb25UZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9wYXJ0UnVsZS9ub25UZXJtaW5hbFwiO1xuXG5pbXBvcnQgeyBQYXJ0UnVsZU5hbWUsIE5vV2hpdGVzcGFjZVBhcnRSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGFydFJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgbmFtZSA9IFBhcnRSdWxlTmFtZSxcbiAgICAgICAgICB0ZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvbiA9IG5ldyBUZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvbigpLFxuICAgICAgICAgIG5vblRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uID0gbmV3IE5vblRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uKCksXG4gICAgICAgICAgbm9XaGl0ZXNwYWNlUGFydFJ1bGVOYW1lRGVmaW5pdGlvbiA9IG5ldyBSdWxlTmFtZURlZmluaXRpb24oTm9XaGl0ZXNwYWNlUGFydFJ1bGVOYW1lKSxcbiAgICAgICAgICBhbWJpZ3VvdXMgPSBmYWxzZSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIG5vblRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uLFxuICAgICAgICAgICAgdGVybWluYWxQYXJ0UnVsZURlZmluaXRpb24sXG4gICAgICAgICAgICBub1doaXRlc3BhY2VQYXJ0UnVsZU5hbWVEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gUGFydEJORk5vZGU7XG4gICAgXG4gICAgc3VwZXIobmFtZSwgYW1iaWd1b3VzLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL25vZGUvbm9uVGVybWluYWxcIjtcblxuaW1wb3J0IHsgZmlyc3QsIHNlY29uZCwgdGhpcmQsIGZvdXJ0aCB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvYXJyYXlcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnVsZUJORk5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBnZW5lcmF0ZVJ1bGUoUnVsZSkge1xuICAgIGNvbnN0IG5hbWUgPSB0aGlzLmdldE5hbWUoKSxcbiAgICAgICAgICBhbWJpZ3VvdXMgPSB0aGlzLmlzQW1iaWd1b3VzKCksXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSB0aGlzLmdlbmVyYXRlRGVmaW5pdGlvbnMoKSxcbiAgICAgICAgICBOb2RlID0gTm9uVGVybWluYWxOb2RlLFxuICAgICAgICAgIHJ1bGUgPSBuZXcgUnVsZShuYW1lLCBhbWJpZ3VvdXMsIGRlZmluaXRpb25zLCBOb2RlKTtcblxuICAgIHJldHVybiBydWxlO1xuICB9XG5cbiAgaXNBbWJpZ3VvdXMoKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIHNlY29uZENoaWxkTm9kZSA9IHNlY29uZChjaGlsZE5vZGVzKSxcbiAgICAgICAgICBzZWNvbmRDaGlsZE5vZGVUZXJtaW5hbE5vZGUgPSBzZWNvbmRDaGlsZE5vZGUuaXNUZXJtaW5hbE5vZGUoKSxcbiAgICAgICAgICBhbWJpZ3VvdXMgPSAhc2Vjb25kQ2hpbGROb2RlVGVybWluYWxOb2RlO1xuXG4gICAgcmV0dXJuIGFtYmlndW91cztcbiAgfVxuXG4gIGdldE5hbWUoKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIGZpcnN0Q2hpbGROb2RlID0gZmlyc3QoY2hpbGROb2RlcyksXG4gICAgICAgICAgbmFtZUJORk5vZGUgPSBmaXJzdENoaWxkTm9kZSwgIC8vL1xuICAgICAgICAgIG5hbWUgPSBuYW1lQk5GTm9kZS5nZXROYW1lKCk7XG4gICAgXG4gICAgcmV0dXJuIG5hbWU7XG4gIH1cbiAgXG4gIGdlbmVyYXRlRGVmaW5pdGlvbnMoKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIGNoaWxkTm9kZXNMZW5ndGggPSBjaGlsZE5vZGVzLmxlbmd0aCxcbiAgICAgICAgICB0aGlyZENoaWxkTm9kZSA9IHRoaXJkKGNoaWxkTm9kZXMpLFxuICAgICAgICAgIGZvdXJ0aENoaWxkTm9kZSA9IGZvdXJ0aChjaGlsZE5vZGVzKSxcbiAgICAgICAgICBkZWZpbml0aW9uc0JORk5vZGUgPSAoY2hpbGROb2Rlc0xlbmd0aCA9PT0gNCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcmRDaGlsZE5vZGUgOiAgLy8vXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdXJ0aENoaWxkTm9kZSwgLy8vXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBkZWZpbml0aW9uc0JORk5vZGUuZ2VuZXJhdGVEZWZpbml0aW9ucygpO1xuICAgIFxuICAgIHJldHVybiBkZWZpbml0aW9ucztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhSdWxlQk5GTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFRlcm1pbmFsUGFydCBmcm9tIFwiLi4vLi4vcGFydC90ZXJtaW5hbFwiO1xuaW1wb3J0IFRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS90ZXJtaW5hbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXJtaW5hbFN5bWJvbFBhcnQgZXh0ZW5kcyBUZXJtaW5hbFBhcnQge1xuICBjb25zdHJ1Y3Rvcihjb250ZW50KSB7XG4gICAgc3VwZXIoKTtcbiAgICBcbiAgICB0aGlzLmNvbnRlbnQgPSBjb250ZW50O1xuICB9XG5cbiAgcGFyc2Uobm9kZXMsIHN0YXRlLCBjYWxsYmFjaykge1xuICAgIGxldCBwYXJzZWQ7XG5cbiAgICBsZXQgdGVybWluYWxOb2RlID0gbnVsbDtcbiAgICBcbiAgICBjb25zdCBzYXZlZEluZGV4ID0gc3RhdGUuZ2V0U2F2ZWRJbmRleCgpLFxuXHRcdCAgICAgIG5leHRTaWduaWZpY2FudFRva2VuID0gc3RhdGUuZ2V0TmV4dFNpZ25pZmljYW50VG9rZW4oKSxcblx0XHRcdFx0XHRzaWduaWZpY2FudFRva2VuID0gbmV4dFNpZ25pZmljYW50VG9rZW47IC8vL1xuXG4gICAgaWYgKHNpZ25pZmljYW50VG9rZW4gIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBzaWduaWZpY2FudFRva2VuLmdldENvbnRlbnQoKTtcblxuICAgICAgaWYgKGNvbnRlbnQgPT09IHRoaXMuY29udGVudCkge1xuICAgICAgICB0ZXJtaW5hbE5vZGUgPSBUZXJtaW5hbE5vZGUuZnJvbVNpZ25pZmljYW50VG9rZW4oc2lnbmlmaWNhbnRUb2tlbik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcGFyc2VkID0gKHRlcm1pbmFsTm9kZSAhPT0gbnVsbCk7XG5cbiAgICBpZiAocGFyc2VkKSB7XG4gICAgICBub2Rlcy5wdXNoKHRlcm1pbmFsTm9kZSk7XG5cbiAgICAgIGlmIChjYWxsYmFjayAhPT0gbnVsbCkge1xuICAgICAgICBwYXJzZWQgPSBjYWxsYmFjaygpO1xuXG4gICAgICAgIGlmICghcGFyc2VkKSB7XG4gICAgICAgICAgbm9kZXMucG9wKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgc3RhdGUuYmFja3RyYWNrKHNhdmVkSW5kZXgpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZWQ7XG4gIH1cbiAgXG4gIGFzU3RyaW5nKCkge1xuICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLmNvbnRlbnQucmVwbGFjZSgvXFxcXC8sIFwiXFxcXFxcXFxcIiksXG4gICAgICAgICAgc3RyaW5nID0gYFwiJHtjb250ZW50fVwiYDtcbiAgICBcbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG5cbiAgY2xvbmUoKSB7IHJldHVybiBzdXBlci5jbG9uZShUZXJtaW5hbFN5bWJvbFBhcnQsIHRoaXMuY29udGVudCk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgRU1QVFlfU1RSSU5HID0gXCJcIjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgUnVsZU5hbWVQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL3J1bGVOYW1lXCI7XG5pbXBvcnQgT3B0aW9uYWxQYXJ0UGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9vcHRpb25hbFBhcnRcIjtcbmltcG9ydCBUZXJtaW5hbFN5bWJvbFBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvdGVybWluYWxTeW1ib2xcIjtcblxuaW1wb3J0IHsgTmFtZVJ1bGVOYW1lLCBEZWZpbml0aW9uc1J1bGVOYW1lLCBBbWJpZ3VvdXNNb2RpZmllclJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5jb25zdCB7IHNlcGFyYXRvciwgdGVybWluYXRvciB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ1bGVEZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IHNlcGFyYXRvclRlcm1pbmFsU3ltYm9sQ29udGVudCA9IHNlcGFyYXRvcixcbiAgICAgICAgICB0ZXJtaW5hdG9yVGVybWluYWxTeW1ib2xDb250ZW50ID0gdGVybWluYXRvcixcbiAgICAgICAgICBuYW1lUnVsZU5hbWUgPSBOYW1lUnVsZU5hbWUsXG4gICAgICAgICAgZGVmaW5pdGlvbnNSdWxlTmFtZSA9IERlZmluaXRpb25zUnVsZU5hbWUsXG4gICAgICAgICAgYW1iaWd1b3VzTW9kaWZpZXJSdWxlTmFtZSA9IEFtYmlndW91c01vZGlmaWVyUnVsZU5hbWUsXG4gICAgICAgICAgYW1iaWd1b3VzTW9kaWZpZXJSdWxlTmFtZVBhcnQgPSBuZXcgUnVsZU5hbWVQYXJ0KGFtYmlndW91c01vZGlmaWVyUnVsZU5hbWUpLFxuICAgICAgICAgIG5hbWVSdWxlTmFtZVBhcnQgPSBuZXcgUnVsZU5hbWVQYXJ0KG5hbWVSdWxlTmFtZSksXG4gICAgICAgICAgb3B0aW9uYWxBbWJpZ3VvdXNSdWxlTmFtZVBhcnRQYXJ0ID0gbmV3IE9wdGlvbmFsUGFydFBhcnQoYW1iaWd1b3VzTW9kaWZpZXJSdWxlTmFtZVBhcnQpLFxuICAgICAgICAgIHNlcGFyYXRvclRlcm1pbmFsU3ltYm9sUGFydCA9IG5ldyBUZXJtaW5hbFN5bWJvbFBhcnQoc2VwYXJhdG9yVGVybWluYWxTeW1ib2xDb250ZW50KSxcbiAgICAgICAgICBkZWZpbml0aW9uc1J1bGVOYW1lUGFydCA9IG5ldyBSdWxlTmFtZVBhcnQoZGVmaW5pdGlvbnNSdWxlTmFtZSksXG4gICAgICAgICAgdGVybWluYXRvclRlcm1pbmFsU3ltYm9sUGFydCA9IG5ldyBUZXJtaW5hbFN5bWJvbFBhcnQodGVybWluYXRvclRlcm1pbmFsU3ltYm9sQ29udGVudCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICBuYW1lUnVsZU5hbWVQYXJ0LFxuICAgICAgICAgICAgb3B0aW9uYWxBbWJpZ3VvdXNSdWxlTmFtZVBhcnRQYXJ0LFxuICAgICAgICAgICAgc2VwYXJhdG9yVGVybWluYWxTeW1ib2xQYXJ0LFxuICAgICAgICAgICAgZGVmaW5pdGlvbnNSdWxlTmFtZVBhcnQsXG4gICAgICAgICAgICB0ZXJtaW5hdG9yVGVybWluYWxTeW1ib2xQYXJ0XG4gICAgICAgICAgXTtcbiAgICBcbiAgICBzdXBlcihwYXJ0cylcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgUnVsZUJORk5vZGUgZnJvbSBcIi4uL25vZGUvYm5mL3J1bGVcIjtcbmltcG9ydCBSdWxlRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9ydWxlXCI7XG5cbmltcG9ydCB7IFJ1bGVSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnVsZVJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgcnVsZURlZmluaXRpb24gPSBuZXcgUnVsZURlZmluaXRpb24oKSxcbiAgICAgICAgICBuYW1lID0gUnVsZVJ1bGVOYW1lLFxuICAgICAgICAgIGFtYmlndW91cyA9IGZhbHNlLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgcnVsZURlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBSdWxlQk5GTm9kZTtcbiAgICBcbiAgICBzdXBlcihuYW1lLCBhbWJpZ3VvdXMsIGRlZmluaXRpb25zLCBOb2RlKTtcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL25vZGUvbm9uVGVybWluYWxcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXJyb3JCTkZOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgc3RhdGljIGZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMocnVsZU5hbWUsIGNoaWxkTm9kZXMpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKEVycm9yQk5GTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBUZXJtaW5hbFBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvdGVybWluYWxcIjtcbmltcG9ydCBUZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL25vZGUvdGVybWluYWxcIjtcblxuY29uc3QgeyB3aWxkY2FyZCB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFdpbGRjYXJkUGFydCBleHRlbmRzIFRlcm1pbmFsUGFydCB7XG4gIHBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spIHtcbiAgICBsZXQgcGFyc2VkO1xuXG4gICAgbGV0IHRlcm1pbmFsTm9kZSA9IG51bGw7XG4gICAgXG4gICAgY29uc3Qgc2F2ZWRJbmRleCA9IHN0YXRlLmdldFNhdmVkSW5kZXgoKSxcblx0XHQgICAgICBuZXh0U2lnbmlmaWNhbnRUb2tlbiA9IHN0YXRlLmdldE5leHRTaWduaWZpY2FudFRva2VuKCksXG5cdFx0XHRcdFx0c2lnbmlmaWNhbnRUb2tlbiA9IG5leHRTaWduaWZpY2FudFRva2VuOyAvLy9cblxuICAgIGlmIChzaWduaWZpY2FudFRva2VuICE9PSBudWxsKSB7XG4gICAgICB0ZXJtaW5hbE5vZGUgPSBUZXJtaW5hbE5vZGUuZnJvbVNpZ25pZmljYW50VG9rZW4oc2lnbmlmaWNhbnRUb2tlbik7XG4gICAgfVxuXG4gICAgcGFyc2VkID0gKHRlcm1pbmFsTm9kZSAhPT0gbnVsbCk7XG5cbiAgICBpZiAocGFyc2VkKSB7XG4gICAgICBub2Rlcy5wdXNoKHRlcm1pbmFsTm9kZSk7XG5cbiAgICAgIGlmIChjYWxsYmFjayAhPT0gbnVsbCkge1xuICAgICAgICBwYXJzZWQgPSBjYWxsYmFjaygpO1xuXG4gICAgICAgIGlmICghcGFyc2VkKSB7XG4gICAgICAgICAgbm9kZXMucG9wKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgc3RhdGUuYmFja3RyYWNrKHNhdmVkSW5kZXgpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZWQ7XG4gIH1cblxuICBhc1N0cmluZygpIHtcbiAgICBjb25zdCBzdHJpbmcgPSB3aWxkY2FyZDsgIC8vL1xuXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxuXG4gIGNsb25lKCkgeyByZXR1cm4gc3VwZXIuY2xvbmUoV2lsZGNhcmRQYXJ0KTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgV2lsZGNhcmRQYXJ0IGZyb20gXCIuLi9wYXJ0L3Rlcm1pbmFsL3dpbGRjYXJkXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVycm9yRGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCB3aWxkY2FyZFBhcnQgPSBuZXcgV2lsZGNhcmRQYXJ0KCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICB3aWxkY2FyZFBhcnRcbiAgICAgICAgICBdO1xuXG4gICAgc3VwZXIocGFydHMpXG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IEVycm9yQk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvZXJyb3JcIjtcbmltcG9ydCBFcnJvckRlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vZXJyb3JcIjtcblxuaW1wb3J0IHsgRXJyb3JSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXJyb3JSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IGVycm9yRGVmaW5pdGlvbiA9IG5ldyBFcnJvckRlZmluaXRpb24oKSxcbiAgICAgICAgICBuYW1lID0gRXJyb3JSdWxlTmFtZSxcbiAgICAgICAgICBhbWJpZ3VvdXMgPSBmYWxzZSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIGVycm9yRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IEVycm9yQk5GTm9kZTtcbiAgICBcbiAgICBzdXBlcihuYW1lLCBhbWJpZ3VvdXMsIGRlZmluaXRpb25zLCBOb2RlKTtcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbVwiLi4vLi4vbm9kZS9ub25UZXJtaW5hbFwiO1xuXG5pbXBvcnQgeyBSdWxlUnVsZU5hbWUgfSBmcm9tIFwiLi4vLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERvY3VtZW50Qk5GTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIGdlbmVyYXRlUnVsZXMoUnVsZSkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBydWxlTm9kZXMgPSBjaGlsZE5vZGVzLnJlZHVjZSgocnVsZU5vZGVzLCBjaGlsZE5vZGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkTm9kZU5vblRlcm1pbmFsTm9kZSA9IGNoaWxkTm9kZS5pc05vblRlcm1pbmFsTm9kZSgpO1xuXG4gICAgICAgICAgICBpZiAoY2hpbGROb2RlTm9uVGVybWluYWxOb2RlKSB7XG4gICAgICAgICAgICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IGNoaWxkTm9kZSwgIC8vL1xuICAgICAgICAgICAgICAgICAgICBydWxlTmFtZSA9IGNoaWxkTm9kZS5nZXRSdWxlTmFtZSgpLFxuICAgICAgICAgICAgICAgICAgICBydWxlTmFtZVJ1bGVSdWxlTmFtZSA9IChydWxlTmFtZSA9PT0gUnVsZVJ1bGVOYW1lKSxcbiAgICAgICAgICAgICAgICAgICAgbm9uVGVybWluYWxOb2RlUnVsZU5vZGUgPSBydWxlTmFtZVJ1bGVSdWxlTmFtZTsgIC8vL1xuXG4gICAgICAgICAgICAgIGlmIChub25UZXJtaW5hbE5vZGVSdWxlTm9kZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJ1bGVOb2RlID0gbm9uVGVybWluYWxOb2RlOyAvLy9cblxuICAgICAgICAgICAgICAgIHJ1bGVOb2Rlcy5wdXNoKHJ1bGVOb2RlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcnVsZU5vZGVzO1xuICAgICAgICAgIH0sIFtdKSxcbiAgICAgICAgICBydWxlcyA9IHJ1bGVOb2Rlcy5tYXAoKHJ1bGVOb2RlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBydWxlID0gcnVsZU5vZGUuZ2VuZXJhdGVSdWxlKFJ1bGUpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICByZXR1cm4gcnVsZTtcbiAgICAgICAgICB9KTtcbiAgICBcbiAgICByZXR1cm4gcnVsZXM7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2RlcykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoRG9jdW1lbnRCTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L25vblRlcm1pbmFsXCI7XG5cbmltcG9ydCB7IENob2ljZU9mUGFydHNQYXJ0VHlwZSB9IGZyb20gXCIuLi8uLi9wYXJ0VHlwZXNcIjtcbmltcG9ydCB7IGV2ZW4sIGFsbEJ1dEZpcnN0QW5kTGFzdCB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvYXJyYXlcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2hvaWNlT2ZQYXJ0c1BhcnQgZXh0ZW5kcyBOb25UZXJtaW5hbFBhcnQge1xuICBjb25zdHJ1Y3RvcihwYXJ0cykge1xuICAgIGNvbnN0IHR5cGUgPSBDaG9pY2VPZlBhcnRzUGFydFR5cGU7IC8vL1xuXG4gICAgc3VwZXIodHlwZSk7XG4gICAgXG4gICAgdGhpcy5wYXJ0cyA9IHBhcnRzO1xuICB9XG4gIFxuICBnZXRQYXJ0cygpIHtcbiAgICByZXR1cm4gdGhpcy5wYXJ0cztcbiAgfVxuXG4gIHBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spIHtcbiAgICBsZXQgcGFyc2VkO1xuXG4gICAgdGhpcy5wYXJ0cy5zb21lKChwYXJ0KSA9PiB7XG4gICAgICBwYXJzZWQgPSBwYXJ0LnBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spO1xuXG4gICAgICBpZiAocGFyc2VkKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfVxuXG4gIGFzU3RyaW5nKCkge1xuICAgIGNvbnN0IHBhcnRzU3RyaW5nID0gdGhpcy5wYXJ0cy5yZWR1Y2UoKHBhcnRzU3RyaW5nLCBwYXJ0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwYXJ0U3RyaW5nID0gcGFydC5hc1N0cmluZygpO1xuICAgIFxuICAgICAgICAgICAgaWYgKHBhcnRzU3RyaW5nID09PSBudWxsKSB7XG4gICAgICAgICAgICAgIHBhcnRzU3RyaW5nID0gcGFydFN0cmluZztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHBhcnRzU3RyaW5nID0gYCR7cGFydHNTdHJpbmd9IHwgJHtwYXJ0U3RyaW5nfWA7XG4gICAgICAgICAgICB9XG4gICAgXG4gICAgICAgICAgICByZXR1cm4gcGFydHNTdHJpbmc7XG4gICAgICAgICAgfSwgbnVsbCksXG4gICAgICAgICAgc3RyaW5nID0gYCggJHtwYXJ0c1N0cmluZ30gKWA7XG4gICAgXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxuXG4gIGNsb25lKCkgeyByZXR1cm4gc3VwZXIuY2xvbmUoQ2hvaWNlT2ZQYXJ0c1BhcnQsIHRoaXMucGFydHMpOyB9XG5cbiAgc3RhdGljIGZyb21Ob2Rlcyhub2Rlcykge1xuICAgIGNvbnN0IGFsbEJ1dEZpcnN0QW5kTGFzdE5vZGVzID0gYWxsQnV0Rmlyc3RBbmRMYXN0KG5vZGVzKTtcblxuICAgIG5vZGVzID0gYWxsQnV0Rmlyc3RBbmRMYXN0Tm9kZXM7ICAvLy9cbiAgICBcbiAgICBjb25zdCBldmVuTm9kZXMgPSBldmVuKG5vZGVzKTtcblxuICAgIG5vZGVzID0gZXZlbk5vZGVzOyAgLy8vXG5cbiAgICBjb25zdCBsb29rQWhlYWQgPSBmYWxzZSxcbiAgICAgICAgICBwYXJ0cyA9IG5vZGVzLm1hcCgobm9kZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGFydCA9IG5vZGUuZ2VuZXJhdGVQYXJ0KGxvb2tBaGVhZCk7XG5cbiAgICAgICAgICAgIHJldHVybiBwYXJ0O1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIGNob2ljZU9mUGFydHNQYXJ0ID0gbmV3IENob2ljZU9mUGFydHNQYXJ0KHBhcnRzKTtcblxuICAgIHJldHVybiBjaG9pY2VPZlBhcnRzUGFydDtcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBFTVBUWV9TVFJJTkcgPSBcIlwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IFJ1bGVOYW1lUGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9ydWxlTmFtZVwiO1xuaW1wb3J0IENob2ljZU9mUGFydHNQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL2Nob2ljZU9mUGFydHNcIjtcbmltcG9ydCBPbmVPck1vcmVQYXJ0c1BhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvb25lT3JNb3JlUGFydHNcIjtcblxuaW1wb3J0IHsgUnVsZVJ1bGVOYW1lLCBFcnJvclJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEb2N1bWVudERlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgcnVsZVJ1bGVOYW1lID0gUnVsZVJ1bGVOYW1lLFxuICAgICAgICAgIGVycm9yUnVsZU5hbWUgPSBFcnJvclJ1bGVOYW1lLFxuICAgICAgICAgIHJ1bGVSdWxlTmFtZVBhcnQgPSBuZXcgUnVsZU5hbWVQYXJ0KHJ1bGVSdWxlTmFtZSksXG4gICAgICAgICAgZXJyb3JSdWxlTmFtZVBhcnQgPSBuZXcgUnVsZU5hbWVQYXJ0KGVycm9yUnVsZU5hbWUpLFxuICAgICAgICAgIHJ1bGVSdWxlTmFtZUFuZEVycm9yUnVsZU5hbWVQYXJ0cyA9IFtcbiAgICAgICAgICAgIHJ1bGVSdWxlTmFtZVBhcnQsXG4gICAgICAgICAgICBlcnJvclJ1bGVOYW1lUGFydFxuICAgICAgICAgIF0sXG4gICAgICAgICAgY2hvaWNlT2ZSdWxlUnVsZU5hbWVBbmRFcnJvclJ1bGVOYW1lUGFydHNQYXJ0ID0gbmV3IENob2ljZU9mUGFydHNQYXJ0KHJ1bGVSdWxlTmFtZUFuZEVycm9yUnVsZU5hbWVQYXJ0cyksXG4gICAgICAgICAgb25lT3JNb3JlQ2hvaWNlT2ZSdWxlUnVsZU5hbWVBbmRFcnJvclJ1bGVOYW1lUGFydHNQYXJ0c1BhcnQgPSBuZXcgT25lT3JNb3JlUGFydHNQYXJ0KGNob2ljZU9mUnVsZVJ1bGVOYW1lQW5kRXJyb3JSdWxlTmFtZVBhcnRzUGFydCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICBvbmVPck1vcmVDaG9pY2VPZlJ1bGVSdWxlTmFtZUFuZEVycm9yUnVsZU5hbWVQYXJ0c1BhcnRzUGFydFxuICAgICAgICAgIF07XG4gICAgXG4gICAgc3VwZXIocGFydHMpXG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IERvY3VtZW50Qk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvZG9jdW1lbnRcIjtcbmltcG9ydCBEb2N1bWVudERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vZG9jdW1lbnRcIjtcblxuaW1wb3J0IHsgRG9jdW1lbnRSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRG9jdW1lbnRSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IGRvY3VtZW50RGVmaW5pdGlvbiA9IG5ldyBEb2N1bWVudERlZmluaXRpb24oKSxcbiAgICAgICAgICBuYW1lID0gRG9jdW1lbnRSdWxlTmFtZSxcbiAgICAgICAgICBhbWJpZ3VvdXMgPSBmYWxzZSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIGRvY3VtZW50RGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IERvY3VtZW50Qk5GTm9kZTtcbiAgICBcbiAgICBzdXBlcihuYW1lLCBhbWJpZ3VvdXMsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGVOYW1lUGFydCBmcm9tIFwiLi4vLi4vcGFydC9ub25UZXJtaW5hbC9ydWxlTmFtZVwiO1xuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS9ub25UZXJtaW5hbFwiO1xuXG5pbXBvcnQgeyBmaXJzdCB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvYXJyYXlcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnVsZU5hbWVCTkZOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgZ2VuZXJhdGVQYXJ0KGxvb2tBaGVhZCkge1xuICAgIGNvbnN0IHJ1bGVOYW1lID0gdGhpcy5nZXRSdWxlTmFtZSgpLFxuICAgICAgICAgIHJ1bGVOYW1lUGFydCA9IG5ldyBSdWxlTmFtZVBhcnQocnVsZU5hbWUsIGxvb2tBaGVhZCk7XG5cbiAgICByZXR1cm4gcnVsZU5hbWVQYXJ0O1xuICB9XG5cbiAgZ2V0UnVsZU5hbWUoKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIGZpcnN0Q2hpbGROb2RlID0gZmlyc3QoY2hpbGROb2RlcyksXG4gICAgICAgICAgdGVybWluYWxOb2RlID0gZmlyc3RDaGlsZE5vZGUsICAvLy9cbiAgICAgICAgICB0ZXJtaW5hbE5vZGVDb250ZW50ID0gdGVybWluYWxOb2RlLmdldENvbnRlbnQoKSxcbiAgICAgICAgICBydWxlTmFtZSA9IHRlcm1pbmFsTm9kZUNvbnRlbnQ7IC8vL1xuICAgIFxuICAgIHJldHVybiBydWxlTmFtZTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhSdWxlTmFtZUJORk5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgTmFtZURlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vbmFtZVwiO1xuaW1wb3J0IFJ1bGVOYW1lQk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvcnVsZU5hbWVcIjtcblxuaW1wb3J0IHsgUnVsZU5hbWVSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnVsZU5hbWVSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IG5hbWVEZWZpbml0aW9uID0gbmV3IE5hbWVEZWZpbml0aW9uKCksXG4gICAgICAgICAgbmFtZSA9IFJ1bGVOYW1lUnVsZU5hbWUsXG4gICAgICAgICAgYW1iaWd1b3VzID0gZmFsc2UsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBuYW1lRGVmaW5pdGlvbiAgLy8vXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gUnVsZU5hbWVCTkZOb2RlO1xuICAgIFxuICAgIHN1cGVyKG5hbWUsIGFtYmlndW91cywgZGVmaW5pdGlvbnMsIE5vZGUpXG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgV2lsZGNhcmRQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L3Rlcm1pbmFsL3dpbGRjYXJkXCI7XG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9ub2RlL25vblRlcm1pbmFsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFdpbGRjYXJkQk5GTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIGdlbmVyYXRlUGFydChsb29rQWhlYWQpIHtcbiAgICBjb25zdCB3aWxkY2FyZFBhcnQgPSBuZXcgV2lsZGNhcmRQYXJ0KCk7XG5cbiAgICByZXR1cm4gd2lsZGNhcmRQYXJ0O1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMocnVsZU5hbWUsIGNoaWxkTm9kZXMpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKFdpbGRjYXJkQk5GTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBUZXJtaW5hbFN5bWJvbFBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvdGVybWluYWxTeW1ib2xcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVybWluYWxTeW1ib2xEZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKGNvbnRlbnQpIHtcbiAgICBjb25zdCB0ZXJtaW5hbFN5bWJvbFBhcnQgPSBuZXcgVGVybWluYWxTeW1ib2xQYXJ0KGNvbnRlbnQpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgdGVybWluYWxTeW1ib2xQYXJ0XG4gICAgICAgICAgXTtcbiAgICBcbiAgICBzdXBlcihwYXJ0cylcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IFdpbGRjYXJkQk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvd2lsZGNhcmRcIjtcbmltcG9ydCBUZXJtaW5hbFN5bWJvbERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vdGVybWluYWxTeW1ib2xcIjtcblxuaW1wb3J0IHsgV2lsZGNhcmRSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuY29uc3QgeyB3aWxkY2FyZCB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFdpbGRjYXJkUnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCB3aWxkY2FyZFRlcm1pbmFsU3ltYm9sQ29udGVudCA9IHdpbGRjYXJkLFxuICAgICAgICAgIHdpbGRjYXJkVGVybWluYWxTeW1ib2xEZWZpbml0aW9uID0gbmV3IFRlcm1pbmFsU3ltYm9sRGVmaW5pdGlvbih3aWxkY2FyZFRlcm1pbmFsU3ltYm9sQ29udGVudCksXG4gICAgICAgICAgbmFtZSA9IFdpbGRjYXJkUnVsZU5hbWUsXG4gICAgICAgICAgYW1iaWd1b3VzID0gZmFsc2UsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICB3aWxkY2FyZFRlcm1pbmFsU3ltYm9sRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IFdpbGRjYXJkQk5GTm9kZTtcblxuICAgIHN1cGVyKG5hbWUsIGFtYmlndW91cywgZGVmaW5pdGlvbnMsIE5vZGUpXG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlIGZyb20gXCIuL3ZlcnRpY2FsQnJhbmNoXCI7XG5cbmNvbnN0IHsgRU5EX09GX0xJTkUgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbmRPZkxpbmVOb2RlUGFyc2VUcmVlIGV4dGVuZHMgVmVydGljYWxCcmFuY2hQYXJzZVRyZWUge1xuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgY29uc3Qgc3RyaW5nID0gRU5EX09GX0xJTkUsIC8vL1xuICAgICAgICAgIHN0cmluZ0xlbmd0aCA9IHN0cmluZy5sZW5ndGgsXG4gICAgICAgICAgdmVydGljYWxCcmFuY2hQYXJzZVRyZWVXaWR0aCA9IHN0cmluZ0xlbmd0aCwgLy8vXG4gICAgICAgICAgdmVydGljYWxCcmFuY2hQYXJzZVRyZWUgPSBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5mcm9tV2lkdGgodmVydGljYWxCcmFuY2hQYXJzZVRyZWVXaWR0aCksXG4gICAgICAgICAgdmVydGljYWxCcmFuY2hQb3NpdGlvbiA9IHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmdldFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oKSxcbiAgICAgICAgICB0ZXJtaW5hbE5vZGVQYXJzZVRyZWUgPSBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5mcm9tU3RyaW5nQW5kVmVydGljYWxCcmFuY2hQb3NpdGlvbihFbmRPZkxpbmVOb2RlUGFyc2VUcmVlLCBzdHJpbmcsIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24pO1xuXG4gICAgdGVybWluYWxOb2RlUGFyc2VUcmVlLmFwcGVuZFRvVG9wKHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlKTtcblxuICAgIGNvbnN0IGVuZE9mTGluZU5vZGVQYXJzZVRyZWUgPSB0ZXJtaW5hbE5vZGVQYXJzZVRyZWU7IC8vL1xuXG4gICAgcmV0dXJuIGVuZE9mTGluZU5vZGVQYXJzZVRyZWU7XG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVGVybWluYWxOb2RlIGZyb20gXCIuLi90ZXJtaW5hbFwiO1xuaW1wb3J0IEVuZE9mTGluZU5vZGVQYXJzZVRyZWUgZnJvbSBcIi4uLy4uL3BhcnNlVHJlZS9lbmRPZkxpbmVOb2RlXCI7XG5cbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi8uLi9jb25zdGFudHNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW5kT2ZMaW5lQk5GTm9kZSBleHRlbmRzIFRlcm1pbmFsTm9kZSB7XG4gIGdldENvbnRlbnQoKSB7XG4gICAgY29uc3QgY29udGVudCA9IEVNUFRZX1NUUklORztcblxuICAgIHJldHVybiBjb250ZW50O1xuICB9XG5cbiAgYXNQYXJzZVRyZWUodG9rZW5zKSB7XG4gICAgY29uc3QgZW5kT2ZMaW5lTm9kZVBhcnNlVHJlZSA9IEVuZE9mTGluZU5vZGVQYXJzZVRyZWUuZnJvbU5vdGhpbmcoKSxcbiAgICAgICAgICBwYXJzZVRyZWUgPSBlbmRPZkxpbmVOb2RlUGFyc2VUcmVlOyAgLy8vXG5cbiAgICByZXR1cm4gcGFyc2VUcmVlO1xuICB9XG5cbiAgc3RhdGljIGZyb21TaWduaWZpY2FudFRva2VuKHNpZ25pZmljYW50VG9rZW4pIHsgcmV0dXJuIFRlcm1pbmFsTm9kZS5mcm9tU2lnbmlmaWNhbnRUb2tlbihFbmRPZkxpbmVCTkZOb2RlLCBzaWduaWZpY2FudFRva2VuKTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgVGVybWluYWxQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L3Rlcm1pbmFsXCI7XG5pbXBvcnQgRW5kT2ZMaW5lQk5GTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS90ZXJtaW5hbC9lbmRPZkxpbmVcIjtcblxuY29uc3QgeyBFTkRfT0ZfTElORSB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVuZE9mTGluZVBhcnQgZXh0ZW5kcyBUZXJtaW5hbFBhcnQge1xuICBwYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrKSB7XG4gICAgbGV0IHBhcnNlZDtcblxuICAgIGxldCBlbmRPZkxpbmVCTkZOb2RlID0gbnVsbDtcbiAgICBcbiAgICBjb25zdCBzYXZlZEluZGV4ID0gc3RhdGUuZ2V0U2F2ZWRJbmRleCgpLFxuXHRcdCAgICAgIG5leHRTaWduaWZpY2FudFRva2VuID0gc3RhdGUuZ2V0TmV4dFNpZ25pZmljYW50VG9rZW4oKSxcbiAgICAgICAgICBzaWduaWZpY2FudFRva2VuID0gbmV4dFNpZ25pZmljYW50VG9rZW47IC8vL1xuXG4gICAgaWYgKHNpZ25pZmljYW50VG9rZW4gIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHNpZ25pZmljYW50VG9rZW5FbmRPZkxpbmVUb2tlbiA9IHNpZ25pZmljYW50VG9rZW4uaXNFbmRPZkxpbmVUb2tlbigpO1xuXG4gICAgICBpZiAoc2lnbmlmaWNhbnRUb2tlbkVuZE9mTGluZVRva2VuKSB7XG4gICAgICAgIGVuZE9mTGluZUJORk5vZGUgPSBFbmRPZkxpbmVCTkZOb2RlLmZyb21TaWduaWZpY2FudFRva2VuKHNpZ25pZmljYW50VG9rZW4pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHBhcnNlZCA9IChlbmRPZkxpbmVCTkZOb2RlICE9PSBudWxsKTtcblxuICAgIGlmIChwYXJzZWQpIHtcbiAgICAgIG5vZGVzLnB1c2goZW5kT2ZMaW5lQk5GTm9kZSk7XG5cbiAgICAgIGlmIChjYWxsYmFjayAhPT0gbnVsbCkge1xuICAgICAgICBwYXJzZWQgPSBjYWxsYmFjaygpO1xuXG4gICAgICAgIGlmICghcGFyc2VkKSB7XG4gICAgICAgICAgbm9kZXMucG9wKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgc3RhdGUuYmFja3RyYWNrKHNhdmVkSW5kZXgpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZWQ7XG4gIH1cblxuICBhc1N0cmluZygpIHtcbiAgICBjb25zdCBzdHJpbmcgPSBFTkRfT0ZfTElORTsgLy8vXG5cbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG5cbiAgY2xvbmUoKSB7IHJldHVybiBzdXBlci5jbG9uZShFbmRPZkxpbmVQYXJ0KTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBFbmRPZkxpbmVQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L3Rlcm1pbmFsL2VuZE9mTGluZVwiO1xuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS9ub25UZXJtaW5hbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbmRPZkxpbmVCTkZOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgZ2VuZXJhdGVQYXJ0KGxvb2tBaGVhZCkge1xuICAgIGNvbnN0IGVuZE9mTGluZVBhcnQgPSBuZXcgRW5kT2ZMaW5lUGFydCgpO1xuXG4gICAgcmV0dXJuIGVuZE9mTGluZVBhcnQ7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2RlcykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoRW5kT2ZMaW5lQk5GTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgRW5kT2ZMaW5lQk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvZW5kT2ZMaW5lXCI7XG5pbXBvcnQgVGVybWluYWxTeW1ib2xEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3Rlcm1pbmFsU3ltYm9sXCI7XG5cbmltcG9ydCB7IEVuZE9mTGluZVJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5jb25zdCB7IEVORF9PRl9MSU5FIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW5kT2ZMaW5lUnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBlbmRPZkxpbmVUZXJtaW5hbFN5bWJvbENvbnRlbnQgPSBFTkRfT0ZfTElORSxcbiAgICAgICAgICBlbmRPZkxpbmVUZXJtaW5hbFN5bWJvbERlZmluaXRpb24gPSBuZXcgVGVybWluYWxTeW1ib2xEZWZpbml0aW9uKGVuZE9mTGluZVRlcm1pbmFsU3ltYm9sQ29udGVudCksXG4gICAgICAgICAgbmFtZSA9IEVuZE9mTGluZVJ1bGVOYW1lLFxuICAgICAgICAgIGFtYmlndW91cyA9IGZhbHNlLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgZW5kT2ZMaW5lVGVybWluYWxTeW1ib2xEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gRW5kT2ZMaW5lQk5GTm9kZTtcblxuICAgIHN1cGVyKG5hbWUsIGFtYmlndW91cywgZGVmaW5pdGlvbnMsIE5vZGUpXG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IFBhcnRCTkZOb2RlIGZyb20gXCIuLi9ub2RlL2JuZi9wYXJ0XCI7XG5pbXBvcnQgUnVsZU5hbWVEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3J1bGVOYW1lXCI7XG5cbmltcG9ydCB7IFF1YW50aWZpZXJSdWxlTmFtZSwgT3B0aW9uYWxRdWFudGlmaWVyUnVsZU5hbWUsIE9uZU9yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSwgWmVyb09yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUXVhbnRpZmllclJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgbmFtZSA9IFF1YW50aWZpZXJSdWxlTmFtZSxcbiAgICAgICAgICBvcHRpb25hbFF1YW50aWZpZXJSdWxlTmFtZSA9IE9wdGlvbmFsUXVhbnRpZmllclJ1bGVOYW1lLFxuICAgICAgICAgIG9uZU9yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSA9IE9uZU9yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSxcbiAgICAgICAgICB6ZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lID0gWmVyb09yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSxcbiAgICAgICAgICBvcHRpb25hbFF1YW50aWZpZXJSdWxlTmFtZURlZmluaXRpb24gPSBuZXcgUnVsZU5hbWVEZWZpbml0aW9uKG9wdGlvbmFsUXVhbnRpZmllclJ1bGVOYW1lKSxcbiAgICAgICAgICBvbmVPck1vcmVRdWFudGlmaWVyUnVsZU5hbWVEZWZpbml0aW9uID0gbmV3IFJ1bGVOYW1lRGVmaW5pdGlvbihvbmVPck1vcmVRdWFudGlmaWVyUnVsZU5hbWUpLFxuICAgICAgICAgIHplcm9Pck1vcmVRdWFudGlmaWVyUnVsZU5hbWVEZWZpbml0aW9uID0gbmV3IFJ1bGVOYW1lRGVmaW5pdGlvbih6ZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lKSxcbiAgICAgICAgICBhbWJpZ3VvdXMgPSBmYWxzZSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIG9wdGlvbmFsUXVhbnRpZmllclJ1bGVOYW1lRGVmaW5pdGlvbixcbiAgICAgICAgICAgIG9uZU9yTW9yZVF1YW50aWZpZXJSdWxlTmFtZURlZmluaXRpb24sXG4gICAgICAgICAgICB6ZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IFBhcnRCTkZOb2RlO1xuICAgIFxuICAgIHN1cGVyKG5hbWUsIGFtYmlndW91cywgZGVmaW5pdGlvbnMsIE5vZGUpXG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS9ub25UZXJtaW5hbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEZWZpbml0aW9uQk5GTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIGdlbmVyYXRlRGVmaW5pdGlvbigpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gdGhpcy5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgcGFydE5vZGVzID0gY2hpbGROb2RlcywgLy8vXG4gICAgICAgICAgbG9va0FoZWFkID0gZmFsc2UsICAvLy9cbiAgICAgICAgICBwYXJ0cyA9IHBhcnROb2Rlcy5tYXAoKHBhcnROb2RlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwYXJ0ID0gcGFydE5vZGUuZ2VuZXJhdGVQYXJ0KGxvb2tBaGVhZCk7XG4gIFxuICAgICAgICAgICAgcmV0dXJuIHBhcnQ7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgZGVmaW5pdGlvbiA9IG5ldyBEZWZpbml0aW9uKHBhcnRzKTtcblxuICAgIHJldHVybiBkZWZpbml0aW9uO1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMocnVsZU5hbWUsIGNoaWxkTm9kZXMpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKERlZmluaXRpb25CTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IFJ1bGVOYW1lUGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9ydWxlTmFtZVwiO1xuaW1wb3J0IE9uZU9yTW9yZVBhcnRzUGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9vbmVPck1vcmVQYXJ0c1wiO1xuXG5pbXBvcnQgeyBQYXJ0UnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERlZmluaXRpb25EZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IHBhcnRSdWxlTmFtZSA9IFBhcnRSdWxlTmFtZSxcbiAgICAgICAgICBwYXJ0UnVsZU5hbWVQYXJ0ID0gbmV3IFJ1bGVOYW1lUGFydChwYXJ0UnVsZU5hbWUpLFxuICAgICAgICAgIG9uZU9yTW9yZVJ1bGVOYW1lUGFydHNQYXJ0ID0gbmV3IE9uZU9yTW9yZVBhcnRzUGFydChwYXJ0UnVsZU5hbWVQYXJ0KSxcbiAgICAgICAgICBwYXJ0cyA9IFtcbiAgICAgICAgICAgIG9uZU9yTW9yZVJ1bGVOYW1lUGFydHNQYXJ0XG4gICAgICAgICAgXTtcblxuICAgIHN1cGVyKHBhcnRzKVxuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBEZWZpbml0aW9uQk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvZGVmaW5pdGlvblwiO1xuaW1wb3J0IERlZmluaXRpb25EZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL2RlZmluaXRpb25cIjtcblxuaW1wb3J0IHsgRGVmaW5pdGlvblJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEZWZpbml0aW9uUnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBuYW1lID0gRGVmaW5pdGlvblJ1bGVOYW1lLFxuICAgICAgICAgIGRlZmluaXRpb25EZWZpbml0aW9uID0gbmV3IERlZmluaXRpb25EZWZpbml0aW9uKCksXG4gICAgICAgICAgYW1iaWd1b3VzID0gZmFsc2UsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBkZWZpbml0aW9uRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IERlZmluaXRpb25CTkZOb2RlO1xuICAgIFxuICAgIHN1cGVyKG5hbWUsIGFtYmlndW91cywgZGVmaW5pdGlvbnMsIE5vZGUpXG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9ub2RlL25vblRlcm1pbmFsXCI7XG5cbmltcG9ydCB7IGV2ZW4gfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERlZmluaXRpb25zQk5GTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIGdlbmVyYXRlRGVmaW5pdGlvbnMoKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIGV2ZW5DaGlsZE5vZGVzID0gZXZlbihjaGlsZE5vZGVzKSwgIC8vL1xuICAgICAgICAgIGRlZmluaXRpb25CTkZOb2RlcyA9IGV2ZW5DaGlsZE5vZGVzLCAvLy9cbiAgICAgICAgICBkZWZpbml0aW9ucyA9IGRlZmluaXRpb25CTkZOb2Rlcy5tYXAoKGRlZmluaXRpb25CTkZOb2RlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkZWZpbml0aW9uID0gZGVmaW5pdGlvbkJORk5vZGUuZ2VuZXJhdGVEZWZpbml0aW9uKCk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHJldHVybiBkZWZpbml0aW9uO1xuICAgICAgICAgIH0pO1xuICAgIFxuICAgIHJldHVybiBkZWZpbml0aW9ucztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhEZWZpbml0aW9uc0JORk5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbFBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvbm9uVGVybWluYWxcIjtcblxuaW1wb3J0IHsgcHVzaCB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvYXJyYXlcIjtcbmltcG9ydCB7IHBhcnNlUGFydHMgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2xvb2tBaGVhZFwiO1xuaW1wb3J0IHsgYWxsQnV0Rmlyc3RBbmRMYXN0IH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9hcnJheVwiO1xuaW1wb3J0IHsgU2VxdWVuY2VPZlBhcnRzUGFydFR5cGUgfSBmcm9tIFwiLi4vLi4vcGFydFR5cGVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNlcXVlbmNlT2ZQYXJ0c1BhcnQgZXh0ZW5kcyBOb25UZXJtaW5hbFBhcnQge1xuICBjb25zdHJ1Y3RvcihwYXJ0cykge1xuICAgIGNvbnN0IHR5cGUgPSBTZXF1ZW5jZU9mUGFydHNQYXJ0VHlwZTsgLy8vXG5cbiAgICBzdXBlcih0eXBlKTtcblxuICAgIHRoaXMucGFydHMgPSBwYXJ0cztcbiAgfVxuXG4gIGdldFBhcnRzKCkge1xuICAgIHJldHVybiB0aGlzLnBhcnRzO1xuICB9XG5cbiAgcGFyc2Uobm9kZXMsIHN0YXRlLCBjYWxsYmFjaykge1xuICAgIGxldCBwYXJzZWQ7XG5cbiAgICBjb25zdCBzYXZlZEluZGV4ID0gc3RhdGUuZ2V0U2F2ZWRJbmRleCgpLFxuICAgICAgICAgIHBhcnRzTm9kZXMgPSBbXSxcbiAgICAgICAgICBpbmRleCA9IDA7XG5cbiAgICBwYXJzZWQgPSBwYXJzZVBhcnRzKHRoaXMucGFydHMsIHBhcnRzTm9kZXMsIGluZGV4LCBzdGF0ZSwgY2FsbGJhY2spO1xuXG4gICAgaWYgKHBhcnNlZCkge1xuICAgICAgcHVzaChub2RlcywgcGFydHNOb2Rlcyk7XG4gICAgfVxuXG4gICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgIHN0YXRlLmJhY2t0cmFjayhzYXZlZEluZGV4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG5cbiAgYXNTdHJpbmcoKSB7XG4gICAgY29uc3QgcGFydHNTdHJpbmcgPSB0aGlzLnBhcnRzLnJlZHVjZSgocGFydHNTdHJpbmcsIHBhcnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnRTdHJpbmcgPSBwYXJ0LmFzU3RyaW5nKCk7XG5cbiAgICAgICAgICAgIGlmIChwYXJ0c1N0cmluZyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICBwYXJ0c1N0cmluZyA9IHBhcnRTdHJpbmc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBwYXJ0c1N0cmluZyA9IGAke3BhcnRzU3RyaW5nfSAke3BhcnRTdHJpbmd9YDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHBhcnRzU3RyaW5nO1xuICAgICAgICAgIH0sIG51bGwpLFxuICAgICAgICAgIHN0cmluZyA9IGAoICR7cGFydHNTdHJpbmd9IClgO1xuXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxuXG4gIGNsb25lKCkgeyByZXR1cm4gc3VwZXIuY2xvbmUoU2VxdWVuY2VPZlBhcnRzUGFydCwgdGhpcy5wYXJ0cyk7IH1cblxuICBzdGF0aWMgZnJvbU5vZGVzKG5vZGVzKSB7XG4gICAgY29uc3QgYWxsQnV0Rmlyc3RBbmRMYXN0Tm9kZXMgPSBhbGxCdXRGaXJzdEFuZExhc3Qobm9kZXMpO1xuXG4gICAgbm9kZXMgPSBhbGxCdXRGaXJzdEFuZExhc3ROb2RlczsgIC8vL1xuXG4gICAgY29uc3QgbG9va0FoZWFkID0gZmFsc2UsXG4gICAgICAgICAgcGFydHMgPSBub2Rlcy5tYXAoKG5vZGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnQgPSBub2RlLmdlbmVyYXRlUGFydChsb29rQWhlYWQpO1xuXG4gICAgICAgICAgICByZXR1cm4gcGFydDtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBzZXF1ZW5jZU9mUGFydHNQYXJ0ID0gbmV3IFNlcXVlbmNlT2ZQYXJ0c1BhcnQocGFydHMpO1xuXG4gICAgcmV0dXJuIHNlcXVlbmNlT2ZQYXJ0c1BhcnQ7XG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgRU1QVFlfU1RSSU5HID0gXCJcIjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgUnVsZU5hbWVQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL3J1bGVOYW1lXCI7XG5pbXBvcnQgVGVybWluYWxTeW1ib2xQYXJ0IGZyb20gXCIuLi9wYXJ0L3Rlcm1pbmFsL3Rlcm1pbmFsU3ltYm9sXCI7XG5pbXBvcnQgWmVyb09yTW9yZVBhcnRzUGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC96ZXJvT3JNb3JlUGFydHNcIjtcbmltcG9ydCBTZXF1ZW5jZU9mUGFydHNQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL3NlcXVlbmNlT2ZQYXJ0c1wiO1xuXG5pbXBvcnQgeyBEZWZpbml0aW9uUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmNvbnN0IHsgdmVydGljYWxCYXIgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEZWZpbml0aW9uc0RlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgZGVmaW5pdGlvblJ1bGVOYW1lID0gRGVmaW5pdGlvblJ1bGVOYW1lLFxuICAgICAgICAgIHZlcnRpY2FsQmFyVGVybWluYWxTeW1ib2xDb250ZW50ID0gdmVydGljYWxCYXIsXG4gICAgICAgICAgZGVmaW5pdGlvblJ1bGVOYW1lUGFydCA9IG5ldyBSdWxlTmFtZVBhcnQoZGVmaW5pdGlvblJ1bGVOYW1lKSxcbiAgICAgICAgICB2ZXJ0aWNhbEJhclRlcm1pbmFsU3ltYm9sUGFydCA9IG5ldyBUZXJtaW5hbFN5bWJvbFBhcnQodmVydGljYWxCYXJUZXJtaW5hbFN5bWJvbENvbnRlbnQpLFxuICAgICAgICAgIHZlcnRpY2FsQmFyVGVybWluYWxTeW1ib2xUaGVuRGVmaW5pdGlvblJ1bGVOYW1lUGFydHMgPSBbXG4gICAgICAgICAgICB2ZXJ0aWNhbEJhclRlcm1pbmFsU3ltYm9sUGFydCxcbiAgICAgICAgICAgIGRlZmluaXRpb25SdWxlTmFtZVBhcnRcbiAgICAgICAgICBdLFxuICAgICAgICAgIHNlcXVlbmNlT2ZQYXJ0c1BhcnQgPSBuZXcgU2VxdWVuY2VPZlBhcnRzUGFydCh2ZXJ0aWNhbEJhclRlcm1pbmFsU3ltYm9sVGhlbkRlZmluaXRpb25SdWxlTmFtZVBhcnRzKSxcbiAgICAgICAgICB6ZXJvT3JNb3JlU2VxdWVuY2VPZlBhcnRzUGFydCA9IG5ldyBaZXJvT3JNb3JlUGFydHNQYXJ0KHNlcXVlbmNlT2ZQYXJ0c1BhcnQpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgZGVmaW5pdGlvblJ1bGVOYW1lUGFydCxcbiAgICAgICAgICAgIHplcm9Pck1vcmVTZXF1ZW5jZU9mUGFydHNQYXJ0XG4gICAgICAgICAgXTtcbiAgICBcbiAgICBzdXBlcihwYXJ0cylcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgRGVmaW5pdGlvbnNCTkZOb2RlIGZyb20gXCIuLi9ub2RlL2JuZi9kZWZpbml0aW9uc1wiO1xuaW1wb3J0IERlZmluaXRpb25zRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9kZWZpbml0aW9uc1wiO1xuXG5pbXBvcnQgeyBEZWZpbml0aW9uc1J1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEZWZpbml0aW9uc1J1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgZGVmaW5pdGlvbnNEZWZpbml0aW9uID0gbmV3IERlZmluaXRpb25zRGVmaW5pdGlvbigpLFxuICAgICAgICAgIG5hbWUgPSBEZWZpbml0aW9uc1J1bGVOYW1lLFxuICAgICAgICAgIGFtYmlndW91cyA9IGZhbHNlLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgZGVmaW5pdGlvbnNEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gRGVmaW5pdGlvbnNCTkZOb2RlO1xuICAgIFxuICAgIHN1cGVyKG5hbWUsIGFtYmlndW91cywgZGVmaW5pdGlvbnMsIE5vZGUpXG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi8uLi9ub2RlL25vblRlcm1pbmFsXCI7XG5cbmltcG9ydCB7IGZpcnN0IH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxpdGllcy9hcnJheVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXJtaW5hbFBhcnRCTkZOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgZ2VuZXJhdGVQYXJ0KGxvb2tBaGVhZCkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBmaXJzdENoaWxkTm9kZSA9IGZpcnN0KGNoaWxkTm9kZXMpLFxuICAgICAgICAgIG5vZGUgPSBmaXJzdENoaWxkTm9kZSwgIC8vL1xuICAgICAgICAgIHBhcnQgPSBub2RlLmdlbmVyYXRlUGFydChsb29rQWhlYWQpO1xuXG4gICAgcmV0dXJuIHBhcnQ7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2RlcykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoVGVybWluYWxQYXJ0Qk5GTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBUZXJtaW5hbFBhcnRCTkZOb2RlIGZyb20gXCIuLi9ub2RlL2JuZi9wYXJ0L3Rlcm1pbmFsXCI7XG5pbXBvcnQgUnVsZU5hbWVEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3J1bGVOYW1lXCI7XG5cbmltcG9ydCB7IFRlcm1pbmFsUGFydFJ1bGVOYW1lLCBSZWd1bGFyRXhwcmVzc2lvblJ1bGVOYW1lLCBTaWduaWZpY2FudFRva2VuVHlwZVJ1bGVOYW1lLCBUZXJtaW5hbFN5bWJvbFJ1bGVOYW1lLCBFbmRPZkxpbmVSdWxlTmFtZSwgV2lsZGNhcmRSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVybWluYWxQYXJ0UnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBuYW1lID0gVGVybWluYWxQYXJ0UnVsZU5hbWUsXG4gICAgICAgICAgd2lsZGNhcmRSdWxlTmFtZSA9IFdpbGRjYXJkUnVsZU5hbWUsXG4gICAgICAgICAgZW5kT2ZMaW5lUnVsZU5hbWUgPSBFbmRPZkxpbmVSdWxlTmFtZSxcbiAgICAgICAgICB0ZXJtaW5hbFN5bWJvbFJ1bGVOYW1lID0gVGVybWluYWxTeW1ib2xSdWxlTmFtZSxcbiAgICAgICAgICByZWd1bGFyRXhwcmVzc2lvblJ1bGVOYW1lID0gUmVndWxhckV4cHJlc3Npb25SdWxlTmFtZSxcbiAgICAgICAgICBzaWduaWZpY2FudFRva2VuVHlwZVJ1bGVOYW1lID0gU2lnbmlmaWNhbnRUb2tlblR5cGVSdWxlTmFtZSxcbiAgICAgICAgICB3aWxkY2FyZFJ1bGVOYW1lRGVmaW5pdGlvbiA9IG5ldyBSdWxlTmFtZURlZmluaXRpb24od2lsZGNhcmRSdWxlTmFtZSksXG4gICAgICAgICAgZW5kT2ZMaW5lUnVsZU5hbWVEZWZpbml0aW9uID0gbmV3IFJ1bGVOYW1lRGVmaW5pdGlvbihlbmRPZkxpbmVSdWxlTmFtZSksXG4gICAgICAgICAgdGVybWluYWxTeW1ib2xSdWxlTmFtZURlZmluaXRpb24gPSBuZXcgUnVsZU5hbWVEZWZpbml0aW9uKHRlcm1pbmFsU3ltYm9sUnVsZU5hbWUpLFxuICAgICAgICAgIHJlZ3VsYXJFeHByZXNzaW9uUnVsZU5hbWVEZWZpbml0aW9uID0gbmV3IFJ1bGVOYW1lRGVmaW5pdGlvbihyZWd1bGFyRXhwcmVzc2lvblJ1bGVOYW1lKSxcbiAgICAgICAgICBzaWduaWZpY2FudFRva2VuVHlwZVJ1bGVOYW1lRGVmaW5pdGlvbiA9IG5ldyBSdWxlTmFtZURlZmluaXRpb24oc2lnbmlmaWNhbnRUb2tlblR5cGVSdWxlTmFtZSksXG4gICAgICAgICAgYW1iaWd1b3VzID0gZmFsc2UsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBzaWduaWZpY2FudFRva2VuVHlwZVJ1bGVOYW1lRGVmaW5pdGlvbixcbiAgICAgICAgICAgIHJlZ3VsYXJFeHByZXNzaW9uUnVsZU5hbWVEZWZpbml0aW9uLFxuICAgICAgICAgICAgdGVybWluYWxTeW1ib2xSdWxlTmFtZURlZmluaXRpb24sXG4gICAgICAgICAgICBlbmRPZkxpbmVSdWxlTmFtZURlZmluaXRpb24sXG4gICAgICAgICAgICB3aWxkY2FyZFJ1bGVOYW1lRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IFRlcm1pbmFsUGFydEJORk5vZGU7XG4gICAgXG4gICAgc3VwZXIobmFtZSwgYW1iaWd1b3VzLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL25vZGUvbm9uVGVybWluYWxcIjtcbmltcG9ydCBDaG9pY2VPZlBhcnRzUGFydCBmcm9tIFwiLi4vLi4vcGFydC9ub25UZXJtaW5hbC9jaG9pY2VPZlBhcnRzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENob2ljZU9mUGFydHNCTkZOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgZ2VuZXJhdGVQYXJ0KGxvb2tBaGVhZCkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBub2RlcyA9IGNoaWxkTm9kZXMuc2xpY2UoKSxcbiAgICAgICAgICBwYXJ0ID0gQ2hvaWNlT2ZQYXJ0c1BhcnQuZnJvbU5vZGVzKG5vZGVzKTtcblxuICAgIHJldHVybiBwYXJ0O1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMocnVsZU5hbWUsIGNoaWxkTm9kZXMpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKENob2ljZU9mUGFydHNCTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBSdWxlTmFtZVBhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvcnVsZU5hbWVcIjtcbmltcG9ydCBPbmVPck1vcmVQYXJ0c1BhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvb25lT3JNb3JlUGFydHNcIjtcbmltcG9ydCBUZXJtaW5hbFN5bWJvbFBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvdGVybWluYWxTeW1ib2xcIjtcbmltcG9ydCBTZXF1ZW5jZU9mUGFydHNQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL3NlcXVlbmNlT2ZQYXJ0c1wiO1xuXG5pbXBvcnQgeyBQYXJ0UnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmNvbnN0IHsgdmVydGljYWxCYXIsIG9wZW5CcmFja2V0LCBjbG9zZUJyYWNrZXQgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDaG9pY2VPZlBhcnRzRGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBwYXJ0UnVsZU5hbWUgPSBQYXJ0UnVsZU5hbWUsXG4gICAgICAgICAgdmVydGljYWxCYXJUZXJtaW5hbFN5bWJvbENvbnRlbnQgPSB2ZXJ0aWNhbEJhciwgLy8vXG4gICAgICAgICAgb3BlbkJyYWNrZXRUZXJtaW5hbFN5bWJvbENvbnRlbnQgPSBvcGVuQnJhY2tldCwgLy8vXG4gICAgICAgICAgY2xvc2VCcmFja2V0VGVybWluYWxTeW1ib2xDb250ZW50ID0gY2xvc2VCcmFja2V0LCAvLy9cbiAgICAgICAgICBwYXJ0UnVsZU5hbWVQYXJ0ID0gbmV3IFJ1bGVOYW1lUGFydChwYXJ0UnVsZU5hbWUpLFxuICAgICAgICAgIHZlcnRpY2FsQmFyVGVybWluYWxTeW1ib2xQYXJ0ID0gbmV3IFRlcm1pbmFsU3ltYm9sUGFydCh2ZXJ0aWNhbEJhclRlcm1pbmFsU3ltYm9sQ29udGVudCksXG4gICAgICAgICAgb3BlbkJyYWNrZXRUZXJtaW5hbFN5bWJvbFBhcnQgPSBuZXcgVGVybWluYWxTeW1ib2xQYXJ0KG9wZW5CcmFja2V0VGVybWluYWxTeW1ib2xDb250ZW50KSxcbiAgICAgICAgICBjbG9zZUJyYWNrZXRUZXJtaW5hbFN5bWJvbFBhcnQgPSBuZXcgVGVybWluYWxTeW1ib2xQYXJ0KGNsb3NlQnJhY2tldFRlcm1pbmFsU3ltYm9sQ29udGVudCksXG4gICAgICAgICAgdmVydGljYWxCYXJUZXJtaW5hbFN5bWJvbFRoZW5QYXJ0UnVsZU5hbWVQYXJ0cyA9IFtcbiAgICAgICAgICAgIHZlcnRpY2FsQmFyVGVybWluYWxTeW1ib2xQYXJ0LFxuICAgICAgICAgICAgcGFydFJ1bGVOYW1lUGFydFxuICAgICAgICAgIF0sXG4gICAgICAgICAgc2VxdWVuY2VPZlBhcnRzUGFydCA9IG5ldyBTZXF1ZW5jZU9mUGFydHNQYXJ0KHZlcnRpY2FsQmFyVGVybWluYWxTeW1ib2xUaGVuUGFydFJ1bGVOYW1lUGFydHMpLFxuICAgICAgICAgIG9uZU9yTW9yZVNlcXVlbmNlT2ZQYXJ0c1BhcnQgPSBuZXcgT25lT3JNb3JlUGFydHNQYXJ0KHNlcXVlbmNlT2ZQYXJ0c1BhcnQpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgb3BlbkJyYWNrZXRUZXJtaW5hbFN5bWJvbFBhcnQsXG4gICAgICAgICAgICBwYXJ0UnVsZU5hbWVQYXJ0LFxuICAgICAgICAgICAgb25lT3JNb3JlU2VxdWVuY2VPZlBhcnRzUGFydCxcbiAgICAgICAgICAgIGNsb3NlQnJhY2tldFRlcm1pbmFsU3ltYm9sUGFydFxuICAgICAgICAgIF07XG5cbiAgICBzdXBlcihwYXJ0cylcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgQ2hvaWNlT2ZQYXJ0c0JORk5vZGUgZnJvbSBcIi4uL25vZGUvYm5mL2Nob2ljZU9mUGFydHNcIjtcbmltcG9ydCBDaG9pY2VPZlBhcnRzRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9jaG9pY2VPZlBhcnRzXCI7XG5cbmltcG9ydCB7IENob2ljZU9mUGFydHNSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2hvaWNlT2ZQYXJ0c1J1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgbmFtZSA9IENob2ljZU9mUGFydHNSdWxlTmFtZSxcbiAgICAgICAgICBjaG9pY2VPZlBhcnRzRGVmaW5pdGlvbiA9IG5ldyBDaG9pY2VPZlBhcnRzRGVmaW5pdGlvbigpLFxuICAgICAgICAgIGFtYmlndW91cyA9IGZhbHNlLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgY2hvaWNlT2ZQYXJ0c0RlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBDaG9pY2VPZlBhcnRzQk5GTm9kZTtcbiAgICBcbiAgICBzdXBlcihuYW1lLCBhbWJpZ3VvdXMsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS9ub25UZXJtaW5hbFwiO1xuaW1wb3J0IFRlcm1pbmFsU3ltYm9sUGFydCBmcm9tIFwiLi4vLi4vcGFydC90ZXJtaW5hbC90ZXJtaW5hbFN5bWJvbFwiO1xuXG5pbXBvcnQgeyBmaXJzdCwgc2Vjb25kIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9hcnJheVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXJtaW5hbFN5bWJvbEJORk5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICByZWd1bGFyRXhwcmVzc2lvbiA9IC9eXCIoKD86XFxcXC58W15cIlxcXFxdKSopXCIkLztcblxuICBnZW5lcmF0ZVBhcnQobG9va0FoZWFkKSB7XG4gICAgY29uc3QgY29udGVudCA9IHRoaXMuZ2V0Q29udGVudCgpLFxuICAgICAgICAgIHRlcm1pbmFsU3ltYm9sUGFydCA9IG5ldyBUZXJtaW5hbFN5bWJvbFBhcnQoY29udGVudCk7XG5cbiAgICByZXR1cm4gdGVybWluYWxTeW1ib2xQYXJ0O1xuICB9XG5cbiAgZ2V0Q29udGVudCgpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gdGhpcy5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgZmlyc3RDaGlsZE5vZGUgPSBmaXJzdChjaGlsZE5vZGVzKSxcbiAgICAgICAgICB0ZXJtaW5hbE5vZGUgPSBmaXJzdENoaWxkTm9kZSwgIC8vL1xuICAgICAgICAgIHRlcm1pbmFsTm9kZUNvbnRlbnQgPSB0ZXJtaW5hbE5vZGUuZ2V0Q29udGVudCgpLFxuICAgICAgICAgIG1hdGNoZXMgPSB0ZXJtaW5hbE5vZGVDb250ZW50Lm1hdGNoKHRoaXMucmVndWxhckV4cHJlc3Npb24pLFxuICAgICAgICAgIHNlY29uZE1hdGNoID0gc2Vjb25kKG1hdGNoZXMpLFxuICAgICAgICAgIGNvbnRlbnQgPSBzZWNvbmRNYXRjaC5yZXBsYWNlKC9cXFxcXFxcXC9nLCBcIlxcXFxcIikucmVwbGFjZSgvXFxcXFwiL2csIFwiXFxcIlwiKTtcblxuICAgIHJldHVybiBjb250ZW50O1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMocnVsZU5hbWUsIGNoaWxkTm9kZXMpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKFRlcm1pbmFsU3ltYm9sQk5GTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMpOyB9XG59XG5cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgRU1QVFlfU1RSSU5HID0gXCJcIjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBTaWduaWZpY2FudFRva2VuVHlwZVBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvc2lnbmlmaWNhbnRUb2tlblR5cGVcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2lnbmlmaWNhbnRUb2tlblR5cGVEZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHNpZ25pZmljYW50VG9rZW5UeXBlKSB7XG4gICAgY29uc3Qgc2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0ID0gbmV3IFNpZ25pZmljYW50VG9rZW5UeXBlUGFydChzaWduaWZpY2FudFRva2VuVHlwZSksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICBzaWduaWZpY2FudFRva2VuVHlwZVBhcnRcbiAgICAgICAgICBdO1xuICAgIFxuICAgIHN1cGVyKHBhcnRzKVxuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgdHlwZXMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgVGVybWluYWxTeW1ib2xCTkZOb2RlIGZyb20gXCIuLi9ub2RlL2JuZi90ZXJtaW5hbFN5bWJvbFwiO1xuaW1wb3J0IFNpZ25pZmljYW50VG9rZW5UeXBlRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9zaWduaWZpY2FudFRva2VuVHlwZVwiO1xuXG5pbXBvcnQgeyBUZXJtaW5hbFN5bWJvbFJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5jb25zdCB7IHN0cmluZ0xpdGVyYWxUeXBlIH0gPSB0eXBlcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVybWluYWxTeW1ib2xSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IHN0cmluZ0xpdGVyYWxTaWduaWZpY2FudFRva2VuVHlwZSA9IHN0cmluZ0xpdGVyYWxUeXBlLCAgLy8vXG4gICAgICAgICAgc3RyaW5nTGl0ZXJhbFNpZ25pZmljYW50VG9rZW5UeXBlRGVmaW5pdGlvbiA9IG5ldyBTaWduaWZpY2FudFRva2VuVHlwZURlZmluaXRpb24oc3RyaW5nTGl0ZXJhbFNpZ25pZmljYW50VG9rZW5UeXBlKSxcbiAgICAgICAgICBuYW1lID0gVGVybWluYWxTeW1ib2xSdWxlTmFtZSxcbiAgICAgICAgICBhbWJpZ3VvdXMgPSBmYWxzZSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIHN0cmluZ0xpdGVyYWxTaWduaWZpY2FudFRva2VuVHlwZURlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBUZXJtaW5hbFN5bWJvbEJORk5vZGU7XG5cbiAgICBzdXBlcihuYW1lLCBhbWJpZ3VvdXMsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vLi4vbm9kZS9ub25UZXJtaW5hbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOb25UZXJtaW5hbFBhcnRCTkZOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgZ2VuZXJhdGVQYXJ0KGxvb2tBaGVhZCkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBub2RlcyA9IGNoaWxkTm9kZXMuc2xpY2UoKSxcbiAgICAgICAgICBwYXJ0ID0gcGFydEZyb21Ob2Rlcyhub2RlcywgbG9va0FoZWFkKTtcblxuICAgIHJldHVybiBwYXJ0O1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMocnVsZU5hbWUsIGNoaWxkTm9kZXMpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKE5vblRlcm1pbmFsUGFydEJORk5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTsgfVxufVxuXG5mdW5jdGlvbiBwYXJ0RnJvbU5vZGVzKG5vZGVzLCBsb29rQWhlYWQpIHtcbiAgbGV0IHBhcnQgPSBudWxsO1xuXG4gIGNvbnN0IG5vZGVzTGVuZ3RoID0gbm9kZXMubGVuZ3RoO1xuXG4gIGlmIChub2Rlc0xlbmd0aCA9PT0gMSkge1xuICAgIGNvbnN0IG5vZGUgPSBub2Rlcy5wb3AoKTtcblxuICAgIHBhcnQgPSBub2RlLmdlbmVyYXRlUGFydChsb29rQWhlYWQpO1xuICB9IGVsc2Uge1xuICAgIG5vZGVzLnBvcCgpO1xuXG4gICAgbG9va0FoZWFkID0gdHJ1ZTtcblxuICAgIHBhcnQgPSBwYXJ0RnJvbU5vZGVzKG5vZGVzLCBsb29rQWhlYWQpO1xuICB9XG5cbiAgcmV0dXJuIHBhcnQ7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi8uLi8uLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgUnVsZU5hbWVQYXJ0IGZyb20gXCIuLi8uLi8uLi9wYXJ0L25vblRlcm1pbmFsL3J1bGVOYW1lXCI7XG5pbXBvcnQgT3B0aW9uYWxQYXJ0UGFydCBmcm9tIFwiLi4vLi4vLi4vcGFydC9ub25UZXJtaW5hbC9vcHRpb25hbFBhcnRcIjtcblxuaW1wb3J0IHsgUnVsZU5hbWVSdWxlTmFtZSwgTG9va0FoZWFkTW9kaWZpZXJSdWxlTmFtZSB9IGZyb20gXCIuLi8uLi8uLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnVsZU5hbWVOb25UZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBydWxlTmFtZVJ1bGVOYW1lID0gUnVsZU5hbWVSdWxlTmFtZSxcbiAgICAgICAgICBsb29rQWhlYWRNb2RpZmllclJ1bGVOYW1lID0gTG9va0FoZWFkTW9kaWZpZXJSdWxlTmFtZSxcbiAgICAgICAgICBydWxlTmFtZVJ1bGVOYW1lUGFydCA9IG5ldyBSdWxlTmFtZVBhcnQocnVsZU5hbWVSdWxlTmFtZSksXG4gICAgICAgICAgbG9va0FoZWFkTW9kaWZpZXJSdWxlTmFtZVBhcnQgPSBuZXcgUnVsZU5hbWVQYXJ0KGxvb2tBaGVhZE1vZGlmaWVyUnVsZU5hbWUpLFxuICAgICAgICAgIG9wdGlvbmFsTG9va0FoZWFkUnVsZU5hbWVQYXJ0UGFydCA9IG5ldyBPcHRpb25hbFBhcnRQYXJ0KGxvb2tBaGVhZE1vZGlmaWVyUnVsZU5hbWVQYXJ0KSxcbiAgICAgICAgICBwYXJ0cyA9IFtcbiAgICAgICAgICAgIHJ1bGVOYW1lUnVsZU5hbWVQYXJ0LFxuICAgICAgICAgICAgb3B0aW9uYWxMb29rQWhlYWRSdWxlTmFtZVBhcnRQYXJ0XG4gICAgICAgICAgXTtcbiAgICBcbiAgICBzdXBlcihwYXJ0cylcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgUnVsZU5hbWVEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3J1bGVOYW1lXCI7XG5pbXBvcnQgTm9uVGVybWluYWxQYXJ0Qk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvcGFydC9ub25UZXJtaW5hbFwiO1xuaW1wb3J0IFJ1bGVOYW1lTm9uVGVybWluYWxQYXJ0UnVsZURlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vcGFydFJ1bGUvbm9uVGVybWluYWwvcnVsZU5hbWVcIjtcblxuaW1wb3J0IHsgTm9uVGVybWluYWxQYXJ0UnVsZU5hbWUsIENob2ljZU9mUGFydHNSdWxlTmFtZSwgU2VxdWVuY2VPZlBhcnRzUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5vblRlcm1pbmFsUGFydFJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgbmFtZSA9IE5vblRlcm1pbmFsUGFydFJ1bGVOYW1lLFxuICAgICAgICAgIGNob2ljZU9mUGFydHNSdWxlTmFtZSA9IENob2ljZU9mUGFydHNSdWxlTmFtZSxcbiAgICAgICAgICBzZXF1ZW5jZU9mUGFydHNSdWxlTmFtZSA9IFNlcXVlbmNlT2ZQYXJ0c1J1bGVOYW1lLFxuICAgICAgICAgIGNob2ljZU9mUGFydHNSdWxlTmFtZURlZmluaXRpb24gPSBuZXcgUnVsZU5hbWVEZWZpbml0aW9uKGNob2ljZU9mUGFydHNSdWxlTmFtZSksXG4gICAgICAgICAgc2VxdWVuY2VPZlBhcnRzUnVsZU5hbWVEZWZpbml0aW9uID0gbmV3IFJ1bGVOYW1lRGVmaW5pdGlvbihzZXF1ZW5jZU9mUGFydHNSdWxlTmFtZSksXG4gICAgICAgICAgcnVsZU5hbWVOb25UZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvbiA9IG5ldyBSdWxlTmFtZU5vblRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uKCksXG4gICAgICAgICAgYW1iaWd1b3VzID0gZmFsc2UsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBjaG9pY2VPZlBhcnRzUnVsZU5hbWVEZWZpbml0aW9uLFxuICAgICAgICAgICAgc2VxdWVuY2VPZlBhcnRzUnVsZU5hbWVEZWZpbml0aW9uLFxuICAgICAgICAgICAgcnVsZU5hbWVOb25UZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IE5vblRlcm1pbmFsUGFydEJORk5vZGU7XG4gICAgXG4gICAgc3VwZXIobmFtZSwgYW1iaWd1b3VzLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL25vZGUvbm9uVGVybWluYWxcIjtcbmltcG9ydCBTZXF1ZW5jZU9mUGFydHNQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L25vblRlcm1pbmFsL3NlcXVlbmNlT2ZQYXJ0c1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZXF1ZW5jZU9mUGFydHNCTkZOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgZ2VuZXJhdGVQYXJ0KGxvb2tBaGVhZCkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBub2RlcyA9IGNoaWxkTm9kZXMuc2xpY2UoKSxcbiAgICAgICAgICBwYXJ0ID0gU2VxdWVuY2VPZlBhcnRzUGFydC5mcm9tTm9kZXMobm9kZXMpO1xuXG4gICAgcmV0dXJuIHBhcnQ7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2RlcykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoU2VxdWVuY2VPZlBhcnRzQk5GTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgUnVsZU5hbWVQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL3J1bGVOYW1lXCI7XG5pbXBvcnQgVGVybWluYWxTeW1ib2xQYXJ0IGZyb20gXCIuLi9wYXJ0L3Rlcm1pbmFsL3Rlcm1pbmFsU3ltYm9sXCI7XG5pbXBvcnQgT25lT3JNb3JlUGFydHNQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL29uZU9yTW9yZVBhcnRzXCI7XG5cbmltcG9ydCB7IFBhcnRSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuY29uc3QgeyBvcGVuQnJhY2tldCwgY2xvc2VCcmFja2V0IH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2VxdWVuY2VPZlBhcnRzRGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBwYXJ0UnVsZU5hbWUgPSBQYXJ0UnVsZU5hbWUsXG4gICAgICAgICAgb3BlbkJyYWNrZXRUZXJtaW5hbFN5bWJvbENvbnRlbnQgPSBvcGVuQnJhY2tldCwgLy8vXG4gICAgICAgICAgY2xvc2VCcmFja2V0VGVybWluYWxTeW1ib2xDb250ZW50ID0gY2xvc2VCcmFja2V0LCAvLy9cbiAgICAgICAgICBwYXJ0UnVsZU5hbWVQYXJ0ID0gbmV3IFJ1bGVOYW1lUGFydChwYXJ0UnVsZU5hbWUpLFxuICAgICAgICAgIG9wZW5CcmFja2V0VGVybWluYWxTeW1ib2xQYXJ0ID0gbmV3IFRlcm1pbmFsU3ltYm9sUGFydChvcGVuQnJhY2tldFRlcm1pbmFsU3ltYm9sQ29udGVudCksXG4gICAgICAgICAgY2xvc2VCcmFja2V0VGVybWluYWxTeW1ib2xQYXJ0ID0gbmV3IFRlcm1pbmFsU3ltYm9sUGFydChjbG9zZUJyYWNrZXRUZXJtaW5hbFN5bWJvbENvbnRlbnQpLFxuICAgICAgICAgIG9uZU9yTW9yZVBhcnRSdWxlTmFtZVBhcnRzUGFydCA9IG5ldyBPbmVPck1vcmVQYXJ0c1BhcnQocGFydFJ1bGVOYW1lUGFydCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICBvcGVuQnJhY2tldFRlcm1pbmFsU3ltYm9sUGFydCxcbiAgICAgICAgICAgIHBhcnRSdWxlTmFtZVBhcnQsXG4gICAgICAgICAgICBvbmVPck1vcmVQYXJ0UnVsZU5hbWVQYXJ0c1BhcnQsXG4gICAgICAgICAgICBjbG9zZUJyYWNrZXRUZXJtaW5hbFN5bWJvbFBhcnRcbiAgICAgICAgICBdO1xuXG4gICAgc3VwZXIocGFydHMpXG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IFNlcXVlbmNlT2ZQYXJ0c0JORk5vZGUgZnJvbSBcIi4uL25vZGUvYm5mL3NlcXVlbmNlT2ZQYXJ0c1wiO1xuaW1wb3J0IFNlcXVlbmNlT2ZQYXJ0c0RlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vc2VxdWVuY2VPZlBhcnRzXCI7XG5cbmltcG9ydCB7IFNlcXVlbmNlT2ZQYXJ0c1J1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZXF1ZW5jZU9mUGFydHNSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IG5hbWUgPSBTZXF1ZW5jZU9mUGFydHNSdWxlTmFtZSxcbiAgICAgICAgICBzZXF1ZW5jZU9mUGFydHNEZWZpbml0aW9uID0gbmV3IFNlcXVlbmNlT2ZQYXJ0c0RlZmluaXRpb24oKSxcbiAgICAgICAgICBhbWJpZ3VvdXMgPSBmYWxzZSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIHNlcXVlbmNlT2ZQYXJ0c0RlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBTZXF1ZW5jZU9mUGFydHNCTkZOb2RlO1xuXG4gICAgc3VwZXIobmFtZSwgYW1iaWd1b3VzLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgVmVydGljYWxCcmFuY2hQYXJzZVRyZWUgZnJvbSBcIi4vdmVydGljYWxCcmFuY2hcIjtcblxuY29uc3QgeyBOT19XSElURVNQQUNFIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTm9XaGl0ZXNwYWNlTm9kZVBhcnNlVHJlZSBleHRlbmRzIFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlIHtcbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IHN0cmluZyA9IE5PX1dISVRFU1BBQ0UsIC8vL1xuICAgICAgICAgIHN0cmluZ0xlbmd0aCA9IHN0cmluZy5sZW5ndGgsXG4gICAgICAgICAgdmVydGljYWxCcmFuY2hQYXJzZVRyZWVXaWR0aCA9IHN0cmluZ0xlbmd0aCwgLy8vXG4gICAgICAgICAgdmVydGljYWxCcmFuY2hQYXJzZVRyZWUgPSBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5mcm9tV2lkdGgodmVydGljYWxCcmFuY2hQYXJzZVRyZWVXaWR0aCksXG4gICAgICAgICAgdmVydGljYWxCcmFuY2hQb3NpdGlvbiA9IHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmdldFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oKSxcbiAgICAgICAgICB0ZXJtaW5hbE5vZGVQYXJzZVRyZWUgPSBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5mcm9tU3RyaW5nQW5kVmVydGljYWxCcmFuY2hQb3NpdGlvbihOb1doaXRlc3BhY2VOb2RlUGFyc2VUcmVlLCBzdHJpbmcsIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24pO1xuXG4gICAgdGVybWluYWxOb2RlUGFyc2VUcmVlLmFwcGVuZFRvVG9wKHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlKTtcblxuICAgIGNvbnN0IG5vV2hpdGVzcGFjZU5vZGVQYXJzZVRyZWUgPSB0ZXJtaW5hbE5vZGVQYXJzZVRyZWU7IC8vL1xuXG4gICAgcmV0dXJuIG5vV2hpdGVzcGFjZU5vZGVQYXJzZVRyZWU7XG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVGVybWluYWxOb2RlIGZyb20gXCIuLi90ZXJtaW5hbFwiO1xuaW1wb3J0IE5vV2hpdGVzcGFjZU5vZGVQYXJzZVRyZWUgZnJvbSBcIi4uLy4uL3BhcnNlVHJlZS9ub1doaXRlc3BhY2VOb2RlXCI7XG5cbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi8uLi9jb25zdGFudHNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTm9XaGl0ZXNwYWNlTm9kZSBleHRlbmRzIFRlcm1pbmFsTm9kZSB7XG4gIGdldFR5cGUoKSB7XG4gICAgY29uc3QgdHlwZSA9IG51bGw7ICAvLy9cblxuICAgIHJldHVybiB0eXBlO1xuICB9XG5cbiAgZ2V0Q29udGVudCgpIHtcbiAgICBjb25zdCBjb250ZW50ID0gRU1QVFlfU1RSSU5HO1xuXG4gICAgcmV0dXJuIGNvbnRlbnQ7XG4gIH1cblxuICBpc05vV2hpdGVzcGFjZU5vZGUoKSB7XG4gICAgY29uc3Qgbm9XaGl0ZXNwYWNlTm9kZSA9IHRydWU7XG5cbiAgICByZXR1cm4gbm9XaGl0ZXNwYWNlTm9kZTtcbiAgfVxuXG4gIGFzUGFyc2VUcmVlKHRva2Vucykge1xuICAgIGNvbnN0IG5vV2hpdGVzcGFjZU5vZGVQYXJzZVRyZWUgPSBOb1doaXRlc3BhY2VOb2RlUGFyc2VUcmVlLmZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgcGFyc2VUcmVlID0gbm9XaGl0ZXNwYWNlTm9kZVBhcnNlVHJlZTsgIC8vL1xuXG4gICAgcmV0dXJuIHBhcnNlVHJlZTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBjb25zdCBzaWduaWZpY2FudFRva2VuID0gbnVsbCxcbiAgICAgICAgICBub1doaXRlc3BhY2VOb2RlID0gVGVybWluYWxOb2RlLmZyb21TaWduaWZpY2FudFRva2VuKE5vV2hpdGVzcGFjZU5vZGUsIHNpZ25pZmljYW50VG9rZW4pO1xuXG4gICAgcmV0dXJuIG5vV2hpdGVzcGFjZU5vZGU7XG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFRlcm1pbmFsUGFydCBmcm9tIFwiLi4vLi4vcGFydC90ZXJtaW5hbFwiO1xuaW1wb3J0IE5vV2hpdGVzcGFjZU5vZGUgZnJvbSBcIi4uLy4uL25vZGUvdGVybWluYWwvbm9XaGl0ZXNwYWNlXCI7XG5cbmNvbnN0IHsgTk9fV0hJVEVTUEFDRSB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5vV2hpdGVzcGFjZVBhcnQgZXh0ZW5kcyBUZXJtaW5hbFBhcnQge1xuICBpc05vV2hpdGVzcGFjZVBhcnQoKSB7XG4gICAgY29uc3Qgbm9XaGl0ZXNwYWNlUGFydCA9IHRydWU7XG5cbiAgICByZXR1cm4gbm9XaGl0ZXNwYWNlUGFydDtcbiAgfVxuXG4gIHBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spIHtcbiAgICBsZXQgcGFyc2VkO1xuXG4gICAgbGV0IG5vV2hpdGVzcGFjZU5vZGUgPSBudWxsO1xuXG4gICAgY29uc3Qgc2F2ZWRJbmRleCA9IHN0YXRlLmdldFNhdmVkSW5kZXgoKSxcbiAgICAgICAgICBuZXh0VG9rZW5XaGl0ZXNwYWNlVG9rZW4gPSBzdGF0ZS5pc05leHRUb2tlbldoaXRlc3BhY2VUb2tlbigpO1xuXG4gICAgaWYgKCFuZXh0VG9rZW5XaGl0ZXNwYWNlVG9rZW4pIHtcbiAgICAgIG5vV2hpdGVzcGFjZU5vZGUgPSBOb1doaXRlc3BhY2VOb2RlLmZyb21Ob3RoaW5nKCk7XG4gICAgfVxuXG4gICAgcGFyc2VkID0gKG5vV2hpdGVzcGFjZU5vZGUgIT09IG51bGwpXG5cbiAgICBpZiAocGFyc2VkKSB7XG4gICAgICBub2Rlcy5wdXNoKG5vV2hpdGVzcGFjZU5vZGUpO1xuXG4gICAgICBpZiAoY2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICAgICAgcGFyc2VkID0gY2FsbGJhY2soKTtcblxuICAgICAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgICAgIG5vZGVzLnBvcCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgIHN0YXRlLmJhY2t0cmFjayhzYXZlZEluZGV4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG5cbiAgYXNTdHJpbmcoKSB7XG4gICAgY29uc3Qgc3RyaW5nID0gTk9fV0hJVEVTUEFDRTsgLy8vXG5cbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG5cbiAgY2xvbmUoKSB7IHJldHVybiBzdXBlci5jbG9uZShOb1doaXRlc3BhY2VQYXJ0KTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL25vZGUvbm9uVGVybWluYWxcIjtcbmltcG9ydCBOb1doaXRlc3BhY2VQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L3Rlcm1pbmFsL25vV2hpdGVzcGFjZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOb1doaXRlc3BhY2VQYXJ0Qk5GTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIGdlbmVyYXRlUGFydChsb29rQWhlYWQpIHtcbiAgICBjb25zdCBub1doaXRlc3BhY2VQYXJ0ID0gbmV3IE5vV2hpdGVzcGFjZVBhcnQoKTtcblxuICAgIHJldHVybiBub1doaXRlc3BhY2VQYXJ0O1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMocnVsZU5hbWUsIGNoaWxkTm9kZXMpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKE5vV2hpdGVzcGFjZVBhcnRCTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBUZXJtaW5hbFN5bWJvbFBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvdGVybWluYWxTeW1ib2xcIjtcblxuY29uc3QgeyBOT19XSElURVNQQUNFIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTm9XaGl0ZXNwYWNlUGFydERlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgY29udGVudCA9IE5PX1dISVRFU1BBQ0UsXG4gICAgICAgICAgdGVybWluYWxTeW1ib2xQYXJ0ID0gbmV3IFRlcm1pbmFsU3ltYm9sUGFydChjb250ZW50KSxcbiAgICAgICAgICBwYXJ0cyA9IFtcbiAgICAgICAgICAgIHRlcm1pbmFsU3ltYm9sUGFydFxuICAgICAgICAgIF07XG5cbiAgICBzdXBlcihwYXJ0cylcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgTm9XaGl0ZXNwYWNlUGFydEJORk5vZGUgZnJvbSBcIi4uL25vZGUvYm5mL25vV2hpdGVzcGFjZVBhcnRcIjtcbmltcG9ydCBOb1doaXRlc3BhY2VQYXJ0RGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9ub1doaXRlc3BhY2VQYXJ0XCI7XG5cbmltcG9ydCB7IE5vV2hpdGVzcGFjZVBhcnRSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTm9XaGl0ZXNwYWNlUGFydFJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3Qgbm9XaGl0ZXNwYWNlUGFydERlZmluaXRpb24gPSBuZXcgTm9XaGl0ZXNwYWNlUGFydERlZmluaXRpb24oKSxcbiAgICAgICAgICBuYW1lID0gTm9XaGl0ZXNwYWNlUGFydFJ1bGVOYW1lLFxuICAgICAgICAgIGFtYmlndW91cyA9IGZhbHNlLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgbm9XaGl0ZXNwYWNlUGFydERlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBOb1doaXRlc3BhY2VQYXJ0Qk5GTm9kZTtcblxuICAgIHN1cGVyKG5hbWUsIGFtYmlndW91cywgZGVmaW5pdGlvbnMsIE5vZGUpXG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9ub2RlL25vblRlcm1pbmFsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1vZGlmaWVyQk5GTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhNb2RpZmllckJORk5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IE5vV2hpdGVzcGFjZVBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvbm9XaGl0ZXNwYWNlXCI7XG5pbXBvcnQgVGVybWluYWxTeW1ib2xQYXJ0IGZyb20gXCIuLi9wYXJ0L3Rlcm1pbmFsL3Rlcm1pbmFsU3ltYm9sXCI7XG5cbmNvbnN0IHsgZWxsaXBzaXMgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMb29rQWhlYWRNb2RpZmllclJ1bGVEZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IGNvbnRlbnQgPSBlbGxpcHNpcywgIC8vL1xuICAgICAgICAgIG5vV2hpdGVzcGFjZVBhcnQgPSBuZXcgTm9XaGl0ZXNwYWNlUGFydCgpLFxuICAgICAgICAgIHRlcm1pbmFsU3ltYm9sUGFydCA9IG5ldyBUZXJtaW5hbFN5bWJvbFBhcnQoY29udGVudCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICBub1doaXRlc3BhY2VQYXJ0LFxuICAgICAgICAgICAgdGVybWluYWxTeW1ib2xQYXJ0XG4gICAgICAgICAgXTtcblxuICAgIHN1cGVyKHBhcnRzKVxuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBNb2RpZmllckJORk5vZGUgZnJvbSBcIi4uL25vZGUvYm5mL21vZGlmaWVyXCI7XG5pbXBvcnQgTG9va0FoZWFkTW9kaWZpZXJSdWxlRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9sb29rQWhlYWRNb2RpZmllclJ1bGVcIjtcblxuaW1wb3J0IHsgTG9va0FoZWFkTW9kaWZpZXJSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTG9va0FoZWFkTW9kaWZpZXJSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IG5hbWUgPSBMb29rQWhlYWRNb2RpZmllclJ1bGVOYW1lLFxuICAgICAgICAgIGxvb2tBaGVhZE1vZGlmaWVyUnVsZURlZmluaXRpb24gPSBuZXcgTG9va0FoZWFkTW9kaWZpZXJSdWxlRGVmaW5pdGlvbigpLFxuICAgICAgICAgIGFtYmlndW91cyA9IGZhbHNlLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgbG9va0FoZWFkTW9kaWZpZXJSdWxlRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IE1vZGlmaWVyQk5GTm9kZTtcbiAgICBcbiAgICBzdXBlcihuYW1lLCBhbWJpZ3VvdXMsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgTm9XaGl0ZXNwYWNlUGFydCBmcm9tIFwiLi4vcGFydC90ZXJtaW5hbC9ub1doaXRlc3BhY2VcIjtcbmltcG9ydCBUZXJtaW5hbFN5bWJvbFBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvdGVybWluYWxTeW1ib2xcIjtcblxuY29uc3QgeyBleGNsYW1hdGlvbk1hcmsgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBbWJpZ3VvdXNNb2RpZmllclJ1bGVEZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IGNvbnRlbnQgPSBleGNsYW1hdGlvbk1hcmssICAvLy9cbiAgICAgICAgICBub1doaXRlc3BhY2VQYXJ0ID0gbmV3IE5vV2hpdGVzcGFjZVBhcnQoKSxcbiAgICAgICAgICB0ZXJtaW5hbFN5bWJvbFBhcnQgPSBuZXcgVGVybWluYWxTeW1ib2xQYXJ0KGNvbnRlbnQpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgbm9XaGl0ZXNwYWNlUGFydCxcbiAgICAgICAgICAgIHRlcm1pbmFsU3ltYm9sUGFydFxuICAgICAgICAgIF07XG5cbiAgICBzdXBlcihwYXJ0cylcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgTW9kaWZpZXJCTkZOb2RlIGZyb20gXCIuLi9ub2RlL2JuZi9tb2RpZmllclwiO1xuaW1wb3J0IEFtYmlndW91c01vZGlmaWVyUnVsZURlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vYW1iaWd1b3VzTW9kaWZpZXJSdWxlXCI7XG5cbmltcG9ydCB7IEFtYmlndW91c01vZGlmaWVyUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFtYmlndW91c01vZGlmaWVyUnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBuYW1lID0gQW1iaWd1b3VzTW9kaWZpZXJSdWxlTmFtZSxcbiAgICAgICAgICBhbWJpZ3VvdXNNb2RpZmllclJ1bGVEZWZpbml0aW9uID0gbmV3IEFtYmlndW91c01vZGlmaWVyUnVsZURlZmluaXRpb24oKSxcbiAgICAgICAgICBhbWJpZ3VvdXMgPSBmYWxzZSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIGFtYmlndW91c01vZGlmaWVyUnVsZURlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBNb2RpZmllckJORk5vZGU7XG4gICAgXG4gICAgc3VwZXIobmFtZSwgYW1iaWd1b3VzLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBUZXJtaW5hbFBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvdGVybWluYWxcIjtcbmltcG9ydCBUZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL25vZGUvdGVybWluYWxcIjtcblxuaW1wb3J0IHsgZmlyc3QgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlZ3VsYXJFeHByZXNzaW9uUGFydCBleHRlbmRzIFRlcm1pbmFsUGFydCB7XG4gIGNvbnN0cnVjdG9yKHJlZ3VsYXJFeHByZXNzaW9uKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMucmVndWxhckV4cHJlc3Npb24gPSByZWd1bGFyRXhwcmVzc2lvbjtcbiAgfVxuXG4gIHBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spIHtcbiAgICBsZXQgcGFyc2VkO1xuXG4gICAgbGV0IHRlcm1pbmFsTm9kZSA9IG51bGw7XG4gICAgXG4gICAgY29uc3Qgc2F2ZWRJbmRleCA9IHN0YXRlLmdldFNhdmVkSW5kZXgoKSxcblx0XHQgICAgICBuZXh0U2lnbmlmaWNhbnRUb2tlbiA9IHN0YXRlLmdldE5leHRTaWduaWZpY2FudFRva2VuKCksXG5cdFx0XHRcdFx0c2lnbmlmaWNhbnRUb2tlbiA9IG5leHRTaWduaWZpY2FudFRva2VuOyAvLy9cblxuICAgIGlmIChzaWduaWZpY2FudFRva2VuICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBjb250ZW50ID0gc2lnbmlmaWNhbnRUb2tlbi5nZXRDb250ZW50KCksXG4gICAgICAgICAgICBtYXRjaGVzID0gY29udGVudC5tYXRjaCh0aGlzLnJlZ3VsYXJFeHByZXNzaW9uKTtcblxuICAgICAgaWYgKG1hdGNoZXMgIT09IG51bGwpIHtcbiAgICAgICAgY29uc3QgZmlyc3RNYXRjaCA9IGZpcnN0KG1hdGNoZXMpO1xuXG4gICAgICAgIGlmIChmaXJzdE1hdGNoID09PSBjb250ZW50KSB7XG4gICAgICAgICAgdGVybWluYWxOb2RlID0gVGVybWluYWxOb2RlLmZyb21TaWduaWZpY2FudFRva2VuKHNpZ25pZmljYW50VG9rZW4pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcGFyc2VkID0gKHRlcm1pbmFsTm9kZSAhPT0gbnVsbCk7XG5cbiAgICBpZiAocGFyc2VkKSB7XG4gICAgICBub2Rlcy5wdXNoKHRlcm1pbmFsTm9kZSk7XG5cbiAgICAgIGlmIChjYWxsYmFjayAhPT0gbnVsbCkge1xuICAgICAgICBwYXJzZWQgPSBjYWxsYmFjaygpO1xuXG4gICAgICAgIGlmICghcGFyc2VkKSB7XG4gICAgICAgICAgbm9kZXMucG9wKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgc3RhdGUuYmFja3RyYWNrKHNhdmVkSW5kZXgpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZWQ7XG4gIH1cblxuICBhc1N0cmluZygpIHtcbiAgICBjb25zdCByZWd1bGFyRXhwcmVzc2lvblN0cmluZyA9IHRoaXMucmVndWxhckV4cHJlc3Npb24udG9TdHJpbmcoKSxcblx0XHQgICAgICBzdHJpbmcgPSByZWd1bGFyRXhwcmVzc2lvblN0cmluZzsgLy8vXG5cbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG5cbiAgY2xvbmUoKSB7IHJldHVybiBzdXBlci5jbG9uZShSZWd1bGFyRXhwcmVzc2lvblBhcnQsIHRoaXMucmVndWxhckV4cHJlc3Npb24pOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IEVNUFRZX1NUUklORyA9IFwiXCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL25vZGUvbm9uVGVybWluYWxcIjtcbmltcG9ydCBSZWd1bGFyRXhwcmVzc2lvblBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvdGVybWluYWwvcmVndWxhckV4cHJlc3Npb25cIjtcblxuaW1wb3J0IHsgZmlyc3QsIHNlY29uZCB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvYXJyYXlcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVndWxhckV4cHJlc3Npb25CTkZOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgcmVndWxhckV4cHJlc3Npb24gPSAvXlxcLygoPzpcXFxcLnxbXlxcL10pKilcXC8kLztcblxuICBnZW5lcmF0ZVBhcnQobG9va0FoZWFkKSB7XG4gICAgY29uc3QgcmVndWxhckV4cHJlc3Npb24gPSB0aGlzLmdldFJlZ3VsYXJFeHByZXNzaW9uKCksXG4gICAgICAgICAgcmVndWxhckV4cHJlc3Npb25QYXJ0ID0gbmV3IFJlZ3VsYXJFeHByZXNzaW9uUGFydChyZWd1bGFyRXhwcmVzc2lvbik7XG5cbiAgICByZXR1cm4gcmVndWxhckV4cHJlc3Npb25QYXJ0O1xuICB9XG5cbiAgZ2V0UmVndWxhckV4cHJlc3Npb24oKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIGZpcnN0Q2hpbGROb2RlID0gZmlyc3QoY2hpbGROb2RlcyksXG4gICAgICAgICAgdGVybWluYWxOb2RlID0gZmlyc3RDaGlsZE5vZGUsICAvLy9cbiAgICAgICAgICB0ZXJtaW5hbE5vZGVDb250ZW50ID0gdGVybWluYWxOb2RlLmdldENvbnRlbnQoKSxcbiAgICAgICAgICBtYXRjaGVzID0gdGVybWluYWxOb2RlQ29udGVudC5tYXRjaCh0aGlzLnJlZ3VsYXJFeHByZXNzaW9uKSxcbiAgICAgICAgICBzZWNvbmRNYXRjaCA9IHNlY29uZChtYXRjaGVzKSxcbiAgICAgICAgICBwYXR0ZXJuID0gc2Vjb25kTWF0Y2gsIC8vL1xuICAgICAgICAgIHJlZ3VsYXJFeHByZXNzaW9uID0gbmV3IFJlZ0V4cChwYXR0ZXJuKTsgIC8vL1xuXG4gICAgcmV0dXJuIHJlZ3VsYXJFeHByZXNzaW9uO1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMocnVsZU5hbWUsIGNoaWxkTm9kZXMpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKFJlZ3VsYXJFeHByZXNzaW9uQk5GTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMpOyB9XG59XG5cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgRU1QVFlfU1RSSU5HID0gXCJcIjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgdHlwZXMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgUmVndWxhckV4cHJlc3Npb25CTkZOb2RlIGZyb20gXCIuLi9ub2RlL2JuZi9yZWd1bGFyRXhwcmVzc2lvblwiO1xuaW1wb3J0IFNpZ25pZmljYW50VG9rZW5UeXBlRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9zaWduaWZpY2FudFRva2VuVHlwZVwiO1xuXG5pbXBvcnQgeyBSZWd1bGFyRXhwcmVzc2lvblJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5jb25zdCB7IHJlZ3VsYXJFeHByZXNzaW9uVHlwZSB9ID0gdHlwZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlZ3VsYXJFeHByZXNzaW9uUnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCByZWd1bGFyRXhwcmVzc2lvblNpZ25pZmljYW50VG9rZW5UeXBlID0gcmVndWxhckV4cHJlc3Npb25UeXBlLCAgLy8vXG4gICAgICAgICAgcmVndWxhckV4cHJlc3Npb25TaWduaWZpY2FudFRva2VuVHlwZURlZmluaXRpb24gPSBuZXcgU2lnbmlmaWNhbnRUb2tlblR5cGVEZWZpbml0aW9uKHJlZ3VsYXJFeHByZXNzaW9uU2lnbmlmaWNhbnRUb2tlblR5cGUpLFxuICAgICAgICAgIG5hbWUgPSBSZWd1bGFyRXhwcmVzc2lvblJ1bGVOYW1lLFxuICAgICAgICAgIGFtYmlndW91cyA9IGZhbHNlLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgcmVndWxhckV4cHJlc3Npb25TaWduaWZpY2FudFRva2VuVHlwZURlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBSZWd1bGFyRXhwcmVzc2lvbkJORk5vZGU7XG4gICAgXG4gICAgc3VwZXIobmFtZSwgYW1iaWd1b3VzLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL25vZGUvbm9uVGVybWluYWxcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUXVhbnRpZmllckJORk5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2RlcykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoUXVhbnRpZmllckJORk5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgTm9XaGl0ZXNwYWNlUGFydCBmcm9tIFwiLi4vcGFydC90ZXJtaW5hbC9ub1doaXRlc3BhY2VcIjtcbmltcG9ydCBUZXJtaW5hbFN5bWJvbFBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvdGVybWluYWxTeW1ib2xcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUXVhbnRpZmllclJ1bGVEZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHRlcm1pbmFsU3ltYm9sQ29udGVudCkge1xuICAgIGNvbnN0IGNvbnRlbnQgPSB0ZXJtaW5hbFN5bWJvbENvbnRlbnQsICAvLy9cbiAgICAgICAgICBub1doaXRlc3BhY2VQYXJ0ID0gbmV3IE5vV2hpdGVzcGFjZVBhcnQoKSxcbiAgICAgICAgICB0ZXJtaW5hbFN5bWJvbFBhcnQgPSBuZXcgVGVybWluYWxTeW1ib2xQYXJ0KGNvbnRlbnQpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgbm9XaGl0ZXNwYWNlUGFydCxcbiAgICAgICAgICAgIHRlcm1pbmFsU3ltYm9sUGFydFxuICAgICAgICAgIF07XG5cbiAgICBzdXBlcihwYXJ0cylcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IFF1YW50aWZpZXJCTkZOb2RlIGZyb20gXCIuLi9ub2RlL2JuZi9xdWFudGlmaWVyXCI7XG5pbXBvcnQgUXVhbnRpZmllclJ1bGVEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3F1YW50aWZpZXJSdWxlXCI7XG5cbmltcG9ydCB7IE9wdGlvbmFsUXVhbnRpZmllclJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5jb25zdCB7IHF1ZXN0aW9uTWFyayB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE9wdGlvbmFsUXVhbnRpZmllclJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgbmFtZSA9IE9wdGlvbmFsUXVhbnRpZmllclJ1bGVOYW1lLFxuICAgICAgICAgIG9wdGlvbmFsUXVhbnRpZmllclRlcm1pbmFsU3ltYm9sQ29udGVudCA9IHF1ZXN0aW9uTWFyaywgLy8vXG4gICAgICAgICAgb3B0aW9uYWxRdWFudGlmaWVyUnVsZURlZmluaXRpb24gPSBuZXcgUXVhbnRpZmllclJ1bGVEZWZpbml0aW9uKG9wdGlvbmFsUXVhbnRpZmllclRlcm1pbmFsU3ltYm9sQ29udGVudCksXG4gICAgICAgICAgYW1iaWd1b3VzID0gZmFsc2UsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBvcHRpb25hbFF1YW50aWZpZXJSdWxlRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IFF1YW50aWZpZXJCTkZOb2RlO1xuICAgIFxuICAgIHN1cGVyKG5hbWUsIGFtYmlndW91cywgZGVmaW5pdGlvbnMsIE5vZGUpXG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBRdWFudGlmaWVyQk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvcXVhbnRpZmllclwiO1xuaW1wb3J0IFF1YW50aWZpZXJSdWxlRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9xdWFudGlmaWVyUnVsZVwiO1xuXG5pbXBvcnQgeyBPbmVPck1vcmVRdWFudGlmaWVyUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmNvbnN0IHsgcGx1cyB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE9uZU9yTW9yZVF1YW50aWZpZXJSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IG5hbWUgPSBPbmVPck1vcmVRdWFudGlmaWVyUnVsZU5hbWUsXG4gICAgICAgICAgb25lT3JNb3JlUXVhbnRpZmllclRlcm1pbmFsU3ltYm9sQ29udGVudCA9IHBsdXMsIC8vL1xuICAgICAgICAgIG9uZU9yTW9yZVF1YW50aWZpZXJSdWxlRGVmaW5pdGlvbiA9IG5ldyBRdWFudGlmaWVyUnVsZURlZmluaXRpb24ob25lT3JNb3JlUXVhbnRpZmllclRlcm1pbmFsU3ltYm9sQ29udGVudCksXG4gICAgICAgICAgYW1iaWd1b3VzID0gZmFsc2UsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBvbmVPck1vcmVRdWFudGlmaWVyUnVsZURlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBRdWFudGlmaWVyQk5GTm9kZTtcbiAgICBcbiAgICBzdXBlcihuYW1lLCBhbWJpZ3VvdXMsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgUXVhbnRpZmllckJORk5vZGUgZnJvbSBcIi4uL25vZGUvYm5mL3F1YW50aWZpZXJcIjtcbmltcG9ydCBRdWFudGlmaWVyUnVsZURlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vcXVhbnRpZmllclJ1bGVcIjtcblxuaW1wb3J0IHsgWmVyb09yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuY29uc3QgeyBhc3RlcmlzayB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFplcm9Pck1vcmVRdWFudGlmaWVyUnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBuYW1lID0gWmVyb09yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSxcbiAgICAgICAgICB6ZXJvT3JNb3JlUXVhbnRpZmllclRlcm1pbmFsU3ltYm9sQ29udGVudCA9IGFzdGVyaXNrLCAvLy9cbiAgICAgICAgICB6ZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVEZWZpbml0aW9uID0gbmV3IFF1YW50aWZpZXJSdWxlRGVmaW5pdGlvbih6ZXJvT3JNb3JlUXVhbnRpZmllclRlcm1pbmFsU3ltYm9sQ29udGVudCksXG4gICAgICAgICAgYW1iaWd1b3VzID0gZmFsc2UsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICB6ZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gUXVhbnRpZmllckJORk5vZGU7XG4gICAgXG4gICAgc3VwZXIobmFtZSwgYW1iaWd1b3VzLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL25vZGUvbm9uVGVybWluYWxcIjtcbmltcG9ydCBTaWduaWZpY2FudFRva2VuVHlwZVBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvdGVybWluYWwvc2lnbmlmaWNhbnRUb2tlblR5cGVcIjtcblxuaW1wb3J0IHsgZmlyc3QsIHNlY29uZCB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvYXJyYXlcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2lnbmlmaWNhbnRUb2tlblR5cGVCTkZOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgcmVndWxhckV4cHJlc3Npb24gPSAvXlxcWyhbXlxcXV0rKV0kLztcblxuICBnZW5lcmF0ZVBhcnQobG9va0FoZWFkKSB7XG4gICAgY29uc3Qgc2lnbmlmaWNhbnRUb2tlblR5cGUgPSB0aGlzLmdldFNpZ25pZmljYW50VG9rZW5UeXBlKCksXG4gICAgICAgICAgc2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0ID0gbmV3IFNpZ25pZmljYW50VG9rZW5UeXBlUGFydChzaWduaWZpY2FudFRva2VuVHlwZSk7XG5cbiAgICByZXR1cm4gc2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0O1xuICB9XG5cbiAgZ2V0U2lnbmlmaWNhbnRUb2tlblR5cGUoKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIGZpcnN0Q2hpbGROb2RlID0gZmlyc3QoY2hpbGROb2RlcyksXG4gICAgICAgICAgdGVybWluYWxOb2RlID0gZmlyc3RDaGlsZE5vZGUsICAvLy9cbiAgICAgICAgICB0ZXJtaW5hbE5vZGVDb250ZW50ID0gdGVybWluYWxOb2RlLmdldENvbnRlbnQoKSxcbiAgICAgICAgICBtYXRjaGVzID0gdGVybWluYWxOb2RlQ29udGVudC5tYXRjaCh0aGlzLnJlZ3VsYXJFeHByZXNzaW9uKSxcbiAgICAgICAgICBzZWNvbmRNYXRjaCA9IHNlY29uZChtYXRjaGVzKSxcbiAgICAgICAgICBzaWduaWZpY2FudFRva2VuVHlwZSA9IHNlY29uZE1hdGNoOyAvLy9cblxuICAgIHJldHVybiBzaWduaWZpY2FudFRva2VuVHlwZTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhTaWduaWZpY2FudFRva2VuVHlwZUJORk5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTsgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFNpZ25pZmljYW50VG9rZW5UeXBlQk5GTm9kZTtcblxuXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBFTVBUWV9TVFJJTkcgPSBcIlwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyB0eXBlcyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBTaWduaWZpY2FudFRva2VuVHlwZUJORk5vZGUgZnJvbSBcIi4uL25vZGUvYm5mL3NpZ25pZmljYW50VG9rZW5UeXBlXCI7XG5pbXBvcnQgU2lnbmlmaWNhbnRUb2tlblR5cGVEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3NpZ25pZmljYW50VG9rZW5UeXBlXCI7XG5cbmltcG9ydCB7IFNpZ25pZmljYW50VG9rZW5UeXBlUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmNvbnN0IHsgdHlwZVR5cGUgfSA9IHR5cGVzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTaWduaWZpY2FudFRva2VuVHlwZVJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgdHlwZVNpZ25pZmljYW50VG9rZW5UeXBlID0gdHlwZVR5cGUsICAvLy9cbiAgICAgICAgICB0eXBlU2lnbmlmaWNhbnRUb2tlblR5cGVEZWZpbml0aW9uID0gbmV3IFNpZ25pZmljYW50VG9rZW5UeXBlRGVmaW5pdGlvbih0eXBlU2lnbmlmaWNhbnRUb2tlblR5cGUpLFxuICAgICAgICAgIG5hbWUgPSBTaWduaWZpY2FudFRva2VuVHlwZVJ1bGVOYW1lLFxuICAgICAgICAgIGFtYmlndW91cyA9IGZhbHNlLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgdHlwZVNpZ25pZmljYW50VG9rZW5UeXBlRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IFNpZ25pZmljYW50VG9rZW5UeXBlQk5GTm9kZTtcbiAgICBcbiAgICBzdXBlcihuYW1lLCBhbWJpZ3VvdXMsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgZmlyc3QgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBydWxlTWFwRnJvbVJ1bGVzKHJ1bGVzKSB7XG4gIGNvbnN0IHJ1bGVNYXAgPSB7fTtcblxuICBydWxlcy5mb3JFYWNoKChydWxlKSA9PiB7XG4gICAgY29uc3QgcnVsZU5hbWUgPSBydWxlLmdldE5hbWUoKTtcblxuICAgIHJ1bGVNYXBbcnVsZU5hbWVdID0gcnVsZTtcbiAgfSk7XG5cbiAgcmV0dXJuIHJ1bGVNYXA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGFydFJ1bGVGcm9tUnVsZXMocnVsZXMpIHtcbiAgY29uc3QgZmlyc3RSdWxlID0gZmlyc3QocnVsZXMpLFxuICAgICAgc3RhcnRSdWxlID0gZmlyc3RSdWxlOyAgLy8vXG5cbiAgcmV0dXJuIHN0YXJ0UnVsZTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IGJuZiBmcm9tIFwiLi9ibmZcIjtcbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgU3RhdGUgZnJvbSBcIi4uL3N0YXRlXCI7XG5pbXBvcnQgTmFtZVJ1bGUgZnJvbSBcIi4uL3J1bGUvbmFtZVwiO1xuaW1wb3J0IFBhcnRSdWxlIGZyb20gXCIuLi9ydWxlL3BhcnRcIjtcbmltcG9ydCBSdWxlUnVsZSBmcm9tIFwiLi4vcnVsZS9ydWxlXCI7XG5pbXBvcnQgRXJyb3JSdWxlIGZyb20gXCIuLi9ydWxlL2Vycm9yXCI7XG5pbXBvcnQgRG9jdW1lbnRSdWxlIGZyb20gXCIuLi9ydWxlL2RvY3VtZW50XCI7XG5pbXBvcnQgUnVsZU5hbWVSdWxlIGZyb20gXCIuLi9ydWxlL3J1bGVOYW1lXCI7XG5pbXBvcnQgV2lsZGNhcmRSdWxlIGZyb20gXCIuLi9ydWxlL3dpbGRjYXJkXCI7XG5pbXBvcnQgRW5kT2ZMaW5lUnVsZSBmcm9tIFwiLi4vcnVsZS9lbmRPZkxpbmVcIjtcbmltcG9ydCBRdWFudGlmaWVyUnVsZSBmcm9tIFwiLi4vcnVsZS9xdWFudGlmaWVyXCI7XG5pbXBvcnQgRGVmaW5pdGlvblJ1bGUgZnJvbSBcIi4uL3J1bGUvZGVmaW5pdGlvblwiO1xuaW1wb3J0IERlZmluaXRpb25zUnVsZSBmcm9tIFwiLi4vcnVsZS9kZWZpbml0aW9uc1wiO1xuaW1wb3J0IFRlcm1pbmFsUGFydFJ1bGUgZnJvbSBcIi4uL3J1bGUvdGVybWluYWxQYXJ0XCI7XG5pbXBvcnQgQ2hvaWNlT2ZQYXJ0c1J1bGUgZnJvbSBcIi4uL3J1bGUvY2hvaWNlT2ZQYXJ0c1wiO1xuaW1wb3J0IFRlcm1pbmFsU3ltYm9sUnVsZSBmcm9tIFwiLi4vcnVsZS90ZXJtaW5hbFN5bWJvbFwiO1xuaW1wb3J0IE5vblRlcm1pbmFsUGFydFJ1bGUgZnJvbSBcIi4uL3J1bGUvbm9uVGVybWluYWxQYXJ0XCI7XG5pbXBvcnQgU2VxdWVuY2VPZlBhcnRzUnVsZSBmcm9tIFwiLi4vcnVsZS9zZXF1ZW5jZU9mUGFydHNcIjtcbmltcG9ydCBOb1doaXRlc3BhY2VQYXJ0UnVsZSBmcm9tIFwiLi4vcnVsZS9ub1doaXRlc3BhY2VQYXJ0XCI7XG5pbXBvcnQgTG9va0FoZWFkTW9kaWZpZXJSdWxlIGZyb20gXCIuLi9ydWxlL2xvb2tBaGVhZE1vZGlmaWVyXCI7XG5pbXBvcnQgQW1iaWd1b3VzTW9kaWZpZXJSdWxlIGZyb20gXCIuLi9ydWxlL2FtYmlndW91c01vZGlmaWVyXCI7XG5pbXBvcnQgUmVndWxhckV4cHJlc3Npb25SdWxlIGZyb20gXCIuLi9ydWxlL3JlZ3VsYXJFeHByZXNzaW9uXCI7XG5pbXBvcnQgT3B0aW9uYWxRdWFudGlmaWVyUnVsZSBmcm9tIFwiLi4vcnVsZS9vcHRpb25hbFF1YW50aWZpZXJcIjtcbmltcG9ydCBPbmVPck1vcmVRdWFudGlmaWVyUnVsZSBmcm9tIFwiLi4vcnVsZS9vbmVPck1vcmVRdWFudGlmaWVyXCI7XG5pbXBvcnQgWmVyb09yTW9yZVF1YW50aWZpZXJSdWxlIGZyb20gXCIuLi9ydWxlL3plcm9Pck1vcmVRdWFudGlmaWVyXCI7XG5pbXBvcnQgU2lnbmlmaWNhbnRUb2tlblR5cGVSdWxlIGZyb20gXCIuLi9ydWxlL3NpZ25pZmljYW50VG9rZW5UeXBlXCI7XG5cbmltcG9ydCB7IHN0YXJ0UnVsZUZyb21SdWxlcywgcnVsZU1hcEZyb21SdWxlcyB9IGZyb20gXCIuLi91dGlsaXRpZXMvcnVsZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQk5GUGFyc2VyIHtcbiAgY29uc3RydWN0b3Ioc3RhcnRSdWxlLCBydWxlTWFwKSB7XG4gICAgdGhpcy5zdGFydFJ1bGUgPSBzdGFydFJ1bGU7XG4gICAgdGhpcy5ydWxlTWFwID0gcnVsZU1hcDtcbiAgfVxuXG4gIGdldFN0YXJ0UnVsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5zdGFydFJ1bGU7XG4gIH1cblxuICBnZXRSdWxlTWFwKCkge1xuICAgIHJldHVybiB0aGlzLnJ1bGVNYXA7XG4gIH1cblxuICBwYXJzZSh0b2tlbnMsIHJ1bGUgPSB0aGlzLnN0YXJ0UnVsZSkge1xuICAgIGNvbnN0IHN0YXRlID0gU3RhdGUuZnJvbVRva2Vuc0FuZFJ1bGVNYXAodG9rZW5zLCB0aGlzLnJ1bGVNYXApLFxuICAgICAgICAgIGNhbGxiYWNrID0gbnVsbCxcbiAgICAgICAgICBydWxlTm9kZSA9IHJ1bGUucGFyc2Uoc3RhdGUsIGNhbGxiYWNrKSxcbiAgICAgICAgICBub2RlID0gcnVsZU5vZGU7IC8vL1xuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxuXHRydWxlc0Zyb21Ub2tlbnModG9rZW5zKSB7XG5cdCAgbGV0IHJ1bGVzO1xuXG4gICAgY29uc3Qgbm9kZSA9IHRoaXMucGFyc2UodG9rZW5zKTtcblxuICAgIGlmIChub2RlID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZXJlIGlzIG5vIG5vZGUuYCk7XG4gICAgfVxuXG4gICAgcnVsZXMgPSBub2RlLmdlbmVyYXRlUnVsZXMoUnVsZSk7XG5cbiAgICBjb25zdCBydWxlc0xlbmd0aCA9IHJ1bGVzLmxlbmd0aDtcblxuICAgIGlmIChydWxlc0xlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGVyZSBhcmUgbm8gcnVsZXMuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJ1bGVzO1xuICB9XG5cbiAgc3RhdGljIGJuZiA9IGJuZjtcblxuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgY29uc3QgbmFtZVJ1bGUgPSBuZXcgTmFtZVJ1bGUoKSxcbiAgICAgICAgICBwYXJ0UnVsZSA9IG5ldyBQYXJ0UnVsZSgpLFxuICAgICAgICAgIHJ1bGVSdWxlID0gbmV3IFJ1bGVSdWxlKCksXG4gICAgICAgICAgZXJyb3JSdWxlID0gbmV3IEVycm9yUnVsZSgpLFxuICAgICAgICAgIGRvY3VtZW50UnVsZSA9IG5ldyBEb2N1bWVudFJ1bGUoKSxcbiAgICAgICAgICBydWxlTmFtZVJ1bGUgPSBuZXcgUnVsZU5hbWVSdWxlKCksXG4gICAgICAgICAgd2lsZGNhcmRSdWxlID0gbmV3IFdpbGRjYXJkUnVsZSgpLFxuICAgICAgICAgIGVuZE9mTGluZVJ1bGUgPSBuZXcgRW5kT2ZMaW5lUnVsZSgpLFxuICAgICAgICAgIHF1YW50aWZpZXJSdWxlID0gbmV3IFF1YW50aWZpZXJSdWxlKCksXG4gICAgICAgICAgZGVmaW5pdGlvblJ1bGUgPSBuZXcgRGVmaW5pdGlvblJ1bGUoKSxcbiAgICAgICAgICBkZWZpbml0aW9uc1J1bGUgPSBuZXcgRGVmaW5pdGlvbnNSdWxlKCksXG4gICAgICAgICAgdGVybWluYWxQYXJ0UnVsZSA9IG5ldyBUZXJtaW5hbFBhcnRSdWxlKCksXG4gICAgICAgICAgY2hvaWNlT2ZQYXJ0c1J1bGUgPSBuZXcgQ2hvaWNlT2ZQYXJ0c1J1bGUoKSxcbiAgICAgICAgICB0ZXJtaW5hbFN5bWJvbFJ1bGUgPSBuZXcgVGVybWluYWxTeW1ib2xSdWxlKCksXG4gICAgICAgICAgbm9uVGVybWluYWxQYXJ0UnVsZSA9IG5ldyBOb25UZXJtaW5hbFBhcnRSdWxlKCksXG4gICAgICAgICAgc2VxdWVuY2VPZlBhcnRzUnVsZSA9IG5ldyBTZXF1ZW5jZU9mUGFydHNSdWxlKCksXG4gICAgICAgICAgbm9XaGl0ZXNwYWNlUGFydFJ1bGUgPSBuZXcgTm9XaGl0ZXNwYWNlUGFydFJ1bGUoKSxcbiAgICAgICAgICByZWd1bGFyRXhwcmVzc2lvblJ1bGUgPSBuZXcgUmVndWxhckV4cHJlc3Npb25SdWxlKCksXG4gICAgICAgICAgbG9va0FoZWFkTW9kaWZpZXJSdWxlID0gbmV3IExvb2tBaGVhZE1vZGlmaWVyUnVsZSgpLFxuICAgICAgICAgIGFtYmlndW91c01vZGlmaWVyUnVsZSA9IG5ldyBBbWJpZ3VvdXNNb2RpZmllclJ1bGUoKSxcbiAgICAgICAgICBvcHRpb25hbFF1YW50aWZpZXJSdWxlID0gbmV3IE9wdGlvbmFsUXVhbnRpZmllclJ1bGUoKSxcbiAgICAgICAgICBvbmVPck1vcmVRdWFudGlmaWVyUnVsZSA9IG5ldyBPbmVPck1vcmVRdWFudGlmaWVyUnVsZSgpLFxuICAgICAgICAgIHplcm9Pck1vcmVRdWFudGlmaWVyUnVsZSA9IG5ldyBaZXJvT3JNb3JlUXVhbnRpZmllclJ1bGUoKSxcbiAgICAgICAgICBzaWduaWZpY2FudFRva2VuVHlwZVJ1bGUgPSBuZXcgU2lnbmlmaWNhbnRUb2tlblR5cGVSdWxlKCk7XG5cbiAgICBsZXQgcnVsZXMgPSBbXG4gICAgICBkb2N1bWVudFJ1bGUsXG4gICAgICBydWxlUnVsZSxcbiAgICAgIG5hbWVSdWxlLFxuICAgICAgZGVmaW5pdGlvbnNSdWxlLFxuICAgICAgZGVmaW5pdGlvblJ1bGUsXG4gICAgICBwYXJ0UnVsZSxcbiAgICAgIG5vblRlcm1pbmFsUGFydFJ1bGUsXG4gICAgICB0ZXJtaW5hbFBhcnRSdWxlLFxuICAgICAgbm9XaGl0ZXNwYWNlUGFydFJ1bGUsXG4gICAgICBzZXF1ZW5jZU9mUGFydHNSdWxlLFxuICAgICAgY2hvaWNlT2ZQYXJ0c1J1bGUsXG4gICAgICBydWxlTmFtZVJ1bGUsXG4gICAgICBzaWduaWZpY2FudFRva2VuVHlwZVJ1bGUsXG4gICAgICByZWd1bGFyRXhwcmVzc2lvblJ1bGUsXG4gICAgICB0ZXJtaW5hbFN5bWJvbFJ1bGUsXG4gICAgICBlbmRPZkxpbmVSdWxlLFxuICAgICAgd2lsZGNhcmRSdWxlLFxuICAgICAgcXVhbnRpZmllclJ1bGUsXG4gICAgICBhbWJpZ3VvdXNNb2RpZmllclJ1bGUsXG4gICAgICBsb29rQWhlYWRNb2RpZmllclJ1bGUsXG4gICAgICBvcHRpb25hbFF1YW50aWZpZXJSdWxlLFxuICAgICAgb25lT3JNb3JlUXVhbnRpZmllclJ1bGUsXG4gICAgICB6ZXJvT3JNb3JlUXVhbnRpZmllclJ1bGUsXG4gICAgICBlcnJvclJ1bGVcbiAgICBdO1xuXG4gICAgY29uc3Qgc3RhcnRSdWxlID0gc3RhcnRSdWxlRnJvbVJ1bGVzKHJ1bGVzKSxcbiAgICAgICAgICBydWxlTWFwID0gcnVsZU1hcEZyb21SdWxlcyhydWxlcyksXG4gICAgICAgICAgYm5mUGFyc2VyID0gbmV3IEJORlBhcnNlcihzdGFydFJ1bGUsIHJ1bGVNYXApO1xuICAgIFxuICAgIHJldHVybiBibmZQYXJzZXI7XG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBibmYgPSBgXG5cbiAgZXhwcmVzc2lvbiAgIDo6PSBleHByZXNzaW9uXyBvcGVyYXRvciBleHByZXNzaW9uIGV4cHJlc3Npb25+KlxuXG4gICAgICAgICAgICAgICAgIHwgZXhwcmVzc2lvbl9cblxuICAgICAgICAgICAgICAgICA7XG5cbiAgb3BlcmF0b3IgICAgIDo6PSBcIitcIlxuXG4gICAgICAgICAgICAgICAgIHwgXCItXCJcblxuICAgICAgICAgICAgICAgICB8IFwiL1wiXG5cbiAgICAgICAgICAgICAgICAgfCBcIipcIlxuXG4gICAgICAgICAgICAgICAgIDtcblxuICB0ZXJtICAgICAgICAgOjo9IC9cXFxcZCsvIDtcblxuICBleHByZXNzaW9uXyAgOjo9IFwiKFwiIGV4cHJlc3Npb24gXCIpXCJcblxuICAgICAgICAgICAgICAgICB8IHRlcm1cblxuICAgICAgICAgICAgICAgICA7XG5cbiAgZXhwcmVzc2lvbn4gIDo6PSBvcGVyYXRvciBleHByZXNzaW9uIDtcbiAgXG5gO1xuXG5leHBvcnQgZGVmYXVsdCBibmY7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEJORkxleGVyIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgQk5GUGFyc2VyIGZyb20gXCIuLi9ibmYvcGFyc2VyXCI7XG5cbmltcG9ydCB7IHN0YXJ0UnVsZUZyb21SdWxlcywgcnVsZU1hcEZyb21SdWxlcyB9IGZyb20gXCIuLi91dGlsaXRpZXMvcnVsZXNcIjtcblxuY29uc3QgYm5mTGV4ZXIgPSBCTkZMZXhlci5mcm9tTm90aGluZygpLFxuICAgICAgYm5mUGFyc2VyID0gQk5GUGFyc2VyLmZyb21Ob3RoaW5nKCk7XG5cbmV4cG9ydCBmdW5jdGlvbiBydWxlc0Zyb21CTkYoYm5mKSB7XG4gIGNvbnN0IHRva2VucyA9IGJuZkxleGVyLnRva2Vuc0Zyb21CTkYoYm5mKSxcbiAgICAgICAgcnVsZXMgPSBibmZQYXJzZXIucnVsZXNGcm9tVG9rZW5zKHRva2Vucyk7XG5cbiAgcmV0dXJuIHJ1bGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VyRnJvbVJ1bGVzKENsYXNzLCBydWxlcykge1xuICBjb25zdCBzdGFydFJ1bGUgPSBzdGFydFJ1bGVGcm9tUnVsZXMocnVsZXMpLFxuICAgICAgICBydWxlTWFwID0gcnVsZU1hcEZyb21SdWxlcyhydWxlcyksXG4gICAgICAgIHBhcnNlciA9IG5ldyBDbGFzcyhzdGFydFJ1bGUsIHJ1bGVNYXApO1xuXG4gIHJldHVybiBwYXJzZXI7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBTdGF0ZSBmcm9tIFwiLi4vc3RhdGVcIjtcblxuaW1wb3J0IHsgcnVsZXNGcm9tQk5GLCBwYXJzZXJGcm9tUnVsZXMgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3BhcnNlclwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb21tb25QYXJzZXIge1xuICBjb25zdHJ1Y3RvcihzdGFydFJ1bGUsIHJ1bGVNYXApIHtcbiAgICB0aGlzLnN0YXJ0UnVsZSA9IHN0YXJ0UnVsZTtcbiAgICB0aGlzLnJ1bGVNYXAgPSBydWxlTWFwO1xuICB9XG5cbiAgZ2V0U3RhcnRSdWxlKCkge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0UnVsZTtcbiAgfVxuXG4gIGdldFJ1bGVNYXAoKSB7XG4gICAgcmV0dXJuIHRoaXMucnVsZU1hcDtcbiAgfVxuXG4gIHBhcnNlKHRva2VucywgcnVsZSA9IHRoaXMuc3RhcnRSdWxlKSB7XG4gICAgY29uc3Qgc3RhdGUgPSBTdGF0ZS5mcm9tVG9rZW5zQW5kUnVsZU1hcCh0b2tlbnMsIHRoaXMucnVsZU1hcCksXG4gICAgICAgICAgY2FsbGJhY2sgPSBudWxsLFxuICAgICAgICAgIHJ1bGVOb2RlID0gcnVsZS5wYXJzZShzdGF0ZSwgY2FsbGJhY2spLFxuICAgICAgICAgIG5vZGUgPSBydWxlTm9kZTsgLy8vXG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTm90aGluZyhDbGFzcykge1xuICAgIGNvbnN0IHsgYm5mIH0gPSBDbGFzcyxcbiAgICAgICAgICBydWxlcyA9IHJ1bGVzRnJvbUJORihibmYpLFxuICAgICAgICAgIHBhcnNlciA9IHBhcnNlckZyb21SdWxlcyhDbGFzcywgcnVsZXMpO1xuXG4gICAgcmV0dXJuIHBhcnNlcjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tQk5GKENsYXNzLCBibmYpIHtcbiAgICBjb25zdCBydWxlcyA9IHJ1bGVzRnJvbUJORihibmYpLFxuICAgICAgICAgIHBhcnNlciA9IHBhcnNlckZyb21SdWxlcyhDbGFzcywgcnVsZXMpO1xuXG4gICAgcmV0dXJuIHBhcnNlcjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZXMoQ2xhc3MsIHJ1bGVzKSB7XG4gICAgY29uc3QgcGFyc2VyID0gcGFyc2VyRnJvbVJ1bGVzKENsYXNzLCBydWxlcyk7XG5cbiAgICByZXR1cm4gcGFyc2VyO1xuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IGJuZiBmcm9tIFwiLi9ibmZcIjtcbmltcG9ydCBDb21tb25QYXJzZXIgZnJvbSBcIi4uL2NvbW1vbi9wYXJzZXJcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQmFzaWNQYXJzZXIgZXh0ZW5kcyBDb21tb25QYXJzZXIge1xuICBzdGF0aWMgYm5mID0gYm5mO1xuXG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHsgcmV0dXJuIENvbW1vblBhcnNlci5mcm9tTm90aGluZyhCYXNpY1BhcnNlcik7IH1cblxuICBzdGF0aWMgZnJvbUJORihibmYpIHsgcmV0dXJuIENvbW1vblBhcnNlci5mcm9tQk5GKEJhc2ljUGFyc2VyLCBibmYpOyB9XG5cbiAgc3RhdGljIGZyb21SdWxlcyhydWxlcykgeyByZXR1cm4gQ29tbW9uUGFyc2VyLmZyb21SdWxlcyhCYXNpY1BhcnNlciwgcnVsZXMpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFdpbGRjYXJkUGFydCBmcm9tIFwiLi9wYXJ0L3Rlcm1pbmFsL3dpbGRjYXJkXCI7XG5pbXBvcnQgRW5kT2ZMaW5lUGFydCBmcm9tIFwiLi9wYXJ0L3Rlcm1pbmFsL2VuZE9mTGluZVwiO1xuaW1wb3J0IFRlcm1pbmFsU3ltYm9sUGFydCBmcm9tIFwiLi9wYXJ0L3Rlcm1pbmFsL3Rlcm1pbmFsU3ltYm9sXCI7XG5pbXBvcnQgUmVndWxhckV4cHJlc3Npb25QYXJ0IGZyb20gXCIuL3BhcnQvdGVybWluYWwvcmVndWxhckV4cHJlc3Npb25cIjtcbmltcG9ydCBTaWduaWZpY2FudFRva2VuVHlwZVBhcnQgZnJvbSBcIi4vcGFydC90ZXJtaW5hbC9zaWduaWZpY2FudFRva2VuVHlwZVwiO1xuaW1wb3J0IFJ1bGVOYW1lUGFydCBmcm9tIFwiLi9wYXJ0L25vblRlcm1pbmFsL3J1bGVOYW1lXCI7XG5pbXBvcnQgT3B0aW9uYWxQYXJ0UGFydCBmcm9tIFwiLi9wYXJ0L25vblRlcm1pbmFsL29wdGlvbmFsUGFydFwiO1xuaW1wb3J0IFplcm9Pck1vcmVQYXJ0c1BhcnQgZnJvbSBcIi4vcGFydC9ub25UZXJtaW5hbC96ZXJvT3JNb3JlUGFydHNcIjtcbmltcG9ydCBPbmVPck1vcmVQYXJ0c1BhcnQgZnJvbSBcIi4vcGFydC9ub25UZXJtaW5hbC9vbmVPck1vcmVQYXJ0c1wiO1xuaW1wb3J0IFNlcXVlbmNlT2ZQYXJ0c1BhcnQgZnJvbSBcIi4vcGFydC9ub25UZXJtaW5hbC9zZXF1ZW5jZU9mUGFydHNcIjtcbmltcG9ydCBDaG9pY2VPZlBhcnRzUGFydCBmcm9tIFwiLi9wYXJ0L25vblRlcm1pbmFsL2Nob2ljZU9mUGFydHNcIjtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBXaWxkY2FyZFBhcnQsXG4gIEVuZE9mTGluZVBhcnQsXG4gIFRlcm1pbmFsU3ltYm9sUGFydCxcbiAgUmVndWxhckV4cHJlc3Npb25QYXJ0LFxuICBTaWduaWZpY2FudFRva2VuVHlwZVBhcnQsXG4gIFJ1bGVOYW1lUGFydCxcbiAgT3B0aW9uYWxQYXJ0UGFydCxcbiAgWmVyb09yTW9yZVBhcnRzUGFydCxcbiAgT25lT3JNb3JlUGFydHNQYXJ0LFxuICBTZXF1ZW5jZU9mUGFydHNQYXJ0LFxuICBDaG9pY2VPZlBhcnRzUGFydFxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBCTkZQYXJzZXIgfSBmcm9tIFwiLi9ibmYvcGFyc2VyXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEJhc2ljUGFyc2VyIH0gZnJvbSBcIi4vYmFzaWMvcGFyc2VyXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENvbW1vblBhcnNlciB9IGZyb20gXCIuL2NvbW1vbi9wYXJzZXJcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBSdWxlIH0gZnJvbSBcIi4vcnVsZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBQYXJ0cyB9IGZyb20gXCIuL3BhcnRzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHBhcnRUeXBlcyB9IGZyb20gXCIuL3BhcnRUeXBlc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBEZWZpbml0aW9uIH0gZnJvbSBcIi4vZGVmaW5pdGlvblwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBUZXJtaW5hbE5vZGUgfSBmcm9tIFwiLi9ub2RlL3Rlcm1pbmFsXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIE5vblRlcm1pbmFsTm9kZSB9IGZyb20gXCIuL25vZGUvbm9uVGVybWluYWxcIjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgYm5mID0gYFxuXG5cblxuICAgIHN0eWxlc2hlZXQgICAgICAgICAgICAgICAgIDo6PSAoIG1lZGlhIHwgcnVsZVNldCB8IGRlY2xhcmF0aW9uIHwgZXJyb3IgKSsgO1xuXG5cblxuXG5cbiAgICBtZWRpYSAgICAgICAgICAgICAgICAgICAgICA6Oj0gXCJAbWVkaWFcIiBtZWRpYVF1ZXJpZXMgXCJ7XCIgKCBydWxlU2V0IHwgZGVjbGFyYXRpb24gKSogXCJ9XCIgO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgbWVkaWFRdWVyaWVzICAgICAgICAgICAgICAgOjo9ICBtZWRpYVF1ZXJ5ICggXCIsXCIgbWVkaWFRdWVyeSApKiA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICBtZWRpYVF1ZXJ5ICAgICAgICAgICAgICAgICA6Oj0gIFwibm90XCI/ICggXCJvbmx5XCI/IG1lZGlhVHlwZSBcImFuZFwiICk/IG1lZGlhRXhwcmVzc2lvbiAoIFwiYW5kXCIgbWVkaWFFeHByZXNzaW9uICkqIDtcblxuXG4gICAgbWVkaWFUeXBlICAgICAgICAgICAgICAgICAgOjo9ICBcImFsbFwiIHwgXCJwcmludFwiIHwgXCJzY3JlZW5cIiB8IFwic3BlZWNoXCIgO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgbWVkaWFFeHByZXNzaW9uICAgICAgICAgICAgOjo9ICBcIihcIiBbaWRlbnRpZmllcl0gKCBcIjpcIiBleHByZXNzaW9uICk/IFwiKVwiIDtcblxuXG5cblxuXG4gICAgcnVsZVNldCAgICAgICAgICAgICAgICAgICAgOjo9ICBzZWxlY3RvcnMgXCJ7XCIgZGVjbGFyYXRpb24qIFwifVwiIDtcbiAgICBcbiAgICBcbiAgICBzZWxlY3RvcnMgICAgICAgICAgICAgICAgICA6Oj0gIHNlbGVjdG9yICggXCIsXCIgc2VsZWN0b3IgKSogO1xuXG5cbiAgICBzZWxlY3RvciAgICAgICAgICAgICAgICAgICA6Oj0gICggY2xhc3MgfCBwc2V1ZG9DbGFzcyB8IHBzZXVkb0VsZW1lbnQgfCBhdHRyaWJ1dGUgKSsgO1xuXG5cblxuXG5cbiAgICBkZWNsYXJhdGlvbiAgICAgICAgICAgICAgICA6Oj0gIHByb3BlcnR5IFwiOlwiIGV4cHJlc3Npb24gKCBcIixcIiBleHByZXNzaW9uICkqIHByaW9yaXR5PyBcIjtcIiA7XG5cblxuICAgIGNsYXNzICAgICAgICAgICAgICAgICAgICAgIDo6PSAgXCIuXCI8Tk9fV0hJVEVTUEFDRT5baWRlbnRpZmllcl0gcGFyZW50aGVzaXNlZFNlbGVjdG9yPyA7XG5cblxuICAgIHBzZXVkb0NsYXNzICAgICAgICAgICAgICAgIDo6PSAgXCI6XCI8Tk9fV0hJVEVTUEFDRT5baWRlbnRpZmllcl0gcGFyZW50aGVzaXNlZFNlbGVjdG9yPyA7XG5cblxuICAgIHBzZXVkb0VsZW1lbnQgICAgICAgICAgICAgIDo6PSAgXCI6OlwiPE5PX1dISVRFU1BBQ0U+W2lkZW50aWZpZXJdIHBhcmVudGhlc2lzZWRTZWxlY3Rvcj8gO1xuXG5cbiAgICBwYXJlbnRoZXNpc2VkU2VsZWN0b3IgICAgICA6Oj0gIDxOT19XSElURVNQQUNFPlwiKFwiIHNlbGVjdG9yIDxOT19XSElURVNQQUNFPlwiKVwiIDtcblxuXG4gICAgYXR0cmlidXRlICAgICAgICAgICAgICAgICAgOjo9ICBcIltcIlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRlbnRpZmllcl1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggXCI9XCIgfCBcIn49XCIgfCBcInw9XCIgKVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggW2lkZW50aWZpZXJdIHwgW3N0cmluZy1saXRlcmFsXSApXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk/XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXVwiXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDtcblxuXG4gICAgcHJvcGVydHkgICAgICAgICAgICAgICAgICAgOjo9ICBbaWRlbnRpZmllcl0gO1xuXG5cbiAgICBleHByZXNzaW9uICAgICAgICAgICAgICAgICA6Oj0gIHRlcm0gKCBcIixcIj8gdGVybSApKiA7XG5cblxuICAgIHByaW9yaXR5ICAgICAgICAgICAgICAgICAgIDo6PSAgXCIhaW1wb3J0YW50XCIgO1xuXG5cblxuXG5cbiAgICB0ZXJtICAgICAgICAgICAgICAgICAgICAgICA6Oj0gIFt1bmFyeS1vcGVyYXRvcl0/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIFtwZXJjZW50YWdlXSB8IFtmcmVxdWVuY3ldIHwgW2ZyYWN0aW9uXSB8IFtsZW5ndGhdIHwgW2FuZ2xlXSB8IFtyZW1zXSB8IFtlbXNdIHwgW3RpbWVdIHwgW251bWJlcl0gKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0cmluZy1saXRlcmFsXStcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkZW50aWZpZXJdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb2xvdXJdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgO1xuXG5cbiAgICB1cmkgICAgICAgICAgICAgICAgICAgICAgICA6Oj0gIFwidXJsXCI8Tk9fV0hJVEVTUEFDRT5cIihcIiBbc3RyaW5nLWxpdGVyYWxdIFwiKVwiIDtcblxuXG4gICAgZnVuY3Rpb24gICAgICAgICAgICAgICAgICAgOjo9ICBbaWRlbnRpZmllcl08Tk9fV0hJVEVTUEFDRT5cIihcIiBleHByZXNzaW9uIFwiKVwiIDtcblxuXG5cblxuXG4gICAgZXJyb3IgICAgICAgICAgICAgICAgICAgICAgOjo9ICAuIDtcblxuXG5cbmA7XG5cbmV4cG9ydCBkZWZhdWx0IGJuZjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgQ29tbW9uUGFyc2VyIH0gZnJvbSBcIm9jY2FtLXBhcnNlcnNcIjtcblxuaW1wb3J0IGJuZiBmcm9tIFwiLi9ibmZcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ1NTUGFyc2VyIGV4dGVuZHMgQ29tbW9uUGFyc2VyIHtcbiAgc3RhdGljIGJuZiA9IGJuZjtcblxuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7IHJldHVybiBDb21tb25QYXJzZXIuZnJvbU5vdGhpbmcoQ1NTUGFyc2VyKTsgfVxuXG4gIHN0YXRpYyBmcm9tQk5GKGJuZikgeyByZXR1cm4gQ29tbW9uUGFyc2VyLmZyb21CTkYoQ1NTUGFyc2VyLCBibmYpOyB9XG5cbiAgc3RhdGljIGZyb21SdWxlcyhydWxlcykgeyByZXR1cm4gQ29tbW9uUGFyc2VyLmZyb21SdWxlcyhDU1NQYXJzZXIsIHJ1bGVzKTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuZXhwb3J0IGNvbnN0IHsgY2xlYXIsIHB1c2gsIHNlY29uZCwgdGhpcmQsIGZvdXJ0aCwgZmlmdGggfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5leHBvcnQgZnVuY3Rpb24gdHJpbShhcnJheSwgc3RhcnRJbmRleCwgZW5kSW5kZXgpIHtcbiAgbGV0IHN0YXJ0LFxuICAgICAgZGVsZXRlQ291bnQ7XG5cbiAgaWYgKGVuZEluZGV4ICE9PSBJbmZpbml0eSkge1xuICAgIHN0YXJ0ID0gZW5kSW5kZXggKyAxO1xuXG4gICAgYXJyYXkuc3BsaWNlKHN0YXJ0KTtcbiAgfVxuXG4gIHN0YXJ0ID0gMDtcbiAgZGVsZXRlQ291bnQgPSBzdGFydEluZGV4O1xuXG4gIGFycmF5LnNwbGljZShzdGFydCwgZGVsZXRlQ291bnQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5jbHVkZXMoYXJyYXksIC4uLmVsZW1lbnRzKSB7XG4gIHJldHVybiBlbGVtZW50cy5zb21lKChlbGVtZW50KSA9PiBhcnJheS5pbmNsdWRlcyhlbGVtZW50KSk7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBFTVBUWV9TVFJJTkcgPSBcIlwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBjaGFyYWN0ZXJzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5pbXBvcnQgeyBjbGVhciwgdHJpbSwgc2Vjb25kLCB0aGlyZCwgZm91cnRoIH0gZnJvbSBcIi4vdXRpbGl0aWVzL2FycmF5XCI7XG5cbmNvbnN0IHsgRVhDTEFNQVRJT05fTUFSS19DSEFSQUNURVIgfSA9IGNoYXJhY3RlcnM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNwcmVhZCB7XG4gIGNvbnN0cnVjdG9yKHN0YXJ0SW5kZXgsIGVuZEluZGV4LCB1bmlxdWUpIHtcbiAgICB0aGlzLnN0YXJ0SW5kZXggPSBzdGFydEluZGV4O1xuICAgIHRoaXMuZW5kSW5kZXggPSBlbmRJbmRleDtcbiAgICB0aGlzLnVuaXF1ZSA9IHVuaXF1ZTtcbiAgfVxuXG4gIGFkanVzdE5vZGVzKG5vZGVzKSB7XG4gICAgaWYgKHRoaXMudW5pcXVlKSB7XG4gICAgICBjb25zdCBub2Rlc0xlbmd0aCA9IG5vZGVzLmxlbmd0aDtcblxuICAgICAgaWYgKG5vZGVzTGVuZ3RoID4gMSkge1xuICAgICAgICBjbGVhcihub2Rlcyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRyaW0obm9kZXMsIHRoaXMuc3RhcnRJbmRleCwgdGhpcy5lbmRJbmRleCk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGZyb21TcHJlYWRFeHByZXNzaW9uKHNwcmVhZEV4cHJlc3Npb24pIHtcbiAgICBsZXQgc3RhcnRJbmRleCA9IDAsXG4gICAgICAgIGVuZEluZGV4ID0gSW5maW5pdHksXG4gICAgICAgIHVuaXF1ZSA9IGZhbHNlO1xuXG4gICAgaWYgKHNwcmVhZEV4cHJlc3Npb24gIT09IG51bGwpIHtcbiAgICAgIGlmIChzcHJlYWRFeHByZXNzaW9uID09PSBFWENMQU1BVElPTl9NQVJLX0NIQVJBQ1RFUikge1xuICAgICAgICB1bmlxdWUgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcmVnRXhwID0gL1xcWyhcXGQrKT8oXFwuXFwuXFwuKT8oXFxkKyk/XS8sXG4gICAgICAgICAgICAgIG1hdGNoZXMgPSBzcHJlYWRFeHByZXNzaW9uLm1hdGNoKHJlZ0V4cCksXG4gICAgICAgICAgICAgIHNlY29uZE1hdGNoID0gc2Vjb25kKG1hdGNoZXMpLFxuICAgICAgICAgICAgICB0aGlyZE1hdGNoID0gdGhpcmQobWF0Y2hlcyksXG4gICAgICAgICAgICAgIGZvdXJ0aE1hdGNoID0gZm91cnRoKG1hdGNoZXMpO1xuXG4gICAgICAgIGlmIChzZWNvbmRNYXRjaCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgc3RhcnRJbmRleCA9IHBhcnNlSW50KHNlY29uZE1hdGNoKTtcblxuICAgICAgICAgIGlmICh0aGlyZE1hdGNoID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGVuZEluZGV4ID0gc3RhcnRJbmRleDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZm91cnRoTWF0Y2ggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGVuZEluZGV4ID0gcGFyc2VJbnQoZm91cnRoTWF0Y2gpO1xuXG4gICAgICAgICAgaWYgKHRoaXJkTWF0Y2ggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgc3RhcnRJbmRleCA9IGVuZEluZGV4O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHNwcmVhZCA9IG5ldyBTcHJlYWQoc3RhcnRJbmRleCwgZW5kSW5kZXgsIHVuaXF1ZSk7XG5cbiAgICByZXR1cm4gc3ByZWFkO1xuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgY2hhcmFjdGVycyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IFNwcmVhZCBmcm9tIFwiLi9zcHJlYWRcIjtcblxuaW1wb3J0IHsgaW5jbHVkZXMsIHB1c2gsIGNsZWFyLCBzZWNvbmQsIHRoaXJkLCBmb3VydGgsIGZpZnRoIH0gZnJvbSBcIi4vdXRpbGl0aWVzL2FycmF5XCI7XG5cbmNvbnN0IHsgV0lMRENBUkRfQ0hBUkFDVEVSIH0gPSBjaGFyYWN0ZXJzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBRdWVyeSB7XG4gIGNvbnN0cnVjdG9yKHJ1bGVOYW1lcywgdHlwZXMsIHNwcmVhZCwgc3ViUXVlcnksICBtYXhpbXVtRGVwdGgsIGluZmluaXRlRGVzY2VudCwgaW50ZXJtZWRpYXRlTm9kZXMpIHtcbiAgICB0aGlzLnJ1bGVOYW1lcyA9IHJ1bGVOYW1lcztcbiAgICB0aGlzLnR5cGVzID0gdHlwZXM7XG4gICAgdGhpcy5zcHJlYWQgPSBzcHJlYWQ7XG4gICAgdGhpcy5zdWJRdWVyeSA9IHN1YlF1ZXJ5O1xuICAgIHRoaXMubWF4aW11bURlcHRoID0gbWF4aW11bURlcHRoO1xuICAgIHRoaXMuaW5maW5pdGVEZXNjZW50ID0gaW5maW5pdGVEZXNjZW50O1xuICAgIHRoaXMuaW50ZXJtZWRpYXRlTm9kZXMgPSBpbnRlcm1lZGlhdGVOb2RlcztcbiAgfVxuXG4gIGV4ZWN1dGUobm9kZSwgZGVwdGggPSAwLCBtYXhpbXVtRGVwdGggPSB0aGlzLm1heGltdW1EZXB0aCkge1xuICAgIGNvbnN0IG5vZGVzID0gW107XG5cbiAgICB0aGlzLmNsZWFyKCk7XG5cbiAgICB0aGlzLmZpbmQobm9kZSwgZGVwdGgsIG1heGltdW1EZXB0aCk7XG5cbiAgICB0aGlzLmFwcGx5KG5vZGVzLCBkZXB0aCwgbWF4aW11bURlcHRoKTtcblxuICAgIHJldHVybiBub2RlcztcbiAgfVxuXG4gIGNsZWFyKCkge1xuICAgIGNsZWFyKHRoaXMuaW50ZXJtZWRpYXRlTm9kZXMpO1xuICB9XG5cbiAgZmluZChub2RlLCBkZXB0aCwgbWF4aW11bURlcHRoKSB7XG4gICAgaWYgKGRlcHRoID4gbWF4aW11bURlcHRoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgbm9kZVRlcm1pbmFsTm9kZSA9IG5vZGUuaXNUZXJtaW5hbE5vZGUoKSxcbiAgICAgICAgICBub2RlTm9uVGVybWluYWxOb2RlID0gIW5vZGVUZXJtaW5hbE5vZGU7XG5cbiAgICBsZXQgZm91bmQ7XG5cbiAgICBpZiAobm9kZVRlcm1pbmFsTm9kZSkge1xuICAgICAgY29uc3QgdGVybWluYWxOb2RlID0gbm9kZSwgIC8vL1xuICAgICAgICAgICAgdHlwZSA9IHRlcm1pbmFsTm9kZS5nZXRUeXBlKCk7XG5cbiAgICAgIGZvdW5kID0gaW5jbHVkZXModGhpcy50eXBlcywgdHlwZSwgV0lMRENBUkRfQ0hBUkFDVEVSKTtcbiAgICB9XG5cbiAgICBpZiAobm9kZU5vblRlcm1pbmFsTm9kZSkge1xuICAgICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gbm9kZSwgLy8vXG4gICAgICAgICAgICBydWxlTmFtZSA9IG5vblRlcm1pbmFsTm9kZS5nZXRSdWxlTmFtZSgpO1xuXG4gICAgICBmb3VuZCA9IGluY2x1ZGVzKHRoaXMucnVsZU5hbWVzLCBydWxlTmFtZSwgV0lMRENBUkRfQ0hBUkFDVEVSKTtcbiAgICB9XG5cbiAgICBpZiAoZm91bmQpIHtcbiAgICAgIGNvbnN0IGludGVybWVkaWF0ZU5vZGUgPSBub2RlOyAvLy9cblxuICAgICAgdGhpcy5pbnRlcm1lZGlhdGVOb2Rlcy5wdXNoKGludGVybWVkaWF0ZU5vZGUpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmluZmluaXRlRGVzY2VudCkge1xuICAgICAgaWYgKG5vZGVOb25UZXJtaW5hbE5vZGUpIHtcbiAgICAgICAgZGVwdGgrKztcblxuICAgICAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBub2RlLCAvLy9cbiAgICAgICAgICAgICAgY2hpbGROb2RlcyA9IG5vblRlcm1pbmFsTm9kZS5nZXRDaGlsZE5vZGVzKCk7XG5cbiAgICAgICAgY2hpbGROb2Rlcy5mb3JFYWNoKChjaGlsZE5vZGUpID0+IHRoaXMuZmluZChjaGlsZE5vZGUsIGRlcHRoLCBtYXhpbXVtRGVwdGgpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhcHBseShub2RlcywgZGVwdGgsIG1heGltdW1EZXB0aCkge1xuICAgIHRoaXMuc3ByZWFkLmFkanVzdE5vZGVzKHRoaXMuaW50ZXJtZWRpYXRlTm9kZXMpO1xuXG4gICAgaWYgKHRoaXMuc3ViUXVlcnkgPT09IG51bGwpIHtcbiAgICAgIHB1c2gobm9kZXMsIHRoaXMuaW50ZXJtZWRpYXRlTm9kZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmludGVybWVkaWF0ZU5vZGVzLmZvckVhY2goKGludGVybWVkaWF0ZU5vZGUpID0+IHtcbiAgICAgICAgY29uc3QgaW50ZXJtZWRpYXRlTm9kZU5vblRlcm1pbmFsTm9kZSA9IGludGVybWVkaWF0ZU5vZGUuaXNOb25UZXJtaW5hbE5vZGUoKTtcblxuICAgICAgICBpZiAoaW50ZXJtZWRpYXRlTm9kZU5vblRlcm1pbmFsTm9kZSkge1xuICAgICAgICAgIGRlcHRoKys7XG5cbiAgICAgICAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBpbnRlcm1lZGlhdGVOb2RlLCAvLy9cbiAgICAgICAgICAgICAgICBjaGlsZE5vZGVzID0gbm9uVGVybWluYWxOb2RlLmdldENoaWxkTm9kZXMoKTtcblxuICAgICAgICAgIHRoaXMuc3ViUXVlcnkuY2xlYXIoKTtcblxuICAgICAgICAgIGNoaWxkTm9kZXMuZm9yRWFjaCgoY2hpbGROb2RlKSA9PiB0aGlzLnN1YlF1ZXJ5LmZpbmQoY2hpbGROb2RlLCBkZXB0aCwgbWF4aW11bURlcHRoKSk7XG5cbiAgICAgICAgICB0aGlzLnN1YlF1ZXJ5LmFwcGx5KG5vZGVzLCBkZXB0aCwgbWF4aW11bURlcHRoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGZyb21TdWJFeHByZXNzaW9uQW5kVHlwZXMoc3ViRXhwcmVzc2lvbiwgdHlwZXMpIHtcbiAgICBsZXQgcXVlcnkgPSBudWxsO1xuXG4gICAgaWYgKHN1YkV4cHJlc3Npb24gIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHR5cGVzTGVuZ3RoID0gdHlwZXMubGVuZ3RoO1xuXG4gICAgICBpZiAodHlwZXNMZW5ndGggPT09IDApIHtcbiAgICAgICAgY29uc3QgZXhwcmVzc2lvbiA9IHN1YkV4cHJlc3Npb247ICAvLy9cblxuICAgICAgICBxdWVyeSA9IFF1ZXJ5LmZyb21FeHByZXNzaW9uKGV4cHJlc3Npb24pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBxdWVyeTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tRXhwcmVzc2lvbihleHByZXNzaW9uLCBtYXhpbXVtRGVwdGggPSBJbmZpbml0eSkge1xuICAgIGNvbnN0IHJlZ0V4cCA9IC9eXFwvKFxcLyk/KFteL1xcWyFdKykoXFxbW15cXF1dK118ISk/KFxcLy4qKT8kLyxcbiAgICAgICAgICBtYXRjaGVzID0gZXhwcmVzc2lvbi5tYXRjaChyZWdFeHApLFxuICAgICAgICAgIHNlY29uZE1hdGNoID0gc2Vjb25kKG1hdGNoZXMpLFxuICAgICAgICAgIHRoaXJkTWF0Y2ggPSB0aGlyZChtYXRjaGVzKSxcbiAgICAgICAgICBmb3VydGhNYXRjaCA9IGZvdXJ0aChtYXRjaGVzKSxcbiAgICAgICAgICBmaWZ0aE1hdGNoID0gZmlmdGgobWF0Y2hlcyksXG4gICAgICAgICAgc2VsZWN0b3JzID0gdGhpcmRNYXRjaC5zcGxpdChcInxcIiksXG4gICAgICAgICAgc3ViRXhwcmVzc2lvbiA9IGZpZnRoTWF0Y2ggfHwgbnVsbCxcbiAgICAgICAgICBzcHJlYWRFeHByZXNzaW9uID0gZm91cnRoTWF0Y2ggfHwgbnVsbCxcbiAgICAgICAgICB0eXBlcyA9IHR5cGVzRnJvbVNlbGVjdG9ycyhzZWxlY3RvcnMpLFxuICAgICAgICAgIHJ1bGVOYW1lcyA9IHJ1bGVOYW1lc0Zyb21TZWxlY3RvcnNBbmRUeXBlcyhzZWxlY3RvcnMsIHR5cGVzKSxcbiAgICAgICAgICBzcHJlYWQgPSBTcHJlYWQuZnJvbVNwcmVhZEV4cHJlc3Npb24oc3ByZWFkRXhwcmVzc2lvbiksXG4gICAgICAgICAgc3ViUXVlcnkgPSBRdWVyeS5mcm9tU3ViRXhwcmVzc2lvbkFuZFR5cGVzKHN1YkV4cHJlc3Npb24sIHR5cGVzKSxcbiAgICAgICAgICBpbmZpbml0ZURlc2NlbnQgPSAoc2Vjb25kTWF0Y2ggPT09IFwiL1wiKSwgIC8vL1xuICAgICAgICAgIGludGVybWVkaWF0ZU5vZGVzID0gW10sXG4gICAgICAgICAgcXVlcnkgPSBuZXcgUXVlcnkocnVsZU5hbWVzLCB0eXBlcywgc3ByZWFkLCBzdWJRdWVyeSwgbWF4aW11bURlcHRoLCBpbmZpbml0ZURlc2NlbnQsIGludGVybWVkaWF0ZU5vZGVzKTtcbiAgICBcbiAgICByZXR1cm4gcXVlcnk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdHlwZXNGcm9tU2VsZWN0b3JzKHNlbGVjdG9ycykge1xuICBjb25zdCB0eXBlcyA9IFtdO1xuXG4gIHNlbGVjdG9ycy5mb3JFYWNoKChzZWxlY3RvcikgPT4ge1xuICAgIGNvbnN0IHNlbGVjdG9yVHlwZVNlbGVjdG9yID0gaXNTZWxlY3RvclR5cGVTZWxlY3RvcihzZWxlY3Rvcik7XG5cbiAgICBpZiAoc2VsZWN0b3JUeXBlU2VsZWN0b3IpIHtcbiAgICAgIGNvbnN0IHR5cGUgPSBzZWxlY3Rvci5zdWJzdHJpbmcoMSk7XG5cbiAgICAgIHR5cGVzLnB1c2godHlwZSk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gdHlwZXM7XG59XG5cbmZ1bmN0aW9uIGlzU2VsZWN0b3JUeXBlU2VsZWN0b3Ioc2VsZWN0b3IpIHsgcmV0dXJuIC9eQC8udGVzdChzZWxlY3Rvcik7IH1cblxuZnVuY3Rpb24gcnVsZU5hbWVzRnJvbVNlbGVjdG9ycyhzZWxlY3RvcnMpIHsgcmV0dXJuIHNlbGVjdG9ycy5maWx0ZXIoaXNTZWxlY3RvclJ1bGVOYW1lU2VsZWN0b3IpOyB9XG5cbmZ1bmN0aW9uIGlzU2VsZWN0b3JSdWxlTmFtZVNlbGVjdG9yKHNlbGVjdG9yKSB7IHJldHVybiAvXlteQF0vLnRlc3Qoc2VsZWN0b3IpOyB9XG5cbmZ1bmN0aW9uIHJ1bGVOYW1lc0Zyb21TZWxlY3RvcnNBbmRUeXBlcyhzZWxlY3RvcnMsIHR5cGVzKSB7XG4gIGxldCBydWxlTmFtZXMgPSBbXTtcblxuICBjb25zdCB0eXBlc0xlbmd0aCA9IHR5cGVzLmxlbmd0aDtcblxuICBpZiAodHlwZXNMZW5ndGggPT09IDApIHtcbiAgICBydWxlTmFtZXMgPSBydWxlTmFtZXNGcm9tU2VsZWN0b3JzKHNlbGVjdG9ycyk7XG4gIH1cblxuICByZXR1cm4gcnVsZU5hbWVzO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUXVlcnkgZnJvbSBcIi4uL3F1ZXJ5XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBxdWVyeUJ5Q2xhc3Mobm9kZSwgQ2xhc3MsIG5vZGVzID0gW10pIHtcbiAgaWYgKG5vZGUgaW5zdGFuY2VvZiBDbGFzcykge1xuICAgIG5vZGVzLnB1c2gobm9kZSk7XG4gIH1cblxuICBjb25zdCBub2RlTm9uVGVybWluYWxOb2RlID0gbm9kZS5pc05vblRlcm1pbmFsTm9kZSgpO1xuXG4gIGlmIChub2RlTm9uVGVybWluYWxOb2RlKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IG5vZGUuZ2V0Q2hpbGROb2RlcygpO1xuXG4gICAgY2hpbGROb2Rlcy5mb3JFYWNoKChjaGlsZE5vZGUpID0+IHF1ZXJ5QnlDbGFzcyhjaGlsZE5vZGUsIENsYXNzLCBub2RlcykpO1xuICB9XG5cbiAgcmV0dXJuIG5vZGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcXVlcnlCeUNsYXNzZXMobm9kZSwgQ2xhc3Nlcywgbm9kZXMgPSBbXSkge1xuICBDbGFzc2VzLnNvbWUoKENsYXNzKSA9PiB7XG4gICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBDbGFzcykge1xuICAgICAgbm9kZXMucHVzaChub2RlKTtcblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBub2RlTm9uVGVybWluYWxOb2RlID0gbm9kZS5pc05vblRlcm1pbmFsTm9kZSgpO1xuXG4gIGlmIChub2RlTm9uVGVybWluYWxOb2RlKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IG5vZGUuZ2V0Q2hpbGROb2RlcygpO1xuXG4gICAgY2hpbGROb2Rlcy5mb3JFYWNoKChjaGlsZE5vZGUpID0+IHF1ZXJ5QnlDbGFzc2VzKGNoaWxkTm9kZSwgQ2xhc3Nlcywgbm9kZXMpKTtcbiAgfVxuXG4gIHJldHVybiBub2Rlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHF1ZXJ5QnlFeHByZXNzaW9uKG5vZGUsIGV4cHJlc3Npb24sIG1heGltdW1EZXB0aCkge1xuICBjb25zdCBxdWVyeSA9IFF1ZXJ5LmZyb21FeHByZXNzaW9uKGV4cHJlc3Npb24sIG1heGltdW1EZXB0aCksXG4gICAgICAgIG5vZGVzID0gcXVlcnkuZXhlY3V0ZShub2RlKTtcblxuICByZXR1cm4gbm9kZXM7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgcXVlcnlCeUNsYXNzLFxuICBxdWVyeUJ5Q2xhc3NlcyxcbiAgcXVlcnlCeUV4cHJlc3Npb25cbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgUXVlcnkgfSBmcm9tIFwiLi9xdWVyeVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBxdWVyeVV0aWxpdGllcyB9IGZyb20gXCIuL3V0aWxpdGllcy9xdWVyeVwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgSEVBRCA9IFwiaGVhZFwiO1xuZXhwb3J0IGNvbnN0IFNUWUxFID0gXCJzdHlsZVwiO1xuZXhwb3J0IGNvbnN0IENIQVJBQ1RFUlMgPSBcImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpcIjtcbmV4cG9ydCBjb25zdCBUV09fU1BBQ0VTID0gXCIgIFwiO1xuZXhwb3J0IGNvbnN0IEZPVVJfU1BBQ0VTID0gXCIgICAgXCI7XG5leHBvcnQgY29uc3QgRU1QVFlfU1RSSU5HID0gXCJcIjtcbmV4cG9ydCBjb25zdCBDTEFTU19OQU1FX0xFTkdUSCA9IDY7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmNvbnN0IHsgZmlyc3QgfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5leHBvcnQgZnVuY3Rpb24gY29udGVudEZyb21RdWVyeU5vZGVBbmRUb2tlbnMocXVlcnksIG5vZGUsIHRva2Vucykge1xuICBjb25zdCBub2RlcyA9IHF1ZXJ5LmV4ZWN1dGUobm9kZSksXG4gICAgICAgIGZpcnN0Tm9kZSA9IGZpcnN0KG5vZGVzKTtcblxuICBub2RlID0gZmlyc3ROb2RlOyAvLy9cblxuICBjb25zdCBjb250ZW50ID0gY29udGVudEZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2Vucyk7XG5cbiAgcmV0dXJuIGNvbnRlbnQ7XG59XG5cbmZ1bmN0aW9uIGNvbnRlbnRGcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpIHtcbiAgY29uc3QgZmlyc3RTaWduaWZpY2FudFRva2VuID0gbm9kZS5nZXRGaXJzdFNpZ25pZmljYW50VG9rZW4oKSxcbiAgICAgICAgbGFzdFNpZ25pZmljYW50VG9rZW4gPSBub2RlLmdldExhc3RTaWduaWZpY2FudFRva2VuKCksXG4gICAgICAgIGZpcnN0VG9rZW4gPSBmaXJzdFNpZ25pZmljYW50VG9rZW4sIC8vL1xuICAgICAgICBsYXN0VG9rZW4gPSBsYXN0U2lnbmlmaWNhbnRUb2tlbiwgLy8vXG4gICAgICAgIGZpcnN0VG9rZW5JbmRleCA9IHRva2Vucy5pbmRleE9mKGZpcnN0VG9rZW4pLFxuICAgICAgICBsYXN0VG9rZW5JbmRleCA9IHRva2Vucy5pbmRleE9mKGxhc3RUb2tlbik7XG5cbiAgbGV0IGNvbnRlbnQgPSBFTVBUWV9TVFJJTkc7XG5cbiAgZm9yIChsZXQgaW5kZXggPSBmaXJzdFRva2VuSW5kZXg7IGluZGV4IDw9IGxhc3RUb2tlbkluZGV4OyBpbmRleCsrKSB7XG4gICAgY29uc3QgdG9rZW4gPSB0b2tlbnNbaW5kZXhdLFxuICAgICAgICAgIHRva2VuQ29udGVudCA9IHRva2VuLmdldENvbnRlbnQoKTtcblxuICAgIGNvbnRlbnQgKz0gdG9rZW5Db250ZW50O1xuICB9XG5cbiAgcmV0dXJuIGNvbnRlbnQ7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IFF1ZXJ5IH0gZnJvbSBcIm9jY2FtLWRvbVwiO1xuXG5pbXBvcnQgeyBjb250ZW50RnJvbVF1ZXJ5Tm9kZUFuZFRva2VucyB9IGZyb20gXCIuLi91dGlsaXRpZXMvY29udGVudFwiO1xuXG5jb25zdCBwcm9wZXJ0eVF1ZXJ5ID0gUXVlcnkuZnJvbUV4cHJlc3Npb24oXCIvKi9wcm9wZXJ0eVwiKSxcbiAgICAgIGV4cHJlc3Npb25RdWVyeSA9IFF1ZXJ5LmZyb21FeHByZXNzaW9uKFwiLyovZXhwcmVzc2lvblwiKTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGVjbGFyYXRpb24ge1xuICBjb25zdHJ1Y3Rvcihwcm9wZXJ0eSwgZXhwcmVzc2lvbikge1xuICAgIHRoaXMucHJvcGVydHkgPSBwcm9wZXJ0eTtcbiAgICB0aGlzLmV4cHJlc3Npb24gPSBleHByZXNzaW9uO1xuICB9XG5cbiAgZ2V0UHJvcGVydHkoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydHk7XG4gIH1cblxuICBnZXRFeHByZXNzaW9uKCkge1xuICAgIHJldHVybiB0aGlzLmV4cHJlc3Npb247XG4gIH1cblxuICBjaGVja01hdGNoZXMoZGVjbGFyYXRpb25zKSB7XG4gICAgY29uc3QgbWF0Y2hlcyA9IGRlY2xhcmF0aW9ucy5zb21lKChkZWNsYXJhdGlvbikgPT4ge1xuICAgICAgY29uc3QgcHJvcGVydHkgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eSgpLFxuICAgICAgICAgICAgcHJvcGVydGllc01hdGNoID0gKHByb3BlcnR5ID09PSB0aGlzLnByb3BlcnR5KTtcblxuICAgICAgaWYgKHByb3BlcnRpZXNNYXRjaCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBtYXRjaGVzO1xuICB9XG5cbiAgYXNDU1MoaW5kZW50LCBsYXN0KSB7XG4gICAgY29uc3QgY3NzID0gbGFzdCA/XG4gICAgICAgICAgICAgICAgYCR7aW5kZW50fSR7dGhpcy5wcm9wZXJ0eX06ICR7dGhpcy5leHByZXNzaW9ufTtgIDpcbiAgICAgICAgICAgICAgICAgIGAke2luZGVudH0ke3RoaXMucHJvcGVydHl9OiAke3RoaXMuZXhwcmVzc2lvbn07XFxuYDtcblxuICAgIHJldHVybiBjc3M7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSB7XG4gICAgY29uc3QgcHJvcGVydHlDb250ZW50ID0gY29udGVudEZyb21RdWVyeU5vZGVBbmRUb2tlbnMocHJvcGVydHlRdWVyeSwgbm9kZSwgdG9rZW5zKSxcbiAgICAgICAgICBleHByZXNzaW9uQ29udGVudCA9IGNvbnRlbnRGcm9tUXVlcnlOb2RlQW5kVG9rZW5zKGV4cHJlc3Npb25RdWVyeSwgbm9kZSwgdG9rZW5zKSxcbiAgICAgICAgICBwcm9wZXJ0eSA9IHByb3BlcnR5Q29udGVudCwgLy8vXG4gICAgICAgICAgZXhwcmVzc2lvbiA9IGV4cHJlc3Npb25Db250ZW50LCAvLy9cbiAgICAgICAgICBkZWNsYXJhdGlvbiA9IG5ldyBEZWNsYXJhdGlvbihwcm9wZXJ0eSwgZXhwcmVzc2lvbik7XG5cbiAgICByZXR1cm4gZGVjbGFyYXRpb247XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgUXVlcnkgfSBmcm9tIFwib2NjYW0tZG9tXCI7XG5cbmltcG9ydCBEZWNsYXJhdGlvbiBmcm9tIFwiLi9kZWNsYXJhdGlvblwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmNvbnN0IGRlY2xhcmF0aW9uUXVlcnkgPSBRdWVyeS5mcm9tRXhwcmVzc2lvbihcIi8qL2RlY2xhcmF0aW9uXCIpO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEZWNsYXJhdGlvbnMge1xuICBjb25zdHJ1Y3RvcihhcnJheSkge1xuICAgIHRoaXMuYXJyYXkgPSBhcnJheTtcbiAgfVxuXG4gIGZvcndhcmRzRm9yRWFjaChjYWxsYmFjaykge1xuICAgIGNvbnN0IGxlbmd0aCA9IHRoaXMuYXJyYXkubGVuZ3RoLFxuICAgICAgICAgIGZpcnN0SW5kZXggPSAwLFxuICAgICAgICAgIGxhc3RJbmRleCA9IGxlbmd0aCAtIDE7XG5cbiAgICBmb3IgKGxldCBpbmRleCA9IGZpcnN0SW5kZXg7IGluZGV4IDw9IGxhc3RJbmRleDsgaW5kZXgrKykge1xuICAgICAgY29uc3QgZGVjbGFyYXRpb24gPSB0aGlzLmFycmF5W2luZGV4XTtcblxuICAgICAgY2FsbGJhY2soZGVjbGFyYXRpb24sIGluZGV4KTtcbiAgICB9XG4gIH1cblxuICBiYWNrd2FyZHNGb3JFYWNoKGNhbGxiYWNrKSB7XG4gICAgY29uc3QgbGVuZ3RoID0gdGhpcy5hcnJheS5sZW5ndGgsXG4gICAgICAgICAgZmlyc3RJbmRleCA9IDAsXG4gICAgICAgICAgbGFzdEluZGV4ID0gbGVuZ3RoIC0gMTtcblxuICAgIGZvciAobGV0IGluZGV4ID0gbGFzdEluZGV4OyBpbmRleCA+PSBmaXJzdEluZGV4OyBpbmRleC0tKSB7XG4gICAgICBjb25zdCBkZWNsYXJhdGlvbiA9IHRoaXMuYXJyYXlbaW5kZXhdO1xuXG4gICAgICBjYWxsYmFjayhkZWNsYXJhdGlvbiwgaW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gIHVuc2hpZnQoZGVjbGFyYXRpb25zKSB7XG4gICAgZGVjbGFyYXRpb25zLmJhY2t3YXJkc0ZvckVhY2goKGRlY2xhcmF0aW9uKSA9PiB7XG4gICAgICBjb25zdCBtYXRjaGVzID0gZGVjbGFyYXRpb24uY2hlY2tNYXRjaGVzKHRoaXMuYXJyYXkpOyAvLy9cblxuICAgICAgaWYgKCFtYXRjaGVzKSB7XG4gICAgICAgIHRoaXMuYXJyYXkudW5zaGlmdChkZWNsYXJhdGlvbik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBhc0NTUyhjbGFzc05hbWUsIGluZGVudCkge1xuICAgIGlmIChpbmRlbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgaW5kZW50ID0gY2xhc3NOYW1lOyAvLy9cblxuICAgICAgY2xhc3NOYW1lID0gbnVsbDsgLy8vXG4gICAgfVxuXG4gICAgbGV0IGNzcyA9IEVNUFRZX1NUUklORztcblxuICAgIGNvbnN0IGxlbmd0aCA9IHRoaXMuYXJyYXkubGVuZ3RoO1xuXG4gICAgaWYgKGxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGxhc3RJbmRleCA9IGxlbmd0aCAtIDEsXG4gICAgICAgICAgICBkZWNsYXJhdGlvbnNDU1MgPSB0aGlzLmFycmF5LnJlZHVjZSgoZGVjbGFyYXRpb25zQ1NTLCBkZWNsYXJhdGlvbiwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgbGFzdCA9IChpbmRleCA9PT0gbGFzdEluZGV4KSxcbiAgICAgICAgICAgICAgICAgICAgZGVjbGFyYXRpb25DU1MgPSBkZWNsYXJhdGlvbi5hc0NTUyhpbmRlbnQsIGxhc3QpO1xuXG4gICAgICAgICAgICAgIGRlY2xhcmF0aW9uc0NTUyArPSBkZWNsYXJhdGlvbkNTUztcblxuICAgICAgICAgICAgICByZXR1cm4gZGVjbGFyYXRpb25zQ1NTO1xuICAgICAgICAgICAgfSwgRU1QVFlfU1RSSU5HKTtcblxuICAgICAgaWYgKGNsYXNzTmFtZSA9PT0gbnVsbCkge1xuICAgICAgICBjc3MgPSBkZWNsYXJhdGlvbnNDU1M7ICAvLy9cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNzcyA9IGAuJHtjbGFzc05hbWV9IHtcbiR7ZGVjbGFyYXRpb25zQ1NTfVxufVxuXG5gO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjc3M7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSB7XG4gICAgY29uc3QgZGVjbGFyYXRpb25Ob2RlcyA9IGRlY2xhcmF0aW9uUXVlcnkuZXhlY3V0ZShub2RlKSxcbiAgICAgICAgICBhcnJheSA9IGRlY2xhcmF0aW9uTm9kZXMubWFwKChkZWNsYXJhdGlvbk5vZGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBkZWNsYXJhdGlvbk5vZGUsIC8vL1xuICAgICAgICAgICAgICAgICAgZGVjbGFyYXRpb24gPSBEZWNsYXJhdGlvbi5mcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpO1xuXG4gICAgICAgICAgICByZXR1cm4gZGVjbGFyYXRpb247XG4gICAgICAgICAgfSksXG4gICAgICAgICAgZGVjbGFyYXRpb25zID0gbmV3IERlY2xhcmF0aW9ucyhhcnJheSk7XG5cbiAgICByZXR1cm4gZGVjbGFyYXRpb25zO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IFF1ZXJ5IH0gZnJvbSBcIm9jY2FtLWRvbVwiO1xuXG5pbXBvcnQgRGVjbGFyYXRpb25zIGZyb20gXCIuL2RlY2xhcmF0aW9uc1wiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBjb250ZW50RnJvbVF1ZXJ5Tm9kZUFuZFRva2VucyB9IGZyb20gXCIuLi91dGlsaXRpZXMvY29udGVudFwiO1xuXG5jb25zdCBzZWxlY3RvcnNRdWVyeSA9IFF1ZXJ5LmZyb21FeHByZXNzaW9uKFwiLy9zZWxlY3RvcnNcIik7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ1bGVTZXQge1xuICBjb25zdHJ1Y3RvcihzZWxlY3RvcnMsIGRlY2xhcmF0aW9ucykge1xuICAgIHRoaXMuc2VsZWN0b3JzID0gc2VsZWN0b3JzO1xuICAgIHRoaXMuZGVjbGFyYXRpb25zID0gZGVjbGFyYXRpb25zO1xuICB9XG5cbiAgZ2V0U2VsZWN0b3JzKCkge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdG9ycztcbiAgfVxuXG4gIGdldERlY2xhcmF0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5kZWNsYXJhdGlvbnM7XG4gIH1cblxuICB1bnNoaWZ0KHJ1bGVTZXQpIHtcbiAgICBjb25zdCBkZWNsYXJhdGlvbnMgPSBydWxlU2V0LmdldERlY2xhcmF0aW9ucygpO1xuXG4gICAgdGhpcy5kZWNsYXJhdGlvbnMudW5zaGlmdChkZWNsYXJhdGlvbnMpO1xuICB9XG5cbiAgZmluZE1hdGNoaW5nUnVsZVNldChydWxlU2V0cykge1xuICAgIGNvbnN0IG1hdGNoaW5nUnVsZVNldCA9IHJ1bGVTZXRzLmZpbmQoKHJ1bGVTZXQpID0+IHtcbiAgICAgIGNvbnN0IHNlbGVjdG9ycyA9IHJ1bGVTZXQuZ2V0U2VsZWN0b3JzKCksXG4gICAgICAgICAgICBzZWxlY3RvcnNNYXRjaCA9IChzZWxlY3RvcnMgPT09IHRoaXMuc2VsZWN0b3JzKSxcbiAgICAgICAgICAgIHJ1bGVTZXRzTWF0Y2ggPSBzZWxlY3RvcnNNYXRjaDsgLy8vXG5cbiAgICAgIGlmIChydWxlU2V0c01hdGNoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pIHx8IG51bGw7IC8vL1xuXG4gICAgcmV0dXJuIG1hdGNoaW5nUnVsZVNldDtcbiAgfVxuXG4gIGFzQ1NTKGNsYXNzTmFtZSwgaW5kZW50KSB7XG4gICAgbGV0IGNzcyA9IEVNUFRZX1NUUklORztcblxuICAgIGNvbnN0IGRlY2xhcmF0aW9uc0NTUyA9IHRoaXMuZGVjbGFyYXRpb25zLmFzQ1NTKGAgICR7aW5kZW50fWApO1xuXG4gICAgaWYgKGRlY2xhcmF0aW9uc0NTUyAhPT0gRU1QVFlfU1RSSU5HKSB7XG4gICAgICAgY3NzID0gYCR7aW5kZW50fS4ke2NsYXNzTmFtZX0ke3RoaXMuc2VsZWN0b3JzfSB7XG4ke2RlY2xhcmF0aW9uc0NTU31cbiR7aW5kZW50fX1cblxuYDtcbiAgICB9XG5cbiAgICByZXR1cm4gY3NzO1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2Vucykge1xuICAgIGNvbnN0IHNlbGVjdG9ycyA9IHNlbGVjdG9yc0Zyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2VucyksXG4gICAgICAgICAgZGVjbGFyYXRpb25zID0gRGVjbGFyYXRpb25zLmZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2VucyksXG4gICAgICAgICAgbWVkaWEgPSBuZXcgUnVsZVNldChzZWxlY3RvcnMsIGRlY2xhcmF0aW9ucyk7XG5cbiAgICByZXR1cm4gbWVkaWE7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2VsZWN0b3JzRnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSB7XG4gIGNvbnN0IHNlbGVjdG9yc05vZGVDb250ZW50ID0gY29udGVudEZyb21RdWVyeU5vZGVBbmRUb2tlbnMoc2VsZWN0b3JzUXVlcnksIG5vZGUsIHRva2VucyksXG4gICAgICAgIHNlbGVjdG9ycyA9IGAke3NlbGVjdG9yc05vZGVDb250ZW50fWA7XG5cbiAgcmV0dXJuIHNlbGVjdG9ycztcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgUXVlcnkgfSBmcm9tIFwib2NjYW0tZG9tXCI7XG5cbmltcG9ydCBSdWxlU2V0IGZyb20gXCIuL3J1bGVTZXRcIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5jb25zdCBydWxlU2V0UXVlcnkgPSBRdWVyeS5mcm9tRXhwcmVzc2lvbihcIi8qL3J1bGVTZXRcIik7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ1bGVTZXRzIHtcbiAgY29uc3RydWN0b3IoYXJyYXkpIHtcbiAgICB0aGlzLmFycmF5ID0gYXJyYXk7XG4gIH1cblxuICB1bnNoaWZ0KHJ1bGVTZXRzKSB7XG4gICAgcnVsZVNldHMuZm9yRWFjaCgocnVsZVNldCkgPT4ge1xuICAgICAgY29uc3QgbWF0Y2hpbmdSdWxlU2V0ID0gcnVsZVNldC5maW5kTWF0Y2hpbmdSdWxlU2V0KHRoaXMuYXJyYXkpOyAvLy9cblxuICAgICAgKG1hdGNoaW5nUnVsZVNldCA9PT0gbnVsbCkgP1xuICAgICAgICB0aGlzLmFycmF5LnVuc2hpZnQocnVsZVNldCkgOlxuICAgICAgICAgIG1hdGNoaW5nUnVsZVNldC51bnNoaWZ0KHJ1bGVTZXQpO1xuICAgIH0pO1xuICB9XG5cbiAgZm9yRWFjaChjYWxsYmFjaykge1xuICAgIHRoaXMuYXJyYXkuZm9yRWFjaChjYWxsYmFjayk7XG4gIH1cblxuICBhc0NTUyhjbGFzc05hbWUsIGluZGVudCkge1xuICAgIGNvbnN0IGNzcyA9IHRoaXMuYXJyYXkucmVkdWNlKChjc3MsIHJ1bGVTZXQpID0+IHtcbiAgICAgIGNvbnN0IHJ1bGVTZXRDU1MgPSBydWxlU2V0LmFzQ1NTKGNsYXNzTmFtZSwgaW5kZW50KTtcblxuICAgICAgY3NzICs9IHJ1bGVTZXRDU1M7XG5cbiAgICAgIHJldHVybiBjc3M7XG4gICAgfSwgRU1QVFlfU1RSSU5HKTtcblxuICAgIHJldHVybiBjc3M7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSB7XG4gICAgY29uc3QgcnVsZVNldE5vZGVzID0gcnVsZVNldFF1ZXJ5LmV4ZWN1dGUobm9kZSksXG4gICAgICAgICAgYXJyYXkgPSBydWxlU2V0Tm9kZXMubWFwKChydWxlU2V0Tm9kZSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHJ1bGVTZXROb2RlLCAvLy9cbiAgICAgICAgICAgICAgICAgIHJ1bGVTZXQgPSBSdWxlU2V0LmZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2Vucyk7XG5cbiAgICAgICAgICAgIHJldHVybiBydWxlU2V0O1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIHJ1bGVTZXRzID0gbmV3IFJ1bGVTZXRzKGFycmF5KTtcblxuICAgIHJldHVybiBydWxlU2V0cztcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBRdWVyeSB9IGZyb20gXCJvY2NhbS1kb21cIjtcblxuaW1wb3J0IFJ1bGVTZXRzIGZyb20gXCIuL3J1bGVTZXRzXCI7XG5pbXBvcnQgRGVjbGFyYXRpb25zIGZyb20gXCIuL2RlY2xhcmF0aW9uc1wiO1xuXG5pbXBvcnQgeyBUV09fU1BBQ0VTLCBGT1VSX1NQQUNFUyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGNvbnRlbnRGcm9tUXVlcnlOb2RlQW5kVG9rZW5zIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250ZW50XCI7XG5cbmNvbnN0IG1lZGlhUXVlcmllc1F1ZXJ5ID0gUXVlcnkuZnJvbUV4cHJlc3Npb24oXCIvbWVkaWEvbWVkaWFRdWVyaWVzXCIpO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZWRpYSB7XG4gIGNvbnN0cnVjdG9yKG1lZGlhUXVlcmllcywgZGVjbGFyYXRpb25zLCBydWxlU2V0cykge1xuICAgIHRoaXMubWVkaWFRdWVyaWVzID0gbWVkaWFRdWVyaWVzO1xuICAgIHRoaXMuZGVjbGFyYXRpb25zID0gZGVjbGFyYXRpb25zO1xuICAgIHRoaXMucnVsZVNldHMgPSBydWxlU2V0cztcbiAgfVxuXG4gIGdldE1lZGlhUXVlcmllcygpIHtcbiAgICByZXR1cm4gdGhpcy5tZWRpYVF1ZXJpZXM7XG4gIH1cblxuICBnZXREZWNsYXJhdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGVjbGFyYXRpb25zO1xuICB9XG5cbiAgZ2V0UnVsZVNldHMoKSB7XG4gICAgcmV0dXJuIHRoaXMucnVsZVNldHM7XG4gIH1cblxuICBhc0NTUyhjbGFzc05hbWUpIHtcbiAgICBsZXQgY3NzID0gXCJcIjtcblxuICAgIGNvbnN0IHJ1bGVTZXRzQ1NTID0gdGhpcy5ydWxlU2V0cy5hc0NTUyhjbGFzc05hbWUsIFRXT19TUEFDRVMpLFxuICAgICAgICAgIGRlY2xhcmF0aW9uc0NTUyA9IHRoaXMuZGVjbGFyYXRpb25zLmFzQ1NTKGNsYXNzTmFtZSwgRk9VUl9TUEFDRVMpO1xuXG4gICAgaWYgKChydWxlU2V0c0NTUyAhPT0gbnVsbCkgfHwgKGRlY2xhcmF0aW9uc0NTUyAhPT0gbnVsbCkpIHtcbiAgICAgIGNzcyA9IGBAbWVkaWEgJHt0aGlzLm1lZGlhUXVlcmllc30ge1xuJHtkZWNsYXJhdGlvbnNDU1N9JHtydWxlU2V0c0NTU31cbn1cblxuYDtcbiAgICB9XG5cbiAgICByZXR1cm4gY3NzO1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2Vucykge1xuICAgIGNvbnN0IG1lZGlhUXVlcmllcyA9IG1lZGlhUXVlcmllc0Zyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2VucyksXG4gICAgICAgICAgZGVjbGFyYXRpb25zID0gRGVjbGFyYXRpb25zLmZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2VucyksXG4gICAgICAgICAgcnVsZVNldHMgPSBSdWxlU2V0cy5mcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpLFxuICAgICAgICAgIG1lZGlhID0gbmV3IE1lZGlhKG1lZGlhUXVlcmllcywgZGVjbGFyYXRpb25zLCBydWxlU2V0cyk7XG5cbiAgICByZXR1cm4gbWVkaWE7XG4gIH1cbn1cblxuZnVuY3Rpb24gbWVkaWFRdWVyaWVzRnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSB7XG4gIGNvbnN0IG1lZGlhUXVlcmllc05vZGVDb250ZW50ID0gY29udGVudEZyb21RdWVyeU5vZGVBbmRUb2tlbnMobWVkaWFRdWVyaWVzUXVlcnksIG5vZGUsIHRva2VucyksXG4gICAgICAgIG1lZGlhUXVlcmllcyA9IGAke21lZGlhUXVlcmllc05vZGVDb250ZW50fWA7XG5cbiAgcmV0dXJuIG1lZGlhUXVlcmllcztcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgUXVlcnkgfSBmcm9tIFwib2NjYW0tZG9tXCI7XG5cbmltcG9ydCBNZWRpYSBmcm9tIFwiLi9tZWRpYVwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmNvbnN0IG1lZGlhUXVlcnkgPSBRdWVyeS5mcm9tRXhwcmVzc2lvbihcIi9zdHlsZXNoZWV0L21lZGlhXCIpO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZWRpYXMge1xuICBjb25zdHJ1Y3RvcihhcnJheSkge1xuICAgIHRoaXMuYXJyYXkgPSBhcnJheTtcbiAgfVxuXG4gIHVuc2hpZnQobWVkaWFzKSB7XG4gICAgbWVkaWFzLmZvckVhY2goKG1lZGlhKSA9PiB7XG4gICAgICB0aGlzLmFycmF5LnVuc2hpZnQobWVkaWEpO1xuICAgIH0pO1xuICB9XG5cbiAgZm9yRWFjaChjYWxsYmFjaykge1xuICAgIHRoaXMuYXJyYXkuZm9yRWFjaChjYWxsYmFjayk7XG4gIH1cblxuICBhc0NTUyhjbGFzc05hbWUpIHtcbiAgICBjb25zdCBjc3MgPSB0aGlzLmFycmF5LnJlZHVjZSgoY3NzLCBtZWRpYSkgPT4ge1xuICAgICAgY29uc3QgbWVkaWFDU1MgPSBtZWRpYS5hc0NTUyhjbGFzc05hbWUpO1xuXG4gICAgICBjc3MgKz0gbWVkaWFDU1M7XG5cbiAgICAgIHJldHVybiBjc3M7XG4gICAgfSwgRU1QVFlfU1RSSU5HKTtcblxuICAgIHJldHVybiBjc3M7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSB7XG4gICAgY29uc3QgbWVkaWFOb2RlcyA9IG1lZGlhUXVlcnkuZXhlY3V0ZShub2RlKSxcbiAgICAgICAgICBhcnJheSA9IG1lZGlhTm9kZXMubWFwKChtZWRpYU5vZGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBtZWRpYU5vZGUsIC8vL1xuICAgICAgICAgICAgICAgICAgbWVkaWEgPSBNZWRpYS5mcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpO1xuXG4gICAgICAgICAgICByZXR1cm4gbWVkaWE7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgbWVkaWFzID0gbmV3IE1lZGlhcyhhcnJheSk7XG5cbiAgICByZXR1cm4gbWVkaWFzO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBNZWRpYXMgZnJvbSBcIi4vc3R5bGUvbWVkaWFzXCI7XG5pbXBvcnQgUnVsZVNldHMgZnJvbSBcIi4vc3R5bGUvcnVsZVNldHNcIjtcbmltcG9ydCBEZWNsYXJhdGlvbnMgZnJvbSBcIi4vc3R5bGUvZGVjbGFyYXRpb25zXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0eWxlIHtcbiAgY29uc3RydWN0b3IoZGVjbGFyYXRpb25zLCBydWxlU2V0cywgbWVkaWFzKSB7XG4gICAgdGhpcy5kZWNsYXJhdGlvbnMgPSBkZWNsYXJhdGlvbnM7XG4gICAgdGhpcy5ydWxlU2V0cyA9IHJ1bGVTZXRzO1xuICAgIHRoaXMubWVkaWFzID0gbWVkaWFzO1xuICB9XG5cbiAgZ2V0RGVjbGFyYXRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmRlY2xhcmF0aW9ucztcbiAgfVxuXG4gIGdldFJ1bGVTZXRzKCkge1xuICAgIHJldHVybiB0aGlzLnJ1bGVTZXRzO1xuICB9XG5cbiAgZ2V0TWVkaWFzKCkge1xuICAgIHJldHVybiB0aGlzLm1lZGlhcztcbiAgfVxuXG4gIGV4dGVuZHMoc3VwZXJTdHlsZSkge1xuICAgIGNvbnN0IGRlY2xhcmF0aW9ucyA9IHN1cGVyU3R5bGUuZ2V0RGVjbGFyYXRpb25zKCksXG4gICAgICAgICAgcnVsZVNldHMgPSBzdXBlclN0eWxlLmdldFJ1bGVTZXRzKCksXG4gICAgICAgICAgbWVkaWFzID0gc3VwZXJTdHlsZS5nZXRNZWRpYXMoKTtcblxuICAgIHRoaXMudW5zaGlmdChkZWNsYXJhdGlvbnMsIHJ1bGVTZXRzLCBtZWRpYXMpO1xuICB9XG5cbiAgdW5zaGlmdChkZWNsYXJhdGlvbnMsIHJ1bGVTZXRzLCBtZWRpYXMpIHtcbiAgICB0aGlzLmRlY2xhcmF0aW9ucy51bnNoaWZ0KGRlY2xhcmF0aW9ucyk7XG4gICAgdGhpcy5ydWxlU2V0cy51bnNoaWZ0KHJ1bGVTZXRzKTtcbiAgICB0aGlzLm1lZGlhcy51bnNoaWZ0KG1lZGlhcyk7XG4gIH1cblxuICBhc0NTUyhjbGFzc05hbWUpIHtcbiAgICBjb25zdCBkZWNsYXJhdGlvbnNDU1MgPSB0aGlzLmRlY2xhcmF0aW9ucy5hc0NTUyhjbGFzc05hbWUsIFwiICBcIiksXG4gICAgICAgICAgcnVsZVNldHNDU1MgPSB0aGlzLnJ1bGVTZXRzLmFzQ1NTKGNsYXNzTmFtZSwgXCJcIiksXG4gICAgICAgICAgbWVkaWFzQ1NTID0gdGhpcy5tZWRpYXMuYXNDU1MoY2xhc3NOYW1lKSxcbiAgICAgICAgICBjc3MgPSBgJHtkZWNsYXJhdGlvbnNDU1N9JHtydWxlU2V0c0NTU30ke21lZGlhc0NTU31gO1xuXG4gICAgcmV0dXJuIGNzcztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpIHtcbiAgICBjb25zdCBkZWNsYXJhdGlvbnMgPSBEZWNsYXJhdGlvbnMuZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSxcbiAgICAgICAgICBydWxlU2V0cyA9IFJ1bGVTZXRzLmZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2VucyksXG4gICAgICAgICAgbWVkaWFzID0gTWVkaWFzLmZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2VucyksXG4gICAgICAgICAgc3R5bGUgPSBuZXcgU3R5bGUoZGVjbGFyYXRpb25zLCBydWxlU2V0cywgbWVkaWFzKTtcblxuICAgIHJldHVybiBzdHlsZTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgU3R5bGUgZnJvbSBcIi4uL3N0eWxlXCI7XG5pbXBvcnQgQ1NTTGV4ZXIgZnJvbSBcIi4uL2Nzcy9sZXhlclwiO1xuaW1wb3J0IENTU1BhcnNlciBmcm9tIFwiLi4vY3NzL3BhcnNlclwiO1xuXG5pbXBvcnQgeyBIRUFELCBTVFlMRSwgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5jb25zdCBjc3NMZXhlciA9IENTU0xleGVyLmZyb21Ob3RoaW5nKCksXG4gICAgICBjc3NQYXJzZXIgPSBDU1NQYXJzZXIuZnJvbU5vdGhpbmcoKTtcblxuaWYgKCFnbG9iYWxUaGlzLnN0eWxlTWFwKSB7XG4gIGdsb2JhbFRoaXMuc3R5bGVNYXAgPSB7fTtcbn1cblxuY29uc3QgeyBzdHlsZU1hcCB9ID0gZ2xvYmFsVGhpcztcblxuZnVuY3Rpb24gcmVuZGVyU3R5bGUoc3R5bGUpIHtcbiAgY29uc3QgaGVhZERPTUVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKEhFQUQpLFxuICAgICAgICBzdHlsZURPTUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFNUWUxFKSxcbiAgICAgICAgaW5uZXJIVE1MID0gYFxuICAgICAgICBcbiR7c3R5bGV9YDtcblxuICBPYmplY3QuYXNzaWduKHN0eWxlRE9NRWxlbWVudCwge1xuICAgIGlubmVySFRNTFxuICB9KTtcblxuICBoZWFkRE9NRWxlbWVudC5hcHBlbmRDaGlsZChzdHlsZURPTUVsZW1lbnQpO1xufVxuXG5mdW5jdGlvbiByZW5kZXJTdHlsZXMoKSB7XG4gIGNvbnN0IHN0eWxlc0NTUyA9IHJldHJpZXZlU3R5bGVzQ1NTKCksXG4gICAgICAgIHN0eWxlID0gc3R5bGVzQ1NTOyAgLy8vXG5cbiAgcmVuZGVyU3R5bGUoc3R5bGUpO1xufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZVN0eWxlKGFyZ3MsIGNsYXNzTmFtZSwgc3VwZXJTdHlsZSA9IG51bGwpIHtcbiAgY29uc3Qgc3RyaW5ncyA9IGFyZ3Muc2hpZnQoKSxcdC8vL1xuICAgICAgICBjb250ZW50ID0gc3RyaW5ncy5yZWR1Y2UoKGNvbnRlbnQsIHN0cmluZywgaW5kZXgpID0+IHtcbiAgICAgICAgICBjb25zdCBhcmcgPSBhcmdzW2luZGV4XTtcblxuICAgICAgICAgIGNvbnRlbnQgPSAoYXJnICE9PSB1bmRlZmluZWQpID9cbiAgICAgICAgICAgICAgICAgICAgICBgJHtjb250ZW50fSR7c3RyaW5nfSR7YXJnfWAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgYCR7Y29udGVudH0ke3N0cmluZ31gO1xuXG4gICAgICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgICAgIH0sIEVNUFRZX1NUUklORyksXG4gICAgICAgIHRva2VucyA9IGNzc0xleGVyLnRva2VuaXNlKGNvbnRlbnQpLFxuICAgICAgICBub2RlID0gY3NzUGFyc2VyLnBhcnNlKHRva2VucyksXG4gICAgICAgIHN0eWxlID0gU3R5bGUuZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKTtcblxuICAgICAgICBpZiAoc3VwZXJTdHlsZSAhPT0gbnVsbCkge1xuICAgICAgICAgIHN0eWxlLmV4dGVuZHMoc3VwZXJTdHlsZSk7XG4gICAgICAgIH1cblxuICAgICAgICBzdHlsZU1hcFtjbGFzc05hbWVdID0gc3R5bGU7XG59XG5cbmZ1bmN0aW9uIHJldHJpZXZlU3R5bGUoY2xhc3NOYW1lKSB7XG4gIGNvbnN0IHN0eWxlID0gc3R5bGVNYXBbY2xhc3NOYW1lXSB8fCBudWxsO1xuXG4gIHJldHVybiBzdHlsZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICByZW5kZXJTdHlsZSxcbiAgcmVuZGVyU3R5bGVzLFxuICBnZW5lcmF0ZVN0eWxlLFxuICByZXRyaWV2ZVN0eWxlXG59O1xuXG5mdW5jdGlvbiByZXRyaWV2ZVN0eWxlc0NTUygpIHtcbiAgY29uc3QgY2xhc3NOYW1lcyA9IE9iamVjdC5rZXlzKHN0eWxlTWFwKSxcbiAgICAgICAgc3R5bGVzQ1NTID0gY2xhc3NOYW1lcy5yZWR1Y2UoKHN0eWxlc0NTUywgY2xhc3NOYW1lKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc3R5bGUgPSByZXRyaWV2ZVN0eWxlKGNsYXNzTmFtZSksXG4gICAgICAgICAgICAgICAgc3R5bGVDU1MgPSBzdHlsZS5hc0NTUyhjbGFzc05hbWUpO1xuXG4gICAgICAgICAgc3R5bGVzQ1NTICs9IHN0eWxlQ1NTO1xuXG4gICAgICAgICAgcmV0dXJuIHN0eWxlc0NTUztcbiAgICAgICAgfSwgRU1QVFlfU1RSSU5HKTtcblxuICByZXR1cm4gc3R5bGVzQ1NTO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBDSEFSQUNURVJTLCBFTVBUWV9TVFJJTkcsIENMQVNTX05BTUVfTEVOR1RIIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5jb25zdCBsZW5ndGggPSBDTEFTU19OQU1FX0xFTkdUSCxcbiAgICAgIGNoYXJhY3RlcnMgPSBDSEFSQUNURVJTLFxuICAgICAgY2hhcmFjdGVyc0xlbmd0aCA9IGNoYXJhY3RlcnMubGVuZ3RoO1xuXG5jb25zdCBjbGFzc05hbWVzID0gW107XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZUNsYXNzTmFtZSgpIHtcbiAgbGV0IGNsYXNzTmFtZSA9IEVNUFRZX1NUUklORztcblxuICBmb3IgKGxldCBjb3VudCA9IDA7IGNvdW50IDwgbGVuZ3RoOyBjb3VudCsrKSB7XG4gICAgY29uc3QgaW5kZXggPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBjaGFyYWN0ZXJzTGVuZ3RoKSxcbiAgICAgICAgICBjaGFyYWN0ZXIgPSBjaGFyYWN0ZXJzW2luZGV4XTtcblxuICAgIGNsYXNzTmFtZSArPSBjaGFyYWN0ZXI7XG4gIH1cblxuICBjb25zdCBjbGFzc05hbWVzSW5jbHVkZXNDbGFzc05hbWUgPSBjbGFzc05hbWVzLmluY2x1ZGVzKGNsYXNzTmFtZSk7XG5cbiAgaWYgKCFjbGFzc05hbWVzSW5jbHVkZXNDbGFzc05hbWUpIHtcbiAgICBjbGFzc05hbWVzLnB1c2goY2xhc3NOYW1lKTtcbiAgfSBlbHNlIHtcbiAgICBjbGFzc05hbWUgPSBnZW5lcmF0ZUNsYXNzTmFtZSgpO1xuICB9XG5cbiAgcmV0dXJuIGNsYXNzTmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJldHJpZXZlQ2xhc3NOYW1lKGVsZW1lbnQpIHtcbiAgY29uc3QgeyBjbGFzc05hbWUgfSA9IGVsZW1lbnQucmVhY3RGdW5jdGlvbiB8fCBlbGVtZW50LnJlYWN0Q29tcG9uZW50LmNvbnN0cnVjdG9yO1xuXG4gIHJldHVybiBjbGFzc05hbWU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZ2VuZXJhdGVDbGFzc05hbWUsXG4gIHJldHJpZXZlQ2xhc3NOYW1lXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIHRhZ05hbWVzIH0gZnJvbSBcIi4vdGFnTmFtZXNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ1NTTGV4ZXIgfSBmcm9tIFwiLi9jc3MvbGV4ZXJcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ1NTUGFyc2VyIH0gZnJvbSBcIi4vY3NzL3BhcnNlclwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBzdHlsZXNVdGlsaXRpZXMgfSBmcm9tIFwiLi91dGlsaXRpZXMvc3R5bGVzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGNsYXNzTmFtZVV0aWxpdGllcyB9IGZyb20gXCIuL3V0aWxpdGllcy9jbGFzc05hbWVcIjtcbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB7IEVsZW1lbnQgfSBmcm9tIFwiZWFzeVwiO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNDbGFzcyhhcmd1bWVudCkgeyByZXR1cm4gaXNTdWJjbGFzc09mKGFyZ3VtZW50LCBFbGVtZW50KTsgfSAgLy8vXG5cbmZ1bmN0aW9uIGlzU3ViY2xhc3NPZihhcmd1bWVudCwgQ2xhc3MpIHtcbiAgbGV0IHN1YmNsYXNzID0gZmFsc2U7XG5cbiAgaWYgKGFyZ3VtZW50Lm5hbWUgPT09IENsYXNzLm5hbWUpIHsgICAvLy9cbiAgICBzdWJjbGFzcyA9IHRydWU7XG4gIH0gZWxzZSB7XG4gICAgYXJndW1lbnQgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoYXJndW1lbnQpOyAvLy9cblxuICAgIGlmIChhcmd1bWVudCAhPT0gbnVsbCkge1xuICAgICAgc3ViY2xhc3MgPSBpc1N1YmNsYXNzT2YoYXJndW1lbnQsIENsYXNzKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3ViY2xhc3M7XG59IiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgQ0xBU1NfTkFNRSA9IFwiY2xhc3NOYW1lXCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IFJlYWN0IH0gZnJvbSBcImVhc3lcIjtcbmltcG9ydCB7IHRhZ05hbWVzLCBzdHlsZXNVdGlsaXRpZXMsIGNsYXNzTmFtZVV0aWxpdGllcyB9IGZyb20gXCJ3aXRoLXN0eWxlXCI7XG5cbmltcG9ydCB7IGlzQ2xhc3MgfSBmcm9tIFwiLi91dGlsaXRpZXMvY2xhc3NcIjtcbmltcG9ydCB7IENMQVNTX05BTUUgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcblxuY29uc3QgeyBnZW5lcmF0ZUNsYXNzTmFtZSB9ID0gY2xhc3NOYW1lVXRpbGl0aWVzLFxuICAgICAgeyByZW5kZXJTdHlsZSwgcmVuZGVyU3R5bGVzLCBnZW5lcmF0ZVN0eWxlLCByZXRyaWV2ZVN0eWxlIH0gPSBzdHlsZXNVdGlsaXRpZXM7XG5cbmZ1bmN0aW9uIHdpdGhTdHlsZShDbGFzc09yRnVuY3Rpb24pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIGNvbnN0IGFyZ3MgPSBbIC4uLmFyZ3VtZW50cyBdOyAgLy8vXG5cbiAgICBsZXQgeyBjbGFzc05hbWUgPSBudWxsIH0gPSBDbGFzc09yRnVuY3Rpb247XG5cbiAgICBjb25zdCBzdXBlclN0eWxlID0gcmV0cmlldmVTdHlsZShjbGFzc05hbWUpO1xuXG4gICAgY2xhc3NOYW1lID0gZ2VuZXJhdGVDbGFzc05hbWUoKTtcblxuICAgIGdlbmVyYXRlU3R5bGUoYXJncywgY2xhc3NOYW1lLCBzdXBlclN0eWxlKTtcblxuICAgIGNvbnN0IENsYXNzT3JGdW5jdGlvbkNsYXNzID0gaXNDbGFzcyhDbGFzc09yRnVuY3Rpb24pO1xuXG4gICAgaWYgKENsYXNzT3JGdW5jdGlvbkNsYXNzKSB7XG4gICAgICBjb25zdCBDbGFzcyA9IENsYXNzT3JGdW5jdGlvbjsgIC8vL1xuXG4gICAgICBDbGFzc09yRnVuY3Rpb24gPSBjbGFzcyBleHRlbmRzIENsYXNzIHtcbiAgICAgICAgc3RhdGljIGZyb21DbGFzcyhfQ2xhc3MsIHByb3BlcnRpZXMsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cykge1xuICAgICAgICAgIHByb3BlcnRpZXMgPSBhcHBlbmRDbGFzc05hbWVUb1Byb3BlcnRpZXMoY2xhc3NOYW1lLCBwcm9wZXJ0aWVzKTtcblxuICAgICAgICAgIHJldHVybiBDbGFzcy5mcm9tQ2xhc3MoX0NsYXNzLCBwcm9wZXJ0aWVzLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IEZ1bmN0aW9uID0gQ2xhc3NPckZ1bmN0aW9uOyAvLy9cblxuICAgICAgQ2xhc3NPckZ1bmN0aW9uID0gKHByb3BlcnRpZXMpID0+IHtcbiAgICAgICAgcHJvcGVydGllcyA9IGFwcGVuZENsYXNzTmFtZVRvUHJvcGVydGllcyhjbGFzc05hbWUsIHByb3BlcnRpZXMpO1xuXG4gICAgICAgIHJldHVybiBGdW5jdGlvbihwcm9wZXJ0aWVzKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgT2JqZWN0LmFzc2lnbihDbGFzc09yRnVuY3Rpb24sIHtcbiAgICAgIGNsYXNzTmFtZVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIENsYXNzT3JGdW5jdGlvbjtcbiAgfTtcbn1cblxuT2JqZWN0LmFzc2lnbih3aXRoU3R5bGUsIHtcbiAgcmVuZGVyU3R5bGUsXG4gIHJlbmRlclN0eWxlc1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhTdHlsZTtcblxudGFnTmFtZXMuZm9yRWFjaCgodGFnTmFtZSkgPT4ge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkod2l0aFN0eWxlLCB0YWdOYW1lLCB7XG4gICAgZ2V0OiAoKSA9PiBmdW5jdGlvbigpIHtcbiAgICAgIGNvbnN0IGFyZ3MgPSBbLi4uYXJndW1lbnRzXSwgIC8vL1xuICAgICAgICAgICAgY2xhc3NOYW1lID0gZ2VuZXJhdGVDbGFzc05hbWUoKTtcblxuICAgICAgZ2VuZXJhdGVTdHlsZShhcmdzLCBjbGFzc05hbWUpO1xuXG4gICAgICBjb25zdCBGdW5jdGlvbiA9IChwcm9wZXJ0aWVzKSA9PiB7XG4gICAgICAgIHByb3BlcnRpZXMgPSBhcHBlbmRDbGFzc05hbWVUb1Byb3BlcnRpZXMoY2xhc3NOYW1lLCBwcm9wZXJ0aWVzKTtcblxuICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudCh0YWdOYW1lLCBwcm9wZXJ0aWVzKTtcbiAgICAgIH07XG5cbiAgICAgIE9iamVjdC5hc3NpZ24oRnVuY3Rpb24sIHtcbiAgICAgICAgY2xhc3NOYW1lXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIEZ1bmN0aW9uO1xuICAgIH1cbiAgfSk7XG59KTtcblxuZnVuY3Rpb24gYXBwZW5kQ2xhc3NOYW1lVG9Qcm9wZXJ0aWVzKGNsYXNzTmFtZSwgcHJvcGVydGllcykge1xuICBwcm9wZXJ0aWVzID0gcHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShDTEFTU19OQU1FKSA/IHByb3BlcnRpZXMgOiB7IC4uLnByb3BlcnRpZXMsIGNsYXNzTmFtZSB9OyAvLy9cblxuICByZXR1cm4gcHJvcGVydGllcztcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IENMQVNTX05BTUUgPSBcImNsYXNzTmFtZVwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgd2l0aFN0eWxlIGZyb20gXCIuL3dpdGhTdHlsZVwiO1xuXG5leHBvcnQgZGVmYXVsdCB3aXRoU3R5bGU7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5jb25zdCB7IHNlY29uZCB9ID0gYXJyYXlVdGlsaXRpZXM7XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHJpcFBpeGVscyh2YWx1ZUluUGl4ZWxzKSB7XG4gIGxldCB2YWx1ZTtcblxuICBpZiAoIXZhbHVlSW5QaXhlbHMpIHtcbiAgICB2YWx1ZSA9IDA7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgbWF0Y2hlcyA9IHZhbHVlSW5QaXhlbHMubWF0Y2goL14oLispcHgkLyksXG4gICAgICAgICAgc2Vjb25kTWF0Y2ggPSBzZWNvbmQobWF0Y2hlcyk7XG5cbiAgICB2YWx1ZSA9IE51bWJlcihzZWNvbmRNYXRjaCk7IC8vL1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgVE9QID0gXCJ0b3BcIjtcbmV4cG9ydCBjb25zdCBMRUZUID0gXCJsZWZ0XCI7XG5leHBvcnQgY29uc3QgUklHSFQgPSBcInJpZ2h0XCI7XG5leHBvcnQgY29uc3QgQk9UVE9NID0gXCJib3R0b21cIjtcbmV4cG9ydCBjb25zdCBMSU5FX0hFSUdIVCA9IFwibGluZS1oZWlnaHRcIjtcbmV4cG9ydCBjb25zdCBFTVBUWV9TVFJJTkcgPSBcIlwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzdHJpcFBpeGVscyB9IGZyb20gXCIuLi91dGlsaXRpZXMvY3NzXCI7XG5pbXBvcnQgeyBUT1AsIExFRlQsIFJJR0hULCBCT1RUT00sIExJTkVfSEVJR0hUIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5mdW5jdGlvbiBnZXRMaW5lSGVpZ2h0KCkge1xuICBjb25zdCBsaW5lSGVpZ2h0SW5QaXhlbHMgPSB0aGlzLmNzcyhMSU5FX0hFSUdIVCksXG4gICAgICAgIGxpbmVIZWlnaHQgPSBzdHJpcFBpeGVscyhsaW5lSGVpZ2h0SW5QaXhlbHMpO1xuXG4gIHJldHVybiBsaW5lSGVpZ2h0O1xufVxuXG5mdW5jdGlvbiBnZXRQYWRkaW5nKHNpZGUpIHtcbiAgY29uc3QgcGFkZGluZ0luUGl4ZWxzID0gdGhpcy5jc3MoYHBhZGRpbmctJHtzaWRlfWApLFxuICAgICAgICBwYWRkaW5nID0gc3RyaXBQaXhlbHMocGFkZGluZ0luUGl4ZWxzKTtcblxuICByZXR1cm4gcGFkZGluZztcbn1cblxuZnVuY3Rpb24gZ2V0Qm9yZGVyV2lkdGgoc2lkZSkge1xuICBjb25zdCBib3JkZXJXaWR0aEluUGl4ZWxzID0gdGhpcy5jc3MoYGJvcmRlci0ke3NpZGV9LXdpZHRoYCksXG4gICAgICAgIGJvcmRlcldpZHRoID0gc3RyaXBQaXhlbHMoYm9yZGVyV2lkdGhJblBpeGVscyk7XG5cbiAgcmV0dXJuIGJvcmRlcldpZHRoO1xufVxuXG5mdW5jdGlvbiBnZXRQYWRkaW5nVG9wKCkge1xuICBjb25zdCBzaWRlID0gVE9QLFxuICAgICAgICBwYWRkaW5nVG9wID0gdGhpcy5nZXRQYWRkaW5nKHNpZGUpO1xuXG4gIHJldHVybiBwYWRkaW5nVG9wO1xufVxuXG5mdW5jdGlvbiBnZXRQYWRkaW5nTGVmdCgpIHtcbiAgY29uc3Qgc2lkZSA9IExFRlQsXG4gICAgICAgIHBhZGRpbmdMZWZ0ID0gdGhpcy5nZXRQYWRkaW5nKHNpZGUpO1xuXG4gIHJldHVybiBwYWRkaW5nTGVmdDtcbn1cblxuZnVuY3Rpb24gZ2V0UGFkZGluZ1JpZ2h0KCkge1xuICBjb25zdCBzaWRlID0gUklHSFQsXG4gICAgICAgIHBhZGRpbmdSaWdodCA9IHRoaXMuZ2V0UGFkZGluZyhzaWRlKTtcblxuICByZXR1cm4gcGFkZGluZ1JpZ2h0O1xufVxuXG5mdW5jdGlvbiBnZXRQYWRkaW5nQm90dG9tKCkge1xuICBjb25zdCBzaWRlID0gQk9UVE9NLFxuICAgICAgICBwYWRkaW5nQm90dG9tID0gdGhpcy5nZXRQYWRkaW5nKHNpZGUpO1xuXG4gIHJldHVybiBwYWRkaW5nQm90dG9tO1xufVxuXG5mdW5jdGlvbiBnZXRCb3JkZXJUb3BXaWR0aCgpIHtcbiAgY29uc3Qgc2lkZSA9IFRPUCxcbiAgICAgICAgYm9yZGVyVG9wV2lkdGggPSB0aGlzLmdldEJvcmRlcldpZHRoKHNpZGUpO1xuXG4gIHJldHVybiBib3JkZXJUb3BXaWR0aDtcbn1cblxuZnVuY3Rpb24gZ2V0Qm9yZGVyTGVmdFdpZHRoKCkge1xuICBjb25zdCBzaWRlID0gTEVGVCxcbiAgICAgICAgYm9yZGVyTGVmdFdpZHRoID0gdGhpcy5nZXRCb3JkZXJXaWR0aChzaWRlKTtcblxuICByZXR1cm4gYm9yZGVyTGVmdFdpZHRoO1xufVxuXG5mdW5jdGlvbiBnZXRCb3JkZXJSaWdodFdpZHRoKCkge1xuICBjb25zdCBzaWRlID0gUklHSFQsXG4gICAgICAgIGJvcmRlclJpZ2h0V2lkdGggPSB0aGlzLmdldEJvcmRlcldpZHRoKHNpZGUpO1xuXG4gIHJldHVybiBib3JkZXJSaWdodFdpZHRoO1xufVxuXG5mdW5jdGlvbiBnZXRCb3JkZXJCb3R0b21XaWR0aCgpIHtcbiAgY29uc3Qgc2lkZSA9IEJPVFRPTSxcbiAgICAgICAgYm9yZGVyQm90dG9tV2lkdGggPSB0aGlzLmdldEJvcmRlcldpZHRoKHNpZGUpO1xuXG4gIHJldHVybiBib3JkZXJCb3R0b21XaWR0aDtcbn1cblxuY29uc3Qgc3R5bGVNaXhpbnMgPSB7XG4gIGdldExpbmVIZWlnaHQsXG4gIGdldFBhZGRpbmcsXG4gIGdldFBhZGRpbmdUb3AsXG4gIGdldFBhZGRpbmdMZWZ0LFxuICBnZXRQYWRkaW5nUmlnaHQsXG4gIGdldFBhZGRpbmdCb3R0b20sXG4gIGdldEJvcmRlcldpZHRoLFxuICBnZXRCb3JkZXJUb3BXaWR0aCxcbiAgZ2V0Qm9yZGVyTGVmdFdpZHRoLFxuICBnZXRCb3JkZXJSaWdodFdpZHRoLFxuICBnZXRCb3JkZXJCb3R0b21XaWR0aFxufTtcblxuZXhwb3J0IGRlZmF1bHQgc3R5bGVNaXhpbnM7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNlbGVjdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSB7XG4gICAgdGhpcy5zdGFydFBvc2l0aW9uID0gc3RhcnRQb3NpdGlvbjtcbiAgICB0aGlzLmVuZFBvc2l0aW9uID0gZW5kUG9zaXRpb247XG4gIH1cblxuICBnZXRTdGFydFBvc2l0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0UG9zaXRpb247XG4gIH1cblxuICBnZXRFbmRQb3NpdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5lbmRQb3NpdGlvbjtcbiAgfVxuXG4gIHNldFN0YXJ0UG9zaXRpb24oc3RhcnRQb3NpdGlvbikge1xuICAgIHRoaXMuc3RhcnRQb3NpdGlvbiA9IHN0YXJ0UG9zaXRpb247XG4gIH1cblxuICBzZXRFbmRQb3NpdGlvbihlbmRQb3NpdGlvbikge1xuICAgIHRoaXMuZW5kUG9zaXRpb24gPSBlbmRQb3NpdGlvbjtcbiAgfVxuXG4gIGlzRXF1YWxUbyhzZWxlY3Rpb24pIHtcbiAgICBsZXQgZXF1YWxUbyA9IGZhbHNlO1xuXG4gICAgaWYgKHNlbGVjdGlvbiAhPT0gbnVsbCkge1xuICAgICAgY29uc3Qgc2VsZWN0aW9uU3RhcnRQb3NpdGlvbiA9IHNlbGVjdGlvbi5nZXRTdGFydFBvc2l0aW9uKCksXG4gICAgICAgICAgICBzZWxlY3Rpb25FbmRQb3NpdGlvbiA9IHNlbGVjdGlvbi5nZXRFbmRQb3NpdGlvbigpLFxuICAgICAgICAgICAgc3RhcnRQb3NpdGlvbnNFcXVhbCA9ICh0aGlzLnN0YXJ0UG9zaXRpb24gPT09IHNlbGVjdGlvblN0YXJ0UG9zaXRpb24pLFxuICAgICAgICAgICAgZW5kUG9zaXRpb25zRXF1YWwgPSAodGhpcy5lbmRQb3NpdGlvbiA9PT0gc2VsZWN0aW9uRW5kUG9zaXRpb24pO1xuXG4gICAgICBlcXVhbFRvID0gKHN0YXJ0UG9zaXRpb25zRXF1YWwgJiYgZW5kUG9zaXRpb25zRXF1YWwpO1xuICAgIH1cblxuICAgIHJldHVybiBlcXVhbFRvO1xuICB9XG5cbiAgaXNEaWZmZXJlbnRUbyhzZWxlY3Rpb24pIHtcbiAgICBjb25zdCBlcXVhbFRvID0gdGhpcy5pc0VxdWFsVG8oc2VsZWN0aW9uKSxcbiAgICAgICAgICBkaWZmZXJlbnRUbyA9ICFlcXVhbFRvO1xuXG4gICAgcmV0dXJuIGRpZmZlcmVudFRvO1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IHN0YXJ0UG9zaXRpb24gPSAwLFxuICAgICAgICAgIGVuZFBvc2l0aW9uID0gMCxcbiAgICAgICAgICBzZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9uKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTtcblxuICAgIHJldHVybiBzZWxlY3Rpb247XG4gIH1cblxuICBzdGF0aWMgZnJvbURPTUVsZW1lbnQoZG9tRWxlbWVudCkge1xuICAgIGNvbnN0IHsgc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZCB9ID0gZG9tRWxlbWVudCxcbiAgICAgICAgICBzdGFydFBvc2l0aW9uID0gc2VsZWN0aW9uU3RhcnQsIC8vL1xuICAgICAgICAgIGVuZFBvc2l0aW9uID0gc2VsZWN0aW9uRW5kLCAvLy9cbiAgICAgICAgICBzZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9uKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTtcblxuICAgIHJldHVybiBzZWxlY3Rpb247XG5cbiAgfVxuXG4gIHN0YXRpYyBmcm9tU3RhcnRQb3NpdGlvbkFuZEVuZFBvc2l0aW9uKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSB7XG4gICAgY29uc3Qgc2VsZWN0aW9uID0gbmV3IFNlbGVjdGlvbihzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7XG5cbiAgICByZXR1cm4gc2VsZWN0aW9uO1xuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmltcG9ydCB7IHdpbmRvdywgRWxlbWVudCwgZXZlbnRUeXBlcyB9IGZyb20gXCJlYXN5XCI7XHJcblxyXG5pbXBvcnQgU2VsZWN0aW9uIGZyb20gXCIuL3NlbGVjdGlvblwiXHJcblxyXG5jb25zdCB7IEJMVVJfRVZFTlRfVFlQRSxcclxuICAgICAgICAgSU5QVVRfRVZFTlRfVFlQRSxcclxuICAgICAgICAgRk9DVVNfRVZFTlRfVFlQRSxcclxuICAgICAgICAgQ0hBTkdFX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgIFNDUk9MTF9FVkVOVF9UWVBFLFxyXG4gICAgICAgICBLRVlET1dOX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgIE1PVVNFVVBfRVZFTlRfVFlQRSxcclxuICAgICAgICAgTU9VU0VET1dOX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgIE1PVVNFTU9WRV9FVkVOVF9UWVBFLFxyXG4gICAgICAgICBDT05URVhUTUVOVV9FVkVOVF9UWVBFIH0gPSBldmVudFR5cGVzO1xyXG5cclxuY29uc3QgZGVmZXIgPSAoZnVuYykgPT4gc2V0VGltZW91dChmdW5jLCAwKTsgLy8vXHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSaWNoVGV4dGFyZWEgZXh0ZW5kcyBFbGVtZW50IHtcclxuICBpc0FjdGl2ZSgpIHtcclxuICAgIGNvbnN0IGFjdGl2ZSA9IHRoaXMuaGFzQ2xhc3MoXCJhY3RpdmVcIik7XHJcblxyXG4gICAgcmV0dXJuIGFjdGl2ZTtcclxuICB9XHJcblxyXG4gIGlzUmVhZE9ubHkoKSB7XHJcbiAgICBjb25zdCBkb21FbGVtZW50ID0gdGhpcy5nZXRET01FbGVtZW50KCksXHJcbiAgICAgICAgICB7IHJlYWRPbmx5IH0gPSBkb21FbGVtZW50O1xyXG4gICAgXHJcbiAgICByZXR1cm4gcmVhZE9ubHk7IFxyXG4gIH1cclxuXHJcbiAgZ2V0Q29udGVudCgpIHtcclxuICAgIGNvbnN0IGRvbUVsZW1lbnQgPSB0aGlzLmdldERPTUVsZW1lbnQoKSxcclxuICAgICAgICAgIHsgdmFsdWUgfSA9IGRvbUVsZW1lbnQsXHJcbiAgICAgICAgICBjb250ZW50ID0gdmFsdWU7ICAvLy9cclxuXHJcbiAgICByZXR1cm4gY29udGVudDtcclxuICB9XHJcblxyXG4gIGdldFNlbGVjdGlvbigpIHtcclxuICAgIGNvbnN0IGRvbUVsZW1lbnQgPSB0aGlzLmdldERPTUVsZW1lbnQoKSxcclxuICAgICAgICAgIHNlbGVjdGlvbiA9IFNlbGVjdGlvbi5mcm9tRE9NRWxlbWVudChkb21FbGVtZW50KTtcclxuXHJcbiAgICByZXR1cm4gc2VsZWN0aW9uO1xyXG4gIH1cclxuXHJcbiAgc2V0UmVhZE9ubHkocmVhZE9ubHkpIHtcclxuICAgIGNvbnN0IGRvbUVsZW1lbnQgPSB0aGlzLmdldERPTUVsZW1lbnQoKTtcclxuXHJcbiAgICBPYmplY3QuYXNzaWduKGRvbUVsZW1lbnQsIHtcclxuICAgICAgcmVhZE9ubHlcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2V0Q29udGVudChjb250ZW50KSB7XHJcbiAgICBjb25zdCB2YWx1ZSA9IGNvbnRlbnQsICAvLy9cclxuICAgICAgICAgIHByZXZpb3VzQ29udGVudCA9IGNvbnRlbnQsICAvLy9cclxuICAgICAgICAgIGRvbUVsZW1lbnQgPSB0aGlzLmdldERPTUVsZW1lbnQoKTtcclxuXHJcbiAgICBPYmplY3QuYXNzaWduKGRvbUVsZW1lbnQsIHtcclxuICAgICAgdmFsdWVcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuc2V0UHJldmlvdXNDb250ZW50KHByZXZpb3VzQ29udGVudCk7XHJcbiAgfVxyXG5cclxuICBzZXRTZWxlY3Rpb24oc2VsZWN0aW9uKSB7XHJcbiAgICBjb25zdCBzZWxlY3Rpb25TdGFydFBvc2l0aW9uID0gc2VsZWN0aW9uLmdldFN0YXJ0UG9zaXRpb24oKSxcclxuICAgICAgICAgIHNlbGVjdGlvbkVuZFBvc2l0aW9uID0gc2VsZWN0aW9uLmdldEVuZFBvc2l0aW9uKCksXHJcbiAgICAgICAgICBzZWxlY3Rpb25TdGFydCA9IHNlbGVjdGlvblN0YXJ0UG9zaXRpb24sICAvLy9cclxuICAgICAgICAgIHNlbGVjdGlvbkVuZCA9IHNlbGVjdGlvbkVuZFBvc2l0aW9uLCAgLy8vXHJcbiAgICAgICAgICBwcmV2aW91c1NlbGVjdGlvbiA9IHNlbGVjdGlvbiwgIC8vL1xyXG4gICAgICAgICAgZG9tRWxlbWVudCA9IHRoaXMuZ2V0RE9NRWxlbWVudCgpO1xyXG5cclxuICAgIE9iamVjdC5hc3NpZ24oZG9tRWxlbWVudCwge1xyXG4gICAgICBzZWxlY3Rpb25TdGFydCxcclxuICAgICAgc2VsZWN0aW9uRW5kXHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnNldFByZXZpb3VzU2VsZWN0aW9uKHByZXZpb3VzU2VsZWN0aW9uKTtcclxuICB9XHJcblxyXG4gIGlzTW91c2VEb3duKCkge1xyXG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLmdldFN0YXRlKCksXHJcbiAgICAgICAgICB7IG1vdXNlRG93biB9ID0gc3RhdGU7XHJcblxyXG4gICAgcmV0dXJuIG1vdXNlRG93bjtcclxuICB9XHJcblxyXG4gIGhhc0NoYW5nZWQoKSB7XHJcbiAgICBjb25zdCBjb250ZW50Q2hhbmdlZCA9IHRoaXMuaGFzQ29udGVudENoYW5nZWQoKSxcclxuICAgICAgICAgIHNlbGVjdGlvbkNoYW5nZWQgPSB0aGlzLmhhc1NlbGVjdGlvbkNoYW5nZWQoKSxcclxuICAgICAgICAgIGNoYW5nZWQgPSAoY29udGVudENoYW5nZWQgfHwgc2VsZWN0aW9uQ2hhbmdlZCk7XHJcblxyXG4gICAgcmV0dXJuIGNoYW5nZWQ7XHJcbiAgfVxyXG5cclxuICBoYXNDb250ZW50Q2hhbmdlZCgpIHtcclxuICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLmdldENvbnRlbnQoKSxcclxuICAgICAgICAgIHByZXZpb3VzQ29udGVudCA9IHRoaXMuZ2V0UHJldmlvdXNDb250ZW50KCksXHJcbiAgICAgICAgICBjb250ZW50RGlmZmVyZW50VG9QcmV2aW91c0NvbnRlbnQgPSAoY29udGVudCAhPT0gcHJldmlvdXNDb250ZW50KSxcclxuICAgICAgICAgIGNvbnRlbnRDaGFuZ2VkID0gY29udGVudERpZmZlcmVudFRvUHJldmlvdXNDb250ZW50OyAvLy9cclxuXHJcbiAgICByZXR1cm4gY29udGVudENoYW5nZWQ7XHJcbiAgfVxyXG5cclxuICBoYXNTZWxlY3Rpb25DaGFuZ2VkKCkge1xyXG4gICAgY29uc3Qgc2VsZWN0aW9uID0gdGhpcy5nZXRTZWxlY3Rpb24oKSxcclxuICAgICAgICAgIHByZXZpb3VzU2VsZWN0aW9uID0gdGhpcy5nZXRQcmV2aW91c1NlbGVjdGlvbigpLFxyXG4gICAgICAgICAgc2VsZWN0aW9uRGlmZmVyZW50VG9QcmV2aW91c1NlbGVjdGlvbiA9IHNlbGVjdGlvbi5pc0RpZmZlcmVudFRvKHByZXZpb3VzU2VsZWN0aW9uKSxcclxuICAgICAgICAgIHNlbGVjdGlvbkNoYW5nZWQgPSBzZWxlY3Rpb25EaWZmZXJlbnRUb1ByZXZpb3VzU2VsZWN0aW9uOyAvLy9cclxuXHJcbiAgICByZXR1cm4gc2VsZWN0aW9uQ2hhbmdlZDtcclxuICB9XHJcblxyXG4gIGFjdGl2YXRlKCkge1xyXG4gICAgY29uc3QgbW91c2VEb3duID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy5zZXRNb3VzZURvd24obW91c2VEb3duKTtcclxuXHJcbiAgICB3aW5kb3cub24oYCR7QkxVUl9FVkVOVF9UWVBFfSAke01PVVNFVVBfRVZFTlRfVFlQRX0gJHtDT05URVhUTUVOVV9FVkVOVF9UWVBFfWAsIHRoaXMubW91c2VVcEhhbmRsZXIsIHRoaXMpOyAvLy9cclxuXHJcbiAgICB0aGlzLm9uKE1PVVNFRE9XTl9FVkVOVF9UWVBFLCB0aGlzLm1vdXNlRG93bkhhbmRsZXIsIHRoaXMpO1xyXG5cclxuICAgIHRoaXMub24oTU9VU0VNT1ZFX0VWRU5UX1RZUEUsIHRoaXMubW91c2VNb3ZlSGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgdGhpcy5vbihLRVlET1dOX0VWRU5UX1RZUEUsIHRoaXMua2V5RG93bkhhbmRsZXIsIHRoaXMpO1xyXG5cclxuICAgIHRoaXMub24oSU5QVVRfRVZFTlRfVFlQRSwgdGhpcy5pbnB1dEhhbmRsZXIsIHRoaXMpO1xyXG5cclxuICAgIHRoaXMub24oU0NST0xMX0VWRU5UX1RZUEUsIHRoaXMuc2Nyb2xsSGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgdGhpcy5vbihGT0NVU19FVkVOVF9UWVBFLCB0aGlzLmZvY3VzSGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgdGhpcy5vbihCTFVSX0VWRU5UX1RZUEUsIHRoaXMuYmx1ckhhbmRsZXIsIHRoaXMpO1xyXG5cclxuICAgIHRoaXMuYWRkQ2xhc3MoXCJhY3RpdmVcIik7XHJcbiAgfVxyXG5cclxuICBkZWFjdGl2YXRlKCkge1xyXG4gICAgY29uc3QgbW91c2VEb3duID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy5zZXRNb3VzZURvd24obW91c2VEb3duKTtcclxuXHJcbiAgICB3aW5kb3cub2ZmKGAke0JMVVJfRVZFTlRfVFlQRX0gJHtNT1VTRVVQX0VWRU5UX1RZUEV9ICR7Q09OVEVYVE1FTlVfRVZFTlRfVFlQRX1gLCB0aGlzLm1vdXNlVXBIYW5kbGVyLCB0aGlzKTsgLy8vXHJcblxyXG4gICAgdGhpcy5vZmYoTU9VU0VET1dOX0VWRU5UX1RZUEUsIHRoaXMubW91c2VEb3duSGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgdGhpcy5vZmYoTU9VU0VNT1ZFX0VWRU5UX1RZUEUsIHRoaXMubW91c2VNb3ZlSGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgdGhpcy5vZmYoS0VZRE9XTl9FVkVOVF9UWVBFLCB0aGlzLmtleURvd25IYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICB0aGlzLm9mZihJTlBVVF9FVkVOVF9UWVBFLCB0aGlzLmlucHV0SGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgdGhpcy5vZmYoU0NST0xMX0VWRU5UX1RZUEUsIHRoaXMuc2Nyb2xsSGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgdGhpcy5vZmYoRk9DVVNfRVZFTlRfVFlQRSwgdGhpcy5mb2N1c0hhbmRsZXIsIHRoaXMpO1xyXG5cclxuICAgIHRoaXMub2ZmKEJMVVJfRVZFTlRfVFlQRSwgdGhpcy5ibHVySGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgdGhpcy5yZW1vdmVDbGFzcyhcImFjdGl2ZVwiKTtcclxuICB9XHJcblxyXG4gIG9uQmx1cihibHVySGFuZGxlciwgZWxlbWVudCkge1xyXG4gICAgY29uc3QgZXZlbnRUeXBlID0gQkxVUl9FVkVOVF9UWVBFLFxyXG4gICAgICAgICAgaGFuZGxlciA9IGJsdXJIYW5kbGVyOyAgLy8vXHJcblxyXG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgZWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICBvZmZCbHVyKGJsdXJIYW5kbGVyLCBlbGVtZW50KSB7XHJcbiAgICBjb25zdCBldmVudFR5cGUgPSBCTFVSX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgICBoYW5kbGVyID0gYmx1ckhhbmRsZXI7ICAvLy9cclxuXHJcbiAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KTtcclxuICB9XHJcblxyXG4gIG9uRm9jdXMoYmx1ckhhbmRsZXIsIGVsZW1lbnQpIHtcclxuICAgIGNvbnN0IGV2ZW50VHlwZSA9IEZPQ1VTX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgICBoYW5kbGVyID0gYmx1ckhhbmRsZXI7ICAvLy9cclxuXHJcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KTtcclxuICB9XHJcblxyXG4gIG9mZkZvY3VzKGJsdXJIYW5kbGVyLCBlbGVtZW50KSB7XHJcbiAgICBjb25zdCBldmVudFR5cGUgPSBGT0NVU19FVkVOVF9UWVBFLFxyXG4gICAgICAgICAgaGFuZGxlciA9IGJsdXJIYW5kbGVyOyAgLy8vXHJcblxyXG4gICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgZWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICBvblNjcm9sbChzY3JvbGxIYW5kbGVyLCBlbGVtZW50KSB7XHJcbiAgICBjb25zdCBldmVudFR5cGUgPSBTQ1JPTExfRVZFTlRfVFlQRSxcclxuICAgICAgICAgIGhhbmRsZXIgPSBzY3JvbGxIYW5kbGVyOyAgLy8vXHJcblxyXG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgZWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICBvZmZTY3JvbGwoc2Nyb2xsSGFuZGxlciwgZWxlbWVudCkge1xyXG4gICAgY29uc3QgZXZlbnRUeXBlID0gU0NST0xMX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgICBoYW5kbGVyID0gc2Nyb2xsSGFuZGxlcjsgIC8vL1xyXG5cclxuICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpO1xyXG4gIH1cclxuXHJcbiAgb25DaGFuZ2UoY2hhbmdlSGFuZGxlciwgZWxlbWVudCkge1xyXG4gICAgY29uc3QgZXZlbnRUeXBlID0gQ0hBTkdFX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgICBoYW5kbGVyID0gY2hhbmdlSGFuZGxlcjsgIC8vL1xyXG5cclxuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpO1xyXG4gIH1cclxuXHJcbiAgb2ZmQ2hhbmdlKGNoYW5nZUhhbmRsZXIsIGVsZW1lbnQpIHtcclxuICAgIGNvbnN0IGV2ZW50VHlwZSA9IENIQU5HRV9FVkVOVF9UWVBFLFxyXG4gICAgICAgICAgaGFuZGxlciA9IGNoYW5nZUhhbmRsZXI7ICAvLy9cclxuXHJcbiAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KTtcclxuICB9XHJcblxyXG4gIG1vdXNlVXBIYW5kbGVyKGV2ZW50LCBlbGVtZW50KSB7XHJcbiAgICBjb25zdCBtb3VzZURvd24gPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLnNldE1vdXNlRG93bihtb3VzZURvd24pO1xyXG4gIH07XHJcblxyXG4gIG1vdXNlRG93bkhhbmRsZXIoZXZlbnQsIGVsZW1lbnQpIHtcclxuICAgIGNvbnN0IGZvcmNlZCA9IGZhbHNlLFxyXG4gICAgICAgICAgbW91c2VEb3duID0gdHJ1ZSxcclxuICAgICAgICAgIGV2ZW50VHlwZSA9IENIQU5HRV9FVkVOVF9UWVBFO1xyXG5cclxuICAgIHRoaXMuc2V0TW91c2VEb3duKG1vdXNlRG93bik7XHJcblxyXG4gICAgZGVmZXIoKCkgPT4gdGhpcy5pbnRlcm1lZGlhdGVIYW5kbGVyKGV2ZW50LCBlbGVtZW50LCBldmVudFR5cGUsIGZvcmNlZCkpO1xyXG4gIH1cclxuXHJcbiAgbW91c2VNb3ZlSGFuZGxlcihldmVudCwgZWxlbWVudCkge1xyXG4gICAgY29uc3QgZm9yY2VkID0gZmFsc2UsXHJcbiAgICAgICAgICBtb3VzZURvd24gPSB0aGlzLmlzTW91c2VEb3duKCksXHJcbiAgICAgICAgICBldmVudFRZcGUgPSBDSEFOR0VfRVZFTlRfVFlQRTtcclxuXHJcbiAgICBpZiAobW91c2VEb3duKSB7XHJcbiAgICAgIHRoaXMuaW50ZXJtZWRpYXRlSGFuZGxlcihldmVudCwgZWxlbWVudCwgZXZlbnRUWXBlLCBmb3JjZWQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAga2V5RG93bkhhbmRsZXIoZXZlbnQsIGVsZW1lbnQpIHtcclxuICAgIGNvbnN0IGZvcmNlZCA9IGZhbHNlLFxyXG4gICAgICAgICAgZXZlbnRUeXBlID0gQ0hBTkdFX0VWRU5UX1RZUEU7XHJcblxyXG4gICAgZGVmZXIoKCkgPT4gdGhpcy5pbnRlcm1lZGlhdGVIYW5kbGVyKGV2ZW50LCBlbGVtZW50LCBldmVudFR5cGUsIGZvcmNlZCkpO1xyXG4gIH1cclxuXHJcbiAgaW5wdXRIYW5kbGVyKGV2ZW50LCBlbGVtZW50KSB7XHJcbiAgICBjb25zdCBmb3JjZWQgPSBmYWxzZSxcclxuICAgICAgICAgIGV2ZW50VHlwZSA9IENIQU5HRV9FVkVOVF9UWVBFO1xyXG5cclxuICAgIHRoaXMuaW50ZXJtZWRpYXRlSGFuZGxlcihldmVudCwgZWxlbWVudCwgZXZlbnRUeXBlLCBmb3JjZWQpO1xyXG4gIH1cclxuXHJcbiAgc2Nyb2xsSGFuZGxlcihldmVudCwgZWxlbWVudCkge1xyXG4gICAgY29uc3QgZXZlbnRUeXBlID0gU0NST0xMX0VWRU5UX1RZUEU7XHJcblxyXG4gICAgdGhpcy5jYWxsSGFuZGxlcnMoZXZlbnRUeXBlLCBldmVudCwgZWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICBmb2N1c0hhbmRsZXIoZXZlbnQsIGVsZW1lbnQpIHtcclxuICAgIGNvbnN0IGZvcmNlZCA9IHRydWUsXHJcbiAgICAgICAgICBldmVudFR5cGUgPSBGT0NVU19FVkVOVF9UWVBFO1xyXG5cclxuICAgIGRlZmVyKCgpID0+IHRoaXMuaW50ZXJtZWRpYXRlSGFuZGxlcihldmVudCwgZWxlbWVudCwgZXZlbnRUeXBlLCBmb3JjZWQpKTtcclxuICB9XHJcblxyXG4gIGJsdXJIYW5kbGVyKGV2ZW50LCBlbGVtZW50KSB7XHJcbiAgICBjb25zdCBmb3JjZWQgPSB0cnVlLFxyXG4gICAgICAgICAgZXZlbnRUeXBlID0gQkxVUl9FVkVOVF9UWVBFO1xyXG5cclxuICAgIHRoaXMuaW50ZXJtZWRpYXRlSGFuZGxlcihldmVudCwgZWxlbWVudCwgZXZlbnRUeXBlLCBmb3JjZWQpO1xyXG4gIH1cclxuXHJcbiAgaW50ZXJtZWRpYXRlSGFuZGxlcihldmVudCwgZWxlbWVudCwgZXZlbnRUeXBlLCBmb3JjZWQpIHtcclxuICAgIGNvbnN0IGNoYW5nZWQgPSB0aGlzLmhhc0NoYW5nZWQoKTtcclxuXHJcbiAgICBpZiAoY2hhbmdlZCB8fCBmb3JjZWQpIHtcclxuICAgICAgdGhpcy5jYWxsSGFuZGxlcnMoZXZlbnRUeXBlLCBldmVudCwgZWxlbWVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY29udGVudCA9IHRoaXMuZ2V0Q29udGVudCgpLFxyXG4gICAgICAgICAgc2VsZWN0aW9uID0gdGhpcy5nZXRTZWxlY3Rpb24oKSxcclxuICAgICAgICAgIHByZXZpb3VzQ29udGVudCA9IGNvbnRlbnQsICAvLy9cclxuICAgICAgICAgIHByZXZpb3VzU2VsZWN0aW9uID0gc2VsZWN0aW9uOyAgLy8vXHJcblxyXG4gICAgdGhpcy5zZXRQcmV2aW91c0NvbnRlbnQocHJldmlvdXNDb250ZW50KTtcclxuICAgIHRoaXMuc2V0UHJldmlvdXNTZWxlY3Rpb24ocHJldmlvdXNTZWxlY3Rpb24pO1xyXG4gIH1cclxuXHJcbiAgY2FsbEhhbmRsZXJzKGV2ZW50VHlwZSwgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XHJcbiAgICBjb25zdCBldmVudExpc3RlbmVycyA9IHRoaXMuZmluZEV2ZW50TGlzdGVuZXJzKGV2ZW50VHlwZSk7XHJcblxyXG4gICAgZXZlbnRMaXN0ZW5lcnMuZm9yRWFjaCgoZXZlbnRMaXN0ZW5lcikgPT4ge1xyXG4gICAgICBjb25zdCB7IGhhbmRsZXIsIGVsZW1lbnQ6IGhhbmRsZXJFbGVtZW50IH0gPSBldmVudExpc3RlbmVyLFxyXG4gICAgICAgICAgICBlbGVtZW50ID0gdGhpczsgLy8vXHJcblxyXG4gICAgICBpZiAoKGhhbmRsZXIgIT09IHRoaXMuYmx1ckhhbmRsZXIpICYmIChoYW5kbGVyICE9PSB0aGlzLmZvY3VzSGFuZGxlcikgJiYgKGhhbmRsZXIgIT09IHRoaXMuc2Nyb2xsSGFuZGxlcikpIHtcclxuICAgICAgICBoYW5kbGVyLmNhbGwoaGFuZGxlckVsZW1lbnQsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cywgZWxlbWVudCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0UHJldmlvdXNDb250ZW50KCkge1xyXG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLmdldFN0YXRlKCksXHJcbiAgICAgICAgICB7IHByZXZpb3VzQ29udGVudCB9ID0gc3RhdGU7XHJcblxyXG4gICAgcmV0dXJuIHByZXZpb3VzQ29udGVudDtcclxuICB9XHJcblxyXG4gIGdldFByZXZpb3VzU2VsZWN0aW9uKCkge1xyXG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLmdldFN0YXRlKCksXHJcbiAgICAgICAgICB7IHByZXZpb3VzU2VsZWN0aW9uIH0gPSBzdGF0ZTtcclxuXHJcbiAgICByZXR1cm4gcHJldmlvdXNTZWxlY3Rpb247XHJcbiAgfVxyXG5cclxuICBzZXRNb3VzZURvd24obW91c2VEb3duKSB7XHJcbiAgICB0aGlzLnVwZGF0ZVN0YXRlKHtcclxuICAgICAgbW91c2VEb3duXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNldFByZXZpb3VzQ29udGVudChwcmV2aW91c0NvbnRlbnQpIHtcclxuICAgIHRoaXMudXBkYXRlU3RhdGUoe1xyXG4gICAgICBwcmV2aW91c0NvbnRlbnRcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2V0UHJldmlvdXNTZWxlY3Rpb24ocHJldmlvdXNTZWxlY3Rpb24pIHtcclxuICAgIHRoaXMudXBkYXRlU3RhdGUoe1xyXG4gICAgICBwcmV2aW91c1NlbGVjdGlvblxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXRJbml0aWFsU3RhdGUoKSB7XHJcbiAgICBjb25zdCBtb3VzZURvd24gPSBmYWxzZSxcclxuICAgICAgICAgIHByZXZpb3VzQ29udGVudCA9IG51bGwsXHJcbiAgICAgICAgICBwcmV2aW91c1NlbGVjdGlvbiA9IG51bGw7XHJcblxyXG4gICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgIG1vdXNlRG93bixcclxuICAgICAgcHJldmlvdXNDb250ZW50LFxyXG4gICAgICBwcmV2aW91c1NlbGVjdGlvblxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBkaWRNb3VudCgpIHtcclxuICAgIGNvbnN0IHsgYWN0aXZlLCBvbkNoYW5nZSwgb25TY3JvbGwsIG9uRm9jdXMsIG9uQmx1ciB9ID0gdGhpcy5wcm9wZXJ0aWVzLFxyXG4gICAgICAgICAgICBjaGFuZ2VIYW5kbGVyID0gb25DaGFuZ2UsIC8vL1xyXG4gICAgICAgICAgICBzY3JvbGxIYW5kbGVyID0gb25TY3JvbGwsIC8vL1xyXG4gICAgICAgICAgICBmb2N1c0hhbmRsZXIgPSBvbkZvY3VzLCAvLy9cclxuICAgICAgICAgICAgYmx1ckhhbmRsZXIgPSBvbkJsdXI7IC8vL1xyXG5cclxuICAgIGNoYW5nZUhhbmRsZXIgJiYgdGhpcy5vbkNoYW5nZShjaGFuZ2VIYW5kbGVyLCB0aGlzKTtcclxuICAgIHNjcm9sbEhhbmRsZXIgJiYgdGhpcy5vblNjcm9sbChzY3JvbGxIYW5kbGVyLCB0aGlzKTtcclxuICAgIGZvY3VzSGFuZGxlciAmJiB0aGlzLm9uRm9jdXMoZm9jdXNIYW5kbGVyLCB0aGlzKTtcclxuICAgIGJsdXJIYW5kbGVyICYmIHRoaXMub25CbHVyKGJsdXJIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICBpZiAoYWN0aXZlKSB7XHJcbiAgICAgIHRoaXMuYWN0aXZhdGUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHdpbGxVbm1vdW50KCkge1xyXG4gICAgY29uc3QgeyBvbkNoYW5nZSwgb25TY3JvbGwsIG9uRm9jdXMsIG9uQmx1ciB9ID0gdGhpcy5wcm9wZXJ0aWVzLFxyXG4gICAgICAgICAgY2hhbmdlSGFuZGxlciA9IG9uQ2hhbmdlLCAvLy9cclxuICAgICAgICAgIHNjcm9sbEhhbmRsZXIgPSBvblNjcm9sbCwgLy8vXHJcbiAgICAgICAgICBmb2N1c0hhbmRsZXIgPSBvbkZvY3VzLCAvLy9cclxuICAgICAgICAgIGJsdXJIYW5kbGVyID0gb25CbHVyOyAvLy9cclxuXHJcbiAgICBjaGFuZ2VIYW5kbGVyICYmIHRoaXMub2ZmQ2hhbmdlKGNoYW5nZUhhbmRsZXIsIHRoaXMpO1xyXG4gICAgc2Nyb2xsSGFuZGxlciAmJiB0aGlzLm9mZlNjcm9sbChzY3JvbGxIYW5kbGVyLCB0aGlzKTtcclxuICAgIGZvY3VzSGFuZGxlciAmJiB0aGlzLm9mZkZvY3VzKGZvY3VzSGFuZGxlciwgdGhpcyk7XHJcbiAgICBibHVySGFuZGxlciAmJiB0aGlzLm9mZkJsdXIoYmx1ckhhbmRsZXIsIHRoaXMpO1xyXG4gIH1cclxuXHJcbiAgaW5pdGlhbGlzZSgpIHtcclxuICAgIHRoaXMuc2V0SW5pdGlhbFN0YXRlKCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgdGFnTmFtZSA9IFwidGV4dGFyZWFcIjtcclxuXHJcbiAgc3RhdGljIGlnbm9yZWRQcm9wZXJ0aWVzID0gW1xyXG4gICAgXCJvbkNoYW5nZVwiLFxyXG4gICAgXCJvblNjcm9sbFwiLFxyXG4gICAgXCJvbkZvY3VzXCIsXHJcbiAgICBcIm9uQmx1clwiLFxyXG4gICAgXCJhY3RpdmVcIlxyXG4gIF07XHJcblxyXG4gIHN0YXRpYyBkZWZhdWx0UHJvcGVydGllcyA9IHtcclxuICAgIGNsYXNzTmFtZTogXCJyaWNoXCJcclxuICB9O1xyXG59XHJcbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIFNlbGVjdGlvbiB9IGZyb20gXCIuL3NlbGVjdGlvblwiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIFJpY2hUZXh0YXJlYSB9IGZyb20gXCIuL3JpY2hUZXh0YXJlYVwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIFNlbGVjdGlvbiB9IGZyb20gXCIuL3NlbGVjdGlvblwiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIFJpY2hUZXh0YXJlYSB9IGZyb20gXCIuL3JpY2hUZXh0YXJlYVwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgZ3V0dGVySGVpZ2h0ID0gXCIxMDAwMDBweFwiO1xuZXhwb3J0IGNvbnN0IHNjcm9sbGJhclRoaWNrbmVzcyA9IFwiMTJweFwiO1xuZXhwb3J0IGNvbnN0IHNjcm9sbGJhclRodW1iQm9yZGVyUmFkaXVzID0gXCI4cHhcIjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IHNwcmluZ1dvb2QgPSBcIiNmOGY2ZjFcIjtcbmV4cG9ydCBjb25zdCBib25qb3VyID0gXCIjZTVlMGUxXCI7XG5leHBvcnQgY29uc3QgZ2FpbnNib3JvdWdoID0gXCIjZDVkOGQyXCI7XG5leHBvcnQgY29uc3Qgc3RhcmR1c3QgPSBcIiM5ZjlmOWNcIjtcbmV4cG9ydCBjb25zdCBodXJyaWNhbmUgPSBcIiM5MDg5ODlcIjtcbmV4cG9ydCBjb25zdCBzdG9ybUR1c3QgPSBcIiM2NDY0NjNcIjtcbmV4cG9ydCBjb25zdCBlbXBlcm9yID0gXCIjNTE1MTUwXCI7XG5leHBvcnQgY29uc3QgdHVhdGFyYSA9IFwiIzM2MzUzNFwiO1xuZXhwb3J0IGNvbnN0IHdvb2RzbW9rZSA9IFwiIzBjMGQwZlwiO1xuXG5leHBvcnQgY29uc3QgY2l0cm9uID0gXCIjODZiOTIzXCI7XG5leHBvcnQgY29uc3Qgc3VzaGkgPSBcIiM3ZmE4MmZcIjtcbmV4cG9ydCBjb25zdCBvbGl2ZURyYWIgPSBcIiM2Mzg4MjlcIjtcbmV4cG9ydCBjb25zdCByaWZsZUdyZWVuID0gXCIjNDE0ODMzXCI7XG5leHBvcnQgY29uc3QgbG9nQ2FiaW4gPSBcIiMyNDMwMWRcIjtcbmV4cG9ydCBjb25zdCBibGFja09saXZlID0gXCIjMWMyNDEyXCI7XG5leHBvcnQgY29uc3QgaHVudGVyR3JlZW4gPSBcIiMxNjFkMTBcIjtcblxuZXhwb3J0IGNvbnN0IGNhZGV0Qmx1ZSA9IFwiIzVmOWVhMFwiO1xuZXhwb3J0IGNvbnN0IGhhdmVsb2NrQmx1ZSA9IFwiIzVCOERlMVwiO1xuXG5leHBvcnQgY29uc3QgcG9tZWdyYW5hdGUgPSBcIiNmNTI5MjlcIjtcbmV4cG9ydCBjb25zdCByYXp6bWF0YXp6ID0gXCIjZTMyNTZiXCI7XG5leHBvcnQgY29uc3QgZmxhbWluZ28gPSBcIiNmMzRiNDRcIjtcbmV4cG9ydCBjb25zdCB0YWhpdGkgPSBcIiNGNThBMEFcIjtcbmV4cG9ydCBjb25zdCBlcXVhdG9yID0gXCIjZTRhQzVlXCI7XG5cbmV4cG9ydCBjb25zdCBwb3J0aWNhID0gXCIjZjdlNzVmXCI7XG5leHBvcnQgY29uc3QgY2VsZXJ5ID0gXCIjYmNiODUyXCI7XG5leHBvcnQgY29uc3Qgc3ljYW1vcmUgPSBcIiM5MDhkMzlcIjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYm9uam91ciwgaHVycmljYW5lLCBodW50ZXJHcmVlbiwgaGF2ZWxvY2tCbHVlLCBzdG9ybUR1c3QgfSBmcm9tIFwiLi4vY29sb3Vyc1wiO1xuXG5leHBvcnQgY29uc3QgY29sb3VyID0gc3Rvcm1EdXN0O1xuXG5leHBvcnQgY29uc3QgY2FyZXRDb2xvdXIgPSBib25qb3VyO1xuXG5leHBvcnQgY29uc3QgYm9yZGVyQ29sb3VyID0gc3Rvcm1EdXN0O1xuXG5leHBvcnQgY29uc3Qgc2VsZWN0aW9uQ29sb3VyID0gYm9uam91cjtcblxuZXhwb3J0IGNvbnN0IGJhY2tncm91bmRDb2xvdXIgPSBodW50ZXJHcmVlbjtcblxuZXhwb3J0IGNvbnN0IHNlbGVjdGlvbkJhY2tncm91bmRDb2xvdXIgPSBoYXZlbG9ja0JsdWU7XG5cbmV4cG9ydCBjb25zdCBzY3JvbGxiYXJUaHVtYkJveFNoYWRvd0NvbG91ciA9IHN0b3JtRHVzdDtcblxuZXhwb3J0IGNvbnN0IHNjcm9sbGJhclRodW1iQmFja2dyb3VuZENvbG91ciA9IGh1cnJpY2FuZTtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBjb2xvdXIsXG4gIGNhcmV0Q29sb3VyLFxuICBib3JkZXJDb2xvdXIsXG4gIHNlbGVjdGlvbkNvbG91cixcbiAgYmFja2dyb3VuZENvbG91cixcbiAgc2VsZWN0aW9uQmFja2dyb3VuZENvbG91cixcbiAgc2Nyb2xsYmFyVGh1bWJCb3hTaGFkb3dDb2xvdXIsXG4gIHNjcm9sbGJhclRodW1iQmFja2dyb3VuZENvbG91clxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHdpdGhTdHlsZSBmcm9tIFwiZWFzeS13aXRoLXN0eWxlXCI7ICAvLy9cblxuaW1wb3J0IHsgUmljaFRleHRhcmVhIH0gZnJvbSBcImVhc3ktcmljaHRleHRhcmVhXCI7XG5pbXBvcnQgeyBzY3JvbGxiYXJUaGlja25lc3MsIHNjcm9sbGJhclRodW1iQm9yZGVyUmFkaXVzIH0gZnJvbSBcIi4vc3R5bGVzXCI7XG5pbXBvcnQgeyBzZWxlY3Rpb25Db2xvdXIsIGJhY2tncm91bmRDb2xvdXIsIHNlbGVjdGlvbkJhY2tncm91bmRDb2xvdXIsIHNjcm9sbGJhclRodW1iQm94U2hhZG93Q29sb3VyLCBzY3JvbGxiYXJUaHVtYkJhY2tncm91bmRDb2xvdXIgIH0gZnJvbSBcIi4vc2NoZW1lL2NvbG91clwiO1xuXG5leHBvcnQgZGVmYXVsdCB3aXRoU3R5bGUoY2xhc3MgZXh0ZW5kcyBSaWNoVGV4dGFyZWEge1xuICBwb3NpdGlvbih0b3AsIGxlZnQpIHtcbiAgICB0b3AgPSBgJHt0b3B9cHhgO1xuICAgIGxlZnQgPSBgJHtsZWZ0fXB4YDtcblxuICAgIGNvbnN0IGNzcyA9IHtcbiAgICAgIHRvcCxcbiAgICAgIGxlZnRcbiAgICB9O1xuXG4gICAgdGhpcy5jc3MoY3NzKTtcbiAgfVxuXG4gIHNldEJvdW5kcyhib3VuZHMpIHtcbiAgICBjb25zdCB0b3AgPSBib3VuZHMuZ2V0VG9wKCksXG4gICAgICAgICAgbGVmdCA9IGJvdW5kcy5nZXRMZWZ0KCksXG4gICAgICAgICAgd2lkdGggPSBib3VuZHMuZ2V0V2lkdGgoKSxcbiAgICAgICAgICBoZWlnaHQgPSBib3VuZHMuZ2V0SGVpZ2h0KCk7XG5cbiAgICB0aGlzLnBvc2l0aW9uKHRvcCwgbGVmdCk7XG4gICAgdGhpcy5zZXRXaWR0aCh3aWR0aCk7XG4gICAgdGhpcy5zZXRIZWlnaHQoaGVpZ2h0KTtcbiAgfVxuXG4gIGRpZE1vdW50KCkge1xuICAgIGNvbnN0IHsgZmFuY3lTY3JvbGxiYXJzLCBoaWRkZW5TY3JvbGxiYXJzIH0gPSB0aGlzLnByb3BlcnRpZXM7XG5cbiAgICBpZiAoZmFuY3lTY3JvbGxiYXJzKSB7XG4gICAgICB0aGlzLmFkZENsYXNzKFwiZmFuY3ktc2Nyb2xsYmFyc1wiKTtcbiAgICB9XG5cbiAgICBpZiAoaGlkZGVuU2Nyb2xsYmFycykge1xuICAgICAgdGhpcy5hZGRDbGFzcyhcImhpZGRlbi1zY3JvbGxiYXJzXCIpO1xuICAgIH1cblxuICAgIHN1cGVyLmRpZE1vdW50KCk7XG4gIH1cblxuICB3aWxsVW5tb3VudCgpIHtcbiAgICBjb25zdCB7IGZhbmN5U2Nyb2xsYmFycywgaGlkZGVuU2Nyb2xsYmFycyB9ID0gdGhpcy5wcm9wZXJ0aWVzO1xuXG4gICAgaWYgKGZhbmN5U2Nyb2xsYmFycykge1xuICAgICAgdGhpcy5yZW1vdmVDbGFzcyhcImZhbmN5LXNjcm9sbGJhcnNcIik7XG4gICAgfVxuXG4gICAgaWYgKGhpZGRlblNjcm9sbGJhcnMpIHtcbiAgICAgIHRoaXMucmVtb3ZlQ2xhc3MoXCJoaWRkZW4tc2Nyb2xsYmFyc1wiKTtcbiAgICB9XG5cbiAgICBzdXBlci53aWxsVW5tb3VudCgpO1xuICB9XG5cbiAgcGFyZW50Q29udGV4dCgpIHtcbiAgICBjb25zdCBnZXRDb250ZW50ID0gdGhpcy5nZXRDb250ZW50LmJpbmQodGhpcyksICAvLy9cbiAgICAgICAgICBzZXRSaWNoVGV4dGFyZWFCb3VuZHMgPSB0aGlzLnNldEJvdW5kcy5iaW5kKHRoaXMpLCAgLy8vXG4gICAgICAgICAgZ2V0UmljaFRleHRhcmVhQ29udGVudCA9IHRoaXMuZ2V0Q29udGVudC5iaW5kKHRoaXMpLCAgLy8vXG4gICAgICAgICAgc2V0UmljaFRleHRhcmVhQ29udGVudCA9IHRoaXMuc2V0Q29udGVudC5iaW5kKHRoaXMpLCAgLy8vXG4gICAgICAgICAgc2V0UmljaFRleHRhcmVhUmVhZE9ubHkgPSB0aGlzLnNldFJlYWRPbmx5LmJpbmQodGhpcyk7ICAvLy9cblxuICAgIHJldHVybiAoe1xuICAgICAgZ2V0Q29udGVudCxcbiAgICAgIHNldFJpY2hUZXh0YXJlYUJvdW5kcyxcbiAgICAgIGdldFJpY2hUZXh0YXJlYUNvbnRlbnQsXG4gICAgICBzZXRSaWNoVGV4dGFyZWFDb250ZW50LFxuICAgICAgc2V0UmljaFRleHRhcmVhUmVhZE9ubHlcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcGVydGllcyA9IHtcbiAgICBzcGVsbENoZWNrOiBcImZhbHNlXCJcbiAgfTtcblxuICBzdGF0aWMgaWdub3JlZFByb3BlcnRpZXMgPSBbXG4gICAgXCJmYW5jeVNjcm9sbGJhcnNcIlxuICBdO1xufSlgXG5cbiAgY29sb3I6IHRyYW5zcGFyZW50O1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBjdXJzb3I6IGF1dG87XG4gIHJlc2l6ZTogbm9uZTtcbiAgb3V0bGluZTogbm9uZTtcbiAgei1pbmRleDogMTtcbiAgdGFiLXNpemU6IDI7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgb3ZlcmZsb3c6IHNjcm9sbDtcbiAgYm9yZGVyLXRvcDogbm9uZTtcbiAgd2hpdGUtc3BhY2U6IHByZTtcbiAgb3ZlcmZsb3ctd3JhcDogbm9ybWFsO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgXG4gIDo6c2VsZWN0aW9uIHtcbiAgICBjb2xvcjogJHtzZWxlY3Rpb25Db2xvdXJ9O1xuICAgIGJhY2tncm91bmQtY29sb3I6ICR7c2VsZWN0aW9uQmFja2dyb3VuZENvbG91cn07XG4gIH1cbiAgXG4gIC5oaWRkZW4tc2Nyb2xsYmFycyB7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgfVxuICBcbiAgLmZhbmN5LXNjcm9sbGJhcnM6Oi13ZWJraXQtc2Nyb2xsYmFyIHtcbiAgICB3aWR0aDogJHtzY3JvbGxiYXJUaGlja25lc3N9O1xuICAgIGhlaWdodDogJHtzY3JvbGxiYXJUaGlja25lc3N9O1xuICB9XG5cbiAgLmZhbmN5LXNjcm9sbGJhcnM6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG5cbiAgLmZhbmN5LXNjcm9sbGJhcnM6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHtcbiAgICBib3JkZXI6IDJweCBzb2xpZCAke2JhY2tncm91bmRDb2xvdXJ9O1xuICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMCAxcHggJHtzY3JvbGxiYXJUaHVtYkJveFNoYWRvd0NvbG91cn07XG4gICAgYm9yZGVyLXJhZGl1czogJHtzY3JvbGxiYXJUaHVtYkJvcmRlclJhZGl1c307XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHtzY3JvbGxiYXJUaHVtYkJhY2tncm91bmRDb2xvdXJ9O1xuICB9XG5cbiAgLmZhbmN5LXNjcm9sbGJhcnM6Oi13ZWJraXQtc2Nyb2xsYmFyLWNvcm5lciB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxuXG4gIGNhcmV0LWNvbG9yOiBpbmhlcml0O1xuICBcbiAgZm9udC1zaXplOiBpbmhlcml0O1xuICBsaW5lLWhlaWdodDogaW5oZXJpdDtcbiAgZm9udC1mYW1pbHk6IGluaGVyaXQ7XG4gIHRleHQtcmVuZGVyaW5nOiBpbmhlcml0O1xuICBmb250LWZlYXR1cmUtc2V0dGluZ3M6IGluaGVyaXQ7XG5cbmA7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBzcHJpbmdXb29kID0gXCIjZjhmNmYxXCI7XG5leHBvcnQgY29uc3QgYm9uam91ciA9IFwiI2U1ZTBlMVwiO1xuZXhwb3J0IGNvbnN0IGdhaW5zYm9yb3VnaCA9IFwiI2Q1ZDhkMlwiO1xuZXhwb3J0IGNvbnN0IHN0YXJkdXN0ID0gXCIjOWY5ZjljXCI7XG5leHBvcnQgY29uc3QgaHVycmljYW5lID0gXCIjOTA4OTg5XCI7XG5leHBvcnQgY29uc3Qgc3Rvcm1EdXN0ID0gXCIjNjQ2NDYzXCI7XG5leHBvcnQgY29uc3QgZW1wZXJvciA9IFwiIzUxNTE1MFwiO1xuZXhwb3J0IGNvbnN0IHR1YXRhcmEgPSBcIiMzNjM1MzRcIjtcbmV4cG9ydCBjb25zdCB3b29kc21va2UgPSBcIiMwYzBkMGZcIjtcblxuZXhwb3J0IGNvbnN0IGNpdHJvbiA9IFwiIzg2YjkyM1wiO1xuZXhwb3J0IGNvbnN0IHN1c2hpID0gXCIjN2ZhODJmXCI7XG5leHBvcnQgY29uc3Qgb2xpdmVEcmFiID0gXCIjNjM4ODI5XCI7XG5leHBvcnQgY29uc3QgcmlmbGVHcmVlbiA9IFwiIzQxNDgzM1wiO1xuZXhwb3J0IGNvbnN0IGxvZ0NhYmluID0gXCIjMjQzMDFkXCI7XG5leHBvcnQgY29uc3QgYmxhY2tPbGl2ZSA9IFwiIzFjMjQxMlwiO1xuZXhwb3J0IGNvbnN0IGh1bnRlckdyZWVuID0gXCIjMTYxZDEwXCI7XG5cbmV4cG9ydCBjb25zdCBjYWRldEJsdWUgPSBcIiM1ZjllYTBcIjtcbmV4cG9ydCBjb25zdCBoYXZlbG9ja0JsdWUgPSBcIiM1QjhEZTFcIjtcblxuZXhwb3J0IGNvbnN0IHBvbWVncmFuYXRlID0gXCIjZjUyOTI5XCI7XG5leHBvcnQgY29uc3QgcmF6em1hdGF6eiA9IFwiI2UzMjU2YlwiO1xuZXhwb3J0IGNvbnN0IGZsYW1pbmdvID0gXCIjZjM0YjQ0XCI7XG5leHBvcnQgY29uc3QgdGFoaXRpID0gXCIjRjU4QTBBXCI7XG5leHBvcnQgY29uc3QgZXF1YXRvciA9IFwiI2U0YUM1ZVwiO1xuXG5leHBvcnQgY29uc3QgcG9ydGljYSA9IFwiI2Y3ZTc1ZlwiO1xuZXhwb3J0IGNvbnN0IGNlbGVyeSA9IFwiI2JjYjg1MlwiO1xuZXhwb3J0IGNvbnN0IHN5Y2Ftb3JlID0gXCIjOTA4ZDM5XCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5pbXBvcnQgd2l0aFN0eWxlIGZyb20gXCJlYXN5LXdpdGgtc3R5bGVcIjsgIC8vL1xyXG5cclxuaW1wb3J0IHsgRWxlbWVudCB9IGZyb20gXCJlYXN5XCI7XHJcblxyXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcclxuXHJcbmNsYXNzIExpbmVOdW1iZXJzIGV4dGVuZHMgRWxlbWVudCB7XHJcbiAgdXBkYXRlKGxpbmVDb3VudCkge1xyXG4gICAgbGV0IGh0bWwgPSBFTVBUWV9TVFJJTkc7XHJcblxyXG4gICAgZm9yIChsZXQgbGluZU51bWJlciA9IDE7IGxpbmVOdW1iZXIgPD0gbGluZUNvdW50OyBsaW5lTnVtYmVyKyspIHtcclxuICAgICAgaHRtbCA9IGAke2h0bWx9JHtsaW5lTnVtYmVyfTxici8+YDtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmh0bWwoaHRtbCk7XHJcbiAgfVxyXG5cclxuICBwYXJlbnRDb250ZXh0KCkge1xyXG5cdCAgY29uc3QgdXBkYXRlTGluZU51bWJlcnMgPSB0aGlzLnVwZGF0ZS5iaW5kKHRoaXMpOyAgLy8vXHJcblxyXG4gICAgcmV0dXJuICh7XHJcbiAgICAgIHVwZGF0ZUxpbmVOdW1iZXJzXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyB0YWdOYW1lID0gXCJkaXZcIjtcclxuXHJcbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xyXG4gICAgY2xhc3NOYW1lOiBcImxpbmUtbnVtYmVyc1wiXHJcbiAgfTtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgd2l0aFN0eWxlKExpbmVOdW1iZXJzKWBcclxuXHJcbiAgZmxvYXQ6IGxlZnQ7XHJcbiAgbWFyZ2luOiAwIDZweCAwIDZweDtcclxuICBcclxuICBjb2xvcjogaW5oZXJpdDtcclxuXHJcbiAgZm9udC1zaXplOiBpbmhlcml0O1xyXG4gIGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xyXG4gIGZvbnQtZmFtaWx5OiAnRGVqYVZ1IFNhbnMgTW9ubycsIE1lbmxvLCAnTHVjaWRhIENvbnNvbGUnLCBNb25hY28sIG1vbm9zcGFjZTtcclxuICB0ZXh0LXJlbmRlcmluZzogaW5oZXJpdDtcclxuICBmb250LWZlYXR1cmUtc2V0dGluZ3M6IGluaGVyaXQ7XHJcblxyXG5gO1xyXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBsaW5lQ291bnRGcm9tVG9rZW5zKHRva2Vucykge1xuICBsZXQgbGluZUNvdW50ID0gMTsgIC8vL1xuXG4gIHRva2Vucy5mb3JFYWNoKCh0b2tlbikgPT4ge1xuICAgIGNvbnN0IHRva2VuRW5kT2ZMaW5lVG9rZW4gPSB0b2tlbi5pc0VuZE9mTGluZVRva2VuKCk7XG5cbiAgICBpZiAodG9rZW5FbmRPZkxpbmVUb2tlbikge1xuICAgICAgbGluZUNvdW50Kys7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gbGluZUNvdW50O1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xyXG5cclxuaW1wb3J0IHdpdGhTdHlsZSBmcm9tIFwiZWFzeS13aXRoLXN0eWxlXCI7ICAvLy9cclxuXHJcbmltcG9ydCB7IFJlYWN0LCBFbGVtZW50IH0gZnJvbSBcImVhc3lcIjtcclxuXHJcbmltcG9ydCBMaW5lTnVtYmVycyBmcm9tIFwiLi9saW5lTnVtYmVyc1wiO1xyXG5cclxuaW1wb3J0IHsgZ3V0dGVySGVpZ2h0IH0gZnJvbSBcIi4vc3R5bGVzXCI7XHJcbmltcG9ydCB7IGxpbmVDb3VudEZyb21Ub2tlbnMgfSBmcm9tIFwiLi91dGlsaXRpZXMvdG9rZW5zXCI7XHJcblxyXG5jbGFzcyBHdXR0ZXIgZXh0ZW5kcyBFbGVtZW50IHtcclxuICB1cGRhdGUodG9rZW5zKSB7XHJcbiAgICBjb25zdCBsaW5lQ291bnQgPSBsaW5lQ291bnRGcm9tVG9rZW5zKHRva2Vucyk7XHJcblxyXG4gICAgdGhpcy5zZXRMaW5lQ291bnQobGluZUNvdW50KTtcclxuXHJcbiAgICB0aGlzLnVwZGF0ZUxpbmVOdW1iZXJzKGxpbmVDb3VudCk7XHJcbiAgfVxyXG5cclxuICBzY3JvbGwoc2Nyb2xsVG9wLCBzY3JvbGxMZWZ0KSB7XHJcbiAgICB0aGlzLnNldFNjcm9sbFRvcChzY3JvbGxUb3ApO1xyXG5cclxuICAgIHRoaXMucG9zaXRpb24oKTtcclxuICB9XHJcblxyXG4gIHBvc2l0aW9uKCkge1xyXG4gICAgY29uc3Qgc2Nyb2xsVG9wID0gdGhpcy5nZXRTY3JvbGxUb3AoKTtcclxuXHJcbiAgICBjb25zdCB0b3AgPSBgJHstc2Nyb2xsVG9wfXB4YCxcclxuICAgICAgICAgIGNzcyA9IHtcclxuICAgICAgICAgICAgdG9wXHJcbiAgICAgICAgICB9O1xyXG5cclxuICAgIHRoaXMuY3NzKGNzcyk7XHJcbiAgfVxyXG5cclxuICBnZXRMaW5lQ291bnQoKSB7XHJcbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuZ2V0U3RhdGUoKSxcclxuICAgICAgICAgIHsgbGluZUNvdW50IH0gPSBzdGF0ZTtcclxuXHJcbiAgICByZXR1cm4gbGluZUNvdW50O1xyXG4gIH1cclxuXHJcbiAgZ2V0U2Nyb2xsVG9wKCkge1xyXG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLmdldFN0YXRlKCksXHJcbiAgICAgICAgICB7IHNjcm9sbFRvcCB9ID0gc3RhdGU7XHJcblxyXG4gICAgcmV0dXJuIHNjcm9sbFRvcDtcclxuICB9XHJcblxyXG4gIHNldExpbmVDb3VudChsaW5lQ291bnQpIHtcclxuICAgIHRoaXMudXBkYXRlU3RhdGUoe1xyXG4gICAgICBsaW5lQ291bnRcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2V0U2Nyb2xsVG9wKHNjcm9sbFRvcCkge1xyXG4gICAgdGhpcy51cGRhdGVTdGF0ZSh7XHJcbiAgICAgIHNjcm9sbFRvcFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBjaGlsZEVsZW1lbnRzKCkge1xyXG4gICAgcmV0dXJuIChbXHJcblxyXG4gICAgICA8TGluZU51bWJlcnMgLz4sXHJcblxyXG4gICAgXSk7XHJcbiAgfVxyXG5cclxuICBwYXJlbnRDb250ZXh0KCkge1xyXG5cdCAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxyXG4gICAgICAgICAgZ2V0TGluZUNvdW50ID0gdGhpcy5nZXRMaW5lQ291bnQuYmluZCh0aGlzKSxcclxuICAgICAgICAgIGdldEd1dHRlcldpZHRoID0gdGhpcy5nZXRXaWR0aC5iaW5kKHRoaXMpLCAgLy8vXHJcblx0XHRcdFx0ICBwb3NpdGlvbkd1dHRlciA9IHRoaXMucG9zaXRpb24uYmluZCh0aGlzKSwgIC8vL1xyXG5cdFx0XHRcdCAgdXBkYXRlR3V0dGVyID0gdGhpcy51cGRhdGUuYmluZCh0aGlzKSwgIC8vL1xyXG5cdFx0XHRcdCAgc2Nyb2xsR3V0dGVyID0gdGhpcy5zY3JvbGwuYmluZCh0aGlzKSwgIC8vL1xyXG4gICAgICAgICAgcGFyZW50Q29udGV4dCA9IE9iamVjdC5hc3NpZ24oe30sIGNvbnRleHQsIHtcclxuICAgICAgICAgICAgZ2V0TGluZUNvdW50LFxyXG4gICAgICAgICAgICBnZXRHdXR0ZXJXaWR0aCxcclxuICAgICAgICAgICAgcG9zaXRpb25HdXR0ZXIsXHJcbiAgICAgICAgICAgIHVwZGF0ZUd1dHRlcixcclxuICAgICAgICAgICAgc2Nyb2xsR3V0dGVyXHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gcGFyZW50Q29udGV4dDtcclxuICB9XHJcbiAgXHJcbiAgc2V0SW5pdGlhbFN0YXRlKCkge1xyXG4gICAgY29uc3Qgc2Nyb2xsVG9wID0gMCxcclxuICAgICAgICAgIGxpbmVDb3VudCA9IG51bGw7XHJcblxyXG4gICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgIHNjcm9sbFRvcCxcclxuICAgICAgbGluZUNvdW50XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGluaXRpYWxpc2UoKSB7XHJcbiAgICB0aGlzLmFzc2lnbkNvbnRleHQoKTtcclxuXHJcbiAgICB0aGlzLnNldEluaXRpYWxTdGF0ZSgpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIHRhZ05hbWUgPSBcImRpdlwiO1xyXG5cclxuICBzdGF0aWMgZGVmYXVsdFByb3BlcnRpZXMgPSB7XHJcbiAgICBjbGFzc05hbWU6IFwiZ3V0dGVyXCJcclxuICB9O1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCB3aXRoU3R5bGUoR3V0dGVyKWBcclxuXHJcbiAgaGVpZ2h0OiAke2d1dHRlckhlaWdodH07XHJcbiAgei1pbmRleDogMjtcclxuICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgdGV4dC1hbGlnbjogcmlnaHQ7XHJcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XHJcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XHJcbiAgYm9yZGVyLXJpZ2h0LXN0eWxlOiBkb3R0ZWQ7XHJcbiAgYm9yZGVyLXJpZ2h0LXdpZHRoOiAxcHg7XHJcblxyXG4gIGNvbG9yOiBpbmhlcml0O1xyXG4gIGJvcmRlci1jb2xvcjogaW5oZXJpdDtcclxuICBiYWNrZ3JvdW5kLWNvbG9yOiBpbmhlcml0O1xyXG5cclxuICBmb250LXNpemU6IGluaGVyaXQ7XHJcbiAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7XHJcbiAgZm9udC1mYW1pbHk6IGluaGVyaXQ7XHJcbiAgdGV4dC1yZW5kZXJpbmc6IGluaGVyaXQ7XHJcbiAgZm9udC1mZWF0dXJlLXNldHRpbmdzOiBpbmhlcml0O1xyXG5cclxuYDtcclxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBFbGVtZW50IH0gZnJvbSBcImVhc3lcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2Nyb2xsYWJsZUVsZW1lbnQgZXh0ZW5kcyBFbGVtZW50IHtcbiAgc2Nyb2xsKHNjcm9sbFRvcCwgc2Nyb2xsTGVmdCkge1xuICAgIHRoaXMuc2V0U2Nyb2xsVG9wKHNjcm9sbFRvcCk7XG4gICAgdGhpcy5zZXRTY3JvbGxMZWZ0KHNjcm9sbExlZnQpO1xuXG4gICAgY29uc3QgdG9wID0gdGhpcy5nZXRUb3AoKSxcbiAgICAgICAgICBsZWZ0ID0gdGhpcy5nZXRMZWZ0KCk7XG5cbiAgICB0aGlzLnBvc2l0aW9uKHRvcCwgbGVmdCk7XG4gIH1cblxuICByZXNpemUod2lkdGgsIGhlaWdodCkge1xuICAgIGNvbnN0IHsgc2Nyb2xsYmFyVGhpY2tuZXNzIH0gPSB0aGlzLnByb3BlcnRpZXM7XG5cbiAgICB3aWR0aCA9IHdpZHRoIC0gc2Nyb2xsYmFyVGhpY2tuZXNzO1xuICAgIGhlaWdodCA9IGhlaWdodCAtIHNjcm9sbGJhclRoaWNrbmVzcztcblxuICAgIHRoaXMuc2V0V2lkdGgod2lkdGgpO1xuICAgIHRoaXMuc2V0SGVpZ2h0KGhlaWdodCk7XG5cbiAgICBjb25zdCB0b3AgPSB0aGlzLmdldFRvcCgpLFxuICAgICAgICAgIGxlZnQgPSB0aGlzLmdldExlZnQoKTtcblxuICAgIHRoaXMucG9zaXRpb24odG9wLCBsZWZ0KTtcbiAgfVxuXG4gIHBvc2l0aW9uKHRvcCwgbGVmdCkge1xuICAgIHRoaXMuc2V0VG9wKHRvcCk7XG4gICAgdGhpcy5zZXRMZWZ0KGxlZnQpO1xuXG4gICAgbGV0IHdpZHRoID0gdGhpcy5nZXRXaWR0aCgpLFxuICAgICAgICBoZWlnaHQgPSB0aGlzLmdldEhlaWdodCgpO1xuXG4gICAgY29uc3Qgc2Nyb2xsVG9wID0gdGhpcy5nZXRTY3JvbGxUb3AoKSxcbiAgICAgICAgICBzY3JvbGxMZWZ0ID0gdGhpcy5nZXRTY3JvbGxMZWZ0KCk7XG5cbiAgICB0b3AgPSB0b3AgLSBzY3JvbGxUb3A7XG4gICAgbGVmdCA9IGxlZnQgLSBzY3JvbGxMZWZ0O1xuICAgIHdpZHRoID0gd2lkdGggKyBzY3JvbGxMZWZ0O1xuICAgIGhlaWdodCA9IGhlaWdodCArIHNjcm9sbFRvcDtcblxuICAgIHRvcCA9IGAke3RvcH1weGA7XG4gICAgbGVmdCA9IGAke2xlZnR9cHhgO1xuICAgIHdpZHRoID0gYCR7d2lkdGh9cHhgO1xuICAgIGhlaWdodCA9IGAke2hlaWdodH1weGA7XG5cbiAgICBjb25zdCBjc3MgPSB7XG4gICAgICB0b3AsXG4gICAgICBsZWZ0LFxuICAgICAgd2lkdGgsXG4gICAgICBoZWlnaHRcbiAgICB9O1xuXG4gICAgdGhpcy5jc3MoY3NzKTtcbiAgfVxuXG4gIGdldFRvcCgpIHtcbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuZ2V0U3RhdGUoKSxcbiAgICAgICAgICB7IHRvcCB9ID0gc3RhdGU7XG5cbiAgICByZXR1cm4gdG9wO1xuICB9XG5cbiAgZ2V0TGVmdCgpIHtcbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuZ2V0U3RhdGUoKSxcbiAgICAgICAgICB7IGxlZnQgfSA9IHN0YXRlO1xuXG4gICAgcmV0dXJuIGxlZnQ7XG4gIH1cblxuICBnZXRXaWR0aCgpIHtcbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuZ2V0U3RhdGUoKSxcbiAgICAgICAgICB7IHdpZHRoIH0gPSBzdGF0ZTtcblxuICAgIHJldHVybiB3aWR0aDtcbiAgfVxuXG4gIGdldEhlaWdodCgpIHtcbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuZ2V0U3RhdGUoKSxcbiAgICAgICAgICB7IGhlaWdodCB9ID0gc3RhdGU7XG5cbiAgICByZXR1cm4gaGVpZ2h0O1xuICB9XG5cbiAgZ2V0U2Nyb2xsVG9wKCkge1xuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5nZXRTdGF0ZSgpLFxuICAgICAgICAgIHsgc2Nyb2xsVG9wIH0gPSBzdGF0ZTtcblxuICAgIHJldHVybiBzY3JvbGxUb3A7XG4gIH1cblxuICBnZXRTY3JvbGxMZWZ0KCkge1xuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5nZXRTdGF0ZSgpLFxuICAgICAgICAgIHsgc2Nyb2xsTGVmdCB9ID0gc3RhdGU7XG5cbiAgICByZXR1cm4gc2Nyb2xsTGVmdDtcbiAgfVxuXG4gIHNldFRvcCh0b3ApIHtcbiAgICB0aGlzLnVwZGF0ZVN0YXRlKHtcbiAgICAgIHRvcFxuICAgIH0pO1xuICB9XG5cbiAgc2V0TGVmdChsZWZ0KSB7XG4gICAgdGhpcy51cGRhdGVTdGF0ZSh7XG4gICAgICBsZWZ0XG4gICAgfSk7XG4gIH1cblxuICBzZXRXaWR0aCh3aWR0aCkge1xuICAgIHRoaXMudXBkYXRlU3RhdGUoe1xuICAgICAgd2lkdGhcbiAgICB9KTtcbiAgfVxuXG4gIHNldEhlaWdodChoZWlnaHQpIHtcbiAgICB0aGlzLnVwZGF0ZVN0YXRlKHtcbiAgICAgIGhlaWdodFxuICAgIH0pO1xuICB9XG5cbiAgc2V0U2Nyb2xsVG9wKHNjcm9sbFRvcCkge1xuICAgIHRoaXMudXBkYXRlU3RhdGUoe1xuICAgICAgc2Nyb2xsVG9wXG4gICAgfSk7XG4gIH1cblxuICBzZXRTY3JvbGxMZWZ0KHNjcm9sbExlZnQpIHtcbiAgICB0aGlzLnVwZGF0ZVN0YXRlKHtcbiAgICAgIHNjcm9sbExlZnRcbiAgICB9KTtcbiAgfVxuXG4gIHNldEluaXRpYWxTdGF0ZSgpIHtcbiAgICBjb25zdCB0b3AgPSAwLFxuICAgICAgICAgIGxlZnQgPSAwLFxuICAgICAgICAgIHdpZHRoID0gMCxcbiAgICAgICAgICBoZWlnaHQgPSAwLFxuICAgICAgICAgIHNjcm9sbFRvcCA9IDAsXG4gICAgICAgICAgc2Nyb2xsTGVmdCA9IDA7XG5cbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIHRvcCxcbiAgICAgIGxlZnQsXG4gICAgICB3aWR0aCxcbiAgICAgIGhlaWdodCxcbiAgICAgIHNjcm9sbFRvcCxcbiAgICAgIHNjcm9sbExlZnRcbiAgICB9KTtcbiAgfVxuXG4gIGluaXRpYWxpc2UoKSB7XG4gICAgdGhpcy5hc3NpZ25Db250ZXh0KCk7XG5cbiAgICB0aGlzLnNldEluaXRpYWxTdGF0ZSgpO1xuICB9XG5cbiAgc3RhdGljIGlnbm9yZVByb3BlcnRpZXMgPSBbXG4gICAgXCJzY3JvbGxiYXJUaGlja25lc3NcIlxuICBdO1xufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5pbXBvcnQgd2l0aFN0eWxlIGZyb20gXCJlYXN5LXdpdGgtc3R5bGVcIjsgIC8vL1xyXG5cclxuaW1wb3J0IFNjcm9sbGFibGVFbGVtZW50IGZyb20gXCIuL2VsZW1lbnQvc2Nyb2xsYWJsZVwiO1xyXG5cclxuY2xhc3MgU3ludGF4IGV4dGVuZHMgU2Nyb2xsYWJsZUVsZW1lbnQge1xyXG4gIHNldEJvdW5kcyhib3VuZHMpIHtcclxuICAgIGNvbnN0IHRvcCA9IGJvdW5kcy5nZXRUb3AoKSxcclxuICAgICAgICAgIGxlZnQgPSBib3VuZHMuZ2V0TGVmdCgpLFxyXG4gICAgICAgICAgd2lkdGggPSBib3VuZHMuZ2V0V2lkdGgoKSxcclxuICAgICAgICAgIGhlaWdodCA9IGJvdW5kcy5nZXRIZWlnaHQoKTtcclxuXHJcbiAgICB0aGlzLnBvc2l0aW9uKHRvcCwgbGVmdCk7XHJcbiAgICB0aGlzLnNldFdpZHRoKHdpZHRoKTtcclxuICAgIHRoaXMuc2V0SGVpZ2h0KGhlaWdodCk7XHJcbiAgfVxyXG5cclxuICBzZXRMYW5ndWFnZShsYW5ndWFnZSkge1xyXG4gICAgY29uc3Qgc3RhdGUgPSB7XHJcbiAgICAgIGxhbmd1YWdlXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMucmVtb3ZlTGFuZ3VhZ2VDbGFzcygpO1xyXG5cclxuICAgIHRoaXMudXBkYXRlU3RhdGUoc3RhdGUpO1xyXG5cclxuICAgIHRoaXMuYWRkTGFuZ3VhZ2VDbGFzcygpO1xyXG4gIH1cclxuXHJcbiAgYWRkTGFuZ3VhZ2VDbGFzcygpIHtcclxuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5nZXRTdGF0ZSgpLFxyXG4gICAgICAgICAgeyBsYW5ndWFnZSB9ID0gc3RhdGU7XHJcblxyXG4gICAgaWYgKGxhbmd1YWdlICE9PSBudWxsKSB7XHJcbiAgICAgIGNvbnN0IGxhbmd1YWdlQ2xhc3MgPSBsYW5ndWFnZTsgLy8vXHJcblxyXG4gICAgICB0aGlzLmFkZENsYXNzKGxhbmd1YWdlQ2xhc3MpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVtb3ZlTGFuZ3VhZ2VDbGFzcygpIHtcclxuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5nZXRTdGF0ZSgpLFxyXG4gICAgICAgICAgeyBsYW5ndWFnZSB9ID0gc3RhdGU7XHJcblxyXG4gICAgaWYgKGxhbmd1YWdlICE9PSBudWxsKSB7XHJcbiAgICAgIGNvbnN0IGxhbmd1YWdlQ2xhc3MgPSBsYW5ndWFnZTsgLy8vXHJcblxyXG4gICAgICB0aGlzLnJlbW92ZUNsYXNzKGxhbmd1YWdlQ2xhc3MpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdXBkYXRlKHRva2Vucykge1xyXG4gICAgY29uc3QgaHRtbCA9IHRva2Vucy5yZWR1Y2UoKGh0bWwsIHRva2VuKSA9PiB7IC8vL1xyXG4gICAgICAgICAgICBjb25zdCB0b2tlbldpdGhTZWxlY3Rpb25IVE1MID0gdG9rZW4uYXNIVE1MKCk7XHJcblxyXG4gICAgICAgICAgICBodG1sICs9IHRva2VuV2l0aFNlbGVjdGlvbkhUTUw7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gaHRtbDtcclxuICAgICAgICAgIH0sIFwiXCIpO1xyXG5cclxuICAgIHRoaXMuaHRtbChodG1sKTtcclxuICB9XHJcblxyXG4gIHBhcmVudENvbnRleHQoKSB7XHJcblx0ICBjb25zdCBzZXRMYW5ndWFnZSA9IHRoaXMuc2V0TGFuZ3VhZ2UuYmluZCh0aGlzKSxcclxuICAgICAgICAgIHVwZGF0ZVN5bnRheCA9IHRoaXMudXBkYXRlLmJpbmQodGhpcyksIC8vL1xyXG5cdFx0XHRcdCAgc2Nyb2xsU3ludGF4ID0gdGhpcy5zY3JvbGwuYmluZCh0aGlzKSwgLy8vXHJcbiAgICAgICAgICBzZXRTeW50YXhCb3VuZHMgPSB0aGlzLnNldEJvdW5kcy5iaW5kKHRoaXMpOyAgLy9cclxuXHJcbiAgICByZXR1cm4gKHtcclxuICAgICAgc2V0TGFuZ3VhZ2UsXHJcbiAgICAgIHVwZGF0ZVN5bnRheCxcclxuICAgICAgc2Nyb2xsU3ludGF4LFxyXG4gICAgICBzZXRTeW50YXhCb3VuZHNcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2V0SW5pdGlhbFN0YXRlKCkge1xyXG4gICAgY29uc3QgbGFuZ3VhZ2UgPSBudWxsO1xyXG5cclxuICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICBsYW5ndWFnZVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBpbml0aWFsaXNlKCkge1xyXG4gICAgdGhpcy5zZXRJbml0aWFsU3RhdGUoKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyB0YWdOYW1lID0gXCJkaXZcIjtcclxuXHJcbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xyXG4gICAgY2xhc3NOYW1lOiBcInN5bnRheFwiXHJcbiAgfTtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgd2l0aFN0eWxlKFN5bnRheClgXHJcblxyXG4gIHotaW5kZXg6IDA7XHJcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcclxuICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgd2hpdGUtc3BhY2U6IHByZTtcclxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcclxuICBiYWNrZ3JvdW5kLWNvbG9yOiBpbmhlcml0O1xyXG5cclxuICBmb250LXNpemU6IGluaGVyaXQ7XHJcbiAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7XHJcbiAgZm9udC1mYW1pbHk6IGluaGVyaXQ7XHJcbiAgdGV4dC1yZW5kZXJpbmc6IGluaGVyaXQ7XHJcbiAgZm9udC1mZWF0dXJlLXNldHRpbmdzOiBpbmhlcml0O1xyXG5cclxuYDtcclxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgd2l0aFN0eWxlIGZyb20gXCJlYXN5LXdpdGgtc3R5bGVcIjsgIC8vL1xuXG5pbXBvcnQgeyBSZWFjdCwgQm91bmRzLCBFbGVtZW50IH0gZnJvbSBcImVhc3lcIjtcblxuaW1wb3J0IEd1dHRlciBmcm9tIFwiLi9ndXR0ZXJcIjtcbmltcG9ydCBTeW50YXggZnJvbSBcIi4vc3ludGF4XCI7XG5cbmNsYXNzIFByZXR0eVByaW50ZXIgZXh0ZW5kcyBFbGVtZW50IHtcbiAgZ2V0V2lkdGgoKSB7XG4gICAgY29uc3QgaGlkZGVuID0gdGhpcy5pc0hpZGRlbigpO1xuXG4gICAgaWYgKGhpZGRlbikge1xuICAgICAgdGhpcy5zaG93KCk7XG4gICAgfVxuXG4gICAgY29uc3Qgd2lkdGggPSBzdXBlci5nZXRXaWR0aCgpO1xuXG4gICAgaWYgKGhpZGRlbikge1xuICAgICAgdGhpcy5oaWRlKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHdpZHRoO1xuICB9XG5cbiAgZ2V0SGVpZ2h0KCkge1xuICAgIGNvbnN0IGhpZGRlbiA9IHRoaXMuaXNIaWRkZW4oKTtcblxuICAgIGlmIChoaWRkZW4pIHtcbiAgICAgIHRoaXMuc2hvdygpO1xuICAgIH1cblxuICAgIGNvbnN0IGhlaWdodCA9IHN1cGVyLmdldEhlaWdodCgpO1xuXG4gICAgaWYgKGhpZGRlbikge1xuICAgICAgdGhpcy5oaWRlKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGhlaWdodDtcbiAgfVxuXG4gIHNjcm9sbChzY3JvbGxUb3AsIHNjcm9sbExlZnQpIHtcbiAgICB0aGlzLnNjcm9sbEd1dHRlcihzY3JvbGxUb3AgLHNjcm9sbExlZnQpO1xuICAgIHRoaXMuc2Nyb2xsU3ludGF4KHNjcm9sbFRvcCwgc2Nyb2xsTGVmdCk7XG4gIH1cblxuICB1cGRhdGUodG9rZW5zKSB7XG4gICAgbGV0IGd1dHRlcldpZHRoID0gdGhpcy5nZXRHdXR0ZXJXaWR0aCgpLFxuICAgICAgICBwcmV2aW91c0d1dHRlcldpZHRoID0gdGhpcy5nZXRQcmV2aW91c0d1dHRlcldpZHRoKCk7XG5cbiAgICB0aGlzLnVwZGF0ZVN5bnRheCh0b2tlbnMpO1xuXG4gICAgdGhpcy51cGRhdGVHdXR0ZXIodG9rZW5zKTtcblxuICAgIGlmIChwcmV2aW91c0d1dHRlcldpZHRoICE9PSBndXR0ZXJXaWR0aCkge1xuICAgICAgcHJldmlvdXNHdXR0ZXJXaWR0aCA9IGd1dHRlcldpZHRoOyAgLy8vXG5cbiAgICAgIHRoaXMuc2V0UHJldmlvdXNHdXR0ZXJXaWR0aChwcmV2aW91c0d1dHRlcldpZHRoKTtcblxuICAgICAgdGhpcy5yZXNpemUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZ3V0dGVyV2lkdGggPSBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBndXR0ZXJXaWR0aDtcbiAgfVxuXG4gIGdldElubmVyQm91bmRzKGd1dHRlcldpZHRoKSB7XG4gICAgbGV0IHRvcCA9IDAsXG4gICAgICAgIGxlZnQgPSAwLFxuICAgICAgICB3aWR0aCA9IHRoaXMuZ2V0V2lkdGgoKSxcbiAgICAgICAgaGVpZ2h0ID0gdGhpcy5nZXRIZWlnaHQoKTtcblxuICAgIGxlZnQgKz0gZ3V0dGVyV2lkdGg7XG4gICAgd2lkdGggLT0gZ3V0dGVyV2lkdGg7XG5cbiAgICBjb25zdCBib3VuZHMgPSBCb3VuZHMuZnJvbVRvcExlZnRXaWR0aEFuZEhlaWdodCh0b3AsIGxlZnQsIHdpZHRoLCBoZWlnaHQpLFxuICAgICAgICAgIGlubmVyQm91bmRzID0gYm91bmRzOyAvLy9cblxuICAgIHJldHVybiBpbm5lckJvdW5kcztcbiAgfVxuXG4gIHJlc2l6ZSgpIHtcbiAgICBjb25zdCBndXR0ZXJXaWR0aCA9IHRoaXMuZ2V0R3V0dGVyV2lkdGgoKSxcbiAgICAgICAgICBpbm5lckJvdW5kcyA9IHRoaXMuZ2V0SW5uZXJCb3VuZHMoZ3V0dGVyV2lkdGgpLFxuICAgICAgICAgIHN5bnRheEJvdW5kcyA9IGlubmVyQm91bmRzOyAvLy9cblxuICAgIHRoaXMucG9zaXRpb25HdXR0ZXIoKTtcblxuICAgIHRoaXMuc2V0U3ludGF4Qm91bmRzKHN5bnRheEJvdW5kcyk7XG5cbiAgICByZXR1cm4gZ3V0dGVyV2lkdGg7XG4gIH1cblxuICBzZXRCb3VuZHMoYm91bmRzKSB7XG4gICAgY29uc3QgdG9wID0gYm91bmRzLmdldFRvcCgpLFxuICAgICAgICAgIGxlZnQgPSBib3VuZHMuZ2V0TGVmdCgpLFxuICAgICAgICAgIHdpZHRoID0gYm91bmRzLmdldFdpZHRoKCksXG4gICAgICAgICAgaGVpZ2h0ID0gYm91bmRzLmdldEhlaWdodCgpO1xuXG4gICAgdGhpcy5wb3NpdGlvbih0b3AsIGxlZnQpO1xuICAgIHRoaXMuc2V0V2lkdGgod2lkdGgpO1xuICAgIHRoaXMuc2V0SGVpZ2h0KGhlaWdodCk7XG4gIH1cblxuICBwb3NpdGlvbih0b3AsIGxlZnQpIHtcbiAgICB0b3AgPSBgJHt0b3B9cHhgO1xuICAgIGxlZnQgPSBgJHtsZWZ0fXB4YDtcblxuICAgIGNvbnN0IGNzcyA9IHtcbiAgICAgIHRvcCxcbiAgICAgIGxlZnRcbiAgICB9O1xuXG4gICAgdGhpcy5jc3MoY3NzKTtcbiAgfVxuXG4gIGdldFByZXZpb3VzR3V0dGVyV2lkdGgoKSB7XG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLmdldFN0YXRlKCksXG4gICAgICAgICAgeyBwcmV2aW91c0d1dHRlcldpZHRoIH0gPSBzdGF0ZTtcblxuICAgIHJldHVybiBwcmV2aW91c0d1dHRlcldpZHRoO1xuICB9XG5cbiAgc2V0UHJldmlvdXNHdXR0ZXJXaWR0aChwcmV2aW91c0d1dHRlcldpZHRoKSB7XG4gICAgdGhpcy51cGRhdGVTdGF0ZSh7XG4gICAgICBwcmV2aW91c0d1dHRlcldpZHRoXG4gICAgfSk7XG4gIH1cblxuICBjaGlsZEVsZW1lbnRzKCkge1xuICAgIGNvbnN0IHsgaGlkZGVuR3V0dGVyLCBzY3JvbGxiYXJUaGlja25lc3MgfSA9IHRoaXMucHJvcGVydGllcyxcbiAgICAgICAgICBoaWRkZW4gPSBoaWRkZW5HdXR0ZXI7ICAvLy9cblxuICAgIHJldHVybiAoW1xuXG4gICAgICA8R3V0dGVyIGhpZGRlbj17aGlkZGVufSAvPixcbiAgICAgIDxTeW50YXggc2Nyb2xsYmFyVGhpY2tlbnNzPXtzY3JvbGxiYXJUaGlja25lc3N9IC8+LFxuXG4gICAgXSk7XG4gIH1cbiAgXG4gIHBhcmVudENvbnRleHQoKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIHJlc2l6ZVByZXR0eVByaW50ZXIgPSB0aGlzLnJlc2l6ZS5iaW5kKHRoaXMpLCAvLy9cbiAgICAgICAgICB1cGRhdGVQcmV0dHlQcmludGVyID0gdGhpcy51cGRhdGUuYmluZCh0aGlzKSwgLy8vXG4gICAgICAgICAgc2Nyb2xsUHJldHR5UHJpbnRlciA9IHRoaXMuc2Nyb2xsLmJpbmQodGhpcyksIC8vL1xuICAgICAgICAgIHNldFByZXR0eVByaW50ZXJCb3VuZHMgPSB0aGlzLnNldEJvdW5kcy5iaW5kKHRoaXMpLCAvLy9cbiAgICAgICAgICBwYXJlbnRDb250ZXh0ID0gT2JqZWN0LmFzc2lnbih7fSwgY29udGV4dCwge1xuICAgICAgICAgICAgcmVzaXplUHJldHR5UHJpbnRlcixcbiAgICAgICAgICAgIHVwZGF0ZVByZXR0eVByaW50ZXIsXG4gICAgICAgICAgICBzY3JvbGxQcmV0dHlQcmludGVyLFxuICAgICAgICAgICAgc2V0UHJldHR5UHJpbnRlckJvdW5kc1xuICAgICAgICAgIH0pO1xuICAgIFxuICAgIHJldHVybiBwYXJlbnRDb250ZXh0O1xuICB9XG5cbiAgc2V0SW5pdGlhbFN0YXRlKCkge1xuICAgIGNvbnN0IHByZXZpb3VzR3V0dGVyV2lkdGggPSAwO1xuXG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBwcmV2aW91c0d1dHRlcldpZHRoXG4gICAgfSlcbiAgfVxuXG4gIGluaXRpYWxpc2UoKSB7XG4gICAgdGhpcy5hc3NpZ25Db250ZXh0KFtcbiAgICAgIFwidXBkYXRlR3V0dGVyXCIsXG4gICAgICBcInVwZGF0ZVN5bnRheFwiLFxuICAgICAgXCJzY3JvbGxHdXR0ZXJcIixcbiAgICAgIFwic2Nyb2xsU3ludGF4XCIsXG4gICAgICBcInBvc2l0aW9uR3V0dGVyXCIsXG4gICAgICBcImdldEd1dHRlcldpZHRoXCIsXG4gICAgICBcInNldFN5bnRheEJvdW5kc1wiXG4gICAgXSk7XG5cbiAgICB0aGlzLnNldEluaXRpYWxTdGF0ZSgpO1xuICB9XG5cbiAgc3RhdGljIHRhZ05hbWUgPSBcImRpdlwiO1xuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcGVydGllcyA9IHtcbiAgICBjbGFzc05hbWU6IFwicHJldHR5LXByaW50ZXJcIlxuICB9O1xuXG4gIHN0YXRpYyBpZ25vcmVkUHJvcGVydGllcyA9IFtcbiAgICBcImhpZGRlbkd1dHRlclwiLFxuICAgIFwic2Nyb2xsYmFyVGhpY2tuZXNzXCJcbiAgXTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgd2l0aFN0eWxlKFByZXR0eVByaW50ZXIpYFxuXG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgXG4gIGNvbG9yOiBpbmhlcml0O1xuICBib3JkZXItY29sb3I6IGluaGVyaXQ7XG4gIGJhY2tncm91bmQtY29sb3I6IGluaGVyaXQ7XG5cbiAgZm9udC1zaXplOiBpbmhlcml0O1xuICBsaW5lLWhlaWdodDogaW5oZXJpdDtcbiAgZm9udC1mYW1pbHk6IGluaGVyaXQ7XG4gIHRleHQtcmVuZGVyaW5nOiBpbmhlcml0O1xuICBmb250LWZlYXR1cmUtc2V0dGluZ3M6IGluaGVyaXQ7XG5cbmA7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IFJlYWN0LCBCb2R5IH0gZnJvbSBcImVhc3lcIjtcblxuaW1wb3J0IHsgc3RyaXBQaXhlbHMgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2Nzc1wiO1xuaW1wb3J0IHsgc2Nyb2xsYmFyVGhpY2tuZXNzIGFzIHN0eWxlc1Njcm9sbGJhclRoaWNrbmVzcyB9IGZyb20gXCIuLi9zdHlsZXNcIjtcblxuY29uc3QgYm9keSA9IG5ldyBCb2R5KCksXG4gICAgICBzdHlsZSA9IHtcbiAgICAgICAgd2lkdGg6IFwiNTBweFwiLFxuICAgICAgICBoZWlnaHQ6IFwiNTBweFwiLFxuICAgICAgICBvdmVyZmxvdzogXCJzY3JvbGxcIlxuICAgICAgfSxcbiAgICAgIG91dGVyRGl2ID1cblxuICAgICAgICA8ZGl2IHN0eWxlPXtzdHlsZX0gLz5cblxuICAgICAgLFxuICAgICAgaW5uZXJEaXYgPVxuXG4gICAgICAgIDxkaXYgLz5cblxuICAgICAgO1xuXG5vdXRlckRpdi5hcHBlbmQoaW5uZXJEaXYpO1xuXG5ib2R5LmFwcGVuZChvdXRlckRpdik7XG5cbmNvbnN0IG91dGVyRGl2V2lkdGggPSBvdXRlckRpdi5nZXRXaWR0aCgpLFxuICAgICAgaW5uZXJEaXZXaWR0aCA9IGlubmVyRGl2LmdldFdpZHRoKCk7XG5cbm91dGVyRGl2LnJlbW92ZSgpO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2Nyb2xsYmFyVGhpY2tuZXNzKGZhbmN5U2Nyb2xsYmFycykge1xuICBjb25zdCBzY3JvbGxiYXJUaGlja25lc3MgPSBmYW5jeVNjcm9sbGJhcnMgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmlwUGl4ZWxzKHN0eWxlc1Njcm9sbGJhclRoaWNrbmVzcykgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0ZXJEaXZXaWR0aCAtIGlubmVyRGl2V2lkdGg7IC8vL1xuXG4gIHJldHVybiBzY3JvbGxiYXJUaGlja25lc3M7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNsYXNzIFBsdWdpbiB7XG4gIGNvbnN0cnVjdG9yKGxleGVyLCBwYXJzZXIsIHByb2Nlc3NvciwgdG9rZW5zLCBub2RlKSB7XG4gICAgdGhpcy5sZXhlciA9IGxleGVyO1xuICAgIHRoaXMucGFyc2VyID0gcGFyc2VyO1xuICAgIHRoaXMucHJvY2Vzc29yID0gcHJvY2Vzc29yO1xuICAgIHRoaXMudG9rZW5zID0gdG9rZW5zO1xuICAgIHRoaXMubm9kZSA9IG5vZGU7XG4gIH1cblxuICBnZXRMZXhlcigpIHtcbiAgICByZXR1cm4gdGhpcy5sZXhlcjtcbiAgfVxuXG4gIGdldFBhcnNlcigpIHtcbiAgICByZXR1cm4gdGhpcy5wYXJzZXI7XG4gIH1cblxuICBnZXRQcm9jZXNzb3IoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvY2Vzc29yO1xuICB9XG5cbiAgZ2V0VG9rZW5zKCkge1xuICAgIHJldHVybiB0aGlzLnRva2VucztcbiAgfVxuXG4gIGdldE5vZGUoKSB7XG4gICAgcmV0dXJuIHRoaXMubm9kZTtcbiAgfVxuXG4gIGdldExhbmd1YWdlKCkgeyByZXR1cm4gdGhpcy5sYW5ndWFnZTsgfVxuXG4gIHNldExleGVyKGxleGVyKSB7XG4gICAgdGhpcy5sZXhlciA9IGxleGVyO1xuICB9XG5cbiAgc2V0UGFyc2VyKHBhcnNlcikge1xuICAgIHRoaXMucGFyc2VyID0gcGFyc2VyO1xuICB9XG5cbiAgc2V0UHJvY2Vzc29yKHByb2Nlc3Nvcikge1xuICAgIHRoaXMucHJvY2Vzc29yID0gcHJvY2Vzc29yO1xuICB9XG5cbiAgdXBkYXRlKGNvbnRlbnQpIHtcbiAgICB0aGlzLnRva2VucyA9IHRoaXMubGV4ZXIudG9rZW5pc2UoY29udGVudCk7XG5cbiAgICB0aGlzLm5vZGUgPSB0aGlzLnBhcnNlci5wYXJzZSh0aGlzLnRva2Vucyk7XG5cbiAgICB0aGlzLnByb2Nlc3Nvci5wcm9jZXNzKHRoaXMudG9rZW5zLCB0aGlzLm5vZGUpO1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKENsYXNzKSB7XG4gICAgY29uc3QgeyBMZXhlciwgUGFyc2VyLCBQcm9jZXNzb3IgfSA9IENsYXNzLFxuICAgICAgICAgIGxleGVyID0gTGV4ZXIuZnJvbU5vdGhpbmcoKSxcbiAgICAgICAgICBwYXJzZXIgPSBQYXJzZXIuZnJvbU5vdGhpbmcoKSxcbiAgICAgICAgICBwcm9jZXNzb3IgPSBQcm9jZXNzb3IuZnJvbU5vdGhpbmcoKSxcbiAgICAgICAgICB0b2tlbnMgPSBudWxsLFxuICAgICAgICAgIG5vZGUgPSBudWxsLFxuICAgICAgICAgIHBsdWdpbiA9IG5ldyBDbGFzcyhsZXhlciwgcGFyc2VyLCBwcm9jZXNzb3IsIHRva2Vucywgbm9kZSk7XG5cbiAgICByZXR1cm4gcGx1Z2luO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFBsdWdpbjtcbiIsICJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmltcG9ydCB7IENvbW1vbkxleGVyIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgWWFwcExleGVyIGV4dGVuZHMgQ29tbW9uTGV4ZXIge31cclxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5pbXBvcnQgWWFwcExleGVyIGZyb20gXCIuLi9sZXhlci95YXBwXCI7XHJcbmltcG9ydCB7IFdoaXRlc3BhY2VUb2tlbiwgRW5kT2ZMaW5lTm9uU2lnbmlmaWNhbnRUb2tlbiwgRG91Ymx5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xyXG5cclxuY29uc3QgZW50cmllcyA9IFtcclxuICB7XHJcbiAgICBcImRlbGltaXRlclwiOiBcIl4oPzo9fDxcXFxcP3xcXFxcPz58PFxcXFwvfFxcXFwvPnw8IS0tfC0tPnw8fD4pXCJcclxuICB9LFxyXG4gIHtcclxuICAgIFwiaWRlbnRpZmllclwiOiBcIl5bYS16QS1aXStcIlxyXG4gIH0sXHJcbiAge1xyXG4gICAgXCJ1bmFzc2lnbmVkXCI6IFwiXlteXFxcXHNdK1wiXHJcbiAgfVxyXG5dO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgWE1MTGV4ZXIgZXh0ZW5kcyBZYXBwTGV4ZXIge1xyXG4gIHN0YXRpYyBlbnRyaWVzID0gZW50cmllcztcclxuXHJcbiAgc3RhdGljIEVuZE9mTGluZVRva2VuID0gRW5kT2ZMaW5lTm9uU2lnbmlmaWNhbnRUb2tlbjsgLy8vXHJcblxyXG4gIHN0YXRpYyBXaGl0ZXNwYWNlVG9rZW4gPSBXaGl0ZXNwYWNlVG9rZW47XHJcblxyXG4gIHN0YXRpYyBFbmRPZkxpbmVDb21tZW50VG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgU2luZ2xlTGluZUNvbW1lbnRUb2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBSZWd1bGFyRXhwcmVzc2lvblRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgU2luZ2x5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiA9IERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbjtcclxuXHJcbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkgeyByZXR1cm4gWWFwcExleGVyLmZyb21FbnRyaWVzKFhNTExleGVyLCBlbnRyaWVzKTsgfVxyXG5cclxuICBzdGF0aWMgZnJvbVJ1bGVzKHJ1bGVzKSB7IHJldHVybiBZYXBwTGV4ZXIuZnJvbVJ1bGVzKFhNTExleGVyLCBydWxlcyk7IH1cclxuXHJcbiAgc3RhdGljIGZyb21FbnRyaWVzKGVudHJpZXMpIHsgcmV0dXJuIFlhcHBMZXhlci5mcm9tRW50cmllcyhYTUxMZXhlciwgZW50cmllcyk7IH1cclxufVxyXG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IEVNUFRZX1NUUklORyA9IFwiXCI7XG5leHBvcnQgY29uc3QgVU5BU1NJR05FRF9FTlRSWSA9IFwiXi4qJFwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5jb25zdCB7IGZpcnN0LCBmaWx0ZXIgfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5cbmV4cG9ydCBmdW5jdGlvbiBydWxlc0FzU3RyaW5nKHJ1bGVzLCBtdWx0aUxpbmUpIHtcbiAgY29uc3QgbWF4aW11bVJ1bGVOYW1lTGVuZ3RoID0gcnVsZXMucmVkdWNlKChtYXhpbXVtUnVsZU5hbWVMZW5ndGgsIHJ1bGUpID0+IHtcbiAgICAgICAgICBjb25zdCBydWxlTmFtZSA9IHJ1bGUuZ2V0TmFtZSgpLFxuICAgICAgICAgICAgICAgIHJ1bGVOYW1lTGVuZ3RoID0gcnVsZU5hbWUubGVuZ3RoO1xuXG4gICAgICAgICAgbWF4aW11bVJ1bGVOYW1lTGVuZ3RoID0gTWF0aC5tYXgobWF4aW11bVJ1bGVOYW1lTGVuZ3RoLCBydWxlTmFtZUxlbmd0aCk7XG5cbiAgICAgICAgICByZXR1cm4gbWF4aW11bVJ1bGVOYW1lTGVuZ3RoO1xuICAgICAgICB9LCAwKSxcbiAgICAgICAgcnVsZXNTdHJpbmcgPSBydWxlcy5yZWR1Y2UoKHJ1bGVzU3RyaW5nLCBydWxlKSA9PiB7XG4gICAgICAgICAgY29uc3QgcnVsZVN0cmluZyA9IHJ1bGUuYXNTdHJpbmcobWF4aW11bVJ1bGVOYW1lTGVuZ3RoLCBtdWx0aUxpbmUpO1xuXG4gICAgICAgICAgcnVsZXNTdHJpbmcgKz0gcnVsZVN0cmluZztcblxuICAgICAgICAgIHJldHVybiBydWxlc1N0cmluZztcbiAgICAgICAgfSwgRU1QVFlfU1RSSU5HKS5yZXBsYWNlKC9eXFxuXFxuLywgRU1QVFlfU1RSSU5HKTtcblxuICByZXR1cm4gcnVsZXNTdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBydWxlTWFwRnJvbVJ1bGVzKHJ1bGVzKSB7XG4gIGNvbnN0IHJ1bGVNYXAgPSB7fTtcblxuICBydWxlcy5mb3JFYWNoKChydWxlKSA9PiB7XG4gICAgY29uc3QgcnVsZU5hbWUgPSBydWxlLmdldE5hbWUoKTtcblxuICAgIHJ1bGVNYXBbcnVsZU5hbWVdID0gcnVsZTtcbiAgfSk7XG5cbiAgcmV0dXJuIHJ1bGVNYXA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGFydFJ1bGVGcm9tUnVsZXMocnVsZXMpIHtcbiAgY29uc3QgZmlyc3RSdWxlID0gZmlyc3QocnVsZXMpLFxuICAgICAgICBzdGFydFJ1bGUgPSBmaXJzdFJ1bGU7ICAvLy9cblxuICByZXR1cm4gc3RhcnRSdWxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhcnRSdWxlRnJvbVJ1bGVzQW5kU3RhcnRSdWxlTmFtZShydWxlcywgc3RhcnRSdWxlTmFtZSkge1xuICBsZXQgc3RhcnRSdWxlID0gcnVsZXMuZmluZCgocnVsZSkgPT4ge1xuICAgIGNvbnN0IHJ1bGVOYW1lID0gcnVsZS5nZXROYW1lKCk7XG5cbiAgICBpZiAocnVsZU5hbWUgPT09IHN0YXJ0UnVsZU5hbWUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSkgfHwgbnVsbDsgLy8vXG5cbiAgaWYgKHN0YXJ0UnVsZSA9PT0gbnVsbCkge1xuICAgIHN0YXJ0UnVsZSA9IHN0YXJ0UnVsZUZyb21SdWxlcyhydWxlcyk7XG4gIH1cblxuICByZXR1cm4gc3RhcnRSdWxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcnVsZXNGcm9tU3RhcnRSdWxlQW5kUnVsZU1hcChzdGFydFJ1bGUsIHJ1bGVNYXApIHtcbiAgY29uc3QgcnVsZXMgPSBPYmplY3QudmFsdWVzKHJ1bGVNYXApLFxuICAgICAgICBzdGFydFJ1bGVOYW1lID0gc3RhcnRSdWxlLmdldE5hbWUoKTtcblxuICBmaWx0ZXIocnVsZXMsIChydWxlKSA9PiB7XG4gICAgY29uc3QgcnVsZU5hbWUgPSBydWxlLmdldE5hbWUoKTtcblxuICAgIGlmIChydWxlTmFtZSAhPT0gc3RhcnRSdWxlTmFtZSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcblxuICBydWxlcy51bnNoaWZ0KHN0YXJ0UnVsZSk7XG5cbiAgcmV0dXJuIHJ1bGVzO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBwYXJ0VHlwZXMgfSBmcm9tIFwib2NjYW0tcGFyc2Vyc1wiO1xuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmNvbnN0IHsgZmlyc3QgfSA9IGFycmF5VXRpbGl0aWVzLFxuICAgICAgeyBSdWxlTmFtZVBhcnRUeXBlLFxuICAgICAgICBPcHRpb25hbFBhcnRQYXJ0VHlwZSxcbiAgICAgICAgU2VxdWVuY2VPZlBhcnRzUGFydFR5cGUsXG4gICAgICAgIENob2ljZU9mUGFydHNQYXJ0VHlwZSxcbiAgICAgICAgT25lT3JNb3JlUGFydHNQYXJ0VHlwZSxcbiAgICAgICAgWmVyb09yTW9yZVBhcnRzUGFydFR5cGUgfSA9IHBhcnRUeXBlcztcblxuZXhwb3J0IGZ1bmN0aW9uIHJlY3Vyc2l2ZVJ1bGVOYW1lc0Zyb21QYXJ0KHBhcnQsIHJlY3Vyc2l2ZVJ1bGVOYW1lcykge1xuICBjb25zdCBwYXJ0Tm9uVGVybWluYWxQYXJ0ID0gcGFydC5pc05vblRlcm1pbmFsUGFydCgpO1xuXG4gIGlmIChwYXJ0Tm9uVGVybWluYWxQYXJ0KSB7XG4gICAgY29uc3QgdHlwZSA9IHBhcnQuZ2V0VHlwZSgpO1xuXG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlIFJ1bGVOYW1lUGFydFR5cGUgOiB7XG4gICAgICAgICAgY29uc3QgcnVsZU5hbWVQYXJ0ID0gcGFydCwgIC8vL1xuICAgICAgICAgICAgICAgIHJ1bGVOYW1lID0gcnVsZU5hbWVQYXJ0LmdldFJ1bGVOYW1lKCksXG4gICAgICAgICAgICAgICAgcmVjdXJzaXZlUnVsZU5hbWVzSW5jbHVkZXNSdWxlTmFtZSA9IHJlY3Vyc2l2ZVJ1bGVOYW1lcy5pbmNsdWRlcyhydWxlTmFtZSk7XG5cbiAgICAgICAgICBpZiAoIXJlY3Vyc2l2ZVJ1bGVOYW1lc0luY2x1ZGVzUnVsZU5hbWUpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlY3Vyc2l2ZVJ1bGVOYW1lID0gcnVsZU5hbWU7IC8vL1xuXG4gICAgICAgICAgICByZWN1cnNpdmVSdWxlTmFtZXMucHVzaChyZWN1cnNpdmVSdWxlTmFtZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgT3B0aW9uYWxQYXJ0UGFydFR5cGUgOiB7XG4gICAgICAgICAgY29uc3Qgb3B0aW9uYWxQYXJ0UGFydCA9IHBhcnQ7ICAvLy9cblxuICAgICAgICAgIHBhcnQgPSBvcHRpb25hbFBhcnRQYXJ0LmdldFBhcnQoKTtcblxuICAgICAgICAgIHJlY3Vyc2l2ZVJ1bGVOYW1lc0Zyb21QYXJ0KHBhcnQsIHJlY3Vyc2l2ZVJ1bGVOYW1lcyk7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBPbmVPck1vcmVQYXJ0c1BhcnRUeXBlIDoge1xuICAgICAgICAgIGNvbnN0IG9uZU9yTW9yZVBhcnRzUGFydCA9IHBhcnQ7ICAvLy9cblxuICAgICAgICAgIHBhcnQgPSBvbmVPck1vcmVQYXJ0c1BhcnQuZ2V0UGFydCgpO1xuXG4gICAgICAgICAgcmVjdXJzaXZlUnVsZU5hbWVzRnJvbVBhcnQocGFydCwgcmVjdXJzaXZlUnVsZU5hbWVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFplcm9Pck1vcmVQYXJ0c1BhcnRUeXBlIDoge1xuICAgICAgICAgIGNvbnN0IHplcm9Pck1vcmVQYXJ0c1BhcnQgPSBwYXJ0OyAvLy9cblxuICAgICAgICAgIHBhcnQgPSB6ZXJvT3JNb3JlUGFydHNQYXJ0LmdldFBhcnQoKTsgIC8vL1xuXG4gICAgICAgICAgcmVjdXJzaXZlUnVsZU5hbWVzRnJvbVBhcnQocGFydCwgcmVjdXJzaXZlUnVsZU5hbWVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFNlcXVlbmNlT2ZQYXJ0c1BhcnRUeXBlIDoge1xuICAgICAgICBjb25zdCBzZXF1ZW5jZU9mUGFydHNQYXJ0ID0gcGFydCwgIC8vL1xuICAgICAgICAgICAgICBwYXJ0cyA9IHNlcXVlbmNlT2ZQYXJ0c1BhcnQuZ2V0UGFydHMoKTtcblxuICAgICAgICAgIHBhcnRzLmZvckVhY2goKHBhcnQpID0+IHJlY3Vyc2l2ZVJ1bGVOYW1lc0Zyb21QYXJ0KHBhcnQsIHJlY3Vyc2l2ZVJ1bGVOYW1lcykpO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgQ2hvaWNlT2ZQYXJ0c1BhcnRUeXBlIDoge1xuICAgICAgICBjb25zdCBjaG9pY2VPZlBhcnRzUGFydCA9IHBhcnQsIC8vL1xuICAgICAgICAgICAgICBwYXJ0cyA9IGNob2ljZU9mUGFydHNQYXJ0LmdldFBhcnRzKCk7XG5cbiAgICAgICAgICBwYXJ0cy5mb3JFYWNoKChwYXJ0KSA9PiByZWN1cnNpdmVSdWxlTmFtZXNGcm9tUGFydChwYXJ0LCByZWN1cnNpdmVSdWxlTmFtZXMpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lc0Zyb21QYXJ0KHBhcnQsIGxlZnRSZWN1cnNpdmVSdWxlTmFtZXMpIHtcbiAgY29uc3QgcGFydE5vblRlcm1pbmFsUGFydCA9IHBhcnQuaXNOb25UZXJtaW5hbFBhcnQoKTtcblxuICBpZiAocGFydE5vblRlcm1pbmFsUGFydCkge1xuICAgIGNvbnN0IHR5cGUgPSBwYXJ0LmdldFR5cGUoKTtcblxuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSBSdWxlTmFtZVBhcnRUeXBlIDoge1xuICAgICAgICAgIGNvbnN0IHJ1bGVOYW1lUGFydCA9IHBhcnQsICAvLy9cbiAgICAgICAgICAgICAgICBydWxlTmFtZSA9IHJ1bGVOYW1lUGFydC5nZXRSdWxlTmFtZSgpLFxuICAgICAgICAgICAgICAgIGxlZnRSZWN1cnNpdmVSdWxlTmFtZXNJbmNsdWRlc1J1bGVOYW1lID0gbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lcy5pbmNsdWRlcyhydWxlTmFtZSk7XG5cbiAgICAgICAgICBpZiAoIWxlZnRSZWN1cnNpdmVSdWxlTmFtZXNJbmNsdWRlc1J1bGVOYW1lKSB7XG4gICAgICAgICAgICBjb25zdCBsZWZ0UmVjdXJzaXZlUnVsZU5hbWUgPSBydWxlTmFtZTsgLy8vXG5cbiAgICAgICAgICAgIGxlZnRSZWN1cnNpdmVSdWxlTmFtZXMucHVzaChsZWZ0UmVjdXJzaXZlUnVsZU5hbWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIE9wdGlvbmFsUGFydFBhcnRUeXBlIDoge1xuICAgICAgICAgIGNvbnN0IG9wdGlvbmFsUGFydFBhcnQgPSBwYXJ0OyAvLy9cblxuICAgICAgICAgIHBhcnQgPSBvcHRpb25hbFBhcnRQYXJ0LmdldFBhcnQoKTtcblxuICAgICAgICAgIGxlZnRSZWN1cnNpdmVSdWxlTmFtZXNGcm9tUGFydChwYXJ0LCBsZWZ0UmVjdXJzaXZlUnVsZU5hbWVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIE9uZU9yTW9yZVBhcnRzUGFydFR5cGUgOiB7XG4gICAgICAgICAgY29uc3Qgb25lT3JNb3JlUGFydHNQYXJ0ID0gcGFydDsgIC8vL1xuXG4gICAgICAgICAgcGFydCA9IG9uZU9yTW9yZVBhcnRzUGFydC5nZXRQYXJ0KCk7XG5cbiAgICAgICAgICBsZWZ0UmVjdXJzaXZlUnVsZU5hbWVzRnJvbVBhcnQocGFydCwgbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lcyk7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBaZXJvT3JNb3JlUGFydHNQYXJ0VHlwZSA6IHtcbiAgICAgICAgICBjb25zdCB6ZXJvT3JNb3JlUGFydHNQYXJ0ID0gcGFydDsgLy8vXG5cbiAgICAgICAgICBwYXJ0ID0gemVyb09yTW9yZVBhcnRzUGFydC5nZXRQYXJ0KCk7XG5cbiAgICAgICAgICBsZWZ0UmVjdXJzaXZlUnVsZU5hbWVzRnJvbVBhcnQocGFydCwgbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lcyk7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBTZXF1ZW5jZU9mUGFydHNQYXJ0VHlwZSA6IHtcbiAgICAgICAgICBjb25zdCBzZXF1ZW5jZU9mUGFydHNQYXJ0ID0gcGFydCwgIC8vL1xuICAgICAgICAgICAgICAgIHBhcnRzID0gc2VxdWVuY2VPZlBhcnRzUGFydC5nZXRQYXJ0cygpLFxuICAgICAgICAgICAgICAgIGZpcnN0UGFydCA9IGZpcnN0KHBhcnRzKTtcblxuICAgICAgICAgIHBhcnQgPSBmaXJzdFBhcnQ7IC8vL1xuXG4gICAgICAgICAgbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lc0Zyb21QYXJ0KHBhcnQsIGxlZnRSZWN1cnNpdmVSdWxlTmFtZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgQ2hvaWNlT2ZQYXJ0c1BhcnRUeXBlIDoge1xuICAgICAgICAgIGNvbnN0IGNob2ljZU9mUGFydHNQYXJ0ID0gcGFydCwgLy8vXG4gICAgICAgICAgICAgICAgcGFydHMgPSBjaG9pY2VPZlBhcnRzUGFydC5nZXRQYXJ0cygpO1xuXG4gICAgICAgICAgcGFydHMuZm9yRWFjaCgocGFydCkgPT4gbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lc0Zyb21QYXJ0KHBhcnQsIGxlZnRSZWN1cnNpdmVSdWxlTmFtZXMpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBwYXJ0VHlwZXMgfSBmcm9tIFwib2NjYW0tcGFyc2Vyc1wiO1xuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCB7IHJlY3Vyc2l2ZVJ1bGVOYW1lc0Zyb21QYXJ0LCBsZWZ0UmVjdXJzaXZlUnVsZU5hbWVzRnJvbVBhcnQgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3JlY3Vyc2l2ZVBhcnRcIjtcblxuY29uc3QgeyBmaXJzdCB9ID0gYXJyYXlVdGlsaXRpZXMsXG4gICAgICB7IFJ1bGVOYW1lUGFydFR5cGUgfSA9IHBhcnRUeXBlcztcblxuZXhwb3J0IGZ1bmN0aW9uIGlzRGVmaW5pdGlvblVuYXJ5KGRlZmluaXRpb24pIHtcbiAgY29uc3QgcGFydHMgPSBkZWZpbml0aW9uLmdldFBhcnRzKCksXG4gICAgICAgIHBhcnRzTGVuZ3RoID0gcGFydHMubGVuZ3RoLFxuICAgICAgICBkZWZpbml0aW9uVW5hcnkgPSAocGFydHNMZW5ndGggPT09IDEpO1xuXG4gIHJldHVybiBkZWZpbml0aW9uVW5hcnk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0RlZmluaXRpb25Db21wbGV4KGRlZmluaXRpb24pIHtcbiAgY29uc3QgcGFydHMgPSBkZWZpbml0aW9uLmdldFBhcnRzKCksXG4gICAgICAgIGZpcnN0UGFydCA9IGZpcnN0KHBhcnRzKSxcbiAgICAgICAgZmlyc3RQYXJ0VHlwZSA9IGZpcnN0UGFydC5nZXRUeXBlKCksXG4gICAgICAgIGZpcnN0UGFydFR5cGVSdWxlTmFtZVBhcnRUeXBlID0gKGZpcnN0UGFydFR5cGUgPT09IFJ1bGVOYW1lUGFydFR5cGUpLFxuICAgICAgICBmaXJzdFBhcnRSdWxlTmFtZVBhcnQgPSBmaXJzdFBhcnRUeXBlUnVsZU5hbWVQYXJ0VHlwZSxcbiAgICAgICAgZGVmaW5pdGlvbkNvbXBsZXggPSAhZmlyc3RQYXJ0UnVsZU5hbWVQYXJ0O1xuXG4gIHJldHVybiBkZWZpbml0aW9uQ29tcGxleDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRGVmaW5pdGlvbkxvb2tBaGVhZChkZWZpbml0aW9uKSB7XG4gIGxldCBsb29rQWhlYWQgPSBmYWxzZTtcblxuICBjb25zdCBwYXJ0cyA9IGRlZmluaXRpb24uZ2V0UGFydHMoKSxcbiAgICAgICAgZmlyc3RQYXJ0ID0gZmlyc3QocGFydHMpLFxuICAgICAgICBmaXJzdFBhcnRUeXBlID0gZmlyc3RQYXJ0LmdldFR5cGUoKSxcbiAgICAgICAgZmlyc3RQYXJ0VHlwZVJ1bGVOYW1lUGFydFR5cGUgPSAoZmlyc3RQYXJ0VHlwZSA9PT0gUnVsZU5hbWVQYXJ0VHlwZSksXG4gICAgICAgIGZpcnN0UGFydFJ1bGVOYW1lUGFydCA9IGZpcnN0UGFydFR5cGVSdWxlTmFtZVBhcnRUeXBlOyAgLy8vXG5cbiAgaWYgKGZpcnN0UGFydFJ1bGVOYW1lUGFydCkge1xuICAgIGNvbnN0IHJ1bGVOYW1lUGFydCA9IGZpcnN0UGFydDsgLy8vXG5cbiAgICBsb29rQWhlYWQgPSBydWxlTmFtZVBhcnQuaXNMb29rQWhlYWQoKTtcbiAgfVxuXG4gIHJldHVybiBsb29rQWhlYWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0RlZmluaXRpb25MZWZ0UmVjdXJzaXZlKGRlZmluaXRpb24pIHtcbiAgY29uc3QgbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lcyA9IGxlZnRSZWN1cnNpdmVSdWxlTmFtZXNGcm9tRGVmaW5pdGlvbihkZWZpbml0aW9uKSxcbiAgICAgICAgbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lc0xlbmd0aCA9IGxlZnRSZWN1cnNpdmVSdWxlTmFtZXMubGVuZ3RoLFxuICAgICAgICBkZWZpbml0aW9uTGVmdFJlY3Vyc2l2ZSA9IChsZWZ0UmVjdXJzaXZlUnVsZU5hbWVzTGVuZ3RoID4gMCk7XG5cbiAgcmV0dXJuIGRlZmluaXRpb25MZWZ0UmVjdXJzaXZlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVjdXJzaXZlUnVsZU5hbWVzRnJvbURlZmluaXRpb24oZGVmaW5pdGlvbikge1xuICBjb25zdCByZWN1cnNpdmVSdWxlTmFtZXMgPSBbXSxcbiAgICAgICAgcGFydHMgPSBkZWZpbml0aW9uLmdldFBhcnRzKCk7XG5cbiAgcGFydHMuZm9yRWFjaCgocGFydCkgPT4gcmVjdXJzaXZlUnVsZU5hbWVzRnJvbVBhcnQocGFydCwgcmVjdXJzaXZlUnVsZU5hbWVzKSk7XG5cbiAgcmV0dXJuIHJlY3Vyc2l2ZVJ1bGVOYW1lcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxlZnRSZWN1cnNpdmVSdWxlTmFtZXNGcm9tRGVmaW5pdGlvbihkZWZpbml0aW9uKSB7XG4gIGNvbnN0IGxlZnRSZWN1cnNpdmVSdWxlTmFtZXMgPSBbXSxcbiAgICAgICAgcGFydHMgPSBkZWZpbml0aW9uLmdldFBhcnRzKCksXG4gICAgICAgIGZpcnN0UGFydCA9IGZpcnN0KHBhcnRzKSxcbiAgICAgICAgcGFydCA9IGZpcnN0UGFydDsgLy8vXG5cbiAgbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lc0Zyb21QYXJ0KHBhcnQsIGxlZnRSZWN1cnNpdmVSdWxlTmFtZXMpO1xuXG4gIHJldHVybiBsZWZ0UmVjdXJzaXZlUnVsZU5hbWVzO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgUkVDVVJTSVZFX1RZUEUgPSBcInJlY3Vyc2l2ZVwiO1xuZXhwb3J0IGNvbnN0IExFRlRfUkVDVVJTSVZFX1RZUEUgPSBcImxlZnQtcmVjdXJzaXZlXCI7XG5leHBvcnQgY29uc3QgRElSRUNUTFlfTEVGVF9SRUNVUlNJVkVfVFlQRSA9IFwiZGlyZWN0bHktbGVmdC1yZWN1cnNpdmVcIjtcbmV4cG9ydCBjb25zdCBJTkRJUkVDVExZX0xFRlRfUkVDVVJTSVZFX1RZUEUgPSBcImluZGlyZWN0bHktbGVmdC1yZWN1cnNpdmVcIjtcbmV4cG9ydCBjb25zdCBJTVBMSUNJVExZX0xFRlRfUkVDVVJTSVZFX1RZUEUgPSBcImltcGxpY2l0bHktbGVmdC1yZWN1cnNpdmVcIjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgRGVmaW5pdGlvbiB9IGZyb20gXCJvY2NhbS1wYXJzZXJzXCI7XG5cbmltcG9ydCB7IHJlY3Vyc2l2ZVJ1bGVOYW1lc0Zyb21EZWZpbml0aW9uIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9kZWZpbml0aW9uXCI7XG5pbXBvcnQgeyBSRUNVUlNJVkVfVFlQRSwgRElSRUNUTFlfTEVGVF9SRUNVUlNJVkVfVFlQRSwgSU1QTElDSVRMWV9MRUZUX1JFQ1VSU0lWRV9UWVBFLCAgSU5ESVJFQ1RMWV9MRUZUX1JFQ1VSU0lWRV9UWVBFIH0gZnJvbSBcIi4uL3R5cGVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlY3Vyc2l2ZURlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3IodHlwZSwgcGFydHMsIHJ1bGVOYW1lLCBkZWZpbml0aW9uLCByZWN1cnNpdmVSdWxlTmFtZXMpIHtcbiAgICBzdXBlcihwYXJ0cyk7XG5cbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgIHRoaXMucnVsZU5hbWUgPSBydWxlTmFtZTtcbiAgICB0aGlzLmRlZmluaXRpb24gPSBkZWZpbml0aW9uO1xuICAgIHRoaXMucmVjdXJzaXZlUnVsZU5hbWVzID0gcmVjdXJzaXZlUnVsZU5hbWVzO1xuICB9XG5cbiAgZ2V0VHlwZSgpIHtcbiAgICByZXR1cm4gdGhpcy50eXBlO1xuICB9XG5cbiAgZ2V0UnVsZU5hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMucnVsZU5hbWU7XG4gIH1cblxuICBnZXREZWZpbml0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmRlZmluaXRpb247XG4gIH1cblxuICBnZXRSZWN1cnNpdmVSdWxlTmFtZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVjdXJzaXZlUnVsZU5hbWVzO1xuICB9XG5cbiAgaXNMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbigpIHtcbiAgICBjb25zdCBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiA9ICgodGhpcy50eXBlID09PSBESVJFQ1RMWV9MRUZUX1JFQ1VSU0lWRV9UWVBFKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0aGlzLnR5cGUgPT09IElORElSRUNUTFlfTEVGVF9SRUNVUlNJVkVfVFlQRSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodGhpcy50eXBlID09PSBJTVBMSUNJVExZX0xFRlRfUkVDVVJTSVZFX1RZUEUpKTtcblxuICAgIHJldHVybiBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbjtcbiAgfVxuXG4gIHJlcGxhY2UocnVsZU1hcCkge1xuICAgIGNvbnN0IHJ1bGUgPSBydWxlTWFwW3RoaXMucnVsZU5hbWVdIHx8IG51bGwsXG4gICAgICAgICAgcmVwbGFjZWREZWZpbml0aW9uID0gdGhpcy5kZWZpbml0aW9uLCAvLy9cbiAgICAgICAgICByZXBsYWNlbWVudERlZmluaXRpb24gPSB0aGlzOyAvLy9cblxuICAgIHJ1bGUucmVwbGFjZURlZmluaXRpb24ocmVwbGFjZWREZWZpbml0aW9uLCByZXBsYWNlbWVudERlZmluaXRpb24pO1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUFuZERlZmluaXRpb24ocnVsZU5hbWUsIGRlZmluaXRpb24pIHtcbiAgICBsZXQgcmVjdXJzaXZlRGVmaW5pdGlvbiA9IG51bGw7XG5cbiAgICBjb25zdCB0eXBlID0gUkVDVVJTSVZFX1RZUEUsXG4gICAgICAgICAgcGFydHMgPSBkZWZpbml0aW9uLmdldFBhcnRzKCksXG4gICAgICAgICAgcmVjdXJzaXZlUnVsZU5hbWVzID0gcmVjdXJzaXZlUnVsZU5hbWVzRnJvbURlZmluaXRpb24oZGVmaW5pdGlvbiksXG4gICAgICAgICAgcmVjdXJzaXZlUnVsZU5hbWVzTGVuZ3RoID0gcmVjdXJzaXZlUnVsZU5hbWVzLmxlbmd0aCxcbiAgICAgICAgICBkZWZpbml0aW9uUmVjdXJzaXZlRGVmaW5pdGlvbiA9IChyZWN1cnNpdmVSdWxlTmFtZXNMZW5ndGggPiAwKTtcblxuICAgIGlmIChkZWZpbml0aW9uUmVjdXJzaXZlRGVmaW5pdGlvbikge1xuICAgICAgcmVjdXJzaXZlRGVmaW5pdGlvbiA9IG5ldyBSZWN1cnNpdmVEZWZpbml0aW9uKHR5cGUsIHBhcnRzLCBydWxlTmFtZSwgZGVmaW5pdGlvbiwgcmVjdXJzaXZlUnVsZU5hbWVzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVjdXJzaXZlRGVmaW5pdGlvbjtcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBFTVBUWV9TVFJJTkcgPSBcIlwiO1xuZXhwb3J0IGNvbnN0IFVOQVNTSUdORURfRU5UUlkgPSBcIl4uKiRcIjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJlY3Vyc2l2ZURlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vcmVjdXJzaXZlXCI7XG5cbmltcG9ydCB7IExFRlRfUkVDVVJTSVZFX1RZUEUgfSBmcm9tIFwiLi4vdHlwZXNcIjtcbmltcG9ydCB7IGlzRGVmaW5pdGlvbkxlZnRSZWN1cnNpdmUsIHJlY3Vyc2l2ZVJ1bGVOYW1lc0Zyb21EZWZpbml0aW9uLCBsZWZ0UmVjdXJzaXZlUnVsZU5hbWVzRnJvbURlZmluaXRpb24gfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2RlZmluaXRpb25cIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTGVmdFJlY3Vyc2l2ZURlZmluaXRpb24gZXh0ZW5kcyBSZWN1cnNpdmVEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3IodHlwZSwgcGFydHMsIHJ1bGVOYW1lLCBkZWZpbml0aW9uLCByZWN1cnNpdmVSdWxlTmFtZXMsIGxlZnRSZWN1cnNpdmVSdWxlTmFtZXMpIHtcbiAgICBzdXBlcih0eXBlLCBwYXJ0cywgcnVsZU5hbWUsIGRlZmluaXRpb24sIHJlY3Vyc2l2ZVJ1bGVOYW1lcyk7XG5cbiAgICB0aGlzLmxlZnRSZWN1cnNpdmVSdWxlTmFtZXMgPSBsZWZ0UmVjdXJzaXZlUnVsZU5hbWVzO1xuICB9XG5cbiAgZ2V0TGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lcygpIHtcbiAgICByZXR1cm4gdGhpcy5sZWZ0UmVjdXJzaXZlUnVsZU5hbWVzO1xuICB9XG5cbiAgcmV3cml0ZShydWxlTWFwKSB7XG4gICAgLy8vXG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kRGVmaW5pdGlvbihydWxlTmFtZSwgZGVmaW5pdGlvbikge1xuICAgIGxldCBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiA9IG51bGw7XG5cbiAgICBjb25zdCBkZWZpbml0aW9uTGVmdFJlY3Vyc2l2ZSA9IGlzRGVmaW5pdGlvbkxlZnRSZWN1cnNpdmUoZGVmaW5pdGlvbik7XG5cbiAgICBpZiAoZGVmaW5pdGlvbkxlZnRSZWN1cnNpdmUpIHtcbiAgICAgIGNvbnN0IHR5cGUgPSBMRUZUX1JFQ1VSU0lWRV9UWVBFLFxuICAgICAgICAgICAgcGFydHMgPSBkZWZpbml0aW9uLmdldFBhcnRzKCksXG4gICAgICAgICAgICByZWN1cnNpdmVSdWxlTmFtZXMgPSByZWN1cnNpdmVSdWxlTmFtZXNGcm9tRGVmaW5pdGlvbihkZWZpbml0aW9uKSxcbiAgICAgICAgICAgIGxlZnRSZWN1cnNpdmVSdWxlTmFtZXMgPSBsZWZ0UmVjdXJzaXZlUnVsZU5hbWVzRnJvbURlZmluaXRpb24oZGVmaW5pdGlvbik7XG5cbiAgICAgIGxlZnRSZWN1cnNpdmVEZWZpbml0aW9uID0gbmV3IExlZnRSZWN1cnNpdmVEZWZpbml0aW9uKHR5cGUsIHBhcnRzLCBydWxlTmFtZSwgZGVmaW5pdGlvbiwgcmVjdXJzaXZlUnVsZU5hbWVzLCBsZWZ0UmVjdXJzaXZlUnVsZU5hbWVzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGVmdFJlY3Vyc2l2ZURlZmluaXRpb247XG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgRU1QVFlfU1RSSU5HID0gXCJcIjtcbmV4cG9ydCBjb25zdCBVTkFTU0lHTkVEX0VOVFJZID0gXCJeLiokXCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IE5vblRlcm1pbmFsTm9kZSB9IGZyb20gXCJvY2NhbS1wYXJzZXJzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlZHVjZWROb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgc3RhdGljIGZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMocnVsZU5hbWUsIGNoaWxkTm9kZXMpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKFJlZHVjZWROb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNJbnN0YW5jZU9mKGluc3RhbmNlLCBDbGFzcykge1xuICBjb25zdCBjb25zdHJ1Y3RvciA9IGluc3RhbmNlLmNvbnN0cnVjdG9yO1xuXG4gIGlmIChjb25zdHJ1Y3Rvcikge1xuICAgIGlmIChjb25zdHJ1Y3Rvci5uYW1lID09PSBDbGFzcy5uYW1lKSB7ICAvLy9cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBwcm90b3R5cGUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoY29uc3RydWN0b3IpO1xuXG4gICAgICByZXR1cm4gaXNQcm90b3R5cGVJbnN0YW5jZU9mKHByb3RvdHlwZSwgQ2xhc3MpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNQcm90b3R5cGVJbnN0YW5jZU9mKHByb3RvdHlwZSwgQ2xhc3MpIHtcbiAgaWYgKHByb3RvdHlwZSkge1xuICAgIGlmIChwcm90b3R5cGUubmFtZSA9PT0gQ2xhc3MubmFtZSkgeyAgLy8vXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvdG90eXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHByb3RvdHlwZSk7XG5cbiAgICAgIHJldHVybiBpc1Byb3RvdHlwZUluc3RhbmNlT2YocHJvdG90eXBlLCBDbGFzcyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVkdWNlZFJ1bGVOYW1lRnJvbVJ1bGVOYW1lKHJ1bGVOYW1lKSB7XG4gIGNvbnN0IHJlZHVjZWRSdWxlTmFtZSA9IGAke3J1bGVOYW1lfV9gO1xuXG4gIHJldHVybiByZWR1Y2VkUnVsZU5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXBlYXRlZFJ1bGVOYW1lRnJvbVJ1bGVOYW1lKHJ1bGVOYW1lKSB7XG4gIGNvbnN0IHJlcGVhdGVkUnVsZU5hbWUgPSBgJHtydWxlTmFtZX1+YDtcblxuICByZXR1cm4gcmVwZWF0ZWRSdWxlTmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJ1bGVOYW1lRnJvbVJlZHVjZWRSdWxlTmFtZShyZWR1Y2VkUnVsZU5hbWUpIHtcbiAgY29uc3QgcnVsZU5hbWUgPSByZWR1Y2VkUnVsZU5hbWUucmVwbGFjZSgvXyQvLCBcIlwiKTtcblxuICByZXR1cm4gcnVsZU5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGVja1JlZHVjZWRSdWxlTmFtZU1hdGNoZXNSdWxlTmFtZShyZWR1Y2VkUnVsZU5hbWUsIHJ1bGVOYW1lKSB7XG4gIGNvbnN0IHJ1bGVOYW1lQSA9IHJ1bGVOYW1lOyAvLy9cblxuICBydWxlTmFtZSA9IHJ1bGVOYW1lRnJvbVJlZHVjZWRSdWxlTmFtZShyZWR1Y2VkUnVsZU5hbWUpO1xuXG4gIGNvbnN0IHJ1bGVOYW1lQiA9IHJ1bGVOYW1lOyAvLy9cblxuICBjb25zdCByZWR1Y2VkUnVsZU5hbWVNYXRjaGVzUnVsZU5hbWUgPSAocnVsZU5hbWVBID09PSBydWxlTmFtZUIpOyAgLy8vXG5cbiAgcmV0dXJuIHJlZHVjZWRSdWxlTmFtZU1hdGNoZXNSdWxlTmFtZTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgUnVsZSB9IGZyb20gXCJvY2NhbS1wYXJzZXJzXCI7XG5cbmltcG9ydCBSZWR1Y2VkTm9kZSBmcm9tIFwiLi4vbm9kZS9yZWR1Y2VkXCI7XG5pbXBvcnQgUmVjdXJzaXZlRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9yZWN1cnNpdmVcIjtcblxuaW1wb3J0IHsgaXNJbnN0YW5jZU9mIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jbGFzc1wiO1xuaW1wb3J0IHsgcmVkdWNlZFJ1bGVOYW1lRnJvbVJ1bGVOYW1lIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9ydWxlTmFtZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZWR1Y2VkUnVsZSBleHRlbmRzIFJ1bGUge1xuICBpc0VtcHR5KCkge1xuICAgIGNvbnN0IGRlZmluaXRpb25zTGVuZ3RoID0gdGhpcy5kZWZpbml0aW9ucy5sZW5ndGgsXG4gICAgICAgICAgZW1wdHkgPSAoZGVmaW5pdGlvbnNMZW5ndGggPT09IDApO1xuXG4gICAgcmV0dXJuIGVtcHR5O1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlKHJ1bGUpIHtcbiAgICBsZXQgZGVmaW5pdGlvbnMgPSBydWxlLmdldERlZmluaXRpb25zKCk7XG5cbiAgICBjb25zdCBydWxlTmFtZSA9IHJ1bGUuZ2V0TmFtZSgpLFxuICAgICAgICAgIHJlZHVjZWRSdWxlTmFtZSA9IHJlZHVjZWRSdWxlTmFtZUZyb21SdWxlTmFtZShydWxlTmFtZSk7XG5cbiAgICBkZWZpbml0aW9ucyA9IGRlZmluaXRpb25zLmZpbHRlcigoZGVmaW5pdGlvbikgPT4ge1xuICAgICAgbGV0IHJlY3Vyc2l2ZURlZmluaXRpb25MZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiA9IGZhbHNlO1xuXG4gICAgICBjb25zdCBkZWZpbml0aW9uUmVjdXJzaXZlRGVmaW5pdGlvbiA9IGlzSW5zdGFuY2VPZihkZWZpbml0aW9uLCBSZWN1cnNpdmVEZWZpbml0aW9uKTtcblxuICAgICAgaWYgKGRlZmluaXRpb25SZWN1cnNpdmVEZWZpbml0aW9uKSB7XG4gICAgICAgIGNvbnN0IHJlY3Vyc2l2ZURlZmluaXRpb24gPSBkZWZpbml0aW9uOyAvLy9cblxuICAgICAgICByZWN1cnNpdmVEZWZpbml0aW9uTGVmdFJlY3Vyc2l2ZURlZmluaXRpb24gPSByZWN1cnNpdmVEZWZpbml0aW9uLmlzTGVmdFJlY3Vyc2l2ZURlZmluaXRpb24oKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFyZWN1cnNpdmVEZWZpbml0aW9uTGVmdFJlY3Vyc2l2ZURlZmluaXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCBuYW1lID0gcmVkdWNlZFJ1bGVOYW1lLFxuICAgICAgICAgIGFtYmlndW91cyA9IGZhbHNlLFxuICAgICAgICAgIE5vblRlcm1pbmFsTm9kZSA9IFJlZHVjZWROb2RlLCAgLy8vXG4gICAgICAgICAgcmVkdWNlZFJ1bGUgPSBuZXcgUmVkdWNlZFJ1bGUobmFtZSwgYW1iaWd1b3VzLCBkZWZpbml0aW9ucywgTm9uVGVybWluYWxOb2RlKTtcblxuICAgIHJldHVybiByZWR1Y2VkUnVsZTtcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IE5vblRlcm1pbmFsTm9kZSB9IGZyb20gXCJvY2NhbS1wYXJzZXJzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlcGVhdGVkTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhSZXBlYXRlZE5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IFJ1bGUgfSBmcm9tIFwib2NjYW0tcGFyc2Vyc1wiO1xuXG5pbXBvcnQgUmVwZWF0ZWROb2RlIGZyb20gXCIuLi9ub2RlL3JlcGVhdGVkXCI7XG5cbmltcG9ydCB7IHJlcGVhdGVkUnVsZU5hbWVGcm9tUnVsZU5hbWUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3J1bGVOYW1lXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlcGVhdGVkUnVsZSBleHRlbmRzIFJ1bGUge1xuICBzdGF0aWMgZnJvbVJ1bGUocnVsZSkge1xuICAgIGNvbnN0IHJ1bGVOYW1lID0gcnVsZS5nZXROYW1lKCksXG4gICAgICAgICAgcmVwZWF0ZWRSdWxlTmFtZSA9IHJlcGVhdGVkUnVsZU5hbWVGcm9tUnVsZU5hbWUocnVsZU5hbWUpLFxuICAgICAgICAgIG5hbWUgPSByZXBlYXRlZFJ1bGVOYW1lLCAgLy8vXG4gICAgICAgICAgYW1iaWd1b3VzID0gZmFsc2UsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXSxcbiAgICAgICAgICBOb25UZXJtaW5hbE5vZGUgPSBSZXBlYXRlZE5vZGUsIC8vL1xuICAgICAgICAgIHJlcGVhdGVkUnVsZSA9IG5ldyBSZXBlYXRlZFJ1bGUobmFtZSwgYW1iaWd1b3VzLCBkZWZpbml0aW9ucywgTm9uVGVybWluYWxOb2RlKTtcblxuICAgIHJldHVybiByZXBlYXRlZFJ1bGU7XG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBQYXJ0cyB9IGZyb20gXCJvY2NhbS1wYXJzZXJzXCI7XG5cbmNvbnN0IHsgUnVsZU5hbWVQYXJ0LCBaZXJvT3JNb3JlUGFydHNQYXJ0IH0gPSBQYXJ0cztcblxuZXhwb3J0IGZ1bmN0aW9uIHJ1bGVOYW1lUGFydEZyb21SdWxlTmFtZShydWxlTmFtZSwgbG9va0FoZWFkID0gZmFsc2UpIHtcbiAgY29uc3QgcnVsZU5hbWVQYXJ0ID0gbmV3IFJ1bGVOYW1lUGFydChydWxlTmFtZSwgbG9va0FoZWFkKTtcblxuICByZXR1cm4gcnVsZU5hbWVQYXJ0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gemVyb09yTW9yZVJ1bGVOYW1lUGFydFBhcnRGcm9tUnVsZU5hbWUocnVsZU5hbWUpIHtcbiAgY29uc3QgcnVsZU5hbWVQYXJ0ID0gcnVsZU5hbWVQYXJ0RnJvbVJ1bGVOYW1lKHJ1bGVOYW1lKSxcbiAgICAgICAgemVyb09yTW9yZVJ1bGVOYW1lUGFydFBhcnQgPSBuZXcgWmVyb09yTW9yZVBhcnRzUGFydChydWxlTmFtZVBhcnQpO1xuXG4gIHJldHVybiB6ZXJvT3JNb3JlUnVsZU5hbWVQYXJ0UGFydDtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgRGVmaW5pdGlvbiB9IGZyb20gXCJvY2NhbS1wYXJzZXJzXCI7XG5cbmltcG9ydCB7IHJ1bGVOYW1lUGFydEZyb21SdWxlTmFtZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvcGFydFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSdWxlTmFtZURlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgc3RhdGljIGZyb21SdWxlTmFtZShydWxlTmFtZSkge1xuICAgIGNvbnN0IHJ1bGVOYW1lUGFydCA9IHJ1bGVOYW1lUGFydEZyb21SdWxlTmFtZShydWxlTmFtZSksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICBydWxlTmFtZVBhcnRcbiAgICAgICAgICBdLFxuICAgICAgICAgIHJ1bGVOYW1lRGVmaW5pdGlvbiA9IG5ldyBSdWxlTmFtZURlZmluaXRpb24ocGFydHMpO1xuXG4gICAgcmV0dXJuIHJ1bGVOYW1lRGVmaW5pdGlvbjtcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IFJ1bGUgfSBmcm9tIFwib2NjYW0tcGFyc2Vyc1wiO1xuXG5pbXBvcnQgUnVsZU5hbWVEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3J1bGVOYW1lXCI7XG5pbXBvcnQgUmVjdXJzaXZlRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9yZWN1cnNpdmVcIjtcblxuaW1wb3J0IHsgaXNJbnN0YW5jZU9mIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jbGFzc1wiO1xuaW1wb3J0IHsgcmVkdWNlZFJ1bGVOYW1lRnJvbVJ1bGVOYW1lIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9ydWxlTmFtZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZXdyaXR0ZW5SdWxlIGV4dGVuZHMgUnVsZSB7XG4gIHN0YXRpYyBmcm9tUnVsZShydWxlKSB7XG4gICAgbGV0IGRlZmluaXRpb25zID0gcnVsZS5nZXREZWZpbml0aW9ucygpO1xuXG4gICAgY29uc3QgcnVsZU5hbWUgPSBydWxlLmdldE5hbWUoKSxcbiAgICAgICAgICByZWR1Y2VkUnVsZU5hbWUgPSByZWR1Y2VkUnVsZU5hbWVGcm9tUnVsZU5hbWUocnVsZU5hbWUpLFxuICAgICAgICAgIHJlZHVjZWRSdWxlTmFtZURlZmluaXRpb24gPSBSdWxlTmFtZURlZmluaXRpb24uZnJvbVJ1bGVOYW1lKHJlZHVjZWRSdWxlTmFtZSk7XG5cbiAgICBkZWZpbml0aW9ucyA9IGRlZmluaXRpb25zLmZpbHRlcigoZGVmaW5pdGlvbikgPT4ge1xuICAgICAgbGV0IHJlY3Vyc2l2ZURlZmluaXRpb25MZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiA9IGZhbHNlO1xuXG4gICAgICBjb25zdCBkZWZpbml0aW9uUmVjdXJzaXZlRGVmaW5pdGlvbiA9IGlzSW5zdGFuY2VPZihkZWZpbml0aW9uLCBSZWN1cnNpdmVEZWZpbml0aW9uKTtcblxuICAgICAgaWYgKGRlZmluaXRpb25SZWN1cnNpdmVEZWZpbml0aW9uKSB7XG4gICAgICAgIGNvbnN0IHJlY3Vyc2l2ZURlZmluaXRpb24gPSBkZWZpbml0aW9uOyAvLy9cblxuICAgICAgICByZWN1cnNpdmVEZWZpbml0aW9uTGVmdFJlY3Vyc2l2ZURlZmluaXRpb24gPSByZWN1cnNpdmVEZWZpbml0aW9uLmlzTGVmdFJlY3Vyc2l2ZURlZmluaXRpb24oKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHJlY3Vyc2l2ZURlZmluaXRpb25MZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgLi4uZGVmaW5pdGlvbnMsXG4gICAgICByZWR1Y2VkUnVsZU5hbWVEZWZpbml0aW9uXG4gICAgXTtcblxuICAgIGNvbnN0IG5hbWUgPSBydWxlTmFtZSwgIC8vL1xuICAgICAgICAgIGFtYmlndW91cyA9IHJ1bGUuaXNBbWJpZ3VvdXMoKSxcbiAgICAgICAgICBOb25UZXJtaW5hbE5vZGUgPSBydWxlLmdldE5vblRlcm1pbmFsTm9kZSgpLFxuICAgICAgICAgIHJld3JpdHRlblJ1bGUgPSBuZXcgUmV3cml0dGVuUnVsZShuYW1lLCBhbWJpZ3VvdXMsIGRlZmluaXRpb25zLCBOb25UZXJtaW5hbE5vZGUpO1xuXG4gICAgcmV0dXJuIHJld3JpdHRlblJ1bGU7XG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gY2xvbmVQYXJ0cyhwYXJ0cykge1xuICBwYXJ0cyA9IHBhcnRzLm1hcCgocGFydCkgPT4gcGFydC5jbG9uZSgpKTtcblxuICByZXR1cm4gcGFydHM7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IERlZmluaXRpb24gfSBmcm9tIFwib2NjYW0tcGFyc2Vyc1wiO1xuXG5pbXBvcnQgeyBjbG9uZVBhcnRzIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9wYXJ0c1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZXBlYXRlZERlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgc3RhdGljIGZyb21EZWZpbml0aW9uKGRlZmluaXRpb24pIHtcbiAgICBjb25zdCBwYXJ0cyA9IGRlZmluaXRpb24uZ2V0UGFydHMoKSxcbiAgICAgICAgICByZXBlYXRlZERlZmluaXRpb24gPSByZXBlYXRlZERlZmluaXRpb25Gcm9tUGFydHMocGFydHMpO1xuXG4gICAgcmV0dXJuIHJlcGVhdGVkRGVmaW5pdGlvbjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tSW1wbGljaXRseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uKGltcGxpY2l0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbikge1xuICAgIGNvbnN0IHBhcnRzID0gaW1wbGljaXRseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uLmdldFBhcnRzKCksXG4gICAgICAgICAgcmVwZWF0ZWREZWZpbml0aW9uID0gcmVwZWF0ZWREZWZpbml0aW9uRnJvbVBhcnRzKHBhcnRzKTtcblxuICAgIHJldHVybiByZXBlYXRlZERlZmluaXRpb247XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVwZWF0ZWREZWZpbml0aW9uRnJvbVBhcnRzKHBhcnRzKSB7XG4gIHBhcnRzID0gY2xvbmVQYXJ0cyhwYXJ0cyk7ICAvLy9cblxuICBwYXJ0cy5zaGlmdCgpOyAgLy8vXG5cbiAgY29uc3QgcmVwZWF0ZWREZWZpbml0aW9uID0gbmV3IFJlcGVhdGVkRGVmaW5pdGlvbihwYXJ0cyk7XG5cbiAgcmV0dXJuIHJlcGVhdGVkRGVmaW5pdGlvbjtcbn0iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IERlZmluaXRpb24gfSBmcm9tIFwib2NjYW0tcGFyc2Vyc1wiO1xuXG5pbXBvcnQgeyBjbG9uZVBhcnRzIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9wYXJ0c1wiO1xuaW1wb3J0IHsgaXNEZWZpbml0aW9uVW5hcnksIGlzRGVmaW5pdGlvbkxvb2tBaGVhZCB9IGZyb20gXCIuLi91dGlsaXRpZXMvZGVmaW5pdGlvblwiO1xuaW1wb3J0IHsgcmVwZWF0ZWRSdWxlTmFtZUZyb21SdWxlTmFtZSwgcmVkdWNlZFJ1bGVOYW1lRnJvbVJ1bGVOYW1lIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9ydWxlTmFtZVwiO1xuaW1wb3J0IHsgcnVsZU5hbWVQYXJ0RnJvbVJ1bGVOYW1lLCB6ZXJvT3JNb3JlUnVsZU5hbWVQYXJ0UGFydEZyb21SdWxlTmFtZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvcGFydFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZXdyaXR0ZW5EZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIHN0YXRpYyBmcm9tRGVmaW5pdGlvbkFuZExlZnRSZWN1cnNpdmVSdWxlTmFtZShkZWZpbml0aW9uLCBsZWZ0UmVjdXJzaXZlUnVsZU5hbWUpIHtcbiAgICBjb25zdCBkZWZpbml0aW9uTG9va0FoZWFkID0gaXNEZWZpbml0aW9uTG9va0FoZWFkKGRlZmluaXRpb24pLFxuICAgICAgICAgIHBhcnRzID0gZGVmaW5pdGlvbi5nZXRQYXJ0cygpLFxuICAgICAgICAgIGxvb2tBaGVhZCA9IGRlZmluaXRpb25Mb29rQWhlYWQsICAvLy9cbiAgICAgICAgICByZXdyaXR0ZW5EZWZpbml0aW9uID0gcmVwZWF0ZWREZWZpbml0aW9uRnJvbVBhcnRzTG9va0FoZWFkQW5kTGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lKHBhcnRzLCBsb29rQWhlYWQsIGxlZnRSZWN1cnNpdmVSdWxlTmFtZSk7XG5cbiAgICByZXR1cm4gcmV3cml0dGVuRGVmaW5pdGlvbjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tRGVmaW5pdGlvbkxlZnRSZWN1cnNpdmVSdWxlTmFtZUFuZEltcGxpY2l0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbihkZWZpbml0aW9uLCBsZWZ0UmVjdXJzaXZlUnVsZU5hbWUsIGltcGxpY2l0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbikge1xuICAgIGNvbnN0IGRlZmluaXRpb25Mb29rQWhlYWQgPSBpc0RlZmluaXRpb25Mb29rQWhlYWQoZGVmaW5pdGlvbiksXG4gICAgICAgICAgcGFydHMgPSBpbXBsaWNpdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24uZ2V0UGFydHMoKSxcbiAgICAgICAgICBsb29rQWhlYWQgPSBkZWZpbml0aW9uTG9va0FoZWFkLCAgLy8vXG4gICAgICAgICAgcmV3cml0dGVuRGVmaW5pdGlvbiA9IHJlcGVhdGVkRGVmaW5pdGlvbkZyb21QYXJ0c0xvb2tBaGVhZEFuZExlZnRSZWN1cnNpdmVSdWxlTmFtZShwYXJ0cywgbG9va0FoZWFkLCBsZWZ0UmVjdXJzaXZlUnVsZU5hbWUpO1xuXG4gICAgcmV0dXJuIHJld3JpdHRlbkRlZmluaXRpb247XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVwZWF0ZWREZWZpbml0aW9uRnJvbVBhcnRzTG9va0FoZWFkQW5kTGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lKHBhcnRzLCBsb29rQWhlYWQsIGxlZnRSZWN1cnNpdmVSdWxlTmFtZSkge1xuICBwYXJ0cyA9IGNsb25lUGFydHMocGFydHMpOyAgLy8vXG5cbiAgcGFydHMuc2hpZnQoKTsgIC8vL1xuXG4gIGNvbnN0IHJlcGVhdGVkUnVsZU5hbWUgPSByZXBlYXRlZFJ1bGVOYW1lRnJvbVJ1bGVOYW1lKGxlZnRSZWN1cnNpdmVSdWxlTmFtZSksXG4gICAgICAgIHJlZHVjZWRMZWZ0UmVjdXJzaXZlUnVsZU5hbWUgPSByZWR1Y2VkUnVsZU5hbWVGcm9tUnVsZU5hbWUobGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lKSxcbiAgICAgICAgemVyb09yTW9yZVJlcGVhdGVkUnVsZU5hbWVQYXJ0ID0gemVyb09yTW9yZVJ1bGVOYW1lUGFydFBhcnRGcm9tUnVsZU5hbWUocmVwZWF0ZWRSdWxlTmFtZSksXG4gICAgICAgIHJlZHVjZWRMZWZ0UmVjdXJzaXZlUnVsZU5hbWVQYXJ0ID0gcnVsZU5hbWVQYXJ0RnJvbVJ1bGVOYW1lKHJlZHVjZWRMZWZ0UmVjdXJzaXZlUnVsZU5hbWUsIGxvb2tBaGVhZCksXG4gICAgICAgIHJld3JpdHRlbkRlZmluaXRpb24gPSBuZXcgUmV3cml0dGVuRGVmaW5pdGlvbihwYXJ0cyk7XG5cbiAgcGFydHMudW5zaGlmdChyZWR1Y2VkTGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lUGFydCk7XG5cbiAgcGFydHMucHVzaCh6ZXJvT3JNb3JlUmVwZWF0ZWRSdWxlTmFtZVBhcnQpO1xuXG4gIHJldHVybiByZXdyaXR0ZW5EZWZpbml0aW9uO1xufSIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgaXNJbnN0YW5jZU9mIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jbGFzc1wiO1xuaW1wb3J0IHsgcmVwZWF0ZWRSdWxlTmFtZUZyb21SdWxlTmFtZSwgcmVkdWNlZFJ1bGVOYW1lRnJvbVJ1bGVOYW1lIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9ydWxlTmFtZVwiO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVkdWNlZFJ1bGVGcm9tUnVsZShydWxlLCBydWxlTWFwLCBSZWR1Y2VkUnVsZSkge1xuXHRjb25zdCBydWxlTmFtZSA9IHJ1bGUuZ2V0TmFtZSgpLFxuXHRcdFx0XHRyZWR1Y2VkUnVsZU5hbWUgPSByZWR1Y2VkUnVsZU5hbWVGcm9tUnVsZU5hbWUocnVsZU5hbWUpO1xuXG5cdGxldCByZWR1Y2VkUnVsZSA9IHJ1bGVNYXBbcmVkdWNlZFJ1bGVOYW1lXSB8fCBudWxsO1xuXG5cdGlmIChyZWR1Y2VkUnVsZSA9PT0gbnVsbCkge1xuICAgIHJlZHVjZWRSdWxlID0gUmVkdWNlZFJ1bGUuZnJvbVJ1bGUocnVsZSk7XG5cbiAgICBydWxlTWFwW3JlZHVjZWRSdWxlTmFtZV0gPSByZWR1Y2VkUnVsZTtcblx0fVxuXG5cdHJldHVybiByZWR1Y2VkUnVsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcGVhdGVkUnVsZUZyb21SdWxlKHJ1bGUsIHJ1bGVNYXAsIFJlcGVhdGVkUnVsZSkge1xuICBjb25zdCBydWxlTmFtZSA9IHJ1bGUuZ2V0TmFtZSgpLFxuICAgICAgICByZXBlYXRlZFJ1bGVOYW1lID0gcmVwZWF0ZWRSdWxlTmFtZUZyb21SdWxlTmFtZShydWxlTmFtZSk7XG5cbiAgbGV0IHJlcGVhdGVkUnVsZSA9IHJ1bGVNYXBbcmVwZWF0ZWRSdWxlTmFtZV0gfHwgbnVsbDtcblxuICBpZiAocmVwZWF0ZWRSdWxlID09PSBudWxsKSB7XG4gICAgcmVwZWF0ZWRSdWxlID0gUmVwZWF0ZWRSdWxlLmZyb21SdWxlKHJ1bGUpO1xuXG4gICAgcnVsZU1hcFtyZXBlYXRlZFJ1bGVOYW1lXSA9IHJlcGVhdGVkUnVsZTtcbiAgfVxuXG4gIHJldHVybiByZXBlYXRlZFJ1bGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXdyaXR0ZW5SdWxlRnJvbVJ1bGUocnVsZSwgcnVsZU1hcCwgUmV3cml0dGVuUnVsZSkge1xuICBsZXQgcmV3cml0dGVuUnVsZTtcblxuICBjb25zdCBydWxlUmV3cml0dGVuUnVsZSA9IGlzSW5zdGFuY2VPZihydWxlLCBSZXdyaXR0ZW5SdWxlKTtcblxuICBpZiAocnVsZVJld3JpdHRlblJ1bGUpIHtcbiAgICByZXdyaXR0ZW5SdWxlID0gcnVsZTsgLy8vXG4gIH0gZWxzZSB7XG4gICAgcmV3cml0dGVuUnVsZSA9IFJld3JpdHRlblJ1bGUuZnJvbVJ1bGUocnVsZSk7XG5cbiAgICBjb25zdCByZXBsYWNlZFJ1bGUgPSBydWxlLCAgLy8vXG4gICAgICAgICAgcmVwbGFjZW1lbnRSdWxlID0gcmV3cml0dGVuUnVsZTsgIC8vL1xuXG4gICAgcmVwbGFjZVJ1bGUocmVwbGFjZWRSdWxlLCByZXBsYWNlbWVudFJ1bGUsIHJ1bGVNYXApO1xuICB9XG5cbiAgcmV0dXJuIHJld3JpdHRlblJ1bGU7XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VSdWxlKHJlcGxhY2VkUnVsZSwgcmVwbGFjZW1lbnRSdWxlLCBydWxlTWFwKSB7XG4gIGNvbnN0IHJlcGxhY2VkUnVsZU5hbWUgPSByZXBsYWNlZFJ1bGUuZ2V0TmFtZSgpLFxuICAgICAgICByZXBsYWNlbWVudFJ1bGVOYW1lID0gcmVwbGFjZW1lbnRSdWxlLmdldE5hbWUoKTtcblxuICBkZWxldGUgcnVsZU1hcFtyZXBsYWNlZFJ1bGVOYW1lXTtcblxuICBydWxlTWFwW3JlcGxhY2VtZW50UnVsZU5hbWVdID0gcmVwbGFjZW1lbnRSdWxlO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUmVkdWNlZFJ1bGUgZnJvbSBcIi4uLy4uL3J1bGUvcmVkdWNlZFwiO1xuaW1wb3J0IFJlcGVhdGVkUnVsZSBmcm9tIFwiLi4vLi4vcnVsZS9yZXBlYXRlZFwiO1xuaW1wb3J0IFJld3JpdHRlblJ1bGUgZnJvbSBcIi4uLy4uL3J1bGUvcmV3cml0dGVuXCI7XG5pbXBvcnQgUmVwZWF0ZWREZWZpbml0aW9uIGZyb20gXCIuLi8uLi9kZWZpbml0aW9uL3JlcGVhdGVkXCI7XG5pbXBvcnQgUmV3cml0dGVuRGVmaW5pdGlvbiBmcm9tIFwiLi4vLi4vZGVmaW5pdGlvbi9yZXdyaXR0ZW5cIjtcbmltcG9ydCBMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiBmcm9tIFwiLi4vLi4vZGVmaW5pdGlvbi9sZWZ0UmVjdXJzaXZlXCI7XG5cbmltcG9ydCB7IERJUkVDVExZX0xFRlRfUkVDVVJTSVZFX1RZUEUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcbmltcG9ydCB7IHJlZHVjZWRSdWxlRnJvbVJ1bGUsIHJlcGVhdGVkUnVsZUZyb21SdWxlLCByZXdyaXR0ZW5SdWxlRnJvbVJ1bGUgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL3J1bGVcIjtcbmltcG9ydCB7IGlzRGVmaW5pdGlvblVuYXJ5LCBpc0RlZmluaXRpb25Db21wbGV4LCBpc0RlZmluaXRpb25MZWZ0UmVjdXJzaXZlLCByZWN1cnNpdmVSdWxlTmFtZXNGcm9tRGVmaW5pdGlvbiwgbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lc0Zyb21EZWZpbml0aW9uIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9kZWZpbml0aW9uXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24gZXh0ZW5kcyBMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiB7XG4gIHJld3JpdGUocnVsZU1hcCkge1xuICAgIGNvbnN0IGRlZmluaXRpb24gPSB0aGlzLmdldERlZmluaXRpb24oKSxcbiAgICAgICAgICBydWxlTmFtZSA9IHRoaXMuZ2V0UnVsZU5hbWUoKSxcbiAgICAgICAgICBydWxlID0gcnVsZU1hcFtydWxlTmFtZV07XG5cbiAgICBjb25zdCByZWR1Y2VkUnVsZSA9IHJlZHVjZWRSdWxlRnJvbVJ1bGUocnVsZSwgcnVsZU1hcCwgUmVkdWNlZFJ1bGUpLFxuICAgICAgICAgIHJlZHVjZWRSdWxlRW1wdHkgPSByZWR1Y2VkUnVsZS5pc0VtcHR5KCk7XG5cbiAgICBpZiAocmVkdWNlZFJ1bGVFbXB0eSkge1xuICAgICAgY29uc3QgZGVmaW5pdGlvblN0cmluZyA9IGRlZmluaXRpb24uYXNTdHJpbmcoKTtcblxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgJyR7ZGVmaW5pdGlvblN0cmluZ30nIGRpcmVjdGx5IGxlZnQgcmVjdXJzaXZlIGRlZmluaXRpb24gb2YgdGhlICcke3J1bGVOYW1lfScgcnVsZSBoYXMgbm8gc2libGluZyBub24tbGVmdCByZWN1cnNpdmUgZGVmaW5pdGlvbnMgYW5kIHRoZXJlZm9yZSBjYW5ub3QgYmUgcmV3cml0dGVuLmApO1xuICAgIH1cblxuICAgIGNvbnN0IGxlZnRSZWN1cnNpdmVSdWxlTmFtZSA9IHJ1bGVOYW1lOyAvLy9cblxuICAgIGNvbnN0IHJlcGVhdGVkUnVsZSA9IHJlcGVhdGVkUnVsZUZyb21SdWxlKHJ1bGUsIHJ1bGVNYXAsIFJlcGVhdGVkUnVsZSksXG4gICAgICAgICAgcmVwZWF0ZWREZWZpbml0aW9uID0gUmVwZWF0ZWREZWZpbml0aW9uLmZyb21EZWZpbml0aW9uKGRlZmluaXRpb24pO1xuXG4gICAgcmVwZWF0ZWRSdWxlLmFkZERlZmluaXRpb24ocmVwZWF0ZWREZWZpbml0aW9uKTtcblxuICAgIGNvbnN0IHJld3JpdHRlblJ1bGUgPSByZXdyaXR0ZW5SdWxlRnJvbVJ1bGUocnVsZSwgcnVsZU1hcCwgUmV3cml0dGVuUnVsZSksXG4gICAgICAgICAgcmVwbGFjZWREZWZpbml0aW9uID0gdGhpcywgLy8vXG4gICAgICAgICAgcmV3cml0dGVuRGVmaW5pdGlvbiA9IFJld3JpdHRlbkRlZmluaXRpb24uZnJvbURlZmluaXRpb25BbmRMZWZ0UmVjdXJzaXZlUnVsZU5hbWUoZGVmaW5pdGlvbiwgbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lKSxcbiAgICAgICAgICByZXBsYWNlbWVudERlZmluaXRpb24gPSByZXdyaXR0ZW5EZWZpbml0aW9uOyAgLy8vXG5cbiAgICByZXdyaXR0ZW5SdWxlLnJlcGxhY2VEZWZpbml0aW9uKHJlcGxhY2VkRGVmaW5pdGlvbiwgcmVwbGFjZW1lbnREZWZpbml0aW9uKTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmREZWZpbml0aW9uKHJ1bGVOYW1lLCBkZWZpbml0aW9uKSB7XG4gICAgbGV0IGRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24gPSBudWxsO1xuXG4gICAgY29uc3QgZGVmaW5pdGlvbkxlZnRSZWN1cnNpdmUgPSBpc0RlZmluaXRpb25MZWZ0UmVjdXJzaXZlKGRlZmluaXRpb24pO1xuXG4gICAgaWYgKGRlZmluaXRpb25MZWZ0UmVjdXJzaXZlKSB7XG4gICAgICBjb25zdCBsZWZ0UmVjdXJzaXZlUnVsZU5hbWVzID0gbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lc0Zyb21EZWZpbml0aW9uKGRlZmluaXRpb24pO1xuXG4gICAgICBsZWZ0UmVjdXJzaXZlUnVsZU5hbWVzLnNvbWUoKGxlZnRSZWN1cnNpdmVSdWxlTmFtZSkgPT4ge1xuICAgICAgICBjb25zdCBydWxlTmFtZUxlZnRSZWN1cnNpdmVSdWxlTmFtZSA9IChydWxlTmFtZSA9PT0gbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lKTtcblxuICAgICAgICBpZiAocnVsZU5hbWVMZWZ0UmVjdXJzaXZlUnVsZU5hbWUpIHtcbiAgICAgICAgICBjb25zdCBkZWZpbml0aW9uVW5hcnkgPSBpc0RlZmluaXRpb25VbmFyeShkZWZpbml0aW9uKTtcblxuICAgICAgICAgIGlmIChkZWZpbml0aW9uVW5hcnkpIHtcbiAgICAgICAgICAgIGNvbnN0IGRlZmluaXRpb25TdHJpbmcgPSBkZWZpbml0aW9uLmFzU3RyaW5nKCk7XG5cbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlICcke2RlZmluaXRpb25TdHJpbmd9JyBkaXJlY3RseSBsZWZ0IHJlY3Vyc2l2ZSBkZWZpbml0aW9uIG9mIHRoZSAnJHtydWxlTmFtZX0nIHJ1bGUgaXMgdW5hcnkgYW5kIHRoZXJlZm9yZSBjYW5ub3QgYmUgcmV3cml0dGVuLmApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGRlZmluaXRpb25Db21wbGV4ID0gaXNEZWZpbml0aW9uQ29tcGxleChkZWZpbml0aW9uKTtcblxuICAgICAgICAgIGlmIChkZWZpbml0aW9uQ29tcGxleCkge1xuICAgICAgICAgICAgY29uc3QgZGVmaW5pdGlvblN0cmluZyA9IGRlZmluaXRpb24uYXNTdHJpbmcoKTtcblxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgJyR7ZGVmaW5pdGlvblN0cmluZ30nIGRpcmVjdGx5IGxlZnQgcmVjdXJzaXZlIGRlZmluaXRpb24gb2YgdGhlICcke3J1bGVOYW1lfScgcnVsZSBpcyBjb21wbGV4IGFuZCB0aGVyZWZvcmUgY2Fubm90IGJlIHJld3JpdHRlbi5gKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCB0eXBlID0gRElSRUNUTFlfTEVGVF9SRUNVUlNJVkVfVFlQRSxcbiAgICAgICAgICAgICAgICBwYXJ0cyA9IFtdLFxuICAgICAgICAgICAgICAgIHJlY3Vyc2l2ZVJ1bGVOYW1lcyA9IHJlY3Vyc2l2ZVJ1bGVOYW1lc0Zyb21EZWZpbml0aW9uKGRlZmluaXRpb24pO1xuXG4gICAgICAgICAgZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiA9IG5ldyBEaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uKHR5cGUsIHBhcnRzLCBydWxlTmFtZSwgZGVmaW5pdGlvbiwgcmVjdXJzaXZlUnVsZU5hbWVzLCBsZWZ0UmVjdXJzaXZlUnVsZU5hbWVzKTtcblxuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbjtcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5pbXBvcnQgTGVmdFJlY3Vyc2l2ZURlZmluaXRpb24gZnJvbSBcIi4uLy4uL2RlZmluaXRpb24vbGVmdFJlY3Vyc2l2ZVwiO1xuXG5pbXBvcnQgeyBMRUZUX1JFQ1VSU0lWRV9UWVBFLCBJTVBMSUNJVExZX0xFRlRfUkVDVVJTSVZFX1RZUEUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxuY29uc3QgeyBmaXJzdCB9ID0gYXJyYXlVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEltcGxpY2l0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiBleHRlbmRzIExlZnRSZWN1cnNpdmVEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3IodHlwZSwgcGFydHMsIHJ1bGVOYW1lLCBkZWZpbml0aW9uLCByZWN1cnNpdmVSdWxlTmFtZXMsIGxlZnRSZWN1cnNpdmVSdWxlTmFtZXMsIGxlZnRSZWN1cnNpdmVEZWZpbml0aW9uKSB7XG4gICAgc3VwZXIodHlwZSwgcGFydHMsIHJ1bGVOYW1lLCBkZWZpbml0aW9uLCByZWN1cnNpdmVSdWxlTmFtZXMsIGxlZnRSZWN1cnNpdmVSdWxlTmFtZXMpO1xuXG4gICAgdGhpcy5sZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiA9IGxlZnRSZWN1cnNpdmVEZWZpbml0aW9uO1xuICB9XG5cbiAgZ2V0TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24oKSB7XG4gICAgdGhpcy5sZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiA9IGxlZnRSZWN1cnNpdmVEZWZpbml0aW9uO1xuICB9XG5cbiAgcmVwbGFjZShydWxlTWFwKSB7XG4gICAgY29uc3QgcnVsZSA9IHJ1bGVNYXBbdGhpcy5ydWxlTmFtZV0sXG4gICAgICAgICAgcmVwbGFjZWREZWZpbml0aW9uID0gdGhpcy5sZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiwgIC8vL1xuICAgICAgICAgIHJlcGxhY2VtZW50RGVmaW5pdGlvbiA9IHRoaXM7IC8vL1xuXG4gICAgcnVsZS5yZXBsYWNlRGVmaW5pdGlvbihyZXBsYWNlZERlZmluaXRpb24sIHJlcGxhY2VtZW50RGVmaW5pdGlvbik7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lTGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lQW5kUmVjdXJzaXZlRGVmaW5pdGlvbnMocnVsZU5hbWUsIGxlZnRSZWN1cnNpdmVSdWxlTmFtZSwgcmVjdXJzaXZlRGVmaW5pdGlvbnMpIHtcbiAgICBsZXQgaW1wbGljaXRseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uID0gbnVsbDtcblxuICAgIGNvbnN0IGxlZnRSZWN1cnNpdmVEZWZpbml0aW9uID0gZmluZExlZnRSZWN1cnNpdmVEZWZpbml0aW9uKHJ1bGVOYW1lLCBsZWZ0UmVjdXJzaXZlUnVsZU5hbWUsIHJlY3Vyc2l2ZURlZmluaXRpb25zKTtcblxuICAgIGlmIChsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgdHlwZSA9IElNUExJQ0lUTFlfTEVGVF9SRUNVUlNJVkVfVFlQRSxcbiAgICAgICAgICAgIHBhcnRzID0gbGVmdFJlY3Vyc2l2ZURlZmluaXRpb24uZ2V0UGFydHMoKSxcbiAgICAgICAgICAgIHJ1bGVOYW1lID0gbGVmdFJlY3Vyc2l2ZURlZmluaXRpb24uZ2V0UnVsZU5hbWUoKSxcbiAgICAgICAgICAgIGRlZmluaXRpb24gPSBudWxsLCAvLy9cbiAgICAgICAgICAgIHJlY3Vyc2l2ZVJ1bGVOYW1lcyA9IGxlZnRSZWN1cnNpdmVEZWZpbml0aW9uLmdldFJlY3Vyc2l2ZVJ1bGVOYW1lcygpLFxuICAgICAgICAgICAgbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lcyA9IGxlZnRSZWN1cnNpdmVEZWZpbml0aW9uLmdldExlZnRSZWN1cnNpdmVSdWxlTmFtZXMoKTtcblxuICAgICAgaW1wbGljaXRseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uID0gbmV3IEltcGxpY2l0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbih0eXBlLCBwYXJ0cywgcnVsZU5hbWUsIGRlZmluaXRpb24sIHJlY3Vyc2l2ZVJ1bGVOYW1lcywgbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lcywgbGVmdFJlY3Vyc2l2ZURlZmluaXRpb24pO1xuICAgIH1cblxuICAgIHJldHVybiBpbXBsaWNpdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb247XG4gIH1cbn1cblxuZnVuY3Rpb24gZmluZExlZnRSZWN1cnNpdmVEZWZpbml0aW9uKHJ1bGVOYW1lLCBsZWZ0UmVjdXJzaXZlUnVsZU5hbWUsIHJlY3Vyc2l2ZURlZmluaXRpb25zKSB7XG4gIGxldCBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiA9IG51bGw7XG5cbiAgY29uc3QgbGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zUGF0aCA9IGZpbmRMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnNQYXRoKHJ1bGVOYW1lLCBsZWZ0UmVjdXJzaXZlUnVsZU5hbWUsIHJlY3Vyc2l2ZURlZmluaXRpb25zKTtcblxuICBpZiAobGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zUGF0aCAhPT0gbnVsbCkge1xuICAgIGNvbnN0IGZpcnN0TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24gPSBmaXJzdChsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnNQYXRoKTtcblxuICAgIGxlZnRSZWN1cnNpdmVEZWZpbml0aW9uID0gZmlyc3RMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbjsgLy8vXG4gIH1cblxuICByZXR1cm4gbGVmdFJlY3Vyc2l2ZURlZmluaXRpb247XG59XG5cbmZ1bmN0aW9uIGZpbmRSZWN1cnNpdmVEZWZpbml0aW9uc1BhdGgocnVsZU5hbWUsIHJlY3Vyc2l2ZVJ1bGVOYW1lLCByZWN1cnNpdmVEZWZpbml0aW9ucykge1xuICBsZXQgcmVjdXJzaXZlRGVmaW5pdGlvbnNQYXRoID0gbnVsbDtcblxuICByZWN1cnNpdmVEZWZpbml0aW9ucy5zb21lKChyZWN1cnNpdmVEZWZpbml0aW9uLCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHJlY3Vyc2l2ZURlZmluaXRpb25SdWxlTmFtZSA9IHJlY3Vyc2l2ZURlZmluaXRpb24uZ2V0UnVsZU5hbWUoKSxcbiAgICAgICAgICByZWN1cnNpdmVEZWZpbml0aW9uUnVsZU5hbWVSZWN1cnNpdmVSdWxlTmFtZSA9IChyZWN1cnNpdmVEZWZpbml0aW9uUnVsZU5hbWUgPT09IHJlY3Vyc2l2ZVJ1bGVOYW1lKTtcblxuICAgIGlmIChyZWN1cnNpdmVEZWZpbml0aW9uUnVsZU5hbWVSZWN1cnNpdmVSdWxlTmFtZSkge1xuICAgICAgcmVjdXJzaXZlRGVmaW5pdGlvbnNQYXRoID0gcmVjdXJzaXZlRGVmaW5pdGlvbnMuc2xpY2UoaW5kZXgpO1xuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiByZWN1cnNpdmVEZWZpbml0aW9uc1BhdGg7XG59XG5cbmZ1bmN0aW9uIGZpbmRMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnNQYXRoKHJ1bGVOYW1lLCBsZWZ0UmVjdXJzaXZlUnVsZU5hbWUsIHJlY3Vyc2l2ZURlZmluaXRpb25zKSB7XG4gIGxldCBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnNQYXRoID0gbnVsbDtcblxuICBjb25zdCByZWN1cnNpdmVSdWxlTmFtZSA9IGxlZnRSZWN1cnNpdmVSdWxlTmFtZSwgIC8vL1xuICAgICAgcmVjdXJzaXZlRGVmaW5pdGlvbnNQYXRoID0gZmluZFJlY3Vyc2l2ZURlZmluaXRpb25zUGF0aChydWxlTmFtZSwgcmVjdXJzaXZlUnVsZU5hbWUsIHJlY3Vyc2l2ZURlZmluaXRpb25zKTtcblxuICBpZiAocmVjdXJzaXZlRGVmaW5pdGlvbnNQYXRoICE9PSBudWxsKSB7XG4gICAgY29uc3QgcmVjdXJzaXZlRGVmaW5pdGlvbnNQYXRoTGVmdFJlY3Vyc2l2ZSA9IGlzUmVjdXJzaXZlRGVmaW5pdGlvbnNQYXRoTGVmdFJlY3Vyc2l2ZShydWxlTmFtZSwgcmVjdXJzaXZlRGVmaW5pdGlvbnNQYXRoKTtcblxuICAgIGlmIChyZWN1cnNpdmVEZWZpbml0aW9uc1BhdGhMZWZ0UmVjdXJzaXZlKSB7XG4gICAgICBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnNQYXRoID0gcmVjdXJzaXZlRGVmaW5pdGlvbnNQYXRoOyAgLy8vXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGxlZnRSZWN1cnNpdmVEZWZpbml0aW9uc1BhdGg7XG59XG5cbmZ1bmN0aW9uIGlzUmVjdXJzaXZlRGVmaW5pdGlvbnNQYXRoTGVmdFJlY3Vyc2l2ZShydWxlTmFtZSwgcmVjdXJzaXZlRGVmaW5pdGlvbnNQYXRoKSB7XG4gIGNvbnN0IHJ1bGVOYW1lcyA9IHJ1bGVOYW1lc0Zyb21SdWxlTmFtZUFuZFJlY3Vyc2l2ZURlZmluaXRpb25zUGF0aChydWxlTmFtZSwgcmVjdXJzaXZlRGVmaW5pdGlvbnNQYXRoKSxcbiAgICAgICAgcmVjdXJzaXZlRGVmaW5pdGlvbnNQYXRoTGVmdFJlY3Vyc2l2ZSA9IHJlY3Vyc2l2ZURlZmluaXRpb25zUGF0aC5ldmVyeSgocmVjdXJzaXZlRGVmaW5pdGlvbiwgaW5kZXgpID0+IHtcbiAgICAgICAgICBjb25zdCB0eXBlID0gcmVjdXJzaXZlRGVmaW5pdGlvbi5nZXRUeXBlKCk7XG5cbiAgICAgICAgICBpZiAodHlwZSA9PT0gTEVGVF9SRUNVUlNJVkVfVFlQRSkge1xuICAgICAgICAgICAgY29uc3QgcnVsZU5hbWUgPSBydWxlTmFtZXNbaW5kZXhdLFxuICAgICAgICAgICAgICAgICAgbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lcyA9IHJlY3Vyc2l2ZURlZmluaXRpb24uZ2V0TGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lcygpLFxuICAgICAgICAgICAgICAgICAgbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lc0luY2x1ZGVzUnVsZU5hbWUgPSBsZWZ0UmVjdXJzaXZlUnVsZU5hbWVzLmluY2x1ZGVzKHJ1bGVOYW1lKTtcblxuICAgICAgICAgICAgaWYgKGxlZnRSZWN1cnNpdmVSdWxlTmFtZXNJbmNsdWRlc1J1bGVOYW1lKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgcmV0dXJuIHJlY3Vyc2l2ZURlZmluaXRpb25zUGF0aExlZnRSZWN1cnNpdmU7XG59XG5cbmZ1bmN0aW9uIHJ1bGVOYW1lc0Zyb21SdWxlTmFtZUFuZFJlY3Vyc2l2ZURlZmluaXRpb25zUGF0aChydWxlTmFtZSwgcmVjdXJzaXZlRGVmaW5pdGlvbnNQYXRoKSB7XG4gIGNvbnN0IHJ1bGVOYW1lcyA9IHJlY3Vyc2l2ZURlZmluaXRpb25zUGF0aC5tYXAoKHJlY3Vyc2l2ZURlZmluaXRpb24pID0+IHJlY3Vyc2l2ZURlZmluaXRpb24uZ2V0UnVsZU5hbWUoKSk7XG5cbiAgcnVsZU5hbWVzLnB1c2gocnVsZU5hbWUpO1xuXG4gIGNvbnN0IGZpcnN0UnVsZU5hbWUgPSBydWxlTmFtZXMuc2hpZnQoKSxcbiAgICAgICAgbGFzdFJ1bGVOYW1lID0gZmlyc3RSdWxlTmFtZTsgLy8vXG5cbiAgcnVsZU5hbWVzLnB1c2gobGFzdFJ1bGVOYW1lKTtcblxuICByZXR1cm4gcnVsZU5hbWVzO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgRU1QVFlfU1RSSU5HID0gXCJcIjtcbmV4cG9ydCBjb25zdCBVTkFTU0lHTkVEX0VOVFJZID0gXCJeLiokXCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IERlZmluaXRpb24gfSBmcm9tIFwib2NjYW0tcGFyc2Vyc1wiO1xuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmNvbnN0IHsgZmlyc3QgfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5pbXBvcnQgeyBjbG9uZVBhcnRzIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9wYXJ0c1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBVbmFyeURlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgc3RhdGljIGZyb21EZWZpbml0aW9uKGRlZmluaXRpb24pIHtcbiAgICBsZXQgcGFydHMgPSBkZWZpbml0aW9uLmdldFBhcnRzKCk7XG5cbiAgICBjb25zdCBmaXJzdFBhcnQgPSBmaXJzdChwYXJ0cyk7XG5cbiAgICBwYXJ0cyA9IFsgZmlyc3RQYXJ0IF07XG5cbiAgICBwYXJ0cyA9IGNsb25lUGFydHMocGFydHMpOyAgLy8vXG5cbiAgICBjb25zdCB1bmFyeURlZmluaXRpb24gPSBuZXcgVW5hcnlEZWZpbml0aW9uKHBhcnRzKTtcblxuICAgIHJldHVybiB1bmFyeURlZmluaXRpb247XG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IFJlZHVjZWRSdWxlIGZyb20gXCIuLi8uLi9ydWxlL3JlZHVjZWRcIjtcbmltcG9ydCBSZXBlYXRlZFJ1bGUgZnJvbSBcIi4uLy4uL3J1bGUvcmVwZWF0ZWRcIjtcbmltcG9ydCBSZXdyaXR0ZW5SdWxlIGZyb20gXCIuLi8uLi9ydWxlL3Jld3JpdHRlblwiO1xuaW1wb3J0IFJlcGVhdGVkRGVmaW5pdGlvbiBmcm9tIFwiLi4vLi4vZGVmaW5pdGlvbi9yZXBlYXRlZFwiO1xuaW1wb3J0IFJld3JpdHRlbkRlZmluaXRpb24gZnJvbSBcIi4uLy4uL2RlZmluaXRpb24vcmV3cml0dGVuXCI7XG5pbXBvcnQgTGVmdFJlY3Vyc2l2ZURlZmluaXRpb24gZnJvbSBcIi4uLy4uL2RlZmluaXRpb24vbGVmdFJlY3Vyc2l2ZVwiO1xuaW1wb3J0IEltcGxpY2l0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiBmcm9tIFwiLi4vLi4vZGVmaW5pdGlvbi9sZWZ0UmVjdXJzaXZlL2ltcGxpY2l0bHlcIjtcblxuaW1wb3J0IHsgSU5ESVJFQ1RMWV9MRUZUX1JFQ1VSU0lWRV9UWVBFIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5pbXBvcnQgeyByZWR1Y2VkUnVsZUZyb21SdWxlLCByZXBlYXRlZFJ1bGVGcm9tUnVsZSwgcmV3cml0dGVuUnVsZUZyb21SdWxlIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9ydWxlXCI7XG5pbXBvcnQgeyBpc0RlZmluaXRpb25VbmFyeSxcbiAgICAgICAgIGlzRGVmaW5pdGlvbkNvbXBsZXgsXG4gICAgICAgICBpc0RlZmluaXRpb25MZWZ0UmVjdXJzaXZlLFxuICAgICAgICAgdW5hcnlEZWZpbml0aW9uZnJvbURlZmluaXRpb24sXG4gICAgICAgICByZWN1cnNpdmVSdWxlTmFtZXNGcm9tRGVmaW5pdGlvbixcbiAgICAgICAgIGxlZnRSZWN1cnNpdmVSdWxlTmFtZXNGcm9tRGVmaW5pdGlvbiB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvZGVmaW5pdGlvblwiO1xuaW1wb3J0IFVuYXJ5RGVmaW5pdGlvbiBmcm9tIFwiLi4vdW5hcnlcIjtcblxuY29uc3QgeyBmaXJzdCB9ID0gYXJyYXlVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiBleHRlbmRzIExlZnRSZWN1cnNpdmVEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3IodHlwZSwgcGFydHMsIHJ1bGVOYW1lLCBkZWZpbml0aW9uLCByZWN1cnNpdmVSdWxlTmFtZXMsIGxlZnRSZWN1cnNpdmVSdWxlTmFtZXMsIGltcGxpY2l0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbikge1xuICAgIHN1cGVyKHR5cGUsIHBhcnRzLCBydWxlTmFtZSwgZGVmaW5pdGlvbiwgcmVjdXJzaXZlUnVsZU5hbWVzLCBsZWZ0UmVjdXJzaXZlUnVsZU5hbWVzKTtcblxuICAgIHRoaXMuaW1wbGljaXRseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uID0gaW1wbGljaXRseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uO1xuICB9XG5cbiAgZ2V0SW1wbGljaXRseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmltcGxpY2l0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbjtcbiAgfVxuXG4gIHJld3JpdGUocnVsZU1hcCkge1xuICAgIGNvbnN0IHJ1bGVOYW1lID0gdGhpcy5nZXRSdWxlTmFtZSgpLFxuICAgICAgICAgIHJ1bGUgPSBydWxlTWFwW3J1bGVOYW1lXSxcbiAgICAgICAgICBkZWZpbml0aW9uID0gdGhpcy5nZXREZWZpbml0aW9uKCksXG4gICAgICAgICAgZGVmaW5pdGlvblVuYXJ5ID0gaXNEZWZpbml0aW9uVW5hcnkoZGVmaW5pdGlvbiksXG4gICAgICAgICAgbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lcyA9IHRoaXMuZ2V0TGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lcygpLFxuICAgICAgICAgIGZpcnN0TGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lID0gZmlyc3QobGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lcyksXG4gICAgICAgICAgbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lID0gZmlyc3RMZWZ0UmVjdXJzaXZlUnVsZU5hbWUsIC8vL1xuICAgICAgICAgIGxlZnRSZWN1cnNpdmVSdWxlID0gcnVsZU1hcFtsZWZ0UmVjdXJzaXZlUnVsZU5hbWVdO1xuXG4gICAgY29uc3QgcmVkdWNlZFJ1bGUgPSByZWR1Y2VkUnVsZUZyb21SdWxlKGxlZnRSZWN1cnNpdmVSdWxlLCBydWxlTWFwLCBSZWR1Y2VkUnVsZSksXG4gICAgICAgICAgcmVkdWNlZFJ1bGVFbXB0eSA9IHJlZHVjZWRSdWxlLmlzRW1wdHkoKTtcblxuICAgIGlmIChyZWR1Y2VkUnVsZUVtcHR5KSB7XG4gICAgICBjb25zdCBkZWZpbml0aW9uU3RyaW5nID0gZGVmaW5pdGlvbi5hc1N0cmluZygpLFxuICAgICAgICAgICAgaW1wbGljaXRseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uID0gdGhpcy5nZXRJbXBsaWNpdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24oKSxcbiAgICAgICAgICAgIGltcGxpY2l0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvblN0cmluZyA9IGltcGxpY2l0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbi5hc1N0cmluZygpO1xuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSAnJHtpbXBsaWNpdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb25TdHJpbmd9JyBpbXBsaWNpdGx5IGxlZnQgcmVjdXJzaXZlIGRlZmluaXRpb24gb2YgdGhlICcke2xlZnRSZWN1cnNpdmVSdWxlTmFtZX0nIHJ1bGUgaGFzIG5vIHNpYmxpbmcgbm9uLWxlZnQgcmVjdXJzaXZlIGRlZmluaXRpb25zIGFuZCB0aGVyZWZvcmUgdGhlICcke2RlZmluaXRpb25TdHJpbmd9JyBpbmRpcmVjdGx5IGxlZnQgcmVjdXJzaXZlIGRlZmluaXRpb24gb2YgdGhlICcke3J1bGVOYW1lfScgcnVsZSBjYW5ub3QgYmUgcmV3cml0dGVuLmApO1xuICAgIH1cblxuICAgIGNvbnN0IHJlcGVhdGVkUnVsZSA9IHJlcGVhdGVkUnVsZUZyb21SdWxlKGxlZnRSZWN1cnNpdmVSdWxlLCBydWxlTWFwLCBSZXBlYXRlZFJ1bGUpLFxuICAgICAgICAgIHJlcGVhdGVkRGVmaW5pdGlvbiA9IGRlZmluaXRpb25VbmFyeSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXBlYXRlZERlZmluaXRpb24uZnJvbUltcGxpY2l0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbih0aGlzLmltcGxpY2l0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbikgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXBlYXRlZERlZmluaXRpb24uZnJvbURlZmluaXRpb24oZGVmaW5pdGlvbik7XG5cbiAgICByZXBlYXRlZFJ1bGUuYWRkRGVmaW5pdGlvbihyZXBlYXRlZERlZmluaXRpb24pO1xuXG4gICAgY29uc3QgcmV3cml0dGVuUnVsZSA9IHJld3JpdHRlblJ1bGVGcm9tUnVsZShsZWZ0UmVjdXJzaXZlUnVsZSwgcnVsZU1hcCwgUmV3cml0dGVuUnVsZSksXG4gICAgICAgICAgcmVwbGFjZWREZWZpbml0aW9uID0gdGhpcywgLy8vXG4gICAgICAgICAgcmV3cml0dGVuRGVmaW5pdGlvbiA9IGRlZmluaXRpb25VbmFyeSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmV3cml0dGVuRGVmaW5pdGlvbi5mcm9tRGVmaW5pdGlvbkxlZnRSZWN1cnNpdmVSdWxlTmFtZUFuZEltcGxpY2l0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbihkZWZpbml0aW9uLCBsZWZ0UmVjdXJzaXZlUnVsZU5hbWUsIHRoaXMuaW1wbGljaXRseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXdyaXR0ZW5EZWZpbml0aW9uLmZyb21EZWZpbml0aW9uQW5kTGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lKGRlZmluaXRpb24sIGxlZnRSZWN1cnNpdmVSdWxlTmFtZSksXG4gICAgICAgICAgcmVwbGFjZW1lbnREZWZpbml0aW9uID0gcmV3cml0dGVuRGVmaW5pdGlvbjsgIC8vL1xuXG4gICAgcnVsZS5yZXBsYWNlRGVmaW5pdGlvbihyZXBsYWNlZERlZmluaXRpb24sIHJlcGxhY2VtZW50RGVmaW5pdGlvbik7XG5cbiAgICBpZiAoZGVmaW5pdGlvblVuYXJ5KSB7XG4gICAgICBjb25zdCB1bmFyeUltcGxpY2l0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiA9IFVuYXJ5RGVmaW5pdGlvbi5mcm9tRGVmaW5pdGlvbih0aGlzLmltcGxpY2l0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiksXG4gICAgICAgICAgICByZXBsYWNlZERlZmluaXRpb24gPSB0aGlzLmltcGxpY2l0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiwgIC8vL1xuICAgICAgICAgICAgcmVwbGFjZW1lbnREZWZpbml0aW9uID0gdW5hcnlJbXBsaWNpdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb247IC8vL1xuXG4gICAgICByZXdyaXR0ZW5SdWxlLnJlcGxhY2VEZWZpbml0aW9uKHJlcGxhY2VkRGVmaW5pdGlvbiwgcmVwbGFjZW1lbnREZWZpbml0aW9uKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lRGVmaW5pdGlvbkFuZFJlY3Vyc2l2ZURlZmluaXRpb25zKHJ1bGVOYW1lLCBkZWZpbml0aW9uLCByZWN1cnNpdmVEZWZpbml0aW9ucykge1xuICAgIGxldCBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24gPSBudWxsO1xuXG4gICAgY29uc3QgZGVmaW5pdGlvbkxlZnRSZWN1cnNpdmUgPSBpc0RlZmluaXRpb25MZWZ0UmVjdXJzaXZlKGRlZmluaXRpb24pO1xuXG4gICAgaWYgKGRlZmluaXRpb25MZWZ0UmVjdXJzaXZlKSB7XG4gICAgICBjb25zdCBsZWZ0UmVjdXJzaXZlUnVsZU5hbWVzID0gbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lc0Zyb21EZWZpbml0aW9uKGRlZmluaXRpb24pO1xuXG4gICAgICBsZWZ0UmVjdXJzaXZlUnVsZU5hbWVzLnNvbWUoKGxlZnRSZWN1cnNpdmVSdWxlTmFtZSkgPT4ge1xuICAgICAgICBjb25zdCBydWxlTmFtZUxlZnRSZWN1cnNpdmVSdWxlTmFtZSA9IChydWxlTmFtZSA9PT0gbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lKTtcblxuICAgICAgICBpZiAoIXJ1bGVOYW1lTGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lKSB7XG4gICAgICAgICAgY29uc3QgaW1wbGljaXRseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uID0gSW1wbGljaXRseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uLmZyb21SdWxlTmFtZUxlZnRSZWN1cnNpdmVSdWxlTmFtZUFuZFJlY3Vyc2l2ZURlZmluaXRpb25zKHJ1bGVOYW1lLCBsZWZ0UmVjdXJzaXZlUnVsZU5hbWUsIHJlY3Vyc2l2ZURlZmluaXRpb25zKTtcblxuICAgICAgICAgIGlmIChpbXBsaWNpdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24gIT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnN0IGRlZmluaXRpb25Db21wbGV4ID0gaXNEZWZpbml0aW9uQ29tcGxleChkZWZpbml0aW9uKTtcblxuICAgICAgICAgICAgaWYgKGRlZmluaXRpb25Db21wbGV4KSB7XG4gICAgICAgICAgICAgIGNvbnN0IGRlZmluaXRpb25TdHJpbmcgPSBkZWZpbml0aW9uLmFzU3RyaW5nKCk7XG5cbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgJyR7ZGVmaW5pdGlvblN0cmluZ30nIGluZGlyZWN0bHkgbGVmdCByZWN1cnNpdmUgZGVmaW5pdGlvbiBvZiB0aGUgJyR7cnVsZU5hbWV9JyBydWxlIGlzIGNvbXBsZXggYW5kIHRoZXJlZm9yZSBjYW5ub3QgYmUgcmV3cml0dGVuLmApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBkZWZpbml0aW9uVW5hcnkgPSBpc0RlZmluaXRpb25VbmFyeShkZWZpbml0aW9uKSxcbiAgICAgICAgICAgICAgICAgIGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvblVuYXJ5ID0gZGVmaW5pdGlvblVuYXJ5LCAvLy9cbiAgICAgICAgICAgICAgICAgIGltcGxpY2l0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvblVuYXJ5ID0gaXNEZWZpbml0aW9uVW5hcnkoaW1wbGljaXRseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uKTtcblxuICAgICAgICAgICAgaWYgKGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvblVuYXJ5ICYmIGltcGxpY2l0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvblVuYXJ5KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGVmaW5pdGlvblN0cmluZyA9IGRlZmluaXRpb24uYXNTdHJpbmcoKSxcbiAgICAgICAgICAgICAgICAgICAgICBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb25TdHJpbmcgPSBkZWZpbml0aW9uU3RyaW5nLCAvLy9cbiAgICAgICAgICAgICAgICAgICAgICBpbXBsaWNpdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb25TdHJpbmcgPSBpbXBsaWNpdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24uYXNTdHJpbmcoKTtcblxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQm90aCB0aGUgJyR7aW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uU3RyaW5nfScgaW5kaXJlY3RseSBsZWZ0IHJlY3Vyc2l2ZSBkZWZpbml0aW9uIG9mIHRoZSAnJHtydWxlTmFtZX0nIHJ1bGUgYW5kIHRoZSBjb3JyZXNwb25kaW5nICcke2ltcGxpY2l0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvblN0cmluZ30nIGltcGxpY2l0bHkgbGVmdCByZWN1cnNpdmUgZGVmaW5pdGlvbiBvZiB0aGUgJyR7bGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lfScgcnVsZSBhcmUgdW5hcnkgYW5kIHRoZXJlZm9yZSBuZWl0aGVyIGNhbiBiZSByZXdyaXR0ZW4uYCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHR5cGUgPSBJTkRJUkVDVExZX0xFRlRfUkVDVVJTSVZFX1RZUEUsXG4gICAgICAgICAgICAgICAgICBwYXJ0cyA9IFtdLFxuICAgICAgICAgICAgICAgICAgcmVjdXJzaXZlUnVsZU5hbWVzID0gcmVjdXJzaXZlUnVsZU5hbWVzRnJvbURlZmluaXRpb24oZGVmaW5pdGlvbik7XG5cbiAgICAgICAgICAgIGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiA9IG5ldyBJbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24odHlwZSwgcGFydHMsIHJ1bGVOYW1lLCBkZWZpbml0aW9uLCByZWN1cnNpdmVSdWxlTmFtZXMsIGxlZnRSZWN1cnNpdmVSdWxlTmFtZXMsIGltcGxpY2l0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbik7XG5cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbjtcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBFTVBUWV9TVFJJTkcgPSBcIlwiO1xuZXhwb3J0IGNvbnN0IFVOQVNTSUdORURfRU5UUlkgPSBcIl4uKiRcIjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJlY3Vyc2l2ZURlZmluaXRpb24gZnJvbSBcIi4vZGVmaW5pdGlvbi9yZWN1cnNpdmVcIjtcbmltcG9ydCBMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiBmcm9tIFwiLi9kZWZpbml0aW9uL2xlZnRSZWN1cnNpdmVcIjtcbmltcG9ydCBEaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uIGZyb20gXCIuL2RlZmluaXRpb24vbGVmdFJlY3Vyc2l2ZS9kaXJlY3RseVwiO1xuaW1wb3J0IEluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiBmcm9tIFwiLi9kZWZpbml0aW9uL2xlZnRSZWN1cnNpdmUvaW5kaXJlY3RseVwiO1xuXG5pbXBvcnQgeyBpc0luc3RhbmNlT2YgfSBmcm9tIFwiLi91dGlsaXRpZXMvY2xhc3NcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZWxpbWluYXRlTGVmdFJlY3Vyc2lvbihzdGFydFJ1bGUsIHJ1bGVNYXApIHtcbiAgY29uc3QgcnVsZSA9IHN0YXJ0UnVsZSwgLy8vXG4gICAgICAgIHJlY3Vyc2l2ZURlZmluaXRpb25zID0gW10sXG4gICAgICAgIGxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucyA9IFtdO1xuXG4gIHJlcGxhY2VSZWN1cnNpdmVEZWZpbml0aW9ucyhydWxlLCByZWN1cnNpdmVEZWZpbml0aW9ucywgbGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zLCBydWxlTWFwKTtcblxuICByZXdyaXRlTGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zKGxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucywgcnVsZU1hcCk7XG5cbiAgY29uc3Qgc3RhcnRSdWxlTmFtZSA9IHN0YXJ0UnVsZS5nZXROYW1lKCk7XG5cbiAgc3RhcnRSdWxlID0gcnVsZU1hcFtzdGFydFJ1bGVOYW1lXTsgLy8vXG5cbiAgcmV0dXJuIHN0YXJ0UnVsZTtcbn1cblxuZnVuY3Rpb24gcmVwbGFjZVJlY3Vyc2l2ZURlZmluaXRpb24ocnVsZU5hbWUsIGRlZmluaXRpb24sIHJlY3Vyc2l2ZURlZmluaXRpb25zLCBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMsIHJ1bGVNYXApIHtcbiAgbGV0IHJlY3Vyc2l2ZURlZmluaXRpb247XG5cbiAgY29uc3QgbGVmdFJlY3Vyc2l2ZURlZmluaXRpb24gPSBJbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24uZnJvbVJ1bGVOYW1lRGVmaW5pdGlvbkFuZFJlY3Vyc2l2ZURlZmluaXRpb25zKHJ1bGVOYW1lLCBkZWZpbml0aW9uLCByZWN1cnNpdmVEZWZpbml0aW9ucykgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uLmZyb21SdWxlTmFtZUFuZERlZmluaXRpb24ocnVsZU5hbWUsIGRlZmluaXRpb24pIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGVmdFJlY3Vyc2l2ZURlZmluaXRpb24uZnJvbVJ1bGVOYW1lQW5kRGVmaW5pdGlvbihydWxlTmFtZSwgZGVmaW5pdGlvbik7XG5cbiAgaWYgKGxlZnRSZWN1cnNpdmVEZWZpbml0aW9uID09PSBudWxsKSB7XG4gICAgcmVjdXJzaXZlRGVmaW5pdGlvbiA9IFJlY3Vyc2l2ZURlZmluaXRpb24uZnJvbVJ1bGVOYW1lQW5kRGVmaW5pdGlvbihydWxlTmFtZSwgZGVmaW5pdGlvbik7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgbGVmdFJlY3Vyc2l2ZURlZmluaXRpb25JbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24gPSBpc0luc3RhbmNlT2YobGVmdFJlY3Vyc2l2ZURlZmluaXRpb24sIEluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbik7XG5cbiAgICBpZiAobGVmdFJlY3Vyc2l2ZURlZmluaXRpb25JbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24pIHtcbiAgICAgIGNvbnN0IGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiA9IGxlZnRSZWN1cnNpdmVEZWZpbml0aW9uLCAgLy8vXG4gICAgICAgICAgICBpbXBsaWNpdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24gPSBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24uZ2V0SW1wbGljaXRseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uKCk7XG5cbiAgICAgIGltcGxpY2l0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbi5yZXBsYWNlKHJ1bGVNYXApO1xuICAgIH1cblxuICAgIGxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucy5wdXNoKGxlZnRSZWN1cnNpdmVEZWZpbml0aW9uKTtcblxuICAgIHJlY3Vyc2l2ZURlZmluaXRpb24gPSBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbjsgIC8vL1xuICB9XG5cbiAgaWYgKHJlY3Vyc2l2ZURlZmluaXRpb24gIT09IG51bGwpIHtcbiAgICByZWN1cnNpdmVEZWZpbml0aW9uLnJlcGxhY2UocnVsZU1hcCk7XG4gIH1cblxuICByZXR1cm4gcmVjdXJzaXZlRGVmaW5pdGlvbjtcbn1cblxuZnVuY3Rpb24gcmVwbGFjZVJlY3Vyc2l2ZURlZmluaXRpb25zKHJ1bGUsIHJlY3Vyc2l2ZURlZmluaXRpb25zLCBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMsIHJ1bGVNYXApIHtcbiAgY29uc3QgcnVsZU5hbWUgPSBydWxlLmdldE5hbWUoKSxcbiAgICAgICAgZGVmaW5pdGlvbnMgPSBydWxlLmdldERlZmluaXRpb25zKCk7XG5cbiAgZGVmaW5pdGlvbnMuZm9yRWFjaCgoZGVmaW5pdGlvbikgPT4ge1xuICAgIGNvbnN0IGRlZmluaXRpb25SZWN1cnNpdmVEZWZpbml0aW9uID0gaXNJbnN0YW5jZU9mKGRlZmluaXRpb24sIFJlY3Vyc2l2ZURlZmluaXRpb24pLFxuICAgICAgICAgIHJlY3Vyc2l2ZURlZmluaXRpb24gPSBkZWZpbml0aW9uUmVjdXJzaXZlRGVmaW5pdGlvbiA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5pdGlvbiA6ICAvLy9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VSZWN1cnNpdmVEZWZpbml0aW9uKHJ1bGVOYW1lLCBkZWZpbml0aW9uLCByZWN1cnNpdmVEZWZpbml0aW9ucywgbGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zLCBydWxlTWFwKTtcblxuICAgIGlmIChyZWN1cnNpdmVEZWZpbml0aW9uICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBwcmV2aW91c1JlY3Vyc2l2ZURlZmluaXRpb25zID0gWyAuLi5yZWN1cnNpdmVEZWZpbml0aW9ucywgcmVjdXJzaXZlRGVmaW5pdGlvbiBdLFxuICAgICAgICAgICAgcHJldmlvdXNSZWN1cnNpdmVSdWxlTmFtZXMgPSBwcmV2aW91c1JlY3Vyc2l2ZURlZmluaXRpb25zLm1hcCgocHJldmlvdXNSZWN1cnNpdmVEZWZpbml0aW9uKSA9PiByZWN1cnNpdmVSdWxlTmFtZUZyb21SZWN1cnNpdmVEZWZpbml0aW9uKHByZXZpb3VzUmVjdXJzaXZlRGVmaW5pdGlvbikpLFxuICAgICAgICAgICAgcmVjdXJzaXZlUnVsZU5hbWVzID0gcmVjdXJzaXZlRGVmaW5pdGlvbi5nZXRSZWN1cnNpdmVSdWxlTmFtZXMoKTtcblxuICAgICAgcmVjdXJzaXZlUnVsZU5hbWVzLmZvckVhY2goKHJlY3Vyc2l2ZVJ1bGVOYW1lKSA9PiB7XG4gICAgICAgIGNvbnN0IHByZXZpb3VzUmVjdXJzaXZlUnVsZU5hbWVzSW5jbHVkZXNSZWN1cnNpdmVSdWxlTmFtZSA9IHByZXZpb3VzUmVjdXJzaXZlUnVsZU5hbWVzLmluY2x1ZGVzKHJlY3Vyc2l2ZVJ1bGVOYW1lKTtcblxuICAgICAgICBpZiAoIXByZXZpb3VzUmVjdXJzaXZlUnVsZU5hbWVzSW5jbHVkZXNSZWN1cnNpdmVSdWxlTmFtZSkge1xuICAgICAgICAgIGNvbnN0IHJ1bGVOYW1lID0gcmVjdXJzaXZlUnVsZU5hbWUsICAvLy9cbiAgICAgICAgICAgICAgICBydWxlID0gcnVsZU1hcFtydWxlTmFtZV0gfHwgbnVsbDsgLy8vXG5cbiAgICAgICAgICBpZiAocnVsZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3QgcmVjdXJzaXZlRGVmaW5pdGlvbnMgPSBwcmV2aW91c1JlY3Vyc2l2ZURlZmluaXRpb25zOyAgLy8vXG5cbiAgICAgICAgICAgIHJlcGxhY2VSZWN1cnNpdmVEZWZpbml0aW9ucyhydWxlLCByZWN1cnNpdmVEZWZpbml0aW9ucywgbGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zLCBydWxlTWFwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHJld3JpdGVMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMobGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zLCBydWxlTWFwKSB7XG4gIGxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucy5mb3JFYWNoKChsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbikgPT4gbGVmdFJlY3Vyc2l2ZURlZmluaXRpb24ucmV3cml0ZShydWxlTWFwKSk7XG59XG5cbmZ1bmN0aW9uIHJlY3Vyc2l2ZVJ1bGVOYW1lRnJvbVJlY3Vyc2l2ZURlZmluaXRpb24ocmVjdXJzaXZlRGVmaW5pdGlvbikge1xuICBjb25zdCByZWN1cnNpdmVEZWZpbml0aW9uUnVsZU5hbWUgPSByZWN1cnNpdmVEZWZpbml0aW9uLmdldFJ1bGVOYW1lKCksXG4gICAgICAgIHJlY3Vyc2l2ZVJ1bGVOYW1lID0gcmVjdXJzaXZlRGVmaW5pdGlvblJ1bGVOYW1lOyAgLy8vXG5cbiAgcmV0dXJuIHJlY3Vyc2l2ZVJ1bGVOYW1lO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBCTkZMZXhlciB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcbmltcG9ydCB7IEJORlBhcnNlciB9IGZyb20gXCJvY2NhbS1wYXJzZXJzXCI7XG5cbmltcG9ydCB7IHJ1bGVNYXBGcm9tUnVsZXMsIHN0YXJ0UnVsZUZyb21SdWxlcywgc3RhcnRSdWxlRnJvbVJ1bGVzQW5kU3RhcnRSdWxlTmFtZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvcnVsZXNcIjtcblxuaW1wb3J0IGVsaW1pbmF0ZUxlZnRSZWN1cnNpb24gIGZyb20gXCIuLi9lbGltaW5hdGVMZWZ0UmVjdXJzaW9uXCI7XG5cbmNvbnN0IGJuZkxleGVyID0gQk5GTGV4ZXIuZnJvbU5vdGhpbmcoKSxcbiAgICAgIGJuZlBhcnNlciA9IEJORlBhcnNlci5mcm9tTm90aGluZygpO1xuXG5leHBvcnQgZnVuY3Rpb24gcnVsZXNGcm9tQk5GKGJuZikge1xuICBjb25zdCB0b2tlbnMgPSBibmZMZXhlci50b2tlbnNGcm9tQk5GKGJuZiksXG4gICAgICAgIHJ1bGVzID0gYm5mUGFyc2VyLnJ1bGVzRnJvbVRva2Vucyh0b2tlbnMpO1xuXG4gIHJldHVybiBydWxlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlckZyb21SdWxlcyhDbGFzcywgcnVsZXMpIHtcbiAgY29uc3QgcnVsZU1hcCA9IHJ1bGVNYXBGcm9tUnVsZXMocnVsZXMpO1xuXG4gIGxldCBzdGFydFJ1bGUgPSBzdGFydFJ1bGVGcm9tUnVsZXMocnVsZXMpO1xuXG4gIHN0YXJ0UnVsZSA9IGVsaW1pbmF0ZUxlZnRSZWN1cnNpb24oc3RhcnRSdWxlLCBydWxlTWFwKTtcblxuICBjb25zdCBwYXJzZXIgPSBuZXcgQ2xhc3Moc3RhcnRSdWxlLCBydWxlTWFwKTtcblxuICByZXR1cm4gcGFyc2VyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VyRnJvbVJ1bGVzQW5kU3RhcnRSdWxlTmFtZShDbGFzcywgcnVsZXMsIHN0YXJ0UnVsZU5hbWUpIHtcbiAgY29uc3QgcnVsZU1hcCA9IHJ1bGVNYXBGcm9tUnVsZXMocnVsZXMpO1xuXG4gIGxldCBzdGFydFJ1bGUgPSBzdGFydFJ1bGVGcm9tUnVsZXNBbmRTdGFydFJ1bGVOYW1lKHJ1bGVzLCBzdGFydFJ1bGVOYW1lKTtcblxuICBzdGFydFJ1bGUgPSBlbGltaW5hdGVMZWZ0UmVjdXJzaW9uKHN0YXJ0UnVsZSwgcnVsZU1hcCk7XG5cbiAgY29uc3QgcGFyc2VyID0gbmV3IENsYXNzKHN0YXJ0UnVsZSwgcnVsZU1hcCk7XG5cbiAgcmV0dXJuIHBhcnNlcjtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBydWxlc0Zyb21CTkYsXG4gIHBhcnNlckZyb21SdWxlcyxcbiAgcGFyc2VyRnJvbVJ1bGVzQW5kU3RhcnRSdWxlTmFtZVxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJlZHVjZWROb2RlIGZyb20gXCIuL25vZGUvcmVkdWNlZFwiO1xuaW1wb3J0IFJlcGVhdGVkTm9kZSBmcm9tIFwiLi9ub2RlL3JlcGVhdGVkXCI7XG5cbmltcG9ydCB7IGlzSW5zdGFuY2VPZiB9IGZyb20gXCIuL3V0aWxpdGllcy9jbGFzc1wiO1xuaW1wb3J0IHsgcnVsZU5hbWVGcm9tUmVkdWNlZFJ1bGVOYW1lLCBjaGVja1JlZHVjZWRSdWxlTmFtZU1hdGNoZXNSdWxlTmFtZSB9IGZyb20gXCIuL3V0aWxpdGllcy9ydWxlTmFtZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZW1vdmVPclJlbmFtZUludGVybWVkaWF0ZU5vZGVzKG5vZGUpIHtcbiAgcmVtb3ZlT3JSZW5hbWVSZWR1Y2VkTm9kZXMobm9kZSk7XG5cbiAgcmVtb3ZlUmVwZWF0ZWROb2Rlcyhub2RlKTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlUmVwZWF0ZWROb2Rlcyhub2RlKSB7XG4gIGNvbnN0IG5vZGVOb25UZXJtaW5hbE5vZGUgPSBub2RlLmlzTm9uVGVybWluYWxOb2RlKCk7XG5cbiAgaWYgKG5vZGVOb25UZXJtaW5hbE5vZGUpIHtcbiAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBub2RlOyAvLy9cblxuICAgIGxldCBjaGlsZE5vZGVzID0gbm9uVGVybWluYWxOb2RlLmdldENoaWxkTm9kZXMoKTtcblxuICAgIGNoaWxkTm9kZXMgPSByZW1vdmVSZXBlYXRlZENoaWxkTm9kZXMoY2hpbGROb2Rlcyk7XG5cbiAgICBub25UZXJtaW5hbE5vZGUuc2V0Q2hpbGROb2RlcyhjaGlsZE5vZGVzKVxuICB9XG59XG5cbmZ1bmN0aW9uIHJlbW92ZVJlcGVhdGVkQ2hpbGROb2RlcyhjaGlsZE5vZGVzKSB7XG4gIGNoaWxkTm9kZXMgPSBjaGlsZE5vZGVzLnJlZHVjZSgoY2hpbGROb2RlcywgY2hpbGROb2RlKSA9PiB7XG4gICAgY29uc3QgY2hpbGROb2RlUmVwZWF0ZWROb2RlID0gaXNJbnN0YW5jZU9mKGNoaWxkTm9kZSwgUmVwZWF0ZWROb2RlKTtcblxuICAgIGlmIChjaGlsZE5vZGVSZXBlYXRlZE5vZGUpIHtcbiAgICAgIGxldCBjaGlsZE5vZGVDaGlsZE5vZGVzID0gY2hpbGROb2RlLmdldENoaWxkTm9kZXMoKTtcblxuICAgICAgY2hpbGROb2RlQ2hpbGROb2RlcyA9IHJlbW92ZVJlcGVhdGVkQ2hpbGROb2RlcyhjaGlsZE5vZGVDaGlsZE5vZGVzKTtcblxuICAgICAgY2hpbGROb2RlcyA9IGNoaWxkTm9kZXMuY29uY2F0KGNoaWxkTm9kZUNoaWxkTm9kZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZW1vdmVSZXBlYXRlZE5vZGVzKGNoaWxkTm9kZSk7XG5cbiAgICAgIGNoaWxkTm9kZXMucHVzaChjaGlsZE5vZGUpO1xuICAgIH1cblxuICAgIHJldHVybiBjaGlsZE5vZGVzO1xuICB9LCBbXSk7XG5cbiAgcmV0dXJuIGNoaWxkTm9kZXM7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZU9yUmVuYW1lUmVkdWNlZE5vZGVzKG5vZGUpIHtcbiAgY29uc3Qgbm9kZU5vblRlcm1pbmFsTm9kZSA9IG5vZGUuaXNOb25UZXJtaW5hbE5vZGUoKTtcblxuICBpZiAobm9kZU5vblRlcm1pbmFsTm9kZSkge1xuICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IG5vZGUsIC8vL1xuICAgICAgICAgIHJ1bGVOYW1lID0gbm9uVGVybWluYWxOb2RlLmdldFJ1bGVOYW1lKCk7XG5cbiAgICBsZXQgY2hpbGROb2RlcyA9IG5vblRlcm1pbmFsTm9kZS5nZXRDaGlsZE5vZGVzKCk7XG5cbiAgICBjaGlsZE5vZGVzID0gcmVtb3ZlT3JSZW5hbWVSZWR1Y2VkQ2hpbGROb2RlcyhjaGlsZE5vZGVzLCBydWxlTmFtZSk7XG5cbiAgICBub25UZXJtaW5hbE5vZGUuc2V0Q2hpbGROb2RlcyhjaGlsZE5vZGVzKVxuICB9XG59XG5cbmZ1bmN0aW9uIHJlbW92ZU9yUmVuYW1lUmVkdWNlZENoaWxkTm9kZXMoY2hpbGROb2RlcywgcnVsZU5hbWUpIHtcbiAgY29uc3QgY2hpbGROb2Rlc0xlbmd0aCA9IGNoaWxkTm9kZXMubGVuZ3RoO1xuXG4gIGNoaWxkTm9kZXMgPSBjaGlsZE5vZGVzLnJlZHVjZSgoY2hpbGROb2RlcywgY2hpbGROb2RlKSA9PiB7XG4gICAgY29uc3QgY2hpbGROb2RlUmVkdWNlZE5vZGUgPSBpc0luc3RhbmNlT2YoY2hpbGROb2RlLCBSZWR1Y2VkTm9kZSk7XG5cbiAgICBpZiAoY2hpbGROb2RlUmVkdWNlZE5vZGUpIHtcbiAgICAgIGNvbnN0IHJlZHVjZWROb2RlID0gY2hpbGROb2RlLCAvLy9cbiAgICAgICAgICAgIHJlZHVjZWROb2RlUnVsZU5hbWUgPSByZWR1Y2VkTm9kZS5nZXRSdWxlTmFtZSgpLFxuICAgICAgICAgICAgcmVkdWNlZFJ1bGVOYW1lID0gcmVkdWNlZE5vZGVSdWxlTmFtZSwgIC8vL1xuICAgICAgICAgICAgcmVkdWNlZFJ1bGVOYW1lTWF0Y2hlc1J1bGVOYW1lID0gY2hlY2tSZWR1Y2VkUnVsZU5hbWVNYXRjaGVzUnVsZU5hbWUocmVkdWNlZFJ1bGVOYW1lLCBydWxlTmFtZSk7XG5cbiAgICAgIGlmIChyZWR1Y2VkUnVsZU5hbWVNYXRjaGVzUnVsZU5hbWUpIHtcbiAgICAgICAgaWYgKGNoaWxkTm9kZXNMZW5ndGggPiAxKSB7XG4gICAgICAgICAgY29uc3QgcnVsZU5hbWUgPSBydWxlTmFtZUZyb21SZWR1Y2VkUnVsZU5hbWUocmVkdWNlZFJ1bGVOYW1lKTtcblxuICAgICAgICAgIGNoaWxkTm9kZS5zZXRSdWxlTmFtZShydWxlTmFtZSk7XG5cbiAgICAgICAgICByZW1vdmVPclJlbmFtZVJlZHVjZWROb2RlcyhjaGlsZE5vZGUpO1xuXG4gICAgICAgICAgY2hpbGROb2Rlcy5wdXNoKGNoaWxkTm9kZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGV0IGNoaWxkTm9kZUNoaWxkTm9kZXMgPSBjaGlsZE5vZGUuZ2V0Q2hpbGROb2RlcygpO1xuXG4gICAgICAgICAgY2hpbGROb2RlQ2hpbGROb2RlcyA9IHJlbW92ZU9yUmVuYW1lUmVkdWNlZENoaWxkTm9kZXMoY2hpbGROb2RlQ2hpbGROb2Rlcyk7XG5cbiAgICAgICAgICBjaGlsZE5vZGVzID0gY2hpbGROb2Rlcy5jb25jYXQoY2hpbGROb2RlQ2hpbGROb2Rlcyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHJ1bGVOYW1lID0gcnVsZU5hbWVGcm9tUmVkdWNlZFJ1bGVOYW1lKHJlZHVjZWRSdWxlTmFtZSk7XG5cbiAgICAgICAgY2hpbGROb2RlLnNldFJ1bGVOYW1lKHJ1bGVOYW1lKTtcblxuICAgICAgICByZW1vdmVPclJlbmFtZVJlZHVjZWROb2RlcyhjaGlsZE5vZGUpO1xuXG4gICAgICAgIGNoaWxkTm9kZXMucHVzaChjaGlsZE5vZGUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZW1vdmVPclJlbmFtZVJlZHVjZWROb2RlcyhjaGlsZE5vZGUpO1xuXG4gICAgICBjaGlsZE5vZGVzLnB1c2goY2hpbGROb2RlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2hpbGROb2RlcztcbiAgfSwgW10pO1xuXG4gIHJldHVybiBjaGlsZE5vZGVzO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIHBhcnNlclV0aWxpdGllcyB9IGZyb20gXCIuL3V0aWxpdGllcy9wYXJzZXJcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBlbGltaW5hdGVMZWZ0UmVjdXJzaW9uIH0gZnJvbSBcIi4vZWxpbWluYXRlTGVmdFJlY3Vyc2lvblwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyByZW1vdmVPclJlbmFtZUludGVybWVkaWF0ZU5vZGVzIH0gZnJvbSBcIi4vcmVtb3ZlT3JSZW5hbWVJbnRlcm1lZGlhdGVOb2Rlc1wiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBDb21tb25QYXJzZXIgfSBmcm9tIFwib2NjYW0tcGFyc2Vyc1wiO1xuaW1wb3J0IHsgcGFyc2VyVXRpbGl0aWVzIH0gZnJvbSBcIm9jY2FtLWdyYW1tYXItdXRpbGl0aWVzXCI7XG5cbmNvbnN0IHsgcnVsZXNGcm9tQk5GLCBwYXJzZXJGcm9tUnVsZXMgfSA9IHBhcnNlclV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgWWFwcFBhcnNlciBleHRlbmRzIENvbW1vblBhcnNlciB7XG4gIHN0YXRpYyBmcm9tTm90aGluZyhDbGFzcykge1xuICAgIGNvbnN0IHsgYm5mIH0gPSBDbGFzcyxcbiAgICAgICAgICBydWxlcyA9IHJ1bGVzRnJvbUJORihibmYpLFxuICAgICAgICAgIHBhcnNlciA9IHBhcnNlckZyb21SdWxlcyhDbGFzcywgcnVsZXMpO1xuXG4gICAgcmV0dXJuIHBhcnNlcjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tQk5GKENsYXNzLCBibmYpIHtcbiAgICBjb25zdCBydWxlcyA9IHJ1bGVzRnJvbUJORihibmYpLFxuICAgICAgICAgIHBhcnNlciA9IHBhcnNlckZyb21SdWxlcyhDbGFzcywgcnVsZXMpO1xuXG4gICAgcmV0dXJuIHBhcnNlcjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZXMoQ2xhc3MsIHJ1bGVzKSB7XG4gICAgY29uc3QgcGFyc2VyID0gcGFyc2VyRnJvbVJ1bGVzKENsYXNzLCBydWxlcyk7XG5cbiAgICByZXR1cm4gcGFyc2VyO1xuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFlhcHBQYXJzZXIgZnJvbSBcIi4veWFwcFwiO1xuXG5jb25zdCBibmYgPSBgXG5cbiAgICBkb2N1bWVudCAgICAgICAgICAgICAgICAgICA6Oj0gIHhtbCBlcnJvciogfCBlcnJvcisgO1xuXG5cbiAgICB4bWwgICAgICAgICAgICAgICAgICAgICAgICA6Oj0gICggcHJlYW1ibGUgZWxlbWVudCogKSB8IGVsZW1lbnQrIDtcblxuXG4gICAgcHJlYW1ibGUgICAgICAgICAgICAgICAgICAgOjo9ICBcIjw/XCI8Tk9fV0hJVEVTUEFDRT5cInhtbFwiIGF0dHJpYnV0ZSogXCI/PlwiIDtcblxuXG4gICAgZWxlbWVudCAgICAgICAgICAgICAgICAgICAgOjo9ICBjb21tZW50IHwgY29tcGxldGVUYWcgfCBzdGFydFRhZyAoIGVsZW1lbnQgfCB0ZXh0ICkqIGVuZFRhZyA7XG5cblxuICAgIGNvbW1lbnQgICAgICAgICAgICAgICAgICAgIDo6PSAgXCI8IS0tXCIgdGV4dCogXCItLT5cIiA7XG5cblxuICAgIGNvbXBsZXRlVGFnICAgICAgICAgICAgICAgIDo6PSAgXCI8XCI8Tk9fV0hJVEVTUEFDRT5uYW1lIGF0dHJpYnV0ZSogXCIvPlwiIDtcblxuXG4gICAgc3RhcnRUYWcgICAgICAgICAgICAgICAgICAgOjo9ICBcIjxcIjxOT19XSElURVNQQUNFPm5hbWUgYXR0cmlidXRlKiBcIj5cIiA7XG5cblxuICAgIGVuZFRhZyAgICAgICAgICAgICAgICAgICAgIDo6PSAgXCI8L1wiPE5PX1dISVRFU1BBQ0U+bmFtZSBcIj5cIiA7XG4gICAgXG5cbiAgICBhdHRyaWJ1dGUgICAgICAgICAgICAgICAgICA6Oj0gIFtpZGVudGlmaWVyXTxOT19XSElURVNQQUNFPlwiPVwiPE5PX1dISVRFU1BBQ0U+W3N0cmluZy1saXRlcmFsXSA7XG5cblxuICAgIHRleHQgICAgICAgICAgICAgICAgICAgICAgIDo6PSAgKCBbaWRlbnRpZmllcl0gfCBbc3RyaW5nLWxpdGVyYWxdfCBbYnJva2VuLXN0cmluZy1saXRlcmFsXSB8IFt1bmFzc2lnbmVkXSApKyA7XG4gICAgXG4gICAgXG4gICAgbmFtZSAgICAgICAgICAgICAgICAgICAgICAgOjo9ICBbaWRlbnRpZmllcl0gO1xuXG5cbiAgICBlcnJvciAgICAgICAgICAgICAgICAgICAgICA6Oj0gIC4gO1xuXG5gO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBYTUxQYXJzZXIgZXh0ZW5kcyBZYXBwUGFyc2VyIHtcbiAgc3RhdGljIGJuZiA9IGJuZjtcblxuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7IHJldHVybiBZYXBwUGFyc2VyLmZyb21Ob3RoaW5nKFhNTFBhcnNlcik7IH1cblxuICBzdGF0aWMgZnJvbUJORihibmYpIHsgcmV0dXJuIFlhcHBQYXJzZXIuZnJvbUJORihYTUxQYXJzZXIsIGJuZik7IH1cblxuICBzdGF0aWMgZnJvbVJ1bGVzKHJ1bGVzKSB7IHJldHVybiBZYXBwUGFyc2VyLmZyb21SdWxlcyhYTUxQYXJzZXIsIHJ1bGVzKTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBKU1hfVE9LRU5fVFlQRSA9IFwianN4XCI7XG5leHBvcnQgY29uc3QgTkFNRV9UT0tFTl9UWVBFID0gXCJuYW1lXCI7XG5leHBvcnQgY29uc3QgRVJST1JfVE9LRU5fVFlQRSA9IFwiZXJyb3JcIjtcbmV4cG9ydCBjb25zdCBDT01NRU5UX1RPS0VOX1RZUEUgPSBcImNvbW1lbnRcIjtcbmV4cG9ydCBjb25zdCBBUkdVTUVOVF9UT0tFTl9UWVBFID0gXCJhcmd1bWVudFwiO1xuZXhwb3J0IGNvbnN0IFZBUklBQkxFX1RPS0VOX1RZUEUgPSBcInZhcmlhYmxlXCI7XG5leHBvcnQgY29uc3QgQVRUUklCVVRFX1RPS0VOX1RZUEUgPSBcImF0dHJpYnV0ZVwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBTaWduaWZpY2FudFRva2VuIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgeyBFUlJPUl9UT0tFTl9UWVBFIH0gZnJvbSBcIi4uLy4uL3Rva2VuVHlwZXNcIjtcblxuY29uc3QgdHlwZSA9IEVSUk9SX1RPS0VOX1RZUEU7ICAvLy9cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXJyb3JUb2tlbiBleHRlbmRzIFNpZ25pZmljYW50VG9rZW4ge1xuICBzdGF0aWMgZnJvbUNvbnRlbnQoY29udGVudCkgeyByZXR1cm4gU2lnbmlmaWNhbnRUb2tlbi5mcm9tQ29udGVudEFuZFR5cGUoRXJyb3JUb2tlbiwgY29udGVudCwgdHlwZSk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBRdWVyeSB9IGZyb20gXCJvY2NhbS1kb21cIjtcblxuaW1wb3J0IEVycm9yVG9rZW4gZnJvbSBcIi4vdG9rZW4vc2lnbmlmaWNhbnQvZXJyb3JcIjtcblxuY29uc3QgdGVybWluYWxOb2RlUXVlcnkgPSBRdWVyeS5mcm9tRXhwcmVzc2lvbihcIi8vQCpcIiksXG4gICAgICBlcnJvclRlcm1pbmFsTm9kZVF1ZXJ5ID0gUXVlcnkuZnJvbUV4cHJlc3Npb24oXCIvL2Vycm9yL0AqXCIpO1xuXG5jbGFzcyBQcm9jZXNzb3Ige1xuICBwcm9jZXNzKHRva2Vucywgbm9kZSkge1xuICAgIGlmIChub2RlICE9PSBudWxsKSB7XG4gICAgICB0aGlzLnJlcGxhY2VUZXJtaW5hbE5vZGVzU2lnbmlmaWNhbnRUb2tlbih0b2tlbnMsIG5vZGUsIChjb250ZW50KSA9PiBFcnJvclRva2VuLCBlcnJvclRlcm1pbmFsTm9kZVF1ZXJ5KTtcbiAgICB9XG4gIH1cblxuICByZXBsYWNlTm9uVGVybWluYWxOb2Rlc1NpZ25pZmljYW50VG9rZW5zKHRva2Vucywgbm9kZSwgY2FsbGJhY2ssIC4uLm5vblRlcm1pbmFsTm9kZVF1ZXJpZXMpIHtcbiAgICBub25UZXJtaW5hbE5vZGVRdWVyaWVzLmZvckVhY2goKG5vblRlcm1pbmFsTm9kZVF1ZXJ5KSA9PiB7XG4gICAgICBjb25zdCBub25UZXJtaW5hbE5vZGVzID0gbm9uVGVybWluYWxOb2RlUXVlcnkuZXhlY3V0ZShub2RlKTtcblxuICAgICAgbm9uVGVybWluYWxOb2Rlcy5mb3JFYWNoKChub25UZXJtaW5hbE5vZGUpID0+IHRoaXMucmVwbGFjZU5vblRlcm1pbmFsTm9kZVNpZ25pZmljYW50VG9rZW5zKG5vblRlcm1pbmFsTm9kZSwgdG9rZW5zLCBjYWxsYmFjaykpO1xuICAgIH0pO1xuICB9XG5cbiAgcmVwbGFjZVRlcm1pbmFsTm9kZXNTaWduaWZpY2FudFRva2VuKHRva2Vucywgbm9kZSwgY2FsbGJhY2ssIC4uLnRlcm1pbmFsTm9kZVF1ZXJpZXMpIHtcbiAgICBjb25zdCBjb250ZW50cyA9IFtdO1xuXG4gICAgdGVybWluYWxOb2RlUXVlcmllcy5mb3JFYWNoKCh0ZXJtaW5hbE5vZGVRdWVyeSkgPT4ge1xuICAgICAgY29uc3QgdGVybWluYWxOb2RlcyA9IHRlcm1pbmFsTm9kZVF1ZXJ5LmV4ZWN1dGUobm9kZSk7XG5cbiAgICAgIHRlcm1pbmFsTm9kZXMuZm9yRWFjaCgodGVybWluYWxOb2RlKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLnJlcGxhY2VUZXJtaW5hbE5vZGVTaWduaWZpY2FudFRva2VuKHRlcm1pbmFsTm9kZSwgdG9rZW5zLCBjYWxsYmFjayk7XG5cbiAgICAgICAgaWYgKGNvbnRlbnQgIT09IG51bGwpIHtcbiAgICAgICAgICBjb250ZW50cy5wdXNoKGNvbnRlbnQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHJldHVybiBjb250ZW50cztcbiAgfVxuXG4gIHJlcGxhY2VOb25UZXJtaW5hbE5vZGVTaWduaWZpY2FudFRva2Vucyhub25UZXJtaW5hbE5vZGUsIHRva2VucywgY2FsbGJhY2spIHtcbiAgICBjb25zdCB0ZXJtaW5hbE5vZGVzID0gdGVybWluYWxOb2RlUXVlcnkuZXhlY3V0ZShub25UZXJtaW5hbE5vZGUpO1xuXG4gICAgdGVybWluYWxOb2Rlcy5mb3JFYWNoKCh0ZXJtaW5hbE5vZGUpID0+IHRoaXMucmVwbGFjZVRlcm1pbmFsTm9kZVNpZ25pZmljYW50VG9rZW4odGVybWluYWxOb2RlLCB0b2tlbnMsIGNhbGxiYWNrKSk7XG4gIH1cblxuICByZXBsYWNlVGVybWluYWxOb2RlU2lnbmlmaWNhbnRUb2tlbih0ZXJtaW5hbE5vZGUsIHRva2VucywgY2FsbGJhY2spIHtcbiAgICBsZXQgc2lnbmlmaWNhbnRUb2tlbjtcblxuICAgIHNpZ25pZmljYW50VG9rZW4gPSB0ZXJtaW5hbE5vZGUuZ2V0U2lnbmlmaWNhbnRUb2tlbigpO1xuXG4gICAgaWYgKHNpZ25pZmljYW50VG9rZW4gPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGVuZE9mTGluZVRva2VuID0gc2lnbmlmaWNhbnRUb2tlbi5pc0VuZE9mTGluZVRva2VuKCk7XG5cbiAgICBpZiAoZW5kT2ZMaW5lVG9rZW4pIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbnRlbnQgPSBzaWduaWZpY2FudFRva2VuLmdldENvbnRlbnQoKSxcbiAgICAgICAgICBpbmRleCA9IHRva2Vucy5pbmRleE9mKHNpZ25pZmljYW50VG9rZW4pLFxuICAgICAgICAgIFRva2VuID0gY2FsbGJhY2soY29udGVudCk7IC8vL1xuXG4gICAgaWYgKFRva2VuID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBzaWduaWZpY2FudFRva2VuID0gVG9rZW4uZnJvbUNvbnRlbnQoY29udGVudCk7XG5cbiAgICBjb25zdCBzdGFydCA9IGluZGV4LCAgLy8vXG4gICAgICAgICAgZGVsZXRlQ291bnQgPSAxO1xuXG4gICAgdG9rZW5zLnNwbGljZShzdGFydCwgZGVsZXRlQ291bnQsIHNpZ25pZmljYW50VG9rZW4pO1xuXG4gICAgdGVybWluYWxOb2RlLnNldFNpZ25pZmljYW50VG9rZW4oc2lnbmlmaWNhbnRUb2tlbik7XG5cbiAgICByZXR1cm4gY29udGVudDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTm90aGluZyhDbGFzcykgeyByZXR1cm4gbmV3IENsYXNzKCk7IH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgUHJvY2Vzc29yO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3Qgc3ByaW5nV29vZCA9IFwiI2Y4ZjZmMVwiO1xuZXhwb3J0IGNvbnN0IGJvbmpvdXIgPSBcIiNlNWUwZTFcIjtcbmV4cG9ydCBjb25zdCBnYWluc2Jvcm91Z2ggPSBcIiNkNWQ4ZDJcIjtcbmV4cG9ydCBjb25zdCBzdGFyZHVzdCA9IFwiIzlmOWY5Y1wiO1xuZXhwb3J0IGNvbnN0IGh1cnJpY2FuZSA9IFwiIzkwODk4OVwiO1xuZXhwb3J0IGNvbnN0IHN0b3JtRHVzdCA9IFwiIzY0NjQ2M1wiO1xuZXhwb3J0IGNvbnN0IGVtcGVyb3IgPSBcIiM1MTUxNTBcIjtcbmV4cG9ydCBjb25zdCB0dWF0YXJhID0gXCIjMzYzNTM0XCI7XG5leHBvcnQgY29uc3Qgd29vZHNtb2tlID0gXCIjMGMwZDBmXCI7XG5cbmV4cG9ydCBjb25zdCBjaXRyb24gPSBcIiM4NmI5MjNcIjtcbmV4cG9ydCBjb25zdCBzdXNoaSA9IFwiIzdmYTgyZlwiO1xuZXhwb3J0IGNvbnN0IG9saXZlRHJhYiA9IFwiIzYzODgyOVwiO1xuZXhwb3J0IGNvbnN0IHJpZmxlR3JlZW4gPSBcIiM0MTQ4MzNcIjtcbmV4cG9ydCBjb25zdCBsb2dDYWJpbiA9IFwiIzI0MzAxZFwiO1xuZXhwb3J0IGNvbnN0IGJsYWNrT2xpdmUgPSBcIiMxYzI0MTJcIjtcbmV4cG9ydCBjb25zdCBodW50ZXJHcmVlbiA9IFwiIzE2MWQxMFwiO1xuXG5leHBvcnQgY29uc3QgY2FkZXRCbHVlID0gXCIjNWY5ZWEwXCI7XG5leHBvcnQgY29uc3QgaGF2ZWxvY2tCbHVlID0gXCIjNUI4RGUxXCI7XG5cbmV4cG9ydCBjb25zdCBwb21lZ3JhbmF0ZSA9IFwiI2Y1MjkyOVwiO1xuZXhwb3J0IGNvbnN0IHJhenptYXRhenogPSBcIiNlMzI1NmJcIjtcbmV4cG9ydCBjb25zdCBmbGFtaW5nbyA9IFwiI2YzNGI0NFwiO1xuZXhwb3J0IGNvbnN0IHRhaGl0aSA9IFwiI0Y1OEEwQVwiO1xuZXhwb3J0IGNvbnN0IGVxdWF0b3IgPSBcIiNlNGFDNWVcIjtcblxuZXhwb3J0IGNvbnN0IHBvcnRpY2EgPSBcIiNmN2U3NWZcIjtcbmV4cG9ydCBjb25zdCBjZWxlcnkgPSBcIiNiY2I4NTJcIjtcbmV4cG9ydCBjb25zdCBzeWNhbW9yZSA9IFwiIzkwOGQzOVwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBTaWduaWZpY2FudFRva2VuIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgeyBOQU1FX1RPS0VOX1RZUEUgfSBmcm9tIFwiLi4vLi4vdG9rZW5UeXBlc1wiO1xuXG5jb25zdCB0eXBlID0gTkFNRV9UT0tFTl9UWVBFOyAgLy8vXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5hbWVUb2tlbiBleHRlbmRzIFNpZ25pZmljYW50VG9rZW4ge1xuICBzdGF0aWMgZnJvbUNvbnRlbnQoY29udGVudCkgeyByZXR1cm4gU2lnbmlmaWNhbnRUb2tlbi5mcm9tQ29udGVudEFuZFR5cGUoTmFtZVRva2VuLCBjb250ZW50LCB0eXBlKTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IFNpZ25pZmljYW50VG9rZW4gfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCB7IENPTU1FTlRfVE9LRU5fVFlQRSB9IGZyb20gXCIuLi8uLi90b2tlblR5cGVzXCI7XG5cbmNvbnN0IHR5cGUgPSBDT01NRU5UX1RPS0VOX1RZUEU7ICAvLy9cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29tbWVudFRva2VuIGV4dGVuZHMgU2lnbmlmaWNhbnRUb2tlbiB7XG4gIHN0YXRpYyBmcm9tQ29udGVudChjb250ZW50KSB7IHJldHVybiBTaWduaWZpY2FudFRva2VuLmZyb21Db250ZW50QW5kVHlwZShDb21tZW50VG9rZW4sIGNvbnRlbnQsIHR5cGUpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgU2lnbmlmaWNhbnRUb2tlbiB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IHsgQVRUUklCVVRFX1RPS0VOX1RZUEUgfSBmcm9tIFwiLi4vLi4vdG9rZW5UeXBlc1wiO1xuXG5jb25zdCB0eXBlID0gQVRUUklCVVRFX1RPS0VOX1RZUEU7ICAvLy9cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQXR0cmlidXRlVG9rZW4gZXh0ZW5kcyBTaWduaWZpY2FudFRva2VuIHtcbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIFNpZ25pZmljYW50VG9rZW4uZnJvbUNvbnRlbnRBbmRUeXBlKEF0dHJpYnV0ZVRva2VuLCBjb250ZW50LCB0eXBlKTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IFF1ZXJ5IH0gZnJvbSBcIm9jY2FtLWRvbVwiO1xuXG5pbXBvcnQgUHJvY2Vzc29yIGZyb20gXCIuLi9wcm9jZXNzb3JcIjtcbmltcG9ydCBOYW1lVG9rZW4gZnJvbSBcIi4uL3Rva2VuL3NpZ25pZmljYW50L25hbWVcIjtcbmltcG9ydCBFcnJvclRva2VuIGZyb20gXCIuLi90b2tlbi9zaWduaWZpY2FudC9lcnJvclwiO1xuaW1wb3J0IENvbW1lbnRUb2tlbiBmcm9tIFwiLi4vdG9rZW4vc2lnbmlmaWNhbnQvY29tbWVudFwiO1xuaW1wb3J0IEF0dHJpYnV0ZVRva2VuIGZyb20gXCIuLi90b2tlbi9zaWduaWZpY2FudC9hdHRyaWJ1dGVcIjtcblxuY29uc3QgbmFtZVRlcm1pbmFsTm9kZVF1ZXJ5ID0gUXVlcnkuZnJvbUV4cHJlc3Npb24oXCIvL25hbWUvQCpcIiksXG4gICAgICBlcnJvclRlcm1pbmFsTm9kZVF1ZXJ5ID0gUXVlcnkuZnJvbUV4cHJlc3Npb24oXCIvL2Vycm9yL0AqXCIpLFxuICAgICAgYXR0cmlidXRlVGVybWluYWxOb2RlUXVlcnkgPSBRdWVyeS5mcm9tRXhwcmVzc2lvbihcIi8vYXR0cmlidXRlL0BpZGVudGlmaWVyXCIpLFxuICAgICAgY29tbWVudE5vblRlcm1pbmFsTm9kZVF1ZXJ5ID0gUXVlcnkuZnJvbUV4cHJlc3Npb24oXCIvL2NvbW1lbnRcIik7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFhNTFByb2Nlc3NvciBleHRlbmRzIFByb2Nlc3NvciB7XG4gIHByb2Nlc3ModG9rZW5zLCBub2RlKSB7XG4gICAgaWYgKG5vZGUgIT09IG51bGwpIHtcbiAgICAgIHRoaXMucmVwbGFjZVRlcm1pbmFsTm9kZXNTaWduaWZpY2FudFRva2VuKHRva2Vucywgbm9kZSwgKGNvbnRlbnQpID0+IEVycm9yVG9rZW4sIGVycm9yVGVybWluYWxOb2RlUXVlcnkpO1xuXG4gICAgICB0aGlzLnJlcGxhY2VUZXJtaW5hbE5vZGVzU2lnbmlmaWNhbnRUb2tlbih0b2tlbnMsIG5vZGUsIChjb250ZW50KSA9PiBOYW1lVG9rZW4sIG5hbWVUZXJtaW5hbE5vZGVRdWVyeSk7XG5cbiAgICAgIHRoaXMucmVwbGFjZVRlcm1pbmFsTm9kZXNTaWduaWZpY2FudFRva2VuKHRva2Vucywgbm9kZSwgKGNvbnRlbnQpID0+IEF0dHJpYnV0ZVRva2VuLCBhdHRyaWJ1dGVUZXJtaW5hbE5vZGVRdWVyeSk7XG5cbiAgICAgIHRoaXMucmVwbGFjZU5vblRlcm1pbmFsTm9kZXNTaWduaWZpY2FudFRva2Vucyh0b2tlbnMsIG5vZGUsIChjb250ZW50KSA9PiBDb21tZW50VG9rZW4sIGNvbW1lbnROb25UZXJtaW5hbE5vZGVRdWVyeSk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkgeyByZXR1cm4gUHJvY2Vzc29yLmZyb21Ob3RoaW5nKFhNTFByb2Nlc3Nvcik7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgWE1MX0xBTkdVQUdFID0gXCJ4bWxcIjtcbmV4cG9ydCBjb25zdCBKU09OX0xBTkdVQUdFID0gXCJqc29uXCI7XG5leHBvcnQgY29uc3QgSkFWQVNDUklQVF9MQU5HVUFHRSA9IFwiamF2YXNjcmlwdFwiO1xuZXhwb3J0IGNvbnN0IFBMQUlOX1RFWFRfTEFOR1VBR0UgPSBcInBsYWluLXRleHRcIjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFBsdWdpbiBmcm9tIFwiLi4vcGx1Z2luXCI7XG5pbXBvcnQgWE1MTGV4ZXIgZnJvbSBcIi4uL2xleGVyL3htbFwiO1xuaW1wb3J0IFhNTFBhcnNlciBmcm9tIFwiLi4vcGFyc2VyL3htbFwiO1xuaW1wb3J0IFhNTFByb2Nlc3NvciBmcm9tIFwiLi4vcHJvY2Vzc29yL3htbFwiO1xuXG5pbXBvcnQgeyBYTUxfTEFOR1VBR0UgfSBmcm9tIFwiLi4vbGFuZ3VhZ2VzXCJcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgWE1MUGx1Z2luIGV4dGVuZHMgUGx1Z2luIHtcbiAgbGFuZ3VhZ2UgPSBYTUxfTEFOR1VBR0U7XG5cbiAgc3RhdGljIExleGVyID0gWE1MTGV4ZXI7XG5cbiAgc3RhdGljIFBhcnNlciA9IFhNTFBhcnNlcjtcblxuICBzdGF0aWMgUHJvY2Vzc29yID0gWE1MUHJvY2Vzc29yO1xuXG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHsgcmV0dXJuIFBsdWdpbi5mcm9tTm90aGluZyhYTUxQbHVnaW4pOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IHNwcmluZ1dvb2QgPSBcIiNmOGY2ZjFcIjtcbmV4cG9ydCBjb25zdCBib25qb3VyID0gXCIjZTVlMGUxXCI7XG5leHBvcnQgY29uc3QgZ2FpbnNib3JvdWdoID0gXCIjZDVkOGQyXCI7XG5leHBvcnQgY29uc3Qgc3RhcmR1c3QgPSBcIiM5ZjlmOWNcIjtcbmV4cG9ydCBjb25zdCBodXJyaWNhbmUgPSBcIiM5MDg5ODlcIjtcbmV4cG9ydCBjb25zdCBzdG9ybUR1c3QgPSBcIiM2NDY0NjNcIjtcbmV4cG9ydCBjb25zdCBlbXBlcm9yID0gXCIjNTE1MTUwXCI7XG5leHBvcnQgY29uc3QgdHVhdGFyYSA9IFwiIzM2MzUzNFwiO1xuZXhwb3J0IGNvbnN0IHdvb2RzbW9rZSA9IFwiIzBjMGQwZlwiO1xuXG5leHBvcnQgY29uc3QgY2l0cm9uID0gXCIjODZiOTIzXCI7XG5leHBvcnQgY29uc3Qgc3VzaGkgPSBcIiM3ZmE4MmZcIjtcbmV4cG9ydCBjb25zdCBvbGl2ZURyYWIgPSBcIiM2Mzg4MjlcIjtcbmV4cG9ydCBjb25zdCByaWZsZUdyZWVuID0gXCIjNDE0ODMzXCI7XG5leHBvcnQgY29uc3QgbG9nQ2FiaW4gPSBcIiMyNDMwMWRcIjtcbmV4cG9ydCBjb25zdCBibGFja09saXZlID0gXCIjMWMyNDEyXCI7XG5leHBvcnQgY29uc3QgaHVudGVyR3JlZW4gPSBcIiMxNjFkMTBcIjtcblxuZXhwb3J0IGNvbnN0IGNhZGV0Qmx1ZSA9IFwiIzVmOWVhMFwiO1xuZXhwb3J0IGNvbnN0IGhhdmVsb2NrQmx1ZSA9IFwiIzVCOERlMVwiO1xuXG5leHBvcnQgY29uc3QgcG9tZWdyYW5hdGUgPSBcIiNmNTI5MjlcIjtcbmV4cG9ydCBjb25zdCByYXp6bWF0YXp6ID0gXCIjZTMyNTZiXCI7XG5leHBvcnQgY29uc3QgZmxhbWluZ28gPSBcIiNmMzRiNDRcIjtcbmV4cG9ydCBjb25zdCB0YWhpdGkgPSBcIiNGNThBMEFcIjtcbmV4cG9ydCBjb25zdCBlcXVhdG9yID0gXCIjZTRhQzVlXCI7XG5cbmV4cG9ydCBjb25zdCBwb3J0aWNhID0gXCIjZjdlNzVmXCI7XG5leHBvcnQgY29uc3QgY2VsZXJ5ID0gXCIjYmNiODUyXCI7XG5leHBvcnQgY29uc3Qgc3ljYW1vcmUgPSBcIiM5MDhkMzlcIjtcbiIsICJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmltcG9ydCBZYXBwTGV4ZXIgZnJvbSBcIi4uL2xleGVyL3lhcHBcIjtcclxuaW1wb3J0IHsgV2hpdGVzcGFjZVRva2VuLCBFbmRPZkxpbmVOb25TaWduaWZpY2FudFRva2VuLCBEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4sIEVuZE9mTGluZUNvbW1lbnROb25TaWduaWZpY2FudFRva2VuIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xyXG5cclxuY29uc3QgZW50cmllcyA9IFtcclxuICB7XHJcbiAgICBcInNwZWNpYWxcIjogXCJeKD86LHxcXFxcOnxcXFxce3xcXFxcfXxcXFxcW3xcXFxcXSlcIlxyXG4gIH0sXHJcbiAge1xyXG4gICAgXCJudW1iZXJcIjogXCJeXFxcXC0/WzEtOV1bMC05XSooXFxcXC5bMC05XSspP1wiXHJcbiAgfSxcclxuICB7XHJcbiAgICBcImtleXdvcmRcIjogXCJeKD86bnVsbHx0cnVlfGZhbHNlKVwiXHJcbiAgfSxcclxuICB7XHJcbiAgICBcInVuYXNzaWduZWRcIjogXCJeW15cXFxcc10rXCJcclxuICB9XHJcbl07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBKU09OTGV4ZXIgZXh0ZW5kcyBZYXBwTGV4ZXIge1xyXG4gIHN0YXRpYyBlbnRyaWVzID0gZW50cmllcztcclxuXHJcbiAgc3RhdGljIEVuZE9mTGluZVRva2VuID0gRW5kT2ZMaW5lTm9uU2lnbmlmaWNhbnRUb2tlbjsgLy8vXHJcblxyXG4gIHN0YXRpYyBXaGl0ZXNwYWNlVG9rZW4gPSBXaGl0ZXNwYWNlVG9rZW47XHJcblxyXG4gIHN0YXRpYyBFbmRPZkxpbmVDb21tZW50VG9rZW4gPSBFbmRPZkxpbmVDb21tZW50Tm9uU2lnbmlmaWNhbnRUb2tlbjsgLy8vXHJcblxyXG4gIHN0YXRpYyBTaW5nbGVMaW5lQ29tbWVudFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIFJlZ3VsYXJFeHByZXNzaW9uVG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBTaW5nbHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgRG91Ymx5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuID0gRG91Ymx5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuO1xyXG5cclxuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7IHJldHVybiBZYXBwTGV4ZXIuZnJvbUVudHJpZXMoSlNPTkxleGVyLCBlbnRyaWVzKTsgfVxyXG5cclxuICBzdGF0aWMgZnJvbVJ1bGVzKHJ1bGVzKSB7IHJldHVybiBZYXBwTGV4ZXIuZnJvbVJ1bGVzKEpTT05MZXhlciwgcnVsZXMpOyB9XHJcblxyXG4gIHN0YXRpYyBmcm9tRW50cmllcyhlbnRyaWVzKSB7IHJldHVybiBZYXBwTGV4ZXIuZnJvbUVudHJpZXMoSlNPTkxleGVyLCBlbnRyaWVzKTsgfVxyXG59XHJcbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgWWFwcFBhcnNlciBmcm9tIFwiLi4vcGFyc2VyL3lhcHBcIjtcblxuY29uc3QgYm5mID0gYFxuXG4gICAgZG9jdW1lbnQgICAgICAgICAgICAgICAgICAgOjo9ICBqc29uIGVycm9yKiB8IGVycm9yKyA7XG5cblxuICAgIGpzb24gICAgICAgICAgICAgICAgICAgICAgIDo6PSAgYXJyYXkgfCBvYmplY3QgO1xuXG5cbiAgICBhcnJheSAgICAgICAgICAgICAgICAgICAgICA6Oj0gIFwiW1wiICggZWxlbWVudCAoIFwiLFwiIGVsZW1lbnQgKSogKT8gXCJdXCIgO1xuXG5cbiAgICBvYmplY3QgICAgICAgICAgICAgICAgICAgICA6Oj0gIFwie1wiICggW3N0cmluZy1saXRlcmFsXSBcIjpcIiBlbGVtZW50ICggXCIsXCIgW3N0cmluZy1saXRlcmFsXSBcIjpcIiBlbGVtZW50ICkqICk/IFwifVwiIDtcblxuICAgIFxuICAgIGVsZW1lbnQgICAgICAgICAgICAgICAgICAgIDo6PSAganNvbiB8ICBbc3RyaW5nLWxpdGVyYWxdIHwgW251bWJlcl0gfCBcInRydWVcIiB8IFwiZmFsc2VcIiB8IFwibnVsbFwiIDtcblxuXG4gICAgZXJyb3IgICAgICAgICAgICAgICAgICAgICAgOjo9ICAuIDtcblxuYDtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSlNPTlBhcnNlciBleHRlbmRzIFlhcHBQYXJzZXIge1xuICBzdGF0aWMgYm5mID0gYm5mO1xuXG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHsgcmV0dXJuIFlhcHBQYXJzZXIuZnJvbU5vdGhpbmcoSlNPTlBhcnNlcik7IH1cblxuICBzdGF0aWMgZnJvbUJORihibmYpIHsgcmV0dXJuIFlhcHBQYXJzZXIuZnJvbUJORihKU09OUGFyc2VyLCBibmYpOyB9XG5cbiAgc3RhdGljIGZyb21SdWxlcyhydWxlcykgeyByZXR1cm4gWWFwcFBhcnNlci5mcm9tUnVsZXMoSlNPTlBhcnNlciwgcnVsZXMpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFByb2Nlc3NvciBmcm9tIFwiLi4vcHJvY2Vzc29yXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEpTT05Qcm9jZXNzb3IgZXh0ZW5kcyBQcm9jZXNzb3Ige1xuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7IHJldHVybiBQcm9jZXNzb3IuZnJvbU5vdGhpbmcoSlNPTlByb2Nlc3Nvcik7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUGx1Z2luIGZyb20gXCIuLi9wbHVnaW5cIjtcbmltcG9ydCBKU09OTGV4ZXIgZnJvbSBcIi4uL2xleGVyL2pzb25cIjtcbmltcG9ydCBKU09OUGFyc2VyIGZyb20gXCIuLi9wYXJzZXIvanNvblwiO1xuaW1wb3J0IEpTT05Qcm9jZXNzb3IgZnJvbSBcIi4uL3Byb2Nlc3Nvci9qc29uXCI7XG5cbmltcG9ydCB7IEpTT05fTEFOR1VBR0UgfSBmcm9tIFwiLi4vbGFuZ3VhZ2VzXCJcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSlNPTlBsdWdpbiBleHRlbmRzIFBsdWdpbiB7XG4gIGxhbmd1YWdlID0gSlNPTl9MQU5HVUFHRTtcblxuICBzdGF0aWMgTGV4ZXIgPSBKU09OTGV4ZXI7XG5cbiAgc3RhdGljIFBhcnNlciA9IEpTT05QYXJzZXI7XG5cbiAgc3RhdGljIFByb2Nlc3NvciA9IEpTT05Qcm9jZXNzb3I7XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkgeyByZXR1cm4gUGx1Z2luLmZyb21Ob3RoaW5nKEpTT05QbHVnaW4pOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IHNwcmluZ1dvb2QgPSBcIiNmOGY2ZjFcIjtcbmV4cG9ydCBjb25zdCBib25qb3VyID0gXCIjZTVlMGUxXCI7XG5leHBvcnQgY29uc3QgZ2FpbnNib3JvdWdoID0gXCIjZDVkOGQyXCI7XG5leHBvcnQgY29uc3Qgc3RhcmR1c3QgPSBcIiM5ZjlmOWNcIjtcbmV4cG9ydCBjb25zdCBodXJyaWNhbmUgPSBcIiM5MDg5ODlcIjtcbmV4cG9ydCBjb25zdCBzdG9ybUR1c3QgPSBcIiM2NDY0NjNcIjtcbmV4cG9ydCBjb25zdCBlbXBlcm9yID0gXCIjNTE1MTUwXCI7XG5leHBvcnQgY29uc3QgdHVhdGFyYSA9IFwiIzM2MzUzNFwiO1xuZXhwb3J0IGNvbnN0IHdvb2RzbW9rZSA9IFwiIzBjMGQwZlwiO1xuXG5leHBvcnQgY29uc3QgY2l0cm9uID0gXCIjODZiOTIzXCI7XG5leHBvcnQgY29uc3Qgc3VzaGkgPSBcIiM3ZmE4MmZcIjtcbmV4cG9ydCBjb25zdCBvbGl2ZURyYWIgPSBcIiM2Mzg4MjlcIjtcbmV4cG9ydCBjb25zdCByaWZsZUdyZWVuID0gXCIjNDE0ODMzXCI7XG5leHBvcnQgY29uc3QgbG9nQ2FiaW4gPSBcIiMyNDMwMWRcIjtcbmV4cG9ydCBjb25zdCBibGFja09saXZlID0gXCIjMWMyNDEyXCI7XG5leHBvcnQgY29uc3QgaHVudGVyR3JlZW4gPSBcIiMxNjFkMTBcIjtcblxuZXhwb3J0IGNvbnN0IGNhZGV0Qmx1ZSA9IFwiIzVmOWVhMFwiO1xuZXhwb3J0IGNvbnN0IGhhdmVsb2NrQmx1ZSA9IFwiIzVCOERlMVwiO1xuXG5leHBvcnQgY29uc3QgcG9tZWdyYW5hdGUgPSBcIiNmNTI5MjlcIjtcbmV4cG9ydCBjb25zdCByYXp6bWF0YXp6ID0gXCIjZTMyNTZiXCI7XG5leHBvcnQgY29uc3QgZmxhbWluZ28gPSBcIiNmMzRiNDRcIjtcbmV4cG9ydCBjb25zdCB0YWhpdGkgPSBcIiNGNThBMEFcIjtcbmV4cG9ydCBjb25zdCBlcXVhdG9yID0gXCIjZTRhQzVlXCI7XG5cbmV4cG9ydCBjb25zdCBwb3J0aWNhID0gXCIjZjdlNzVmXCI7XG5leHBvcnQgY29uc3QgY2VsZXJ5ID0gXCIjYmNiODUyXCI7XG5leHBvcnQgY29uc3Qgc3ljYW1vcmUgPSBcIiM5MDhkMzlcIjtcbiIsICJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmltcG9ydCB7IFdoaXRlc3BhY2VUb2tlbiwgRW5kT2ZMaW5lTm9uU2lnbmlmaWNhbnRUb2tlbiwgRW5kT2ZMaW5lQ29tbWVudE5vblNpZ25pZmljYW50VG9rZW4gfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XHJcblxyXG5pbXBvcnQgWWFwcExleGVyIGZyb20gXCIuLi9sZXhlci95YXBwXCI7XHJcblxyXG5jb25zdCBlbnRyaWVzID0gW1xyXG4gIHtcclxuICAgIFwidW5hc3NpZ25lZFwiOiBcIl5bXlxcXFxzXStcIlxyXG4gIH1cclxuXTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBsYWluVGV4dExleGVyIGV4dGVuZHMgWWFwcExleGVyIHtcclxuICBzdGF0aWMgZW50cmllcyA9IGVudHJpZXM7XHJcblxyXG4gIHN0YXRpYyBFbmRPZkxpbmVUb2tlbiA9IEVuZE9mTGluZU5vblNpZ25pZmljYW50VG9rZW47IC8vL1xyXG5cclxuICBzdGF0aWMgV2hpdGVzcGFjZVRva2VuID0gV2hpdGVzcGFjZVRva2VuO1xyXG5cclxuICBzdGF0aWMgRW5kT2ZMaW5lQ29tbWVudFRva2VuID0gRW5kT2ZMaW5lQ29tbWVudE5vblNpZ25pZmljYW50VG9rZW47IC8vL1xyXG5cclxuICBzdGF0aWMgU2luZ2xlTGluZUNvbW1lbnRUb2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBSZWd1bGFyRXhwcmVzc2lvblRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgU2luZ2x5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHsgcmV0dXJuIFlhcHBMZXhlci5mcm9tRW50cmllcyhQbGFpblRleHRMZXhlciwgZW50cmllcyk7IH1cclxuXHJcbiAgc3RhdGljIGZyb21SdWxlcyhydWxlcykgeyByZXR1cm4gWWFwcExleGVyLmZyb21SdWxlcyhQbGFpblRleHRMZXhlciwgcnVsZXMpOyB9XHJcblxyXG4gIHN0YXRpYyBmcm9tRW50cmllcyhlbnRyaWVzKSB7IHJldHVybiBZYXBwTGV4ZXIuZnJvbUVudHJpZXMoUGxhaW5UZXh0TGV4ZXIsIGVudHJpZXMpOyB9XHJcbn1cclxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBZYXBwUGFyc2VyIGZyb20gXCIuL3lhcHBcIjtcblxuY29uc3QgYm5mID0gYFxuXG4gICAgZG9jdW1lbnQgICAgICAgICAgICAgICAgICAgOjo9ICAuKyA7XG5cbmA7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBsYWluVGV4dFBhcnNlciBleHRlbmRzIFlhcHBQYXJzZXIge1xuICBzdGF0aWMgYm5mID0gYm5mO1xuXG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHsgcmV0dXJuIFlhcHBQYXJzZXIuZnJvbU5vdGhpbmcoUGxhaW5UZXh0UGFyc2VyKTsgfVxuXG4gIHN0YXRpYyBmcm9tQk5GKGJuZikgeyByZXR1cm4gWWFwcFBhcnNlci5mcm9tQk5GKFBsYWluVGV4dFBhcnNlciwgYm5mKTsgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZXMocnVsZXMpIHsgcmV0dXJuIFlhcHBQYXJzZXIuZnJvbVJ1bGVzKFBsYWluVGV4dFBhcnNlciwgcnVsZXMpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFByb2Nlc3NvciBmcm9tIFwiLi4vcHJvY2Vzc29yXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBsYWluVGV4dFByb2Nlc3NvciBleHRlbmRzIFByb2Nlc3NvciB7XG4gIHByb2Nlc3ModG9rZW5zLCBub2RlKSB7fSAgLy8vXG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkgeyByZXR1cm4gUHJvY2Vzc29yLmZyb21Ob3RoaW5nKFBsYWluVGV4dFByb2Nlc3Nvcik7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUGx1Z2luIGZyb20gXCIuLi9wbHVnaW5cIjtcbmltcG9ydCBQbGFpblRleHRMZXhlciBmcm9tIFwiLi4vbGV4ZXIvcGxhaW5UZXh0XCI7XG5pbXBvcnQgUGxhaW5UZXh0UGFyc2VyIGZyb20gXCIuLi9wYXJzZXIvcGxhaW5UZXh0XCI7XG5pbXBvcnQgUGxhaW5UZXh0UHJvY2Vzc29yIGZyb20gXCIuLi9wcm9jZXNzb3IvcGxhaW5UZXh0XCI7XG5cbmltcG9ydCB7IFBMQUlOX1RFWFRfTEFOR1VBR0UgfSBmcm9tIFwiLi4vbGFuZ3VhZ2VzXCJcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGxhaW5UZXh0UGx1Z2luIGV4dGVuZHMgUGx1Z2luIHtcbiAgbGFuZ3VhZ2UgPSBQTEFJTl9URVhUX0xBTkdVQUdFO1xuXG4gIHN0YXRpYyBMZXhlciA9IFBsYWluVGV4dExleGVyO1xuXG4gIHN0YXRpYyBQYXJzZXIgPSBQbGFpblRleHRQYXJzZXI7XG5cbiAgc3RhdGljIFByb2Nlc3NvciA9IFBsYWluVGV4dFByb2Nlc3NvcjtcblxuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7IHJldHVybiBQbHVnaW4uZnJvbU5vdGhpbmcoUGxhaW5UZXh0UGx1Z2luKTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBzcHJpbmdXb29kID0gXCIjZjhmNmYxXCI7XG5leHBvcnQgY29uc3QgYm9uam91ciA9IFwiI2U1ZTBlMVwiO1xuZXhwb3J0IGNvbnN0IGdhaW5zYm9yb3VnaCA9IFwiI2Q1ZDhkMlwiO1xuZXhwb3J0IGNvbnN0IHN0YXJkdXN0ID0gXCIjOWY5ZjljXCI7XG5leHBvcnQgY29uc3QgaHVycmljYW5lID0gXCIjOTA4OTg5XCI7XG5leHBvcnQgY29uc3Qgc3Rvcm1EdXN0ID0gXCIjNjQ2NDYzXCI7XG5leHBvcnQgY29uc3QgZW1wZXJvciA9IFwiIzUxNTE1MFwiO1xuZXhwb3J0IGNvbnN0IHR1YXRhcmEgPSBcIiMzNjM1MzRcIjtcbmV4cG9ydCBjb25zdCB3b29kc21va2UgPSBcIiMwYzBkMGZcIjtcblxuZXhwb3J0IGNvbnN0IGNpdHJvbiA9IFwiIzg2YjkyM1wiO1xuZXhwb3J0IGNvbnN0IHN1c2hpID0gXCIjN2ZhODJmXCI7XG5leHBvcnQgY29uc3Qgb2xpdmVEcmFiID0gXCIjNjM4ODI5XCI7XG5leHBvcnQgY29uc3QgcmlmbGVHcmVlbiA9IFwiIzQxNDgzM1wiO1xuZXhwb3J0IGNvbnN0IGxvZ0NhYmluID0gXCIjMjQzMDFkXCI7XG5leHBvcnQgY29uc3QgYmxhY2tPbGl2ZSA9IFwiIzFjMjQxMlwiO1xuZXhwb3J0IGNvbnN0IGh1bnRlckdyZWVuID0gXCIjMTYxZDEwXCI7XG5cbmV4cG9ydCBjb25zdCBjYWRldEJsdWUgPSBcIiM1ZjllYTBcIjtcbmV4cG9ydCBjb25zdCBoYXZlbG9ja0JsdWUgPSBcIiM1QjhEZTFcIjtcblxuZXhwb3J0IGNvbnN0IHBvbWVncmFuYXRlID0gXCIjZjUyOTI5XCI7XG5leHBvcnQgY29uc3QgcmF6em1hdGF6eiA9IFwiI2UzMjU2YlwiO1xuZXhwb3J0IGNvbnN0IGZsYW1pbmdvID0gXCIjZjM0YjQ0XCI7XG5leHBvcnQgY29uc3QgdGFoaXRpID0gXCIjRjU4QTBBXCI7XG5leHBvcnQgY29uc3QgZXF1YXRvciA9IFwiI2U0YUM1ZVwiO1xuXG5leHBvcnQgY29uc3QgcG9ydGljYSA9IFwiI2Y3ZTc1ZlwiO1xuZXhwb3J0IGNvbnN0IGNlbGVyeSA9IFwiI2JjYjg1MlwiO1xuZXhwb3J0IGNvbnN0IHN5Y2Ftb3JlID0gXCIjOTA4ZDM5XCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5pbXBvcnQgeyBXaGl0ZXNwYWNlVG9rZW4sXHJcbiAgICAgICAgIEVuZE9mTGluZU5vblNpZ25pZmljYW50VG9rZW4sXHJcbiAgICAgICAgIENTdHlsZVNpbmdsZUxpbmVDb21tZW50VG9rZW4sXHJcbiAgICAgICAgIFNpbmdseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbixcclxuICAgICAgICAgRG91Ymx5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuLFxyXG4gICAgICAgICBDU3R5bGVFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbixcclxuICAgICAgICAgQ1N0eWxlU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbixcclxuICAgICAgICAgQ1N0eWxlTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sXHJcbiAgICAgICAgIEVuZE9mTGluZUNvbW1lbnROb25TaWduaWZpY2FudFRva2VuIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xyXG5cclxuaW1wb3J0IFlhcHBMZXhlciBmcm9tIFwiLi4vbGV4ZXIveWFwcFwiO1xyXG5cclxuY29uc3QgZW50cmllcyA9IFtcclxuICB7XHJcbiAgICBcImRlbGltaXRlclwiOiBcIl4oPzpgfFxcXFwkXFxcXHt8PFxcXFwvfFxcXFwvPilcIlxyXG4gIH0sXHJcbiAge1xyXG4gICAgXCJudW1iZXJcIjogXCJeXFxcXC0/WzEtOV1bMC05XSooXFxcXC5bMC05XSspP1wiXHJcbiAgfSxcclxuICB7XHJcbiAgICBcInNwZWNpYWxcIjogXCJeKD86O3w6fCx8PT58XFxcXD98XFxcXHt8XFxcXH18XFxcXFt8XFxcXF18XFxcXCh8XFxcXCl8XFxcXDp8XFxcXFxcXFxgKVwiXHJcbiAgfSxcclxuICB7XHJcbiAgICBcIm9wZXJhdG9yXCI6IFwiXig/OiY9fD4+Pj18Pj49fDw8PXxcXFxcLlxcXFwuXFxcXC58XFxcXC58XFxcXCpcXFxcKj18XFxcXCo9fFxcXFwrPXxcXFxcLT18XFxcXC89fFxcXFxePXxcXFxcfD09PXw9PXw9fCE9PXwlPXw+PXw8PXw+Pj58Pj58PDx8Pnw8fD18JXwmJnwmfH58IXxcXFxcXnxcXFxcfFxcXFx8fFxcXFx8fFxcXFwrXFxcXCt8XFxcXC1cXFxcLXxcXFxcKlxcXFwqfFxcXFwrfFxcXFwtfFxcXFwqfFxcXFwvKVwiXHJcbiAgfSxcclxuICB7XHJcbiAgICBcImtleXdvcmRcIjogXCJeKD86aW1wb3J0fGV4cG9ydHxkZWZhdWx0fHZhcnxsZXR8Y29uc3R8ZnVuY3Rpb258Y2xhc3N8ZXh0ZW5kc3xjb25zdHJ1Y3RvcnxzdGF0aWN8YnJlYWt8cmV0dXJufGNvbnRpbnVlfGlmfGVsc2V8c3dpdGNofGNhc2V8dGhyb3d8dHJ5fGNhdGNofGZpbmFsbHl8aW5zdGFuY2VvZnx0eXBlb2Z8YXN5bmN8YXdhaXR8ZG98d2hpbGV8Zm9yfGlufG9mfGFzfG5ld3x0aGlzfHN1cGVyfGRlbGV0ZXx1bmRlZmluZWR8bnVsbHx0cnVlfGZhbHNlfHZvaWR8bWV0YXxkZWJ1Z2dlcilcXFxcYlwiXHJcbiAgfSxcclxuICB7XHJcbiAgICBcImlkZW50aWZpZXJcIjogXCJeW2EtekEtWl0rXCJcclxuICB9LFxyXG4gIHtcclxuICAgIFwidW5hc3NpZ25lZFwiOiBcIl5bXlxcXFxzXStcIlxyXG4gIH1cclxuXTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEphdmFTY3JpcHRMZXhlciBleHRlbmRzIFlhcHBMZXhlciB7XHJcbiAgc3RhdGljIGVudHJpZXMgPSBlbnRyaWVzO1xyXG5cclxuICBzdGF0aWMgRW5kT2ZMaW5lVG9rZW4gPSBFbmRPZkxpbmVOb25TaWduaWZpY2FudFRva2VuOyAvLy9cclxuXHJcbiAgc3RhdGljIFdoaXRlc3BhY2VUb2tlbiA9IFdoaXRlc3BhY2VUb2tlbjtcclxuXHJcbiAgc3RhdGljIFJlZ3VsYXJFeHByZXNzaW9uVG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgRW5kT2ZMaW5lQ29tbWVudFRva2VuID0gRW5kT2ZMaW5lQ29tbWVudE5vblNpZ25pZmljYW50VG9rZW47IC8vL1xyXG5cclxuICBzdGF0aWMgU2luZ2xlTGluZUNvbW1lbnRUb2tlbiA9IENTdHlsZVNpbmdsZUxpbmVDb21tZW50VG9rZW47IC8vL1xyXG5cclxuICBzdGF0aWMgRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBDU3R5bGVFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbjsgLy8vXHJcblxyXG4gIHN0YXRpYyBTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuID0gQ1N0eWxlU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbjsgLy8vXHJcblxyXG4gIHN0YXRpYyBNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiA9IENTdHlsZU1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuOyAvLy9cclxuXHJcbiAgc3RhdGljIFNpbmdseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiA9IFNpbmdseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbjtcclxuXHJcbiAgc3RhdGljIERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiA9IERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbjtcclxuXHJcbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkgeyByZXR1cm4gWWFwcExleGVyLmZyb21FbnRyaWVzKEphdmFTY3JpcHRMZXhlciwgZW50cmllcyk7IH1cclxuXHJcbiAgc3RhdGljIGZyb21SdWxlcyhydWxlcykgeyByZXR1cm4gWWFwcExleGVyLmZyb21SdWxlcyhKYXZhU2NyaXB0TGV4ZXIsIHJ1bGVzKTsgfVxyXG5cclxuICBzdGF0aWMgZnJvbUVudHJpZXMoZW50cmllcykgeyByZXR1cm4gWWFwcExleGVyLmZyb21FbnRyaWVzKEphdmFTY3JpcHRMZXhlciwgZW50cmllcyk7IH1cclxufVxyXG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFlhcHBQYXJzZXIgIGZyb20gXCIuLi9wYXJzZXIveWFwcFwiO1xuXG5jb25zdCBibmYgPSBgXG5cbiAgICBkb2N1bWVudCAgICAgICAgICAgICAgICAgICA6Oj0gICggcHJlYW1ibGUgKCBzdGF0ZW1lbnQgfCBlcnJvciApKiApIHwgKCBzdGF0ZW1lbnQgfCBlcnJvciApKyA7XG5cblxuXG4gICAgcHJlYW1ibGUgICAgICAgICAgICAgICAgICAgOjo9ICAoIFwiXFxcXFwidXNlIHN0cmljdFxcXFxcIlwiIHwgXCIndXNlIHN0cmljdCdcIiApIFwiO1wiIDtcblxuXG5cbiAgICBzdGF0ZW1lbnQgICAgICAgICAgICAgICAgICA6Oj0gIGNsYXNzXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIGZ1bmN0aW9uXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIGdlbmVyYXRvclxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBcImV4cG9ydFwiPyAoICggXCJ2YXJcIiB2YXIgKCBcIixcIiB2YXIgKSogKVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoIFwibGV0XCIgbGV0ICggXCIsXCIgbGV0ICkqIClcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKCBcImNvbnN0XCIgY29uc3QgKCBcIixcIiBjb25zdCApKiApXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIFwiO1wiXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIFwiZXhwb3J0XCIgXCJkZWZhdWx0XCIgZXhwcmVzc2lvbiBcIjtcIlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBcImV4cG9ydFwiIFwiZGVmYXVsdFwiPyAoIGNsYXNzIHwgZnVuY3Rpb24gfCBnZW5lcmF0b3IgKVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBcImV4cG9ydFwiIFwiZGVmYXVsdFwiICggYW5vbnltb3VzQ2xhc3MgfCBhbm9ueW1vdXNGdW5jdGlvbiB8IGFub255bW91c0dlbmVyYXRvciApXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIFwiZXhwb3J0XCIgKCAoIFwiZXhwb3J0XCIgXCJ7XCIgbmFtZXMgXCJ9XCIgKCBcImZyb21cIiBbc3RyaW5nLWxpdGVyYWxdICk/IClcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoIFwiZXhwb3J0XCIgXCJjb25zdFwiIFwie1wiIGZpZWxkcyBcIn1cIiBcIj1cIiBleHByZXNzaW9uIClcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoIFwiZXhwb3J0XCIgXCJ7XCIgXCJkZWZhdWx0XCIgXCJ9XCIgXCJmcm9tXCIgW3N0cmluZy1saXRlcmFsXSApXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKCBcImV4cG9ydFwiIFwiKlwiICggXCJhc1wiIG5hbWUgKT8gXCJmcm9tXCIgW3N0cmluZy1saXRlcmFsXSApXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgXCI7XCJcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgXCJpbXBvcnRcIiAoIFtzdHJpbmctbGl0ZXJhbF1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoIG5hbWUgXCJmcm9tXCIgW3N0cmluZy1saXRlcmFsXSApXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKCBcIntcIiBuYW1lcyBcIn1cIiBcImZyb21cIiBbc3RyaW5nLWxpdGVyYWxdIClcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoIFwiKlwiIFwiYXNcIiBuYW1lIFwiZnJvbVwiIFtzdHJpbmctbGl0ZXJhbF0gKVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIFwiO1wiXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIGxhYmVsIFwiOlwiIHN0YXRlbWVudFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBcIntcIiBzdGF0ZW1lbnQqIFwifVwiXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIFwiYnJlYWtcIiBcIjtcIlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBcImNvbnRpbnVlXCIgXCI7XCJcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgXCJpZlwiIFwiKFwiIGV4cHJlc3Npb24gXCIpXCIgc3RhdGVtZW50ICggXCJlbHNlXCIgc3RhdGVtZW50ICk/XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIFwic3dpdGNoXCIgXCIoXCIgZXhwcmVzc2lvbiBcIilcIiBcIntcIiBjYXNlKiBkZWZhdWx0Q2FzZT8gXCJ9XCJcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgXCJyZXR1cm5cIiBleHByZXNzaW9uPyBcIjtcIlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBcInRocm93XCIgZXhwcmVzc2lvbiBcIjtcIlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBcImRlbGV0ZVwiIGV4cHJlc3Npb24gXCI7XCJcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgZXhwcmVzc2lvbi4uLiBcIjtcIlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICB0cnkgKCAoIGNhdGNoKiBmaW5hbGx5ICkgfCBjYXRjaCsgKVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBcImRvXCIgc3RhdGVtZW50IFwid2hpbGVcIiBcIihcIiBleHByZXNzaW9uIFwiKVwiIFwiO1wiXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIFwiZm9yXCIgXCIoXCIgaW5pdGlhbGlzZXIgKCBcIjtcIiBleHByZXNzaW9uICk/ICggXCI7XCIgZXhwcmVzc2lvbiApPyBcIilcIiBzdGF0ZW1lbnRcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgXCJmb3JcIiBcIihcIiB2YXJpYWJsZSBcImluXCIgZXhwcmVzc2lvbiBcIilcIiBzdGF0ZW1lbnRcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgXCJmb3JcIiBcImF3YWl0XCI/IFwiKFwiIHZhcmlhYmxlIFwib2ZcIiBleHByZXNzaW9uIFwiKVwiIHN0YXRlbWVudFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBcIndoaWxlXCIgXCIoXCIgZXhwcmVzc2lvbiBcIilcIiBzdGF0ZW1lbnRcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgXCJkZWJ1Z2dlclwiIFwiO1wiP1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7XG5cblxuXG4gICAgY2xhc3MgICAgICAgICAgICAgICAgICAgICAgOjo9ICBcImNsYXNzXCIgbmFtZSBjbGFzc0JvZHkgO1xuXG4gICAgZnVuY3Rpb24gICAgICAgICAgICAgICAgICAgOjo9ICBcImFzeW5jXCI/IFwiZnVuY3Rpb25cIiBuYW1lIGZ1bmN0aW9uQm9keSA7XG5cbiAgICBnZW5lcmF0b3IgICAgICAgICAgICAgICAgICA6Oj0gIFwiYXN5bmNcIj8gXCJmdW5jdGlvblwiIDxOT19XSElURVNQQUNFPlwiKlwiIG5hbWUgZnVuY3Rpb25Cb2R5IDtcblxuICAgIGFub255bW91c0NsYXNzICAgICAgICAgICAgIDo6PSAgXCJjbGFzc1wiIGNsYXNzQm9keSA7XG5cbiAgICBhbm9ueW1vdXNGdW5jdGlvbiAgICAgICAgICA6Oj0gIFwiYXN5bmNcIj8gXCJmdW5jdGlvblwiIGZ1bmN0aW9uQm9keSA7XG5cbiAgICBhbm9ueW1vdXNHZW5lcmF0b3IgICAgICAgICA6Oj0gIFwiYXN5bmNcIj8gXCJmdW5jdGlvblwiIDxOT19XSElURVNQQUNFPlwiKlwiIGZ1bmN0aW9uQm9keSA7XG5cbiAgICBjb25zdHJ1Y3RvciAgICAgICAgICAgICAgICA6Oj0gIFwiY29uc3RydWN0b3JcIiBmdW5jdGlvbkJvZHkgO1xuXG4gICAgbWV0aG9kICAgICAgICAgICAgICAgICAgICAgOjo9ICBcInN0YXRpY1wiPyBuYW1lIGZ1bmN0aW9uQm9keSA7XG5cbiAgICBmaWVsZCAgICAgICAgICAgICAgICAgICAgICA6Oj0gIFwic3RhdGljXCI/IG5hbWUgXCI9XCIgZXhwcmVzc2lvbiBcIjtcIiA7XG5cblxuXG4gICAgY2xhc3NCb2R5ICAgICAgICAgICAgICAgICAgOjo9ICAoIFwiZXh0ZW5kc1wiIG5hbWUgKT8gXCJ7XCIgKCBjb25zdHJ1Y3RvciB8IG1ldGhvZCB8IGZpZWxkICkqIFwifVwiIDtcblxuICAgIGZ1bmN0aW9uQm9keSAgICAgICAgICAgICAgIDo6PSAgXCIoXCIgYXJndW1lbnRzPyBcIilcIiBcIntcIiBzdGF0ZW1lbnQqIFwifVwiIDtcblxuXG5cbiAgICBjYXNlICAgICAgICAgICAgICAgICAgICAgICA6Oj0gIFwiY2FzZVwiIGV4cHJlc3Npb24gXCI6XCIgc3RhdGVtZW50ICggXCJicmVha1wiIFwiO1wiICk/IDtcblxuICAgIGRlZmF1bHRDYXNlICAgICAgICAgICAgICAgIDo6PSAgXCJkZWZhdWx0XCIgXCI6XCIgc3RhdGVtZW50ICggXCJicmVha1wiIFwiO1wiICk/IDtcblxuICAgIHRyeSAgICAgICAgICAgICAgICAgICAgICAgIDo6PSAgXCJ0cnlcIiBcIntcIiBzdGF0ZW1lbnQrIFwifVwiIDtcblxuICAgIGNhdGNoICAgICAgICAgICAgICAgICAgICAgIDo6PSAgXCJjYXRjaFwiIFwiKFwiIFtpZGVudGlmaWVyXSBcIilcIiBcIntcIiBzdGF0ZW1lbnQrIFwifVwiIDtcblxuICAgIGZpbmFsbHkgICAgICAgICAgICAgICAgICAgIDo6PSAgXCJmaW5hbGx5XCIgXCJ7XCIgc3RhdGVtZW50KyBcIn1cIiA7XG5cbiAgICBpbml0aWFsaXNlciAgICAgICAgICAgICAgICA6Oj0gIGV4cHJlc3Npb24gfCBcInZhclwiIHZhciAoIFwiLFwiIHZhciApKiB8IFwibGV0XCIgbGV0ICggXCIsXCIgbGV0ICkqIDtcblxuXG5cbiAgICB2YXIgICAgICAgICAgICAgICAgICAgICAgICA6Oj0gIHZhcmlhYmxlICggXCI9XCIgZXhwcmVzc2lvbiApPyB8IGRlc3RydWN0dXJlIFwiPVwiIGV4cHJlc3Npb24gO1xuXG4gICAgbGV0ICAgICAgICAgICAgICAgICAgICAgICAgOjo9ICB2YXJpYWJsZSAoIFwiPVwiIGV4cHJlc3Npb24gKT8gfCBkZXN0cnVjdHVyZSBcIj1cIiBleHByZXNzaW9uO1xuXG4gICAgY29uc3QgICAgICAgICAgICAgICAgICAgICAgOjo9ICAoIHZhcmlhYmxlIHwgZGVzdHJ1Y3R1cmUgKSBcIj1cIiBleHByZXNzaW9uIDtcblxuICAgIGRlc3RydWN0dXJlICAgICAgICAgICAgICAgIDo6PSAgXCJbXCIgdmFyaWFibGUgKCBcIj1cIiBleHByZXNzaW9uICk/ICggXCIsXCIgdmFyaWFibGUgKCBcIj1cIiBleHByZXNzaW9uICk/ICkqIFwiXVwiXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIFwie1wiIHZhcmlhYmxlICggXCI9XCIgZXhwcmVzc2lvbiApPyAoIFwiLFwiIHZhcmlhYmxlICggXCI9XCIgZXhwcmVzc2lvbiApPyApKiBcIn1cIlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7XG5cblxuXG4gICAgZXhwcmVzc2lvbiAgICAgICAgICAgICAgICAgOjo9ICBqc3hcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAganNvblxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBhcnJvd0Z1bmN0aW9uXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIHRlbXBsYXRlTGl0ZXJhbFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBhbm9ueW1vdXNGdW5jdGlvblxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBcIihcIiBleHByZXNzaW9uIFwiKVwiXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIFwie1wiICggcHJvcGVydHkgKCBcIixcIiBwcm9wZXJ0eSApKiApPyBcIn1cIlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBcIltcIiAoIGV4cHJlc3Npb24gKCBcIixcIiBleHByZXNzaW9uICkqIFwiLFwiPyApPyBcIl1cIlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBcInR5cGVvZlwiICggZXhwcmVzc2lvbiB8ICggXCIoXCIgZXhwcmVzc2lvbiBcIilcIikgKVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBcInZvaWRcIiAoIGV4cHJlc3Npb24gfCAoIFwiKFwiIGV4cHJlc3Npb24gXCIpXCIpIClcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgXCJuZXdcIiBuYW1lPE5PX1dISVRFU1BBQ0U+XCIoXCIgYXJndW1lbnRzPyBcIilcIlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBbb3BlcmF0b3JdPE5PX1dISVRFU1BBQ0U+ZXhwcmVzc2lvblxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBleHByZXNzaW9uPE5PX1dISVRFU1BBQ0U+KCAoIFwiLlwiPE5PX1dISVRFU1BBQ0U+bmFtZSApXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICggXCJbXCIgZXhwcmVzc2lvbnMgXCJdXCIgKVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoIFwiKFwiIGV4cHJlc3Npb25zPyBcIilcIiApXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHRlbXBsYXRlTGl0ZXJhbFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbb3BlcmF0b3JdXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIGV4cHJlc3Npb24gKCAoIFtvcGVyYXRvcl0gZXhwcmVzc2lvbiApXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoIFwiP1wiIGV4cHJlc3Npb24gXCI6XCIgZXhwcmVzc2lvbiApXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoIFwiaW5zdGFuY2VvZlwiIGV4cHJlc3Npb24gKVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKCBcImluXCIgZXhwcmVzc2lvbiApXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBbbnVtYmVyXVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICB2YXJpYWJsZVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBwcmltaXRpdmVcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgaW1wb3J0TWV0YVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBbc3RyaW5nLWxpdGVyYWxdXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIFwic3VwZXJcIiB8IFwidGhpc1wiIHwgXCJ0cnVlXCIgfCBcImZhbHNlXCIgfCBcIm51bGxcIiB8IFwidW5kZWZpbmVkXCJcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgO1xuXG5cblxuICAgIGpzeCAgICAgICAgICAgICAgICAgICAgICAgIDo6PSAganN4Q29tcGxldGVUYWcgfCBqc3hTdGFydFRhZyAoIGpzeCB8ICggXCJ7XCIgZXhwcmVzc2lvbj8gXCJ9XCIgKSB8IHN0cmluZyApKiBqc3hFbmRUYWcgO1xuXG4gICAganN4Q29tcGxldGVUYWcgICAgICAgICAgICAgOjo9ICBcIjxcIjxOT19XSElURVNQQUNFPm5hbWUganN4QXR0cmlidXRlKiBcIi8+XCIgO1xuXG4gICAganN4U3RhcnRUYWcgICAgICAgICAgICAgICAgOjo9ICBcIjxcIjxOT19XSElURVNQQUNFPm5hbWUganN4QXR0cmlidXRlKiBcIj5cIiA7XG5cbiAgICBqc3hFbmRUYWcgICAgICAgICAgICAgICAgICA6Oj0gIFwiPC9cIjxOT19XSElURVNQQUNFPm5hbWUgXCI+XCIgO1xuXG4gICAganN4QXR0cmlidXRlICAgICAgICAgICAgICAgOjo9ICBuYW1lICggPE5PX1dISVRFU1BBQ0U+XCI9XCIgKCAoIDxOT19XSElURVNQQUNFPltzdHJpbmctbGl0ZXJhbF0gKSB8ICggPE5PX1dISVRFU1BBQ0U+XCJ7XCIgZXhwcmVzc2lvbiBcIn1cIiApICkgKT8gO1xuXG5cblxuICAgIGpzb24gICAgICAgICAgICAgICAgICAgICAgIDo6PSAganNvbkFycmF5IHwganNvbk9iamVjdCA7XG5cbiAgICBqc29uQXJyYXkgICAgICAgICAgICAgICAgICA6Oj0gIFwiW1wiICgganNvbkVsZW1lbnQgKCBcIixcIiBqc29uRWxlbWVudCApKiApPyBcIl1cIiA7XG5cbiAgICBqc29uT2JqZWN0ICAgICAgICAgICAgICAgICA6Oj0gIFwie1wiICggW3N0cmluZy1saXRlcmFsXSBcIjpcIiBqc29uRWxlbWVudCAoIFwiLFwiIFtzdHJpbmctbGl0ZXJhbF0gXCI6XCIganNvbkVsZW1lbnQgKSogKT8gXCJ9XCIgO1xuXG4gICAganNvbkVsZW1lbnQgICAgICAgICAgICAgICAgOjo9ICBqc29uIHwgW3N0cmluZy1saXRlcmFsXSB8IFtudW1iZXJdIHwgXCJ0cnVlXCIgfCBcImZhbHNlXCIgfCBcIm51bGxcIiA7XG5cblxuXG4gICAgYXJyb3dGdW5jdGlvbiAgICAgICAgICAgICAgOjo9ICBzaW1wbGVBcnJvd0Z1bmN0aW9uIHwgY29tcGxleEFycm93RnVuY3Rpb24gO1xuXG4gICAgYXJyb3dGdW5jdGlvbkJvZHkgICAgICAgICAgOjo9ICBleHByZXNzaW9uIHwgKCBcIntcIiBzdGF0ZW1lbnQqIFwifVwiICkgO1xuXG4gICAgc2ltcGxlQXJyb3dGdW5jdGlvbiAgICAgICAgOjo9ICBhcmd1bWVudCBcIj0+XCIgYXJyb3dGdW5jdGlvbkJvZHkgO1xuXG4gICAgY29tcGxleEFycm93RnVuY3Rpb24gICAgICAgOjo9ICBcIihcIiBhcmd1bWVudHM/IFwiKVwiIFwiPT5cIiBhcnJvd0Z1bmN0aW9uQm9keSA7XG5cblxuXG4gICAgdGVtcGxhdGVMaXRlcmFsICAgICAgICAgICAgOjo9ICBcIlxcYFwiICggKCBcIlxcJHtcIiBleHByZXNzaW9uPyBcIn1cIiApIHwgc3RyaW5nICkqIFwiXFxgXCIgO1xuXG5cblxuICAgIHN0cmluZyAgICAgICAgICAgICAgICAgICAgIDo6PSAgKCBbbnVtYmVyXSB8IFtzcGVjaWFsXSB8IFtvcGVyYXRvcl18IFtrZXl3b3JkXSB8IFtpZGVudGlmaWVyXSB8IFtzdHJpbmctbGl0ZXJhbF18IFticm9rZW4tc3RyaW5nLWxpdGVyYWxdIHwgW3VuYXNzaWduZWRdICkrIDtcblxuICAgIHByb3BlcnR5ICAgICAgICAgICAgICAgICAgIDo6PSAgKCAoICggbmFtZSB8IFtzdHJpbmctbGl0ZXJhbF0gKSBcIjpcIiBleHByZXNzaW9uICkgfCB2YXJpYWJsZSApIDtcblxuICAgIGltcG9ydE1ldGEgICAgICAgICAgICAgICAgIDo6PSAgXCJpbXBvcnRcIjxOT19XSElURVNQQUNFPlwiLlwiPE5PX1dISVRFU1BBQ0U+XCJtZXRhXCIgO1xuXG5cblxuICAgIGV4cHJlc3Npb25zICAgICAgICAgICAgICAgIDo6PSAgZXhwcmVzc2lvbiAoIFwiLFwiIGV4cHJlc3Npb24gKSogO1xuXG4gICAgYXJndW1lbnRzICAgICAgICAgICAgICAgICAgOjo9ICBzcHJlYWRBcmd1bWVudCB8ICggYXJndW1lbnQgKCBcIixcIiBhcmd1bWVudCApKiAoIFwiLFwiIHNwcmVhZEFyZ3VtZW50ICk/ICkgO1xuXG4gICAgZmllbGRzICAgICAgICAgICAgICAgICAgICAgOjo9ICBuYW1lICggXCI6XCIgbmFtZSApPyAoIFwiLFwiIG5hbWUgKCBcIjpcIiBuYW1lICk/ICkqIDtcblxuICAgIG5hbWVzICAgICAgICAgICAgICAgICAgICAgIDo6PSAgbmFtZSAoIFwiYXNcIiBuYW1lICk/ICggXCIsXCIgbmFtZSAoIFwiYXNcIiBuYW1lICk/ICkqIDtcblxuXG5cbiAgICBzcHJlYWRBcmd1bWVudCAgICAgICAgICAgICA6Oj0gIFwiLi4uXCI8Tk9fV0hJVEVTUEFDRT5baWRlbnRpZmllcl0gO1xuXG4gICAgYXJndW1lbnQgICAgICAgICAgICAgICAgICAgOjo9ICBleHByZXNzaW9uIHwgW2lkZW50aWZpZXJdICggXCI9XCIgZXhwcmVzc2lvbiApPyA7XG5cbiAgICB2YXJpYWJsZSAgICAgICAgICAgICAgICAgICA6Oj0gIFtpZGVudGlmaWVyXSA7XG5cbiAgICBsYWJlbCAgICAgICAgICAgICAgICAgICAgICA6Oj0gIFtpZGVudGlmaWVyXSA7XG5cbiAgICBuYW1lICAgICAgICAgICAgICAgICAgICAgICA6Oj0gIFtpZGVudGlmaWVyXSA7XG5cblxuXG4gICAgZXJyb3IgICAgICAgICAgICAgICAgICAgICAgOjo9ICAuIDtcblxuYDtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSmF2YVNjcmlwdFBhcnNlciBleHRlbmRzIFlhcHBQYXJzZXIge1xuICBzdGF0aWMgYm5mID0gYm5mO1xuXG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHsgcmV0dXJuIFlhcHBQYXJzZXIuZnJvbU5vdGhpbmcoSmF2YVNjcmlwdFBhcnNlcik7IH1cblxuICBzdGF0aWMgZnJvbUJORihibmYpIHsgcmV0dXJuIFlhcHBQYXJzZXIuZnJvbUJORihKYXZhU2NyaXB0UGFyc2VyLCBibmYpOyB9XG5cbiAgc3RhdGljIGZyb21SdWxlcyhydWxlcykgeyByZXR1cm4gWWFwcFBhcnNlci5mcm9tUnVsZXMoSmF2YVNjcmlwdFBhcnNlciwgcnVsZXMpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgU2lnbmlmaWNhbnRUb2tlbiB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IHsgSlNYX1RPS0VOX1RZUEUgfSBmcm9tIFwiLi4vLi4vdG9rZW5UeXBlc1wiO1xuXG5jb25zdCB0eXBlID0gSlNYX1RPS0VOX1RZUEU7ICAvLy9cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSlNYVG9rZW4gZXh0ZW5kcyBTaWduaWZpY2FudFRva2VuIHtcbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIFNpZ25pZmljYW50VG9rZW4uZnJvbUNvbnRlbnRBbmRUeXBlKEpTWFRva2VuLCBjb250ZW50LCB0eXBlKTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IFNpZ25pZmljYW50VG9rZW4sIHR5cGVzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5jb25zdCB7IHN0cmluZ0xpdGVyYWxUeXBlIH0gPSB0eXBlcztcblxuY29uc3QgdHlwZSA9IHN0cmluZ0xpdGVyYWxUeXBlOyAvLy9cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3RyaW5nVG9rZW4gZXh0ZW5kcyBTaWduaWZpY2FudFRva2VuIHtcbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIFNpZ25pZmljYW50VG9rZW4uZnJvbUNvbnRlbnRBbmRUeXBlKFN0cmluZ1Rva2VuLCBjb250ZW50LCB0eXBlKTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IFNpZ25pZmljYW50VG9rZW4gfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCB7IFZBUklBQkxFX1RPS0VOX1RZUEUgfSBmcm9tIFwiLi4vLi4vdG9rZW5UeXBlc1wiO1xuXG5jb25zdCB0eXBlID0gVkFSSUFCTEVfVE9LRU5fVFlQRTsgIC8vL1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWYXJpYWJsZVRva2VuIGV4dGVuZHMgU2lnbmlmaWNhbnRUb2tlbiB7XG4gIHN0YXRpYyBmcm9tQ29udGVudChjb250ZW50KSB7IHJldHVybiBTaWduaWZpY2FudFRva2VuLmZyb21Db250ZW50QW5kVHlwZShWYXJpYWJsZVRva2VuLCBjb250ZW50LCB0eXBlKTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IFNpZ25pZmljYW50VG9rZW4gfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCB7IEFSR1VNRU5UX1RPS0VOX1RZUEUgfSBmcm9tIFwiLi4vLi4vdG9rZW5UeXBlc1wiO1xuXG5jb25zdCB0eXBlID0gQVJHVU1FTlRfVE9LRU5fVFlQRTsgIC8vL1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBcmd1bWVudFRva2VuIGV4dGVuZHMgU2lnbmlmaWNhbnRUb2tlbiB7XG4gIHN0YXRpYyBmcm9tQ29udGVudChjb250ZW50KSB7IHJldHVybiBTaWduaWZpY2FudFRva2VuLmZyb21Db250ZW50QW5kVHlwZShBcmd1bWVudFRva2VuLCBjb250ZW50LCB0eXBlKTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IFF1ZXJ5IH0gZnJvbSBcIm9jY2FtLWRvbVwiO1xuaW1wb3J0IHsgY2hhcmFjdGVycyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IFByb2Nlc3NvciBmcm9tIFwiLi4vcHJvY2Vzc29yXCI7XG5pbXBvcnQgSlNYVG9rZW4gZnJvbSBcIi4uL3Rva2VuL3NpZ25pZmljYW50L2pzeFwiO1xuaW1wb3J0IEVycm9yVG9rZW4gZnJvbSBcIi4uL3Rva2VuL3NpZ25pZmljYW50L2Vycm9yXCI7XG5pbXBvcnQgU3RyaW5nVG9rZW4gZnJvbSBcIi4uL3Rva2VuL3NpZ25pZmljYW50L3N0cmluZ1wiO1xuaW1wb3J0IFZhcmlhYmxlVG9rZW4gZnJvbSBcIi4uL3Rva2VuL3NpZ25pZmljYW50L3ZhcmlhYmxlXCI7XG5pbXBvcnQgQXJndW1lbnRUb2tlbiBmcm9tIFwiLi4vdG9rZW4vc2lnbmlmaWNhbnQvYXJndW1lbnRcIjtcblxuY29uc3QgZXJyb3JUZXJtaW5hbE5vZGVRdWVyeSA9IFF1ZXJ5LmZyb21FeHByZXNzaW9uKFwiLy9lcnJvci9AKlwiKSxcbiAgICAgIGpzeE5vblRlcm1pbmFsTm9kZVF1ZXJ5ID0gUXVlcnkuZnJvbUV4cHJlc3Npb24oXCIvL2pzeFwiKSxcbiAgICAgIGpzeFRhZ1Rlcm1pbmFsTm9kZVF1ZXJ5ID0gUXVlcnkuZnJvbUV4cHJlc3Npb24oXCIvL2pzeENvbXBsZXRlVGFnfGpzeFN0YXJ0VGFnfGpzeEVuZFRhZy9AKlwiKSxcbiAgICAgIHZhcmlhYmxlVGVybWluYWxOb2RlUXVlcnkgPSBRdWVyeS5mcm9tRXhwcmVzc2lvbihcIi8vdmFyaWFibGUvQCpcIiksXG4gICAgICBqc3hUYWdOYW1lVGVybWluYWxOb2RlUXVlcnkgPSBRdWVyeS5mcm9tRXhwcmVzc2lvbihcIi8vanN4Q29tcGxldGVUYWd8anN4U3RhcnRUYWd8anN4RW5kVGFnL25hbWUvQCpcIiksXG4gICAgICBmdW5jdGlvbk5vblRlcm1pbmFsTm9kZVF1ZXJ5ID0gUXVlcnkuZnJvbUV4cHJlc3Npb24oXCIvL2Z1bmN0aW9uQm9keXxhcnJvd0Z1bmN0aW9uXCIpLFxuICAgICAganN4VGFnQXR0cmlidXRlVGVybWluYWxOb2RlUXVlcnkgPSBRdWVyeS5mcm9tRXhwcmVzc2lvbihcIi8vanN4QXR0cmlidXRlL0AqXCIpLFxuICAgICAgYXJndW1lbnRWYXJpYWJsZVRlcm1pbmFsTm9kZVF1ZXJ5ID0gUXVlcnkuZnJvbUV4cHJlc3Npb24oXCIvL2FyZ3VtZW50Ly92YXJpYWJsZS9AKlwiKSxcbiAgICAgIGpzeFRhZ0F0dHJpYnV0ZU5hbWVUZXJtaW5hbE5vZGVRdWVyeSA9IFF1ZXJ5LmZyb21FeHByZXNzaW9uKFwiLy9qc3hBdHRyaWJ1dGUvbmFtZS9AKlwiKSxcbiAgICAgIHZhcmlhYmxlRGVjbGFyYXRpb25UZXJtaW5hbE5vZGVRdWVyeSA9IFF1ZXJ5LmZyb21FeHByZXNzaW9uKFwiLy92YXJ8bGV0fGNvbnN0L3ZhcmlhYmxlL0AqXCIpLFxuICAgICAgdGVtcGxhdGVMaXRlcmFsU3RyaW5nVGVybWluYWxOb2RlUXVlcnkgPSBRdWVyeS5mcm9tRXhwcmVzc2lvbihcIi8vdGVtcGxhdGVMaXRlcmFsL3N0cmluZy9AKlwiKSxcbiAgICAgIHRlbXBsYXRlTGl0ZXJhbERlbGltaXRlclRlcm1pbmFsTm9kZVF1ZXJ5ID0gUXVlcnkuZnJvbUV4cHJlc3Npb24oXCIvL3RlbXBsYXRlTGl0ZXJhbC9AZGVsaW1pdGVyXCIpLFxuICAgICAgZGVzdHJ1Y3R1cmVkQ29uc3REZWNsYXJhdGlvblRlcm1pbmFsTm9kZVF1ZXJ5ID0gUXVlcnkuZnJvbUV4cHJlc3Npb24oXCIvL2NvbnN0L2Rlc3RydWN0dXJlL3ZhcmlhYmxlL0AqXCIpO1xuXG5jb25zdCB7IEJBQ0tUSUNLX0NIQVJBQ1RFUiB9ID0gY2hhcmFjdGVycztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSmF2YVNjcmlwdFByb2Nlc3NvciBleHRlbmRzIFByb2Nlc3NvciB7XG4gIHByb2Nlc3ModG9rZW5zLCBub2RlKSB7XG4gICAgaWYgKG5vZGUgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IGpzeE5vblRlcm1pbmFsTm9kZXMgPSBqc3hOb25UZXJtaW5hbE5vZGVRdWVyeS5leGVjdXRlKG5vZGUpLFxuICAgICAgICAgICAgZnVuY3Rpb25Ob25UZXJtaW5hbE5vZGVzID0gZnVuY3Rpb25Ob25UZXJtaW5hbE5vZGVRdWVyeS5leGVjdXRlKG5vZGUpO1xuXG4gICAgICB0aGlzLnJlcGxhY2VUZXJtaW5hbE5vZGVzU2lnbmlmaWNhbnRUb2tlbih0b2tlbnMsIG5vZGUsIChjb250ZW50KSA9PiBFcnJvclRva2VuLCBlcnJvclRlcm1pbmFsTm9kZVF1ZXJ5KTtcblxuICAgICAgdGhpcy5yZXBsYWNlVGVybWluYWxOb2Rlc1NpZ25pZmljYW50VG9rZW4odG9rZW5zLCBub2RlLCAoY29udGVudCkgPT4gU3RyaW5nVG9rZW4sIHRlbXBsYXRlTGl0ZXJhbFN0cmluZ1Rlcm1pbmFsTm9kZVF1ZXJ5KTtcblxuICAgICAgdGhpcy5yZXBsYWNlVGVybWluYWxOb2Rlc1NpZ25pZmljYW50VG9rZW4odG9rZW5zLCBub2RlLCAoY29udGVudCkgPT4gKGNvbnRlbnQgPT09IEJBQ0tUSUNLX0NIQVJBQ1RFUikgPyBTdHJpbmdUb2tlbiA6IG51bGwsIHRlbXBsYXRlTGl0ZXJhbERlbGltaXRlclRlcm1pbmFsTm9kZVF1ZXJ5KTtcblxuICAgICAganN4Tm9uVGVybWluYWxOb2Rlcy5mb3JFYWNoKChqc3hOb25UZXJtaW5hbE5vZGUpID0+IHRoaXMucmVwbGFjZVRlcm1pbmFsTm9kZXNTaWduaWZpY2FudFRva2VuKHRva2VucywganN4Tm9uVGVybWluYWxOb2RlLCAoY29udGVudCkgPT4gSlNYVG9rZW4sIGpzeFRhZ1Rlcm1pbmFsTm9kZVF1ZXJ5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzeFRhZ05hbWVUZXJtaW5hbE5vZGVRdWVyeSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc3hUYWdBdHRyaWJ1dGVUZXJtaW5hbE5vZGVRdWVyeSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc3hUYWdBdHRyaWJ1dGVOYW1lVGVybWluYWxOb2RlUXVlcnkpKTtcblxuICAgICAgZnVuY3Rpb25Ob25UZXJtaW5hbE5vZGVzLmZvckVhY2goKGZ1bmN0aW9uTm9uVGVybWluYWxOb2RlKSA9PiB7XG4gICAgICAgIGNvbnN0IGFyZ3VtZW50TmFtZXMgPSB0aGlzLnJlcGxhY2VUZXJtaW5hbE5vZGVzU2lnbmlmaWNhbnRUb2tlbih0b2tlbnMsIGZ1bmN0aW9uTm9uVGVybWluYWxOb2RlLCAoY29udGVudCkgPT4gQXJndW1lbnRUb2tlbiwgYXJndW1lbnRWYXJpYWJsZVRlcm1pbmFsTm9kZVF1ZXJ5KSxcbiAgICAgICAgICAgICAgdmFyaWFibGVOYW1lcyA9IHRoaXMucmVwbGFjZVRlcm1pbmFsTm9kZXNTaWduaWZpY2FudFRva2VuKHRva2VucywgZnVuY3Rpb25Ob25UZXJtaW5hbE5vZGUsIChjb250ZW50KSA9PiBWYXJpYWJsZVRva2VuLCB2YXJpYWJsZURlY2xhcmF0aW9uVGVybWluYWxOb2RlUXVlcnksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdHJ1Y3R1cmVkQ29uc3REZWNsYXJhdGlvblRlcm1pbmFsTm9kZVF1ZXJ5KTtcblxuICAgICAgICB0aGlzLnJlcGxhY2VUZXJtaW5hbE5vZGVzU2lnbmlmaWNhbnRUb2tlbih0b2tlbnMsIGZ1bmN0aW9uTm9uVGVybWluYWxOb2RlLCAoY29udGVudCkgPT4ge1xuICAgICAgICAgIGxldCBUb2tlbiA9IG51bGw7XG5cbiAgICAgICAgICBjb25zdCB2YXJpYWJsZU5hbWUgPSBjb250ZW50LCAvLy9cbiAgICAgICAgICAgICAgICB2YXJpYWJsZU5hbWVzSW5jbHVkZXNWYXJpYWJsZU5hbWUgPSB2YXJpYWJsZU5hbWVzLmluY2x1ZGVzKHZhcmlhYmxlTmFtZSksXG4gICAgICAgICAgICAgICAgYXJndW1lbnROYW1lc0luY2x1ZGVzVmFyaWFibGVOYW1lID0gYXJndW1lbnROYW1lcy5pbmNsdWRlcyh2YXJpYWJsZU5hbWUpO1xuXG4gICAgICAgICAgaWYgKGZhbHNlKSB7XG4gICAgICAgICAgICAvLy9cbiAgICAgICAgICB9IGVsc2UgaWYgKHZhcmlhYmxlTmFtZXNJbmNsdWRlc1ZhcmlhYmxlTmFtZSkge1xuICAgICAgICAgICAgVG9rZW4gPSBWYXJpYWJsZVRva2VuO1xuICAgICAgICAgIH0gZWxzZSBpZiAoYXJndW1lbnROYW1lc0luY2x1ZGVzVmFyaWFibGVOYW1lKSB7XG4gICAgICAgICAgICBUb2tlbiA9IEFyZ3VtZW50VG9rZW47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIFRva2VuO1xuICAgICAgICB9LCB2YXJpYWJsZVRlcm1pbmFsTm9kZVF1ZXJ5KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHsgcmV0dXJuIFByb2Nlc3Nvci5mcm9tTm90aGluZyhKYXZhU2NyaXB0UHJvY2Vzc29yKTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBQbHVnaW4gZnJvbSBcIi4uL3BsdWdpblwiO1xuaW1wb3J0IEphdmFTY3JpcHRMZXhlciBmcm9tIFwiLi4vbGV4ZXIvamF2YXNjcmlwdFwiO1xuaW1wb3J0IEphdmFTY3JpcHRQYXJzZXIgZnJvbSBcIi4uL3BhcnNlci9qYXZhc2NyaXB0XCI7XG5pbXBvcnQgSmF2YVNjcmlwdFByb2Nlc3NvciBmcm9tIFwiLi4vcHJvY2Vzc29yL2phdmFzY3JpcHRcIjtcblxuaW1wb3J0IHsgSkFWQVNDUklQVF9MQU5HVUFHRSB9IGZyb20gXCIuLi9sYW5ndWFnZXNcIlxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBKYXZhU2NyaXB0UGx1Z2luIGV4dGVuZHMgUGx1Z2luIHtcbiAgbGFuZ3VhZ2UgPSBKQVZBU0NSSVBUX0xBTkdVQUdFO1xuXG4gIHN0YXRpYyBMZXhlciA9IEphdmFTY3JpcHRMZXhlcjtcblxuICBzdGF0aWMgUGFyc2VyID0gSmF2YVNjcmlwdFBhcnNlcjtcblxuICBzdGF0aWMgUHJvY2Vzc29yID0gSmF2YVNjcmlwdFByb2Nlc3NvcjtcblxuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7IHJldHVybiBQbHVnaW4uZnJvbU5vdGhpbmcoSmF2YVNjcmlwdFBsdWdpbik7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3Qgc3ByaW5nV29vZCA9IFwiI2Y4ZjZmMVwiO1xuZXhwb3J0IGNvbnN0IGJvbmpvdXIgPSBcIiNlNWUwZTFcIjtcbmV4cG9ydCBjb25zdCBnYWluc2Jvcm91Z2ggPSBcIiNkNWQ4ZDJcIjtcbmV4cG9ydCBjb25zdCBzdGFyZHVzdCA9IFwiIzlmOWY5Y1wiO1xuZXhwb3J0IGNvbnN0IGh1cnJpY2FuZSA9IFwiIzkwODk4OVwiO1xuZXhwb3J0IGNvbnN0IHN0b3JtRHVzdCA9IFwiIzY0NjQ2M1wiO1xuZXhwb3J0IGNvbnN0IGVtcGVyb3IgPSBcIiM1MTUxNTBcIjtcbmV4cG9ydCBjb25zdCB0dWF0YXJhID0gXCIjMzYzNTM0XCI7XG5leHBvcnQgY29uc3Qgd29vZHNtb2tlID0gXCIjMGMwZDBmXCI7XG5cbmV4cG9ydCBjb25zdCBjaXRyb24gPSBcIiM4NmI5MjNcIjtcbmV4cG9ydCBjb25zdCBzdXNoaSA9IFwiIzdmYTgyZlwiO1xuZXhwb3J0IGNvbnN0IG9saXZlRHJhYiA9IFwiIzYzODgyOVwiO1xuZXhwb3J0IGNvbnN0IHJpZmxlR3JlZW4gPSBcIiM0MTQ4MzNcIjtcbmV4cG9ydCBjb25zdCBsb2dDYWJpbiA9IFwiIzI0MzAxZFwiO1xuZXhwb3J0IGNvbnN0IGJsYWNrT2xpdmUgPSBcIiMxYzI0MTJcIjtcbmV4cG9ydCBjb25zdCBodW50ZXJHcmVlbiA9IFwiIzE2MWQxMFwiO1xuXG5leHBvcnQgY29uc3QgY2FkZXRCbHVlID0gXCIjNWY5ZWEwXCI7XG5leHBvcnQgY29uc3QgaGF2ZWxvY2tCbHVlID0gXCIjNUI4RGUxXCI7XG5cbmV4cG9ydCBjb25zdCBwb21lZ3JhbmF0ZSA9IFwiI2Y1MjkyOVwiO1xuZXhwb3J0IGNvbnN0IHJhenptYXRhenogPSBcIiNlMzI1NmJcIjtcbmV4cG9ydCBjb25zdCBmbGFtaW5nbyA9IFwiI2YzNGI0NFwiO1xuZXhwb3J0IGNvbnN0IHRhaGl0aSA9IFwiI0Y1OEEwQVwiO1xuZXhwb3J0IGNvbnN0IGVxdWF0b3IgPSBcIiNlNGFDNWVcIjtcblxuZXhwb3J0IGNvbnN0IHBvcnRpY2EgPSBcIiNmN2U3NWZcIjtcbmV4cG9ydCBjb25zdCBjZWxlcnkgPSBcIiNiY2I4NTJcIjtcbmV4cG9ydCBjb25zdCBzeWNhbW9yZSA9IFwiIzkwOGQzOVwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgWE1MUGx1Z2luIGZyb20gXCIuLi9wbHVnaW4veG1sXCI7XG5pbXBvcnQgSlNPTlBsdWdpbiBmcm9tIFwiLi4vcGx1Z2luL2pzb25cIjtcbmltcG9ydCBQbGFpblRleHRQbHVnaW4gZnJvbSBcIi4uL3BsdWdpbi9wbGFpblRleHRcIjtcbmltcG9ydCBKYXZhU2NyaXB0UGx1Z2luIGZyb20gXCIuLi9wbHVnaW4vamF2YXNjcmlwdFwiO1xuXG5pbXBvcnQgeyBYTUxfTEFOR1VBR0UsIEpTT05fTEFOR1VBR0UsIFBMQUlOX1RFWFRfTEFOR1VBR0UgfSBmcm9tIFwiLi4vbGFuZ3VhZ2VzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBwbHVnaW5Gcm9tTGFuZ3VhZ2VBbmRQbHVnaW4obGFuZ3VhZ2UsIFBsdWdpbikge1xuICBpZiAoIVBsdWdpbikge1xuICAgIHN3aXRjaCAobGFuZ3VhZ2UpIHtcbiAgICAgIGNhc2UgWE1MX0xBTkdVQUdFOiBQbHVnaW4gPSBYTUxQbHVnaW47IGJyZWFrO1xuICAgICAgY2FzZSBKU09OX0xBTkdVQUdFOiBQbHVnaW4gPSBKU09OUGx1Z2luOyBicmVhaztcbiAgICAgIGNhc2UgUExBSU5fVEVYVF9MQU5HVUFHRTogUGx1Z2luID0gUGxhaW5UZXh0UGx1Z2luOyBicmVhaztcblxuICAgICAgZGVmYXVsdCA6XG4gICAgICAgIFBsdWdpbiA9IEphdmFTY3JpcHRQbHVnaW47XG5cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgcGx1Z2luID0gUGx1Z2luLmZyb21Ob3RoaW5nKCk7XG5cbiAgcmV0dXJuIHBsdWdpbjtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnRpZXNGcm9tQ29udGVudExhbmd1YWdlUGx1Z2luQW5kT3B0aW9ucyhjb250ZW50LCBsYW5ndWFnZSwgUGx1Z2luLCBvcHRpb25zKSB7XG4gIGNvbnN0IHRleHQgPSBjb250ZW50LCAvLy9cbiAgICAgICAgY2hpbGRFbGVtZW50cyA9IFt7XG4gICAgICAgICAgZ2V0VGV4dDogKCkgPT4gdGV4dCxcbiAgICAgICAgfV0sXG4gICAgICAgIHByb3BlcnRpZXMgPSBPYmplY3QuYXNzaWduKHtcbiAgICAgICAgICBjaGlsZEVsZW1lbnRzLFxuICAgICAgICAgIGxhbmd1YWdlLFxuICAgICAgICAgIFBsdWdpblxuICAgICAgICB9LCBvcHRpb25zKTtcblxuICByZXR1cm4gcHJvcGVydGllcztcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcblxuY29uc3QgeyBmaXJzdCB9ID0gYXJyYXlVdGlsaXRpZXM7XG5cbmV4cG9ydCBmdW5jdGlvbiBjb250ZW50RnJvbUNoaWxkRWxlbWVudHMoY2hpbGRFbGVtZW50cykge1xuICBsZXQgY29udGVudCA9IEVNUFRZX1NUUklORztcblxuICBjb25zdCBjaGlsZEVsZW1lbnRzTGVuZ3RoID0gY2hpbGRFbGVtZW50cy5sZW5ndGg7XG5cbiAgaWYgKGNoaWxkRWxlbWVudHNMZW5ndGggPiAwKSB7XG4gICAgY29uc3QgZmlyc3RDaGlsZEVsZW1lbnQgPSBmaXJzdChjaGlsZEVsZW1lbnRzKSxcbiAgICAgICAgICBmaXJzdENoaWxkRWxlbWVudFRleHQgPSBmaXJzdENoaWxkRWxlbWVudC5nZXRUZXh0KCk7XG5cbiAgICBjb250ZW50ID0gZmlyc3RDaGlsZEVsZW1lbnRUZXh0OyAgLy8vXG4gIH1cblxuICByZXR1cm4gY29udGVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxpbmVDb3VudEZyb21Db250ZW50KGNvbnRlbnQpIHtcbiAgbGV0IGxpbmVDb3VudDtcblxuICBjb25zdCBtYXRjaGVzID0gY29udGVudC5tYXRjaCgvXFxyXFxufFxccnxcXG4vZyk7XG5cbiAgaWYgKG1hdGNoZXMgPT09IG51bGwpIHtcbiAgICBsaW5lQ291bnQgPSAxO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IG1hdGNoZXNMZW5ndGggPSBtYXRjaGVzLmxlbmd0aDtcblxuICAgIGxpbmVDb3VudCA9IG1hdGNoZXNMZW5ndGggKyAxO1xuICB9XG5cbiAgcmV0dXJuIGxpbmVDb3VudDtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfSE9TVCA9IFwiXCI7XG5leHBvcnQgY29uc3QgREVGQVVMVF9FRElUQUJMRSA9IGZhbHNlO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfRklSQV9DT0RFID0gZmFsc2U7XG5leHBvcnQgY29uc3QgREVGQVVMVF9ERUZFUl9SRU5ERVIgPSBmYWxzZTtcbmV4cG9ydCBjb25zdCBERUZBVUxUX0hJRERFTl9HVVRURVIgPSBmYWxzZTtcbmV4cG9ydCBjb25zdCBERUZBVUxUX0ZBTkNZX1NDUk9MTEJBUlMgPSBmYWxzZTtcbmV4cG9ydCBjb25zdCBERUZBVUxUX0hJRERFTl9TQ1JPTExCQVJTID0gZmFsc2U7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB3aXRoU3R5bGUgZnJvbSBcImVhc3ktd2l0aC1zdHlsZVwiOyAgLy8vXG5cbmltcG9ydCB7IFJlYWN0LCBCb3VuZHMsIEVsZW1lbnQgfSBmcm9tIFwiZWFzeVwiO1xuXG5pbXBvcnQgc3R5bGVNaXhpbnMgZnJvbSBcIi4vbWl4aW5zL3N0eWxlXCI7XG5pbXBvcnQgUmljaFRleHRhcmVhIGZyb20gXCIuL3JpY2hUZXh0YXJlYVwiO1xuaW1wb3J0IFByZXR0eVByaW50ZXIgZnJvbSBcIi4vcHJldHR5UHJpbnRlclwiO1xuXG5pbXBvcnQgeyBnZXRTY3JvbGxiYXJUaGlja25lc3MgfSBmcm9tIFwiLi91dGlsaXRpZXMvc2Nyb2xsYmFyVGhpY2tuZXNzXCI7XG5pbXBvcnQgeyBwbHVnaW5Gcm9tTGFuZ3VhZ2VBbmRQbHVnaW4gfSBmcm9tIFwiLi91dGlsaXRpZXMvcGx1Z2luXCI7XG5pbXBvcnQgeyBwcm9wZXJ0aWVzRnJvbUNvbnRlbnRMYW5ndWFnZVBsdWdpbkFuZE9wdGlvbnMgfSBmcm9tIFwiLi91dGlsaXRpZXMvcHJvcGVydGllc1wiO1xuaW1wb3J0IHsgbGluZUNvdW50RnJvbUNvbnRlbnQsIGNvbnRlbnRGcm9tQ2hpbGRFbGVtZW50cyB9IGZyb20gXCIuL3V0aWxpdGllcy9jb250ZW50XCI7XG5pbXBvcnQgeyBjb2xvdXIsIGNhcmV0Q29sb3VyLCBib3JkZXJDb2xvdXIsIGJhY2tncm91bmRDb2xvdXIgfSBmcm9tIFwiLi9zY2hlbWUvY29sb3VyXCI7XG5pbXBvcnQgeyBERUZBVUxUX0VESVRBQkxFLCBERUZBVUxUX0ZJUkFfQ09ERSwgREVGQVVMVF9ERUZFUl9SRU5ERVIsIERFRkFVTFRfSElEREVOX0dVVFRFUiwgREVGQVVMVF9ISURERU5fU0NST0xMQkFSUywgREVGQVVMVF9GQU5DWV9TQ1JPTExCQVJTIH0gZnJvbSBcIi4vZGVmYXVsdHNcIjtcblxuY2xhc3MgWWFwcCBleHRlbmRzIEVsZW1lbnQge1xuICBjb25zdHJ1Y3RvcihzZWxlY3RvciwgcGx1Z2luKSB7XG4gICAgc3VwZXIoc2VsZWN0b3IpO1xuXG4gICAgdGhpcy5wbHVnaW4gPSBwbHVnaW47XG4gIH1cblxuICBnZXRQbHVnaW4oKSB7XG4gICAgcmV0dXJuIHRoaXMucGx1Z2luO1xuICB9XG5cbiAgZ2V0Q29udGVudCgpIHtcbiAgICBjb25zdCByaWNoVGV4dGFyZWFDb250ZW50ID0gdGhpcy5nZXRSaWNoVGV4dGFyZWFDb250ZW50KCksXG4gICAgICAgICAgY29udGVudCA9IHJpY2hUZXh0YXJlYUNvbnRlbnQ7ICAvLy9cblxuICAgIHJldHVybiBjb250ZW50O1xuICB9XG5cbiAgZ2V0SW5uZXJCb3VuZHMoZ3V0dGVyV2lkdGgpIHtcbiAgICBsZXQgdG9wLFxuICAgICAgICBsZWZ0LFxuICAgICAgICB3aWR0aCA9IHRoaXMuZ2V0V2lkdGgoKSxcbiAgICAgICAgaGVpZ2h0ID0gdGhpcy5nZXRIZWlnaHQoKTtcblxuICAgIGNvbnN0IHBhZGRpbmdUb3AgPSB0aGlzLmdldFBhZGRpbmdUb3AoKSxcbiAgICAgICAgICBwYWRkaW5nTGVmdCA9IHRoaXMuZ2V0UGFkZGluZ0xlZnQoKSxcbiAgICAgICAgICBwYWRkaW5nUmlnaHQgPSB0aGlzLmdldFBhZGRpbmdSaWdodCgpLFxuICAgICAgICAgIHBhZGRpbmdCb3R0b20gPSB0aGlzLmdldFBhZGRpbmdCb3R0b20oKSxcbiAgICAgICAgICBib3JkZXJUb3BXaWR0aCA9IHRoaXMuZ2V0Qm9yZGVyVG9wV2lkdGgoKSxcbiAgICAgICAgICBib3JkZXJMZWZ0V2lkdGggPSB0aGlzLmdldEJvcmRlckxlZnRXaWR0aCgpLFxuICAgICAgICAgIGJvcmRlclJpZ2h0V2lkdGggPSB0aGlzLmdldEJvcmRlclJpZ2h0V2lkdGgoKSxcbiAgICAgICAgICBib3JkZXJCb3R0b21XaWR0aCA9IHRoaXMuZ2V0Qm9yZGVyQm90dG9tV2lkdGgoKTtcblxuICAgIHRvcCA9IGJvcmRlclRvcFdpZHRoICsgcGFkZGluZ1RvcDtcbiAgICBsZWZ0ID0gYm9yZGVyTGVmdFdpZHRoICsgcGFkZGluZ0xlZnQ7XG5cbiAgICB3aWR0aCAtPSAoIGJvcmRlckxlZnRXaWR0aCArIHBhZGRpbmdMZWZ0ICsgcGFkZGluZ1JpZ2h0ICsgYm9yZGVyUmlnaHRXaWR0aCApO1xuICAgIGhlaWdodCAtPSAoIGJvcmRlclRvcFdpZHRoICsgcGFkZGluZ1RvcCArIHBhZGRpbmdCb3R0b20gKyBib3JkZXJCb3R0b21XaWR0aCApO1xuXG4gICAgaWYgKGd1dHRlcldpZHRoICE9PSBudWxsKSB7XG4gICAgICBsZWZ0ICs9IGd1dHRlcldpZHRoO1xuICAgICAgd2lkdGggLT0gZ3V0dGVyV2lkdGg7XG4gICAgfVxuXG4gICAgY29uc3QgYm91bmRzID0gQm91bmRzLmZyb21Ub3BMZWZ0V2lkdGhBbmRIZWlnaHQodG9wLCBsZWZ0LCB3aWR0aCwgaGVpZ2h0KSxcbiAgICAgICAgICBpbm5lckJvdW5kcyA9IGJvdW5kczsgLy8vXG5cbiAgICByZXR1cm4gaW5uZXJCb3VuZHM7XG4gIH1cblxuICBnZXRJbml0aWFsTGluZUNvdW50KCkge1xuICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLmdldENvbnRlbnQoKSxcbiAgICAgICAgICBsaW5lQ291bnQgPSBsaW5lQ291bnRGcm9tQ29udGVudChjb250ZW50KSxcbiAgICAgICAgICBpbml0aWFsTGluZUNvdW50ID0gbGluZUNvdW50OyAvLy9cblxuICAgIHJldHVybiBpbml0aWFsTGluZUNvdW50O1xuICB9XG5cbiAgZ2V0U2Nyb2xsYmFyVGhpY2tuZXNzKCkge1xuICAgIGxldCBzY3JvbGxiYXJUaGlja25lc3MgPSAwO1xuXG4gICAgY29uc3QgeyBoaWRkZW5TY3JvbGxiYXJzID0gREVGQVVMVF9ISURERU5fU0NST0xMQkFSUyB9ID0gdGhpcy5wcm9wZXJ0aWVzO1xuXG4gICAgaWYgKCFoaWRkZW5TY3JvbGxiYXJzKSB7XG4gICAgICBjb25zdCB7IGZhbmN5U2Nyb2xsYmFycyA9IERFRkFVTFRfRkFOQ1lfU0NST0xMQkFSUyB9ID0gdGhpcy5wcm9wZXJ0aWVzO1xuXG4gICAgICBzY3JvbGxiYXJUaGlja25lc3MgPSBnZXRTY3JvbGxiYXJUaGlja25lc3MoZmFuY3lTY3JvbGxiYXJzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2Nyb2xsYmFyVGhpY2tuZXNzO1xuICB9XG5cbiAgc2V0TGV4ZXIobGV4ZXIpIHsgdGhpcy5wbHVnaW4uc2V0TGV4ZXIobGV4ZXIpOyB9XG5cbiAgc2V0UGFyc2VyKHBhcnNlcikgeyB0aGlzLnBsdWdpbi5zZXRQYXJzZXIocGFyc2VyKTsgfVxuXG4gIGNoYW5nZUhhbmRsZXIoZXZlbnQsIGVsZW1lbnQpIHtcbiAgICBjb25zdCByaWNoVGV4dGFyZWEgPSBlbGVtZW50LCAvLy9cbiAgICAgICAgICBjb250ZW50Q2hhbmdlZCA9IHJpY2hUZXh0YXJlYS5oYXNDb250ZW50Q2hhbmdlZCgpO1xuXG4gICAgaWYgKGNvbnRlbnRDaGFuZ2VkKSB7XG4gICAgICBjb25zdCB7IG9uQ29udGVudENoYW5nZSB9ID0gdGhpcy5wcm9wZXJ0aWVzLFxuICAgICAgICAgICAgY29udGVudENoYW5nZUhhbmRsZXIgPSBvbkNvbnRlbnRDaGFuZ2U7IC8vL1xuXG4gICAgICB0aGlzLnVwZGF0ZSgpO1xuXG4gICAgICBlbGVtZW50ID0gdGhpczsgLy8vXG5cbiAgICAgIGNvbnRlbnRDaGFuZ2VIYW5kbGVyICYmIGNvbnRlbnRDaGFuZ2VIYW5kbGVyKGV2ZW50LCBlbGVtZW50KTsgLy8vXG4gICAgfVxuICB9XG5cbiAgc2Nyb2xsSGFuZGxlcihldmVudCwgZWxlbWVudCkge1xuICAgIGNvbnN0IHJpY2hUZXh0YXJlYSA9IGVsZW1lbnQsIC8vL1xuICAgICAgICAgIHNjcm9sbFRvcCA9IHJpY2hUZXh0YXJlYS5nZXRTY3JvbGxUb3AoKSxcbiAgICAgICAgICBzY3JvbGxMZWZ0ID0gcmljaFRleHRhcmVhLmdldFNjcm9sbExlZnQoKTtcblxuICAgIHRoaXMuc2Nyb2xsUHJldHR5UHJpbnRlcihzY3JvbGxUb3AsIHNjcm9sbExlZnQpO1xuICB9XG5cbiAgdXBkYXRlKCkge1xuICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLmdldENvbnRlbnQoKTtcblxuICAgIHRoaXMucGx1Z2luLnVwZGF0ZShjb250ZW50KTtcblxuICAgIGNvbnN0IHRva2VucyA9IHRoaXMucGx1Z2luLmdldFRva2VucygpLFxuICAgICAgICAgIGd1dHRlcldpZHRoID0gdGhpcy51cGRhdGVQcmV0dHlQcmludGVyKHRva2Vucyk7XG5cbiAgICBpZiAoZ3V0dGVyV2lkdGggIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IGlubmVyQm91bmRzID0gdGhpcy5nZXRJbm5lckJvdW5kcyhndXR0ZXJXaWR0aCksXG4gICAgICAgICAgICByaWNoVGV4dGFyZWFCb3VuZHMgPSBpbm5lckJvdW5kczsgLy8vXG5cbiAgICAgIHRoaXMuc2V0UmljaFRleHRhcmVhQm91bmRzKHJpY2hUZXh0YXJlYUJvdW5kcyk7XG4gICAgfVxuICB9XG5cbiAgcmVzaXplKCkge1xuICAgIGxldCBpbm5lckJvdW5kcyxcbiAgICAgICAgZ3V0dGVyV2lkdGg7XG5cbiAgICBndXR0ZXJXaWR0aCA9IG51bGw7XG5cbiAgICBpbm5lckJvdW5kcyA9IHRoaXMuZ2V0SW5uZXJCb3VuZHMoZ3V0dGVyV2lkdGgpO1xuXG4gICAgY29uc3QgcHJldHR5UHJpbnRlckJvdW5kcyA9IGlubmVyQm91bmRzOyAgLy8vXG5cbiAgICB0aGlzLnNldFByZXR0eVByaW50ZXJCb3VuZHMocHJldHR5UHJpbnRlckJvdW5kcyk7XG5cbiAgICBndXR0ZXJXaWR0aCA9IHRoaXMucmVzaXplUHJldHR5UHJpbnRlcigpO1xuXG4gICAgaW5uZXJCb3VuZHMgPSB0aGlzLmdldElubmVyQm91bmRzKGd1dHRlcldpZHRoKTtcblxuICAgIGNvbnN0IHJpY2hUZXh0YXJlYUJvdW5kcyA9IGlubmVyQm91bmRzOyAvLy9cblxuICAgIHRoaXMuc2V0UmljaFRleHRhcmVhQm91bmRzKHJpY2hUZXh0YXJlYUJvdW5kcyk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgbGluZUhlaWdodCA9IHRoaXMuZ2V0TGluZUhlaWdodCgpLFxuICAgICAgICAgIHBhZGRpbmdUb3AgPSB0aGlzLmdldFBhZGRpbmdUb3AoKSxcbiAgICAgICAgICBwYWRkaW5nQm90dG9tID0gdGhpcy5nZXRQYWRkaW5nQm90dG9tKCksXG4gICAgICAgICAgYm9yZGVyVG9wV2lkdGggPSB0aGlzLmdldEJvcmRlclRvcFdpZHRoKCksXG4gICAgICAgICAgaW5pdGlhbExpbmVDb3VudCA9IHRoaXMuZ2V0SW5pdGlhbExpbmVDb3VudCgpLFxuICAgICAgICAgIGJvcmRlckJvdHRvbVdpZHRoID0gdGhpcy5nZXRCb3JkZXJCb3R0b21XaWR0aCgpLFxuICAgICAgICAgIHNjcm9sbGJhclRoaWNrbmVzcyA9IHRoaXMuZ2V0U2Nyb2xsYmFyVGhpY2tuZXNzKCksXG4gICAgICAgICAgaGVpZ2h0ID0gYm9yZGVyVG9wV2lkdGggKyBwYWRkaW5nVG9wICsgaW5pdGlhbExpbmVDb3VudCAqIGxpbmVIZWlnaHQgKyBwYWRkaW5nQm90dG9tICsgYm9yZGVyQm90dG9tV2lkdGggKyBzY3JvbGxiYXJUaGlja25lc3M7XG5cbiAgICB0aGlzLnNldEhlaWdodChoZWlnaHQpO1xuXG4gICAgdGhpcy5yZXNpemUoKTtcblxuICAgIHRoaXMudXBkYXRlKCk7XG4gIH1cblxuICBkaWRNb3VudCgpIHtcbiAgICBjb25zdCB7IGZpcmFDb2RlID0gREVGQVVMVF9GSVJBX0NPREUsIGRlZmVyUmVuZGVyID0gREVGQVVMVF9ERUZFUl9SRU5ERVIgfSA9IHRoaXMucHJvcGVydGllcztcblxuICAgIGlmIChmaXJhQ29kZSkge1xuICAgICAgdGhpcy5hZGRDbGFzcyhcImZpcmEtY29kZVwiKTtcbiAgICB9XG5cbiAgICBpZiAoZGVmZXJSZW5kZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgd2lsbFVubW91bnQoKSB7XG4gICAgY29uc3QgeyBmaXJhQ29kZSA9IERFRkFVTFRfRklSQV9DT0RFIH0gPSB0aGlzLnByb3BlcnRpZXM7XG5cbiAgICBpZiAoZmlyYUNvZGUpIHtcbiAgICAgIHRoaXMucmVtb3ZlQ2xhc3MoXCJmaXJhLWNvZGVcIik7XG4gICAgfVxuICB9XG5cbiAgY2hpbGRFbGVtZW50cygpIHtcbiAgICBjb25zdCB7IGhpZGRlbkd1dHRlciA9IERFRkFVTFRfSElEREVOX0dVVFRFUiwgaGlkZGVuU2Nyb2xsYmFycyA9IERFRkFVTFRfSElEREVOX1NDUk9MTEJBUlMsIGZhbmN5U2Nyb2xsYmFycyA9IERFRkFVTFRfRkFOQ1lfU0NST0xMQkFSUyB9ID0gdGhpcy5wcm9wZXJ0aWVzLFxuICAgICAgICAgIGNoYW5nZUhhbmRsZXIgPSB0aGlzLmNoYW5nZUhhbmRsZXIuYmluZCh0aGlzKSxcbiAgICAgICAgICBzY3JvbGxIYW5kbGVyID0gdGhpcy5zY3JvbGxIYW5kbGVyLmJpbmQodGhpcyksXG4gICAgICAgICAgc2Nyb2xsYmFyVGhpY2tuZXNzID0gdGhpcy5nZXRTY3JvbGxiYXJUaGlja25lc3MoKTtcblxuICAgIHJldHVybiAoW1xuXG4gICAgICA8UHJldHR5UHJpbnRlciBoaWRkZW5HdXR0ZXI9e2hpZGRlbkd1dHRlcn0gc2Nyb2xsYmFyVGhpY2tuZXNzPXtzY3JvbGxiYXJUaGlja25lc3N9IC8+LFxuICAgICAgPFJpY2hUZXh0YXJlYSBvbkNoYW5nZT17Y2hhbmdlSGFuZGxlcn0gb25TY3JvbGw9e3Njcm9sbEhhbmRsZXJ9IGhpZGRlblNjcm9sbGJhcnM9e2hpZGRlblNjcm9sbGJhcnN9IGZhbmN5U2Nyb2xsYmFycz17ZmFuY3lTY3JvbGxiYXJzfSBhY3RpdmUgLz5cblxuICAgIF0pO1xuICB9XG5cbiAgcGFyZW50Q29udGV4dCgpIHtcbiAgICBjb25zdCBnZXRQbHVnaW4gPSB0aGlzLmdldFBsdWdpbi5iaW5kKHRoaXMpLFxuICAgICAgICAgIGdldENvbnRlbnQgPSB0aGlzLmdldENvbnRlbnQuYmluZCh0aGlzKSxcbiAgICAgICAgICB1cGRhdGVZYXBwID0gdGhpcy51cGRhdGUuYmluZCh0aGlzKSwgIC8vL1xuICAgICAgICAgIHJlc2l6ZVlhcHAgPSB0aGlzLnJlc2l6ZS5iaW5kKHRoaXMpLCAgLy8vXG4gICAgICAgICAgc2V0WWFwcFdpZHRoID0gdGhpcy5zZXRXaWR0aC5iaW5kKHRoaXMpLCAgLy8vXG4gICAgICAgICAgc2V0WWFwcEhlaWdodCA9IHRoaXMuc2V0SGVpZ2h0LmJpbmQodGhpcyksICAvLy9cbiAgICAgICAgICBzZXRZYXBwTGV4ZXIgPSB0aGlzLnNldExleGVyLmJpbmQodGhpcyksICAvLy9cbiAgICAgICAgICBzZXRZYXBwUGFyc2VyID0gdGhpcy5zZXRQYXJzZXIuYmluZCh0aGlzKTsgIC8vL1xuXG4gICAgcmV0dXJuICh7XG4gICAgICBnZXRQbHVnaW4sXG4gICAgICBnZXRDb250ZW50LFxuICAgICAgdXBkYXRlWWFwcCxcbiAgICAgIHJlc2l6ZVlhcHAsXG4gICAgICBzZXRZYXBwV2lkdGgsXG4gICAgICBzZXRZYXBwSGVpZ2h0LFxuICAgICAgc2V0WWFwcExleGVyLFxuICAgICAgc2V0WWFwcFBhcnNlclxuICAgIH0pO1xuICB9XG5cbiAgaW5pdGlhbGlzZSgpIHtcbiAgICB0aGlzLmFzc2lnbkNvbnRleHQoKTtcblxuICAgIGNvbnN0IHsgY2hpbGRFbGVtZW50cywgZWRpdGFibGUgPSBERUZBVUxUX0VESVRBQkxFIH0gPSB0aGlzLnByb3BlcnRpZXMsXG4gICAgICAgICAgbGFuZ3VhZ2UgPSB0aGlzLnBsdWdpbi5nZXRMYW5ndWFnZSgpLFxuICAgICAgICAgIGNvbnRlbnQgPSBjb250ZW50RnJvbUNoaWxkRWxlbWVudHMoY2hpbGRFbGVtZW50cyksXG4gICAgICAgICAgcmVhZE9ubHkgPSAhZWRpdGFibGUsXG4gICAgICAgICAgc2Nyb2xsVG9wID0gMCwgIC8vL1xuICAgICAgICAgIHNjcm9sbExlZnQgPSAwOyAvLy9cblxuICAgIHRoaXMuc2V0TGFuZ3VhZ2UobGFuZ3VhZ2UpO1xuXG4gICAgdGhpcy5zY3JvbGxQcmV0dHlQcmludGVyKHNjcm9sbFRvcCwgc2Nyb2xsTGVmdCk7XG5cbiAgICB0aGlzLnNldFJpY2hUZXh0YXJlYUNvbnRlbnQoY29udGVudCk7XG5cbiAgICB0aGlzLnNldFJpY2hUZXh0YXJlYVJlYWRPbmx5KHJlYWRPbmx5KTtcblxuICAgIHRoaXMub25SZXNpemUoKGV2ZW50LCBlbGVtZW50KSA9PiB0aGlzLnJlc2l6ZSgpKTtcbiAgfVxuXG4gIHN0YXRpYyB0YWdOYW1lID0gXCJkaXZcIjtcblxuICBzdGF0aWMgZGVmYXVsdFByb3BlcnRpZXMgPSB7XG4gICAgY2xhc3NOYW1lOiBcInlhcHBcIlxuICB9O1xuXG4gIHN0YXRpYyBpZ25vcmVkUHJvcGVydGllcyA9IFtcbiAgICBcIlBsdWdpblwiLFxuICAgIFwibGFuZ3VhZ2VcIixcbiAgICBcImZpcmFDb2RlXCIsXG4gICAgXCJlZGl0YWJsZVwiLFxuICAgIFwiZGVmZXJSZW5kZXJcIixcbiAgICBcImhpZGRlbkd1dHRlclwiLFxuICAgIFwibm9TY3JvbGxiYXJzXCIsXG4gICAgXCJmYW5jeVNjcm9sbGJhcnNcIlxuICBdO1xuXG4gIHN0YXRpYyBmcm9tQ29udGVudChjb250ZW50LCBsYW5ndWFnZSwgUGx1Z2luLCBvcHRpb25zKSB7XG4gICAgY29uc3QgQ2xhc3MgPSBZYXBwLFxuICAgICAgICAgIHByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzRnJvbUNvbnRlbnRMYW5ndWFnZVBsdWdpbkFuZE9wdGlvbnMoY29udGVudCwgbGFuZ3VhZ2UsIFBsdWdpbiwgb3B0aW9ucyksXG4gICAgICAgICAgcGx1Z2luID0gcGx1Z2luRnJvbUxhbmd1YWdlQW5kUGx1Z2luKGxhbmd1YWdlLCBQbHVnaW4pLFxuICAgICAgICAgIHlhcHAgPSBFbGVtZW50LmZyb21DbGFzcyhDbGFzcywgcHJvcGVydGllcywgcGx1Z2luKTtcblxuICAgIHJldHVybiB5YXBwO1xuICB9XG5cbiAgc3RhdGljIGZyb21DbGFzcyhDbGFzcywgcHJvcGVydGllcykge1xuICAgIGNvbnN0IHsgbGFuZ3VhZ2UsIFBsdWdpbiB9ID0gcHJvcGVydGllcyxcbiAgICAgICAgICBwbHVnaW4gPSBwbHVnaW5Gcm9tTGFuZ3VhZ2VBbmRQbHVnaW4obGFuZ3VhZ2UsIFBsdWdpbiksXG4gICAgICAgICAgeWFwcCA9IEVsZW1lbnQuZnJvbUNsYXNzKENsYXNzLCBwcm9wZXJ0aWVzLCBwbHVnaW4pO1xuXG4gICAgcmV0dXJuIHlhcHA7XG4gIH1cbn1cblxuT2JqZWN0LmFzc2lnbihZYXBwLnByb3RvdHlwZSwgc3R5bGVNaXhpbnMpO1xuXG5leHBvcnQgZGVmYXVsdCB3aXRoU3R5bGUoWWFwcClgXG5cbiAgd2lkdGg6IDEwMCU7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICBib3JkZXI6IDFweCBzb2xpZDtcbiAgXG4gIGNvbG9yOiAke2NvbG91cn07XG4gIGNhcmV0LWNvbG9yOiAke2NhcmV0Q29sb3VyfTtcbiAgYm9yZGVyLWNvbG9yOiAke2JvcmRlckNvbG91cn07XG4gIGJhY2tncm91bmQtY29sb3I6ICR7YmFja2dyb3VuZENvbG91cn07XG5cbiAgZm9udC1zaXplOiAxM3B4O1xuICBsaW5lLWhlaWdodDogMjBweDtcbiAgZm9udC1mYW1pbHk6IFwiTWVubG9cIiwgXCJMdWNpZGEgU2FucyBUeXBld3JpdGVyXCIsIG1vbm9zcGFjZTtcbiAgdGV4dC1yZW5kZXJpbmc6IG9wdGltaXplTGVnaWJpbGl0eTtcbiAgZm9udC1mZWF0dXJlLXNldHRpbmdzOiBub3JtYWw7XG5cbiAgLmZpcmEtY29kZSB7XG5cbiAgICBmb250LXNpemU6IDEzcHg7XG4gICAgbGluZS1oZWlnaHQ6IDIwcHg7XG4gICAgZm9udC1mYW1pbHk6IFwiRmlyYSBDb2RlXCI7XG4gICAgdGV4dC1yZW5kZXJpbmc6IG9wdGltaXplTGVnaWJpbGl0eTtcbiAgICBmb250LWZlYXR1cmUtc2V0dGluZ3M6IFwiY2FsdFwiIDE7XG4gICAgXG4gIH1cblxuYDtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IHNwcmluZ1dvb2QgPSBcIiNmOGY2ZjFcIjtcbmV4cG9ydCBjb25zdCBib25qb3VyID0gXCIjZTVlMGUxXCI7XG5leHBvcnQgY29uc3QgZ2FpbnNib3JvdWdoID0gXCIjZDVkOGQyXCI7XG5leHBvcnQgY29uc3Qgc3RhcmR1c3QgPSBcIiM5ZjlmOWNcIjtcbmV4cG9ydCBjb25zdCBodXJyaWNhbmUgPSBcIiM5MDg5ODlcIjtcbmV4cG9ydCBjb25zdCBzdG9ybUR1c3QgPSBcIiM2NDY0NjNcIjtcbmV4cG9ydCBjb25zdCBlbXBlcm9yID0gXCIjNTE1MTUwXCI7XG5leHBvcnQgY29uc3QgdHVhdGFyYSA9IFwiIzM2MzUzNFwiO1xuZXhwb3J0IGNvbnN0IHdvb2RzbW9rZSA9IFwiIzBjMGQwZlwiO1xuXG5leHBvcnQgY29uc3QgY2l0cm9uID0gXCIjODZiOTIzXCI7XG5leHBvcnQgY29uc3Qgc3VzaGkgPSBcIiM3ZmE4MmZcIjtcbmV4cG9ydCBjb25zdCBvbGl2ZURyYWIgPSBcIiM2Mzg4MjlcIjtcbmV4cG9ydCBjb25zdCByaWZsZUdyZWVuID0gXCIjNDE0ODMzXCI7XG5leHBvcnQgY29uc3QgbG9nQ2FiaW4gPSBcIiMyNDMwMWRcIjtcbmV4cG9ydCBjb25zdCBibGFja09saXZlID0gXCIjMWMyNDEyXCI7XG5leHBvcnQgY29uc3QgaHVudGVyR3JlZW4gPSBcIiMxNjFkMTBcIjtcblxuZXhwb3J0IGNvbnN0IGNhZGV0Qmx1ZSA9IFwiIzVmOWVhMFwiO1xuZXhwb3J0IGNvbnN0IGhhdmVsb2NrQmx1ZSA9IFwiIzVCOERlMVwiO1xuXG5leHBvcnQgY29uc3QgcG9tZWdyYW5hdGUgPSBcIiNmNTI5MjlcIjtcbmV4cG9ydCBjb25zdCByYXp6bWF0YXp6ID0gXCIjZTMyNTZiXCI7XG5leHBvcnQgY29uc3QgZmxhbWluZ28gPSBcIiNmMzRiNDRcIjtcbmV4cG9ydCBjb25zdCB0YWhpdGkgPSBcIiNGNThBMEFcIjtcbmV4cG9ydCBjb25zdCBlcXVhdG9yID0gXCIjZTRhQzVlXCI7XG5cbmV4cG9ydCBjb25zdCBwb3J0aWNhID0gXCIjZjdlNzVmXCI7XG5leHBvcnQgY29uc3QgY2VsZXJ5ID0gXCIjYmNiODUyXCI7XG5leHBvcnQgY29uc3Qgc3ljYW1vcmUgPSBcIiM5MDhkMzlcIjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgY2FkZXRCbHVlLCBjaXRyb24gfSBmcm9tIFwiLi4vLi4vY29sb3Vyc1wiO1xuXG5leHBvcnQgY29uc3QgbmFtZUNvbG91ciA9IGNhZGV0Qmx1ZTtcblxuZXhwb3J0IGNvbnN0IGF0dHJpYnV0ZUNvbG91ciA9IGNpdHJvbjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgbmFtZUNvbG91ciwgYXR0cmlidXRlQ29sb3VyIH0gZnJvbSBcIi4uLy4uL3NjaGVtZS9zeW50YXgveG1sXCI7XG5cbmNvbnN0IHhtbFN5bnRheFN0eWxlID0gYFxuXG4gIC54bWwuc3ludGF4ID4gLm5hbWUgeyBjb2xvcjogJHtuYW1lQ29sb3VyfTsgfVxuXG4gIC54bWwuc3ludGF4ID4gLmF0dHJpYnV0ZSB7IGNvbG9yOiAke2F0dHJpYnV0ZUNvbG91cn07IH1cblxuYDtcblxuZXhwb3J0IGRlZmF1bHQgeG1sU3ludGF4U3R5bGU7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGNhZGV0Qmx1ZSB9IGZyb20gXCIuLi8uLi9jb2xvdXJzXCI7XG5cbmV4cG9ydCBjb25zdCBudW1iZXJDb2xvdXIgPSBjYWRldEJsdWU7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IG51bWJlckNvbG91ciB9IGZyb20gXCIuLi8uLi9zY2hlbWUvc3ludGF4L2pzb25cIjtcblxuY29uc3QganNvblN5bnRheFN0eWxlID0gYFxuXG4gIC5qc29uLnN5bnRheCA+IC5udW1iZXIgeyBjb2xvcjogJHtudW1iZXJDb2xvdXJ9OyB9XG5cbmA7XG5cbmV4cG9ydCBkZWZhdWx0IGpzb25TeW50YXhTdHlsZTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3ByaW5nV29vZCwgcmF6em1hdGF6eiwgaHVycmljYW5lLCBwb3J0aWNhIH0gZnJvbSBcIi4uLy4uL2NvbG91cnNcIjtcblxuZXhwb3J0IGNvbnN0IGNvbG91ciA9IHNwcmluZ1dvb2Q7XG5cbmV4cG9ydCBjb25zdCBrZXl3b3JkQ29sb3VyID0gcmF6em1hdGF6ejtcblxuZXhwb3J0IGNvbnN0IGNvbW1lbnRDb2xvdXIgPSBodXJyaWNhbmU7XG5cbmV4cG9ydCBjb25zdCBzdHJpbmdMaXRlcmFsQ29sb3VyID0gcG9ydGljYTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgcG9tZWdyYW5hdGUgfSBmcm9tIFwiLi4vLi4vY29sb3Vyc1wiO1xuaW1wb3J0IHsgY29sb3VyLCBrZXl3b3JkQ29sb3VyLCBjb21tZW50Q29sb3VyLCBzdHJpbmdMaXRlcmFsQ29sb3VyIH0gZnJvbSBcIi4uLy4uL3NjaGVtZS9zeW50YXgvZGVmYXVsdFwiO1xuXG5jb25zdCBkZWZhdWx0U3ludGF4U3R5bGUgPSBgXG5cbiAgLnN5bnRheCAqIHsgXG4gICAgZm9udC1zaXplOiBpbmhlcml0O1xuICAgIGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xuICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0O1xuICAgIHRleHQtcmVuZGVyaW5nOiBpbmhlcml0O1xuICAgIGZvbnQtZmVhdHVyZS1zZXR0aW5nczogaW5oZXJpdDtcbiAgfVxuICBcbiAgLnN5bnRheCwgXG4gIC5zeW50YXggPiAqIHsgXG4gICAgY29sb3I6ICR7Y29sb3VyfTsgXG4gIH1cbiAgICBcbiAgLnN5bnRheCA+IC5rZXl3b3JkIHsgY29sb3I6ICR7a2V5d29yZENvbG91cn07IH1cbiAgXG4gIC5zeW50YXggPiAuY29tbWVudCB7IGNvbG9yOiAke2NvbW1lbnRDb2xvdXJ9OyB9XG4gIFxuICAuc3ludGF4ID4gLnN0cmluZy1saXRlcmFsIHsgY29sb3I6ICR7c3RyaW5nTGl0ZXJhbENvbG91cn07IH0gXG4gIFxuICAuc3ludGF4ID4gLmVycm9yIHtcbiAgICBiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0LXg7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogYm90dG9tO1xuICAgIHRleHQtZGVjb3JhdGlvbi1saW5lOiB1bmRlcmxpbmU7XG4gICAgdGV4dC1kZWNvcmF0aW9uLWNvbG9yOiAke3BvbWVncmFuYXRlfTtcbiAgfSBcblxuYDtcblxuZXhwb3J0IGRlZmF1bHQgZGVmYXVsdFN5bnRheFN0eWxlO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcHJpbmdXb29kLCBjYWRldEJsdWUsIHRhaGl0aSB9IGZyb20gXCIuLi8uLi9jb2xvdXJzXCI7XG5cbmV4cG9ydCBjb25zdCBqc3hDb2xvdXIgPSBzcHJpbmdXb29kO1xuXG5leHBvcnQgY29uc3QgYXJndW1lbnRDb2xvdXIgPSB0YWhpdGk7XG5cbmV4cG9ydCBjb25zdCB2YXJpYWJsZUNvbG91ciA9IGNhZGV0Qmx1ZTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsganN4Q29sb3VyLCBhcmd1bWVudENvbG91ciwgdmFyaWFibGVDb2xvdXIgfSBmcm9tIFwiLi4vLi4vc2NoZW1lL3N5bnRheC9qYXZhU2NyaXB0XCI7XG5cbmNvbnN0IGphdmFTY3JpcHRTeW50YXhTdHlsZSA9IGBcblxuICAuamF2YXNjcmlwdC5zeW50YXggPiAuanN4IHsgXG4gICAgY29sb3I6ICR7anN4Q29sb3VyfTtcbiAgICBmb250LXdlaWdodDogYm9sZDsgXG4gIH1cblxuICAuamF2YXNjcmlwdC5zeW50YXggPiAudmFyaWFibGUgeyBjb2xvcjogJHt2YXJpYWJsZUNvbG91cn07IH1cblxuICAuamF2YXNjcmlwdC5zeW50YXggPiAuYXJndW1lbnQgeyBjb2xvcjogJHthcmd1bWVudENvbG91cn07IH1cblxuYDtcblxuZXhwb3J0IGRlZmF1bHQgamF2YVNjcmlwdFN5bnRheFN0eWxlO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeG1sU3ludGF4U3R5bGUgZnJvbSBcIi4uL3N0eWxlL3N5bnRheC94bWxcIjtcbmltcG9ydCBqc29uU3ludGF4U3R5bGUgZnJvbSBcIi4uL3N0eWxlL3N5bnRheC9qc29uXCI7XG5pbXBvcnQgZGVmYXVsdFN5bnRheFN0eWxlIGZyb20gXCIuLi9zdHlsZS9zeW50YXgvZGVmYXVsdFwiO1xuaW1wb3J0IGphdmFTY3JpcHRTeW50YXhTdHlsZSBmcm9tIFwiLi4vc3R5bGUvc3ludGF4L2phdmFTY3JpcHRcIjtcblxuY29uc3Qgc3ludGF4U3R5bGUgPSBgXG4gICAgXG4gICR7ZGVmYXVsdFN5bnRheFN0eWxlfVxuICBcbiAgJHt4bWxTeW50YXhTdHlsZX1cbiAgXG4gICR7anNvblN5bnRheFN0eWxlfVxuICBcbiAgJHtqYXZhU2NyaXB0U3ludGF4U3R5bGV9XG5cbmA7XG5cbmV4cG9ydCBkZWZhdWx0IHN5bnRheFN0eWxlO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBmaXJhQ29kZVN0eWxlID0gKGhvc3QpID0+IGBcblxuICBAZm9udC1mYWNlIHtcbiAgICBmb250LWZhbWlseTogXCJGaXJhIENvZGVcIjtcbiAgICBzcmM6IHVybChcIiR7aG9zdH0vY3NzL3dvZmYyL0ZpcmFDb2RlLUxpZ2h0LndvZmYyXCIpIGZvcm1hdChcIndvZmYyXCIpLFxuICAgIHVybChcIiR7aG9zdH0vY3NzL3dvZmYyL0ZpcmFDb2RlLUxpZ2h0LndvZmZcIikgZm9ybWF0KFwid29mZlwiKTtcbiAgICBmb250LXdlaWdodDogMzAwO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgfVxuICBcbiAgQGZvbnQtZmFjZSB7XG4gICAgZm9udC1mYW1pbHk6IFwiRmlyYSBDb2RlXCI7XG4gICAgc3JjOiB1cmwoXCIke2hvc3R9L2Nzcy93b2ZmMi9GaXJhQ29kZS1SZWd1bGFyLndvZmYyXCIpIGZvcm1hdChcIndvZmYyXCIpLFxuICAgIHVybChcIiR7aG9zdH0vY3NzL3dvZmYyL0ZpcmFDb2RlLVJlZ3VsYXIud29mZlwiKSBmb3JtYXQoXCJ3b2ZmXCIpO1xuICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICB9XG4gIFxuICBAZm9udC1mYWNlIHtcbiAgICBmb250LWZhbWlseTogXCJGaXJhIENvZGVcIjtcbiAgICBzcmM6IHVybChcIiR7aG9zdH0vY3NzL3dvZmYyL0ZpcmFDb2RlLU1lZGl1bS53b2ZmMlwiKSBmb3JtYXQoXCJ3b2ZmMlwiKSxcbiAgICB1cmwoXCIke2hvc3R9L2Nzcy93b2ZmMi9GaXJhQ29kZS1NZWRpdW0ud29mZlwiKSBmb3JtYXQoXCJ3b2ZmXCIpO1xuICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICB9XG4gIFxuICBAZm9udC1mYWNlIHtcbiAgICBmb250LWZhbWlseTogXCJGaXJhIENvZGVcIjtcbiAgICBzcmM6IHVybChcIiR7aG9zdH0vY3NzL3dvZmYyL0ZpcmFDb2RlLUJvbGQud29mZjJcIikgZm9ybWF0KFwid29mZjJcIiksXG4gICAgdXJsKFwiJHtob3N0fS9jc3Mvd29mZjIvRmlyYUNvZGUtQm9sZC53b2ZmXCIpIGZvcm1hdChcIndvZmZcIik7XG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gIH1cblxuYDtcblxuZXhwb3J0IGRlZmF1bHQgZmlyYUNvZGVTdHlsZTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHdpdGhTdHlsZSBmcm9tIFwiZWFzeS13aXRoLXN0eWxlXCI7ICAvLy9cblxuaW1wb3J0IHN5bnRheFN0eWxlIGZyb20gXCIuL3N0eWxlL3N5bnRheFwiXG5pbXBvcnQgZmlyYUNvZGVTdHlsZSBmcm9tIFwiLi9zdHlsZS9maXJhQ29kZVwiXG5cbmltcG9ydCB7IERFRkFVTFRfSE9TVCB9IGZyb20gXCIuL2RlZmF1bHRzXCI7XG5cbmNvbnN0IHsgcmVuZGVyU3R5bGUsIHJlbmRlclN0eWxlcyB9ID0gd2l0aFN0eWxlO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyWWFwcFN0eWxlcyhob3N0ID0gREVGQVVMVF9IT1NUKSB7XG4gIHJlbmRlclN0eWxlcygpO1xuXG4gIHJlbmRlclN0eWxlKHN5bnRheFN0eWxlKTtcblxuICByZW5kZXJTdHlsZShmaXJhQ29kZVN0eWxlKGhvc3QpKTtcbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCBZYXBwIGZyb20gXCIuL3lhcHBcIjtcblxuZXhwb3J0IGRlZmF1bHQgWWFwcDtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBZYXBwTGV4ZXIgfSBmcm9tIFwiLi9sZXhlci95YXBwXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFlhcHBQYXJzZXIgfSBmcm9tIFwiLi9wYXJzZXIveWFwcFwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBzeW50YXhTdHlsZSB9IGZyb20gXCIuL3N0eWxlL3N5bnRheFwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBjb2xvdXJTY2hlbWUgfSBmcm9tIFwiLi9zY2hlbWUvY29sb3VyXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGZpcmFDb2RlU3R5bGUgfSBmcm9tIFwiLi9zdHlsZS9maXJhQ29kZVwiO1xuXG5leHBvcnQgeyByZW5kZXJZYXBwU3R5bGVzIH0gZnJvbSBcIi4vcmVuZGVyWWFwcFN0eWxlc1wiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgQ1VSU09SID0gXCJjdXJzb3JcIjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IEFVVE9fQ1VSU09SID0gXCJhdXRvXCI7XG5leHBvcnQgY29uc3QgUE9JTlRFUl9DVVJTT1IgPSBcInBvaW50ZXJcIjtcbmV4cG9ydCBjb25zdCBDT0xfUkVTSVpFX0NVUlNPUiA9IFwiY29sLXJlc2l6ZVwiO1xuZXhwb3J0IGNvbnN0IFJPV19SRVNJWkVfQ1VSU09SID0gXCJyb3ctcmVzaXplXCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEJvZHkgfSBmcm9tIFwiZWFzeVwiO1xuXG5pbXBvcnQgeyBDVVJTT1IgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IEFVVE9fQ1VSU09SLCBQT0lOVEVSX0NVUlNPUiwgQ09MX1JFU0laRV9DVVJTT1IsIFJPV19SRVNJWkVfQ1VSU09SIH0gZnJvbSBcIi4vY3Vyc29yc1wiO1xuXG5jb25zdCBib2R5ID0gbmV3IEJvZHkoKTtcblxubGV0IHByZXZpb3VzQ3Vyc29yOyAgLy8vXG5cbmV4cG9ydCBmdW5jdGlvbiByZXNldEN1cnNvcigpIHtcbiAgc2V0Q3Vyc29yKHByZXZpb3VzQ3Vyc29yKTsgLy8vXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwb2ludGVyQ3Vyc29yKCkge1xuICBjb25zdCBjdXJyZW50Q3Vyc29yID0gZ2V0Q3VycmVudEN1cnNvcigpO1xuXG4gIGlmIChjdXJyZW50Q3Vyc29yICE9PSBQT0lOVEVSX0NVUlNPUikge1xuICAgIHByZXZpb3VzQ3Vyc29yID0gY3VycmVudEN1cnNvcjsgLy8vXG5cbiAgICBzZXRDdXJzb3IoUE9JTlRFUl9DVVJTT1IpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByb3dSZXNpemVDdXJzb3IoKSB7XG4gIGNvbnN0IGN1cnJlbnRDdXJzb3IgPSBnZXRDdXJyZW50Q3Vyc29yKCk7XG5cbiAgaWYgKGN1cnJlbnRDdXJzb3IgIT09IFJPV19SRVNJWkVfQ1VSU09SKSB7XG4gICAgcHJldmlvdXNDdXJzb3IgPSBjdXJyZW50Q3Vyc29yOyAvLy9cblxuICAgIHNldEN1cnNvcihST1dfUkVTSVpFX0NVUlNPUik7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbHVtblJlc2l6ZUN1cnNvcigpIHtcbiAgY29uc3QgY3VycmVudEN1cnNvciA9IGdldEN1cnJlbnRDdXJzb3IoKTtcblxuICBpZiAoY3VycmVudEN1cnNvciAhPT0gQ09MX1JFU0laRV9DVVJTT1IpIHtcbiAgICBwcmV2aW91c0N1cnNvciA9IGN1cnJlbnRDdXJzb3I7IC8vL1xuXG4gICAgc2V0Q3Vyc29yKENPTF9SRVNJWkVfQ1VSU09SKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIHJlc2V0Q3Vyc29yLFxuICBwb2ludGVyQ3Vyc29yLFxuICByb3dSZXNpemVDdXJzb3IsXG4gIGNvbHVtblJlc2l6ZUN1cnNvclxufVxuXG5mdW5jdGlvbiBzZXRDdXJzb3IoY3Vyc29yKSB7XG4gIGNvbnN0IGNzcyA9IHtcbiAgICBjdXJzb3JcbiAgfTtcblxuICBib2R5LmNzcyhjc3MpO1xufVxuXG5mdW5jdGlvbiBnZXRDdXJyZW50Q3Vyc29yKCkge1xuICBjb25zdCBjdXJyZW50Q3Vyc29yID0gYm9keS5jc3MoQ1VSU09SKSB8fCBBVVRPX0NVUlNPUjtcblxuICByZXR1cm4gY3VycmVudEN1cnNvcjtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHdpdGhTdHlsZSBmcm9tIFwiZWFzeS13aXRoLXN0eWxlXCI7ICAvLy9cblxuaW1wb3J0IHsgRWxlbWVudCB9IGZyb20gXCJlYXN5XCI7XG5cbmNsYXNzIFJvd0RpdiBleHRlbmRzIEVsZW1lbnQge1xuICBzdGF0aWMgdGFnTmFtZSA9IFwiZGl2XCI7XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIGNsYXNzTmFtZTogXCJyb3dcIlxuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCB3aXRoU3R5bGUoUm93RGl2KWBcblxuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWdyb3c6IDE7XG5cbmA7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB3aXRoU3R5bGUgZnJvbSBcImVhc3ktd2l0aC1zdHlsZVwiOyAgLy8vXG5cbmltcG9ydCB7IEVsZW1lbnQgfSBmcm9tIFwiZWFzeVwiO1xuXG5jbGFzcyBSb3dzRGl2IGV4dGVuZHMgRWxlbWVudCB7XG4gIHN0YXRpYyB0YWdOYW1lID0gXCJkaXZcIjtcblxuICBzdGF0aWMgZGVmYXVsdFByb3BlcnRpZXMgPSB7XG4gICAgY2xhc3NOYW1lOiBcInJvd3NcIlxuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCB3aXRoU3R5bGUoUm93c0RpdilgXG5cbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1ncm93OiAxO1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuXG5gO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgd2l0aFN0eWxlIGZyb20gXCJlYXN5LXdpdGgtc3R5bGVcIjsgIC8vL1xuXG5pbXBvcnQgeyBFbGVtZW50IH0gZnJvbSBcImVhc3lcIjtcblxuY2xhc3MgQ29sdW1uRGl2IGV4dGVuZHMgRWxlbWVudCB7XG4gIHN0YXRpYyB0YWdOYW1lID0gXCJkaXZcIjtcblxuICBzdGF0aWMgZGVmYXVsdFByb3BlcnRpZXMgPSB7XG4gICAgY2xhc3NOYW1lOiBcImNvbHVtblwiXG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhTdHlsZShDb2x1bW5EaXYpYFxuXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZ3JvdzogMTtcblxuYDtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHdpdGhTdHlsZSBmcm9tIFwiZWFzeS13aXRoLXN0eWxlXCI7ICAvLy9cblxuaW1wb3J0IHsgRWxlbWVudCB9IGZyb20gXCJlYXN5XCI7XG5cbmNsYXNzIENvbHVtbnNEaXYgZXh0ZW5kcyBFbGVtZW50IHtcbiAgc3RhdGljIHRhZ05hbWUgPSBcImRpdlwiO1xuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcGVydGllcyA9IHtcbiAgICBjbGFzc05hbWU6IFwiY29sdW1uc1wiXG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhTdHlsZShDb2x1bW5zRGl2KWBcblxuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWdyb3c6IDE7XG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XG5cbmA7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBTVEFSVF9EUkFHR0lOR19ERUxBWSA9IDE3NTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIG1vdXNlVG9wRnJvbUV2ZW50KGV2ZW50KSB7XG4gIGNvbnN0IHsgcGFnZVkgfSA9IGV2ZW50LFxuICAgICAgICBtb3VzZVRvcCA9IHBhZ2VZOyAvLy9cblxuICByZXR1cm4gbW91c2VUb3A7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtb3VzZUxlZnRGcm9tRXZlbnQoZXZlbnQpIHtcbiAgY29uc3QgeyBwYWdlWCB9ID0gZXZlbnQsXG4gICAgICAgIG1vdXNlTGVmdCA9IHBhZ2VYOyAgLy8vXG5cbiAgcmV0dXJuIG1vdXNlTGVmdDtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgd2luZG93LCBidXR0b25zLCBldmVudFR5cGVzIH0gZnJvbSBcImVhc3lcIjtcbmltcG9ydCB7IGtleUNvZGVzLCBhc3luY2hyb25vdXNVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCIgO1xuXG5pbXBvcnQgeyBTVEFSVF9EUkFHR0lOR19ERUxBWSB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IG1vdXNlVG9wRnJvbUV2ZW50LCBtb3VzZUxlZnRGcm9tRXZlbnQgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2V2ZW50XCI7XG5cbmNvbnN0IHsgZm9yRWFjaCB9ID0gYXN5bmNocm9ub3VzVXRpbGl0aWVzLFxuICAgICAgeyBFU0NBUEVfS0VZQ09ERSB9ID0ga2V5Q29kZXMsXG4gICAgICB7IExFRlRfTU9VU0VfQlVUVE9OIH0gPSBidXR0b25zLFxuICAgICAgeyBCTFVSX0VWRU5UX1RZUEUsIERSQUdfRVZFTlRfVFlQRSwgU1RPUF9EUkFHX0VWRU5UX1RZUEUsIFNUQVJUX0RSQUdfRVZFTlRfVFlQRSB9ID0gZXZlbnRUeXBlc1xuXG5jb25zdCBkcmFnRWxlbWVudCA9IG51bGw7XG5cbk9iamVjdC5hc3NpZ24oZ2xvYmFsVGhpcywge1xuICBkcmFnRWxlbWVudFxufSk7XG5cbmZ1bmN0aW9uIG9uRHJhZyhkcmFnSGFuZGxlciwgZWxlbWVudCkge1xuICBjb25zdCBldmVudFR5cGUgPSBEUkFHX0VWRU5UX1RZUEUsXG4gICAgICAgIGhhbmRsZXIgPSBkcmFnSGFuZGxlcjsgIC8vL1xuXG4gIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpO1xufVxuXG5mdW5jdGlvbiBvZmZEcmFnKGRyYWdIYW5kbGVyLCBlbGVtZW50KSB7XG4gIGNvbnN0IGV2ZW50VHlwZSA9IERSQUdfRVZFTlRfVFlQRSxcbiAgICAgICAgaGFuZGxlciA9IGRyYWdIYW5kbGVyOyAgLy8vXG5cbiAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgZWxlbWVudCk7XG59XG5cbmZ1bmN0aW9uIG9uU3RvcERyYWcoc3RvcERyYWdIYW5kbGVyLCBlbGVtZW50KSB7XG4gIGNvbnN0IGV2ZW50VHlwZSA9IFNUT1BfRFJBR19FVkVOVF9UWVBFLFxuICAgICAgICBoYW5kbGVyID0gc3RvcERyYWdIYW5kbGVyOyAgLy8vXG5cbiAgdGhpcy5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgZWxlbWVudCk7XG59XG5cbmZ1bmN0aW9uIG9mZlN0b3BEcmFnKHN0b3BEcmFnSGFuZGxlciwgZWxlbWVudCkge1xuICBjb25zdCBldmVudFR5cGUgPSBTVE9QX0RSQUdfRVZFTlRfVFlQRSxcbiAgICAgICAgaGFuZGxlciA9IHN0b3BEcmFnSGFuZGxlcjsgIC8vL1xuXG4gIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpO1xufVxuXG5mdW5jdGlvbiBvblN0YXJ0RHJhZyhzdGFydERyYWdIYW5kbGVyLCBlbGVtZW50KSB7XG4gIGNvbnN0IGV2ZW50VHlwZSA9IFNUQVJUX0RSQUdfRVZFTlRfVFlQRSxcbiAgICAgICAgaGFuZGxlciA9IHN0YXJ0RHJhZ0hhbmRsZXI7ICAvLy9cblxuICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KTtcbn1cblxuZnVuY3Rpb24gb2ZmU3RhcnREcmFnKHN0YXJ0RHJhZ0hhbmRsZXIsIGVsZW1lbnQpIHtcbiAgY29uc3QgZXZlbnRUeXBlID0gU1RBUlRfRFJBR19FVkVOVF9UWVBFLFxuICAgICAgICBoYW5kbGVyID0gc3RhcnREcmFnSGFuZGxlcjsgIC8vL1xuXG4gIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpO1xufVxuXG5mdW5jdGlvbiBlbmFibGVEcmFnKCkge1xuICBjb25zdCB7IG9uRHJhZywgb25TdG9wRHJhZywgb25TdGFydERyYWcgfSA9IHRoaXMucHJvcGVydGllcyxcbiAgICAgICAgZHJhZ0hhbmRsZXIgPSBvbkRyYWcsIC8vL1xuICAgICAgICBzdG9wRHJhZ0hhbmRsZXIgPSBvblN0b3BEcmFnLCAvLy9cbiAgICAgICAgc3RhcnREcmFnSGFuZGxlciA9IG9uU3RhcnREcmFnLCAvLy9cbiAgICAgICAgdGltZW91dCA9IG51bGwsXG4gICAgICAgIHRvcE9mZnNldCA9IG51bGwsXG4gICAgICAgIGxlZnRPZmZzZXQgPSBudWxsLFxuICAgICAgICBzdGFydE1vdXNlVG9wID0gbnVsbCxcbiAgICAgICAgc3RhcnRNb3VzZUxlZnQgPSBudWxsO1xuXG4gIGRyYWdIYW5kbGVyICYmIHRoaXMub25EcmFnKGRyYWdIYW5kbGVyKTtcbiAgc3RvcERyYWdIYW5kbGVyICYmIHRoaXMub25TdG9wRHJhZyhzdG9wRHJhZ0hhbmRsZXIpO1xuICBzdGFydERyYWdIYW5kbGVyICYmIHRoaXMub25TdGFydERyYWcoc3RhcnREcmFnSGFuZGxlcik7XG5cbiAgdGhpcy5vbk1vdXNlRG93bihtb3VzZURvd25IYW5kbGVyLCB0aGlzKTtcblxuICB0aGlzLnNldFN0YXRlKHtcbiAgICB0aW1lb3V0LFxuICAgIHRvcE9mZnNldCxcbiAgICBsZWZ0T2Zmc2V0LFxuICAgIHN0YXJ0TW91c2VUb3AsXG4gICAgc3RhcnRNb3VzZUxlZnRcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGRpc2FibGVEcmFnKCkge1xuICBjb25zdCB7IG9uRHJhZywgb25TdG9wRHJhZywgb25TdGFydERyYWcgfSA9IHRoaXMucHJvcGVydGllcyxcbiAgICAgICAgZHJhZ0hhbmRsZXIgPSBvbkRyYWcsIC8vL1xuICAgICAgICBzdG9wRHJhZ0hhbmRsZXIgPSBvblN0b3BEcmFnLCAvLy9cbiAgICAgICAgc3RhcnREcmFnSGFuZGxlciA9IG9uU3RhcnREcmFnOyAvLy9cblxuICBkcmFnSGFuZGxlciAmJiB0aGlzLm9mZkRyYWcoZHJhZ0hhbmRsZXIpO1xuICBzdG9wRHJhZ0hhbmRsZXIgJiYgdGhpcy5vZmZTdG9wRHJhZyhzdG9wRHJhZ0hhbmRsZXIpO1xuICBzdGFydERyYWdIYW5kbGVyICYmIHRoaXMub2ZmU3RhcnREcmFnKHN0YXJ0RHJhZ0hhbmRsZXIpO1xuXG4gIHRoaXMub2ZmTW91c2VEb3duKG1vdXNlRG93bkhhbmRsZXIsIHRoaXMpO1xufVxuXG5mdW5jdGlvbiBpc0RyYWdnaW5nKCkge1xuICBjb25zdCBkcmFnZ2luZyA9IHRoaXMuaGFzQ2xhc3MoXCJkcmFnZ2luZ1wiKTtcblxuICByZXR1cm4gZHJhZ2dpbmc7XG59XG5cbmZ1bmN0aW9uIHN0YXJ0V2FpdGluZ1RvRHJhZyhtb3VzZVRvcCwgbW91c2VMZWZ0KSB7XG4gIGxldCB0aW1lb3V0ID0gdGhpcy5nZXRUaW1lb3V0KCk7XG5cbiAgaWYgKHRpbWVvdXQgPT09IG51bGwpIHtcbiAgICB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnJlc2V0VGltZW91dCgpO1xuXG4gICAgICB0aGlzLnN0YXJ0RHJhZyhtb3VzZVRvcCwgbW91c2VMZWZ0KTtcbiAgICB9LCBTVEFSVF9EUkFHR0lOR19ERUxBWSk7XG5cbiAgICB0aGlzLnVwZGF0ZVRpbWVvdXQodGltZW91dCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc3RvcFdhaXRpbmdUb0RyYWcoKSB7XG4gIGNvbnN0IHRpbWVvdXQgPSB0aGlzLmdldFRpbWVvdXQoKTtcblxuICBpZiAodGltZW91dCAhPT0gbnVsbCkge1xuICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcblxuICAgIHRoaXMucmVzZXRUaW1lb3V0KCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc3RhcnREcmFnKG1vdXNlVG9wLCBtb3VzZUxlZnQpIHtcbiAgY29uc3QgYm91bmRzID0gdGhpcy5nZXRCb3VuZHMoKSxcbiAgICAgICAgZXZlbnRUeXBlID0gU1RBUlRfRFJBR19FVkVOVF9UWVBFLFxuICAgICAgICBib3VuZHNUb3AgPSBib3VuZHMuZ2V0VG9wKCksXG4gICAgICAgIGJvdW5kc0xlZnQgPSBib3VuZHMuZ2V0TGVmdCgpLFxuICAgICAgICBib3VuZHNSaWdodCA9IGJvdW5kcy5nZXRSaWdodCgpLFxuICAgICAgICBib3VuZHNCb3R0b20gPSBib3VuZHMuZ2V0Qm90dG9tKCksXG4gICAgICAgIGJvdW5kc1dpZHRoID0gYm91bmRzUmlnaHQgLSBib3VuZHNMZWZ0LFxuICAgICAgICBib3VuZHNIZWlnaHQgPSBib3VuZHNCb3R0b20gLSBib3VuZHNUb3AsXG4gICAgICAgIHRvcE9mZnNldCA9IE1hdGguZmxvb3IoYm91bmRzSGVpZ2h0IC8gMiksXG4gICAgICAgIGxlZnRPZmZzZXQgPSBNYXRoLmZsb29yKGJvdW5kc1dpZHRoIC8gMiksXG4gICAgICAgIGRyYWdFbGVtZW50ID0gdGhpcywgLy8vXG4gICAgICAgIHN0YXJ0TW91c2VUb3AgPSBtb3VzZVRvcCwgLy8vXG4gICAgICAgIHN0YXJ0TW91c2VMZWZ0ID0gbW91c2VMZWZ0OyAvLy9cblxuICB3aW5kb3cub25LZXlEb3duKGtleURvd25IYW5kbGVyLCB0aGlzKTtcblxuICB3aW5kb3cub25Nb3VzZU1vdmUobW91c2VNb3ZlSGFuZGxlciwgdGhpcyk7XG5cbiAgdGhpcy5hZGRDbGFzcyhcImRyYWdnaW5nXCIpO1xuXG4gIE9iamVjdC5hc3NpZ24oZ2xvYmFsVGhpcywge1xuICAgIGRyYWdFbGVtZW50XG4gIH0pO1xuXG4gIHRoaXMuc2V0VG9wT2Zmc2V0KHRvcE9mZnNldCk7XG5cbiAgdGhpcy5zZXRMZWZ0T2Zmc2V0KGxlZnRPZmZzZXQpO1xuXG4gIHRoaXMuc2V0U3RhcnRNb3VzZVRvcChzdGFydE1vdXNlVG9wKTtcblxuICB0aGlzLnNldFN0YXJ0TW91c2VMZWZ0KHN0YXJ0TW91c2VMZWZ0KTtcblxuICB0aGlzLmNhbGxIYW5kbGVycyhldmVudFR5cGUpO1xuXG4gIHRoaXMuZHJhZyhtb3VzZVRvcCwgbW91c2VMZWZ0KTtcbn1cblxuZnVuY3Rpb24gc3RvcERyYWcoYWJvcnRlZCkge1xuICBjb25zdCB7IGRyb3BFbGVtZW50IH0gPSBnbG9iYWxUaGlzLFxuICAgICAgICBldmVudFR5cGUgPSBTVE9QX0RSQUdfRVZFTlRfVFlQRTtcblxuICB3aW5kb3cub2ZmS2V5RG93bihrZXlEb3duSGFuZGxlciwgdGhpcyk7XG5cbiAgd2luZG93Lm9mZk1vdXNlTW92ZShtb3VzZU1vdmVIYW5kbGVyLCB0aGlzKTtcblxuICBjb25zdCBkb25lID0gKCkgPT4ge1xuICAgIHRoaXMuY2FsbEhhbmRsZXJzQXN5bmMoZXZlbnRUeXBlLCBkcm9wRWxlbWVudCwgYWJvcnRlZCwgKCkgPT4ge1xuICAgICAgY29uc3QgZHJhZ0VsZW1lbnQgPSBudWxsO1xuXG4gICAgICBPYmplY3QuYXNzaWduKGdsb2JhbFRoaXMsIHtcbiAgICAgICAgZHJhZ0VsZW1lbnRcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLnJlbW92ZUNsYXNzKFwiZHJhZ2dpbmdcIik7XG4gICAgfSk7XG4gIH1cblxuICBpZiAoZHJvcEVsZW1lbnQgIT09IG51bGwpIHtcbiAgICBjb25zdCBkcmFnRWxlbWVudCA9IHRoaXM7IC8vL1xuXG4gICAgZHJvcEVsZW1lbnQuZHJvcChkcmFnRWxlbWVudCwgYWJvcnRlZCwgZG9uZSk7XG4gIH0gZWxzZSB7XG4gICAgZG9uZSgpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGRyYWcobW91c2VUb3AsIG1vdXNlTGVmdCkge1xuICBjb25zdCBldmVudFR5cGUgPSBEUkFHX0VWRU5UX1RZUEUsXG4gICAgICAgIHNjcm9sbFRvcCA9IHdpbmRvdy5nZXRTY3JvbGxUb3AoKSxcbiAgICAgICAgc2Nyb2xsTGVmdCA9IHdpbmRvdy5nZXRTY3JvbGxMZWZ0KCksXG4gICAgICAgIHRvcE9mZnNldCA9IHRoaXMuZ2V0VG9wT2Zmc2V0KCksXG4gICAgICAgIGxlZnRPZmZzZXQgPSB0aGlzLmdldExlZnRPZmZzZXQoKSxcbiAgICAgICAgc3RhcnRNb3VzZVRvcCA9IHRoaXMuZ2V0U3RhcnRNb3VzZVRvcCgpLFxuICAgICAgICBzdGFydE1vdXNlTGVmdCA9IHRoaXMuZ2V0U3RhcnRNb3VzZUxlZnQoKSxcbiAgICAgICAgcmVsYXRpdmVNb3VzZVRvcCA9IG1vdXNlVG9wIC0gc3RhcnRNb3VzZVRvcCxcbiAgICAgICAgcmVsYXRpdmVNb3VzZUxlZnQgPSBtb3VzZUxlZnQgLSBzdGFydE1vdXNlTGVmdDtcblxuICBsZXQgdG9wID0gc3RhcnRNb3VzZVRvcCArIHJlbGF0aXZlTW91c2VUb3AgLSB0b3BPZmZzZXQgLSBzY3JvbGxUb3AsXG4gICAgICBsZWZ0ID0gc3RhcnRNb3VzZUxlZnQgKyByZWxhdGl2ZU1vdXNlTGVmdCAtIGxlZnRPZmZzZXQgLSBzY3JvbGxMZWZ0O1xuXG4gIHRvcCA9IGAke3RvcH1weGA7IC8vL1xuICBsZWZ0ID0gYCR7bGVmdH1weGA7IC8vL1xuXG4gIGNvbnN0IGNzcyA9IHtcbiAgICB0b3AsXG4gICAgbGVmdFxuICB9O1xuXG4gIHRoaXMuY3NzKGNzcyk7XG5cbiAgdGhpcy5jYWxsSGFuZGxlcnMoZXZlbnRUeXBlLCByZWxhdGl2ZU1vdXNlVG9wLCByZWxhdGl2ZU1vdXNlTGVmdCk7XG59XG5cbmZ1bmN0aW9uIGdldFRpbWVvdXQoKSB7XG4gIGNvbnN0IHN0YXRlID0gdGhpcy5nZXRTdGF0ZSgpLFxuICAgICAgICB7IHRpbWVvdXQgfSA9IHN0YXRlO1xuXG4gIHJldHVybiB0aW1lb3V0O1xufVxuXG5mdW5jdGlvbiByZXNldFRpbWVvdXQoKSB7XG4gIGNvbnN0IHRpbWVvdXQgPSBudWxsO1xuXG4gIHRoaXMudXBkYXRlVGltZW91dCh0aW1lb3V0KTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlVGltZW91dCh0aW1lb3V0KSB7XG4gIHRoaXMudXBkYXRlU3RhdGUoe1xuICAgIHRpbWVvdXRcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGdldFRvcE9mZnNldCgpIHtcbiAgY29uc3Qgc3RhdGUgPSB0aGlzLmdldFN0YXRlKCksXG4gICAgICAgIHsgdG9wT2Zmc2V0IH0gPSBzdGF0ZTtcblxuICByZXR1cm4gdG9wT2Zmc2V0O1xufVxuXG5mdW5jdGlvbiBnZXRMZWZ0T2Zmc2V0KCkge1xuICBjb25zdCBzdGF0ZSA9IHRoaXMuZ2V0U3RhdGUoKSxcbiAgICAgICAgeyBsZWZ0T2Zmc2V0IH0gPSBzdGF0ZTtcblxuICByZXR1cm4gbGVmdE9mZnNldDtcbn1cblxuZnVuY3Rpb24gZ2V0U3RhcnRNb3VzZVRvcCgpIHtcbiAgY29uc3Qgc3RhdGUgPSB0aGlzLmdldFN0YXRlKCksXG4gICAgICB7IHN0YXJ0TW91c2VUb3AgfSA9IHN0YXRlO1xuXG4gIHJldHVybiBzdGFydE1vdXNlVG9wO1xufVxuXG5mdW5jdGlvbiBnZXRTdGFydE1vdXNlTGVmdCgpIHtcbiAgY29uc3Qgc3RhdGUgPSB0aGlzLmdldFN0YXRlKCksXG4gICAgICB7IHN0YXJ0TW91c2VMZWZ0IH0gPSBzdGF0ZTtcblxuICByZXR1cm4gc3RhcnRNb3VzZUxlZnQ7XG59XG5cbmZ1bmN0aW9uIHNldFRvcE9mZnNldCh0b3BPZmZzZXQpIHtcbiAgdGhpcy51cGRhdGVTdGF0ZSh7XG4gICAgdG9wT2Zmc2V0XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBzZXRMZWZ0T2Zmc2V0KGxlZnRPZmZzZXQpIHtcbiAgdGhpcy51cGRhdGVTdGF0ZSh7XG4gICAgbGVmdE9mZnNldFxuICB9KTtcbn1cblxuZnVuY3Rpb24gc2V0U3RhcnRNb3VzZVRvcChzdGFydE1vdXNlVG9wKSB7XG4gIHRoaXMudXBkYXRlU3RhdGUoe1xuICAgIHN0YXJ0TW91c2VUb3BcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHNldFN0YXJ0TW91c2VMZWZ0KHN0YXJ0TW91c2VMZWZ0KSB7XG4gIHRoaXMudXBkYXRlU3RhdGUoe1xuICAgIHN0YXJ0TW91c2VMZWZ0XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBjYWxsSGFuZGxlcnMoZXZlbnRUeXBlLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHtcbiAgY29uc3QgZXZlbnRMaXN0ZW5lcnMgPSB0aGlzLmZpbmRFdmVudExpc3RlbmVycyhldmVudFR5cGUpO1xuXG4gIGV2ZW50TGlzdGVuZXJzLmZvckVhY2goKGV2ZW50TGlzdGVuZXIpID0+IHtcbiAgICBjb25zdCB7IGhhbmRsZXIsIGVsZW1lbnQ6IGhhbmRsZXJFbGVtZW50IH0gPSBldmVudExpc3RlbmVyLFxuICAgICAgICAgIGVsZW1lbnQgPSB0aGlzOyAvLy9cblxuICAgIGhhbmRsZXIuY2FsbChoYW5kbGVyRWxlbWVudCwgLi4ucmVtYWluaW5nQXJndW1lbnRzLCBlbGVtZW50KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGNhbGxIYW5kbGVyc0FzeW5jKGV2ZW50VHlwZSwgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XG4gIGNvbnN0IGRvbmUgPSByZW1haW5pbmdBcmd1bWVudHMucG9wKCksICAvLy9cbiAgICAgICAgZXZlbnRMaXN0ZW5lcnMgPSB0aGlzLmZpbmRFdmVudExpc3RlbmVycyhldmVudFR5cGUpO1xuXG4gIGZvckVhY2goZXZlbnRMaXN0ZW5lcnMsIChldmVudExpc3RlbmVyLCBuZXh0KSA9PiB7XG4gICAgY29uc3QgeyBoYW5kbGVyLCBlbGVtZW50OiBoYW5kbGVyRWxlbWVudCB9ID0gZXZlbnRMaXN0ZW5lcixcbiAgICAgICAgICBlbGVtZW50ID0gdGhpcywgLy8vXG4gICAgICAgICAgZG9uZSA9IG5leHQ7ICAvLy9cblxuICAgIGhhbmRsZXIuY2FsbChoYW5kbGVyRWxlbWVudCwgLi4ucmVtYWluaW5nQXJndW1lbnRzLCBlbGVtZW50LCBkb25lKTtcbiAgfSwgZG9uZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgb25EcmFnLFxuICBvZmZEcmFnLFxuICBvblN0b3BEcmFnLFxuICBvZmZTdG9wRHJhZyxcbiAgb25TdGFydERyYWcsXG4gIG9mZlN0YXJ0RHJhZyxcbiAgZW5hYmxlRHJhZyxcbiAgZGlzYWJsZURyYWcsXG4gIGlzRHJhZ2dpbmcsXG4gIHN0YXJ0V2FpdGluZ1RvRHJhZyxcbiAgc3RvcFdhaXRpbmdUb0RyYWcsXG4gIHN0YXJ0RHJhZyxcbiAgc3RvcERyYWcsXG4gIGRyYWcsXG4gIGdldFRpbWVvdXQsXG4gIHJlc2V0VGltZW91dCxcbiAgdXBkYXRlVGltZW91dCxcbiAgZ2V0VG9wT2Zmc2V0LFxuICBnZXRMZWZ0T2Zmc2V0LFxuICBnZXRTdGFydE1vdXNlVG9wLFxuICBnZXRTdGFydE1vdXNlTGVmdCxcbiAgc2V0VG9wT2Zmc2V0LFxuICBzZXRMZWZ0T2Zmc2V0LFxuICBzZXRTdGFydE1vdXNlVG9wLFxuICBzZXRTdGFydE1vdXNlTGVmdCxcbiAgY2FsbEhhbmRsZXJzLFxuICBjYWxsSGFuZGxlcnNBc3luY1xufTtcblxuZnVuY3Rpb24ga2V5RG93bkhhbmRsZXIoZXZlbnQsIGVsZW1lbnQpIHtcbiAgY29uc3QgeyBrZXlDb2RlIH0gPSBldmVudCxcbiAgICAgICAgZXNjYXBlS2V5ID0gKGtleUNvZGUgPT09IEVTQ0FQRV9LRVlDT0RFKSxcbiAgICAgICAgYWJvcnRlZCA9IHRydWU7XG5cbiAgaWYgKGVzY2FwZUtleSkge1xuICAgIHRoaXMuc3RvcERyYWcoYWJvcnRlZCk7XG5cbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBtb3VzZVVwSGFuZGxlcihldmVudCwgZWxlbWVudCkge1xuICBjb25zdCBkcmFnZ2luZyA9IHRoaXMuaXNEcmFnZ2luZygpLFxuICAgICAgICBhYm9ydGVkID0gZmFsc2U7XG5cbiAgZHJhZ2dpbmcgP1xuICAgIHRoaXMuc3RvcERyYWcoYWJvcnRlZCkgOlxuICAgICAgdGhpcy5zdG9wV2FpdGluZ1RvRHJhZygpO1xuXG4gIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gIHdpbmRvdy5vZmYoQkxVUl9FVkVOVF9UWVBFLCBtb3VzZVVwSGFuZGxlciwgdGhpcyk7ICAvLy9cblxuICB3aW5kb3cub2ZmTW91c2VVcChtb3VzZVVwSGFuZGxlciwgdGhpcyk7XG59XG5cbmZ1bmN0aW9uIG1vdXNlRG93bkhhbmRsZXIoZXZlbnQsIGVsZW1lbnQpIHtcbiAgY29uc3QgeyBidXR0b24gfSA9IGV2ZW50O1xuXG4gIGlmIChidXR0b24gPT09IExFRlRfTU9VU0VfQlVUVE9OKSB7XG4gICAgY29uc3QgZHJhZ2dpbmcgPSB0aGlzLmlzRHJhZ2dpbmcoKTtcblxuICAgIGlmICghZHJhZ2dpbmcpIHtcbiAgICAgIGNvbnN0IG1vdXNlVG9wID0gbW91c2VUb3BGcm9tRXZlbnQoZXZlbnQpLFxuICAgICAgICAgICAgbW91c2VMZWZ0ID0gbW91c2VMZWZ0RnJvbUV2ZW50KGV2ZW50KTtcblxuICAgICAgdGhpcy5zdGFydFdhaXRpbmdUb0RyYWcobW91c2VUb3AsIG1vdXNlTGVmdCk7XG4gICAgfVxuICB9XG5cbiAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgd2luZG93Lm9uKEJMVVJfRVZFTlRfVFlQRSwgbW91c2VVcEhhbmRsZXIsIHRoaXMpOyAvLy9cblxuICB3aW5kb3cub25Nb3VzZVVwKG1vdXNlVXBIYW5kbGVyLCB0aGlzKTtcbn1cblxuZnVuY3Rpb24gbW91c2VNb3ZlSGFuZGxlcihldmVudCwgZWxlbWVudCkge1xuICBjb25zdCBkcmFnZ2luZyA9IHRoaXMuaXNEcmFnZ2luZygpO1xuXG4gIGlmIChkcmFnZ2luZykge1xuICAgIGNvbnN0IG1vdXNlVG9wID0gbW91c2VUb3BGcm9tRXZlbnQoZXZlbnQpLFxuICAgICAgICAgIG1vdXNlTGVmdCA9IG1vdXNlTGVmdEZyb21FdmVudChldmVudCk7XG5cbiAgICB0aGlzLmRyYWcobW91c2VUb3AsIG1vdXNlTGVmdCk7XG4gIH1cblxuICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IFNUQVJUX0RSQUdHSU5HX0RFTEFZID0gMTc1O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBldmVudFR5cGVzIH0gZnJvbSBcImVhc3lcIjtcbmltcG9ydCB7IGFzeW5jaHJvbm91c1V0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIiA7XG5cbmNvbnN0IHsgZm9yRWFjaCB9ID0gYXN5bmNocm9ub3VzVXRpbGl0aWVzLFxuICAgICAgeyBEUk9QX0VWRU5UX1RZUEUsIERSQUdfT1VUX0VWRU5UX1RZUEUsIERSQUdfT1ZFUl9FVkVOVF9UWVBFIH0gPSBldmVudFR5cGVzO1xuXG5jb25zdCBkcm9wRWxlbWVudCA9IG51bGw7XG5cbk9iamVjdC5hc3NpZ24oZ2xvYmFsVGhpcywge1xuICBkcm9wRWxlbWVudFxufSk7XG5cbmZ1bmN0aW9uIGRyb3AoZHJhZ0VsZW1lbnQsIGFib3J0ZWQsIGRvbmUpIHtcbiAgY29uc3QgZXZlbnRUeXBlID0gRFJPUF9FVkVOVF9UWVBFO1xuXG4gIHRoaXMuY2FsbEhhbmRsZXJzQXN5bmMoZXZlbnRUeXBlLCBkcmFnRWxlbWVudCwgYWJvcnRlZCwgZG9uZSk7XG59XG5cbmZ1bmN0aW9uIGRyYWdPdXQoZHJhZ0VsZW1lbnQpIHtcbiAgY29uc3QgZXZlbnRUeXBlID0gRFJBR19PVVRfRVZFTlRfVFlQRTtcblxuICB0aGlzLmNhbGxIYW5kbGVycyhldmVudFR5cGUsIGRyYWdFbGVtZW50KTtcbn1cblxuZnVuY3Rpb24gZHJhZ092ZXIoKSB7XG4gIGNvbnN0IGV2ZW50VHlwZSA9IERSQUdfT1ZFUl9FVkVOVF9UWVBFO1xuXG4gIHRoaXMuY2FsbEhhbmRsZXJzKGV2ZW50VHlwZSwgZHJhZ0VsZW1lbnQpO1xufVxuXG5mdW5jdGlvbiBvbkRyb3AoZHJvcEhhbmRsZXIsIGVsZW1lbnQpIHtcbiAgY29uc3QgZXZlbnRUeXBlID0gRFJPUF9FVkVOVF9UWVBFLFxuICAgICAgICBoYW5kbGVyID0gZHJvcEhhbmRsZXI7ICAvLy9cblxuICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KTtcbn1cblxuZnVuY3Rpb24gb2ZmRHJvcChkcm9wSGFuZGxlciwgZWxlbWVudCkge1xuICBjb25zdCBldmVudFR5cGUgPSBEUk9QX0VWRU5UX1RZUEUsXG4gICAgICAgIGhhbmRsZXIgPSBkcm9wSGFuZGxlcjsgIC8vL1xuXG4gIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpO1xufVxuXG5mdW5jdGlvbiBvbkRyYWdPdXQoZHJhZ091dEhhbmRsZXIsIGVsZW1lbnQpIHtcbiAgY29uc3QgZXZlbnRUeXBlID0gRFJBR19PVVRfRVZFTlRfVFlQRSxcbiAgICAgICAgaGFuZGxlciA9IGRyYWdPdXRIYW5kbGVyOyAgLy8vXG5cbiAgdGhpcy5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgZWxlbWVudCk7XG59XG5cbmZ1bmN0aW9uIG9mZkRyYWdPdXQoZHJhZ091dEhhbmRsZXIsIGVsZW1lbnQpIHtcbiAgY29uc3QgZXZlbnRUeXBlID0gRFJBR19PVVRfRVZFTlRfVFlQRSxcbiAgICAgICAgaGFuZGxlciA9IGRyYWdPdXRIYW5kbGVyOyAgLy8vXG5cbiAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgZWxlbWVudCk7XG59XG5cbmZ1bmN0aW9uIG9uRHJhZ092ZXIoZHJhZ092ZXJIYW5kbGVyLCBlbGVtZW50KSB7XG4gIGNvbnN0IGV2ZW50VHlwZSA9IERSQUdfT1ZFUl9FVkVOVF9UWVBFLFxuICAgICAgICBoYW5kbGVyID0gZHJhZ092ZXJIYW5kbGVyOyAgLy8vXG5cbiAgdGhpcy5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgZWxlbWVudCk7XG59XG5cbmZ1bmN0aW9uIG9mZkRyYWdPdmVyKGRyYWdPdmVySGFuZGxlciwgZWxlbWVudCkge1xuICBjb25zdCBldmVudFR5cGUgPSBEUkFHX09WRVJfRVZFTlRfVFlQRSxcbiAgICAgICAgaGFuZGxlciA9IGRyYWdPdmVySGFuZGxlcjsgIC8vL1xuXG4gIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpO1xufVxuXG5mdW5jdGlvbiBlbmFibGVEcm9wKCkge1xuICBjb25zdCB7IG9uRHJvcCwgb25EcmFnT3V0LCBvbkRyYWdPdmVyIH0gPSB0aGlzLnByb3BlcnRpZXMsXG4gICAgICAgIGRyb3BIYW5kbGVyID0gb25Ecm9wLCAvLy9cbiAgICAgICAgZHJhZ091dEhhbmRsZXIgPSBvbkRyYWdPdXQsIC8vL1xuICAgICAgICBkcmFnT3ZlckhhbmRsZXIgPSBvbkRyYWdPdmVyOyAvLy9cblxuICBkcm9wSGFuZGxlciAmJiB0aGlzLm9uRHJvcChkcm9wSGFuZGxlcik7XG4gIGRyYWdPdXRIYW5kbGVyICYmIHRoaXMub25EcmFnT3V0KGRyYWdPdXRIYW5kbGVyKTtcbiAgZHJhZ092ZXJIYW5kbGVyICYmIHRoaXMub25EcmFnT3ZlcihkcmFnT3ZlckhhbmRsZXIpO1xuXG4gIHRoaXMub25Nb3VzZU91dChtb3VzZU91dEhhbmRsZXIsIHRoaXMpO1xuICB0aGlzLm9uTW91c2VPdmVyKG1vdXNlT3ZlckhhbmRsZXIsIHRoaXMpO1xufVxuXG5mdW5jdGlvbiBkaXNhYmxlRHJvcCgpIHtcbiAgY29uc3QgeyBvbkRyb3AsIG9uRHJhZ091dCwgb25EcmFnT3ZlciB9ID0gdGhpcy5wcm9wZXJ0aWVzLFxuICAgICAgICBkcm9wSGFuZGxlciA9IG9uRHJvcCwgLy8vXG4gICAgICAgIGRyYWdPdXRIYW5kbGVyID0gb25EcmFnT3V0LCAvLy9cbiAgICAgICAgZHJhZ092ZXJIYW5kbGVyID0gb25EcmFnT3ZlcjsgLy8vXG5cbiAgZHJvcEhhbmRsZXIgJiYgdGhpcy5vZmZEcm9wKGRyb3BIYW5kbGVyKTtcbiAgZHJhZ091dEhhbmRsZXIgJiYgdGhpcy5vZmZEcmFnT3V0KGRyYWdPdXRIYW5kbGVyKTtcbiAgZHJhZ092ZXJIYW5kbGVyICYmIHRoaXMub2ZmRHJhZ092ZXIoZHJhZ092ZXJIYW5kbGVyKTtcblxuICB0aGlzLm9mZk1vdXNlT3V0KG1vdXNlT3V0SGFuZGxlciwgdGhpcyk7XG4gIHRoaXMub2ZmTW91c2VPdmVyKG1vdXNlT3ZlckhhbmRsZXIsIHRoaXMpO1xufVxuXG5mdW5jdGlvbiBjYWxsSGFuZGxlcnMoZXZlbnRUeXBlLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHtcbiAgY29uc3QgZXZlbnRMaXN0ZW5lcnMgPSB0aGlzLmZpbmRFdmVudExpc3RlbmVycyhldmVudFR5cGUpO1xuXG4gIGV2ZW50TGlzdGVuZXJzLmZvckVhY2goKGV2ZW50TGlzdGVuZXIpID0+IHtcbiAgICBjb25zdCB7IGhhbmRsZXIsIGVsZW1lbnQ6IGhhbmRsZXJFbGVtZW50IH0gPSBldmVudExpc3RlbmVyLFxuICAgICAgICAgIGVsZW1lbnQgPSB0aGlzOyAvLy9cblxuICAgIGhhbmRsZXIuY2FsbChoYW5kbGVyRWxlbWVudCwgLi4ucmVtYWluaW5nQXJndW1lbnRzLCBlbGVtZW50KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGNhbGxIYW5kbGVyc0FzeW5jKGV2ZW50VHlwZSwgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XG4gIGNvbnN0IGRvbmUgPSByZW1haW5pbmdBcmd1bWVudHMucG9wKCksICAvLy9cbiAgICAgICAgZXZlbnRMaXN0ZW5lcnMgPSB0aGlzLmZpbmRFdmVudExpc3RlbmVycyhldmVudFR5cGUpO1xuXG4gIGZvckVhY2goZXZlbnRMaXN0ZW5lcnMsIChldmVudExpc3RlbmVyLCBuZXh0KSA9PiB7XG4gICAgY29uc3QgeyBoYW5kbGVyLCBlbGVtZW50OiBoYW5kbGVyRWxlbWVudCB9ID0gZXZlbnRMaXN0ZW5lcixcbiAgICAgICAgICBlbGVtZW50ID0gdGhpcywgLy8vXG4gICAgICAgICAgZG9uZSA9IG5leHQ7ICAvLy9cblxuICAgIGhhbmRsZXIuY2FsbChoYW5kbGVyRWxlbWVudCwgLi4ucmVtYWluaW5nQXJndW1lbnRzLCBlbGVtZW50LCBkb25lKTtcbiAgfSwgZG9uZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZHJvcCxcbiAgZHJhZ091dCxcbiAgZHJhZ092ZXIsXG4gIG9uRHJvcCxcbiAgb2ZmRHJvcCxcbiAgb25EcmFnT3V0LFxuICBvZmZEcmFnT3V0LFxuICBvbkRyYWdPdmVyLFxuICBvZmZEcmFnT3ZlcixcbiAgZW5hYmxlRHJvcCxcbiAgZGlzYWJsZURyb3AsXG4gIGNhbGxIYW5kbGVycyxcbiAgY2FsbEhhbmRsZXJzQXN5bmNcbn1cblxuZnVuY3Rpb24gbW91c2VPdXRIYW5kbGVyKGV2ZW50LCBlbGVtZW50KSB7XG4gIGNvbnN0IHsgZHJhZ0VsZW1lbnQgfSA9IGdsb2JhbFRoaXM7XG5cbiAgaWYgKGRyYWdFbGVtZW50ICE9PSBudWxsKSB7XG4gICAgY29uc3QgZHJvcEVsZW1lbnQgPSBudWxsOyAvLy9cblxuICAgIE9iamVjdC5hc3NpZ24oZ2xvYmFsVGhpcywge1xuICAgICAgZHJvcEVsZW1lbnRcbiAgICB9KTtcblxuICAgIHRoaXMuZHJhZ091dChkcmFnRWxlbWVudCk7XG4gIH1cblxuICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbn1cblxuZnVuY3Rpb24gbW91c2VPdmVySGFuZGxlcihldmVudCwgZWxlbWVudCkge1xuICBjb25zdCB7IGRyYWdFbGVtZW50IH0gPSBnbG9iYWxUaGlzO1xuXG4gIGlmIChkcmFnRWxlbWVudCAhPT0gbnVsbCkge1xuICAgIGNvbnN0IGRyb3BFbGVtZW50ID0gdGhpczsgLy8vXG5cbiAgICBPYmplY3QuYXNzaWduKGdsb2JhbFRoaXMsIHtcbiAgICAgIGRyb3BFbGVtZW50XG4gICAgfSk7XG5cbiAgICB0aGlzLmRyYWdPdmVyKGRyYWdFbGVtZW50KTtcbiAgfVxuXG4gIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgU1RBUlRfRFJBR0dJTkdfREVMQVkgPSAxNzU7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB3aXRoU3R5bGUgZnJvbSBcImVhc3ktd2l0aC1zdHlsZVwiO1xuXG5pbXBvcnQgeyBFbGVtZW50IH0gZnJvbSBcImVhc3lcIjtcblxuaW1wb3J0IGRyYWdNaXhpbnMgZnJvbSBcIi4uL21peGlucy9kcmFnXCI7XG5cbmNsYXNzIERyYWdFbGVtZW50IGV4dGVuZHMgRWxlbWVudCB7XG4gIGRpZE1vdW50KCkge1xuICAgIHRoaXMuZW5hYmxlRHJhZygpO1xuICB9XG5cbiAgd2lsbFVubW91bnQoKSB7XG4gICAgdGhpcy5kaXNhYmxlRHJhZygpO1xuICB9XG5cbiAgc3RhdGljIGlnbm9yZWRQcm9wZXJ0aWVzID0gW1xuICAgIFwib25EcmFnXCIsXG4gICAgXCJvblN0YXJ0RHJhZ1wiLFxuICAgIFwib2ZmU3RhcnREcmFnXCJcbiAgXTtcbn1cblxuT2JqZWN0LmFzc2lnbihEcmFnRWxlbWVudC5wcm90b3R5cGUsIGRyYWdNaXhpbnMpO1xuXG5leHBvcnQgZGVmYXVsdCB3aXRoU3R5bGUoRHJhZ0VsZW1lbnQpYFxuXG4gIC5kcmFnZ2luZyB7XG4gICAgei1pbmRleDogMTtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIH1cbiAgXG5gO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBFbGVtZW50IH0gZnJvbSBcImVhc3lcIjtcblxuaW1wb3J0IGRyb3BNaXhpbnMgZnJvbSBcIi4uL21peGlucy9kcm9wXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERyb3BFbGVtZW50IGV4dGVuZHMgRWxlbWVudCB7XG4gIGRpZE1vdW50KCkge1xuICAgIHRoaXMuZW5hYmxlRHJvcCgpO1xuICB9XG5cbiAgd2lsbFVubW91bnQoKSB7XG4gICAgdGhpcy5kaXNhYmxlRHJvcCgpO1xuICB9XG5cbiAgc3RhdGljIGlnbm9yZWRQcm9wZXJ0aWVzID0gW1xuICAgIFwib25Ecm9wXCIsXG4gICAgXCJvbkRyYWdPdXRcIixcbiAgICBcIm9uRHJhZ092ZXJcIlxuICBdO1xufVxuXG5PYmplY3QuYXNzaWduKERyb3BFbGVtZW50LnByb3RvdHlwZSwgZHJvcE1peGlucyk7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgZHJhZ01peGlucyB9IGZyb20gXCIuL21peGlucy9kcmFnXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGRyb3BNaXhpbnMgfSBmcm9tIFwiLi9taXhpbnMvZHJvcFwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBEcmFnRWxlbWVudCB9IGZyb20gXCIuL2VsZW1lbnQvZHJhZ1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBEcm9wRWxlbWVudCB9IGZyb20gXCIuL2VsZW1lbnQvZHJvcFwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgd2l0aFN0eWxlIGZyb20gXCJlYXN5LXdpdGgtc3R5bGVcIjsgIC8vL1xuXG5pbXBvcnQgeyBFbGVtZW50IH0gZnJvbSBcImVhc3lcIjtcblxuY2xhc3MgU2l6ZWFibGVEaXYgZXh0ZW5kcyBFbGVtZW50IHtcbiAgc3RhdGljIHRhZ05hbWUgPSBcImRpdlwiO1xuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcGVydGllcyA9IHtcbiAgICBjbGFzc05hbWU6IFwic2l6ZWFibGVcIlxuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCB3aXRoU3R5bGUoU2l6ZWFibGVEaXYpYFxuXG4gIGRpc3BsYXk6IGZsZXg7XG4gIFxuYDtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHdpdGhTdHlsZSBmcm9tIFwiZWFzeS13aXRoLXN0eWxlXCI7ICAvLy9cblxuaW1wb3J0IHsgRWxlbWVudCB9IGZyb20gXCJlYXN5XCI7XG5cbmNsYXNzIFNpemVhYmxlU2VjdGlvbiBleHRlbmRzIEVsZW1lbnQge1xuICBzdGF0aWMgdGFnTmFtZSA9IFwic2VjdGlvblwiO1xuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcGVydGllcyA9IHtcbiAgICBjbGFzc05hbWU6IFwic2l6ZWFibGVcIlxuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCB3aXRoU3R5bGUoU2l6ZWFibGVTZWN0aW9uKWBcblxuICBkaXNwbGF5OiBmbGV4O1xuICBcbmA7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB3aXRoU3R5bGUgZnJvbSBcImVhc3ktd2l0aC1zdHlsZVwiOyAgLy8vXG5cbmltcG9ydCB7IEVsZW1lbnQgfSBmcm9tIFwiZWFzeVwiO1xuaW1wb3J0IHsgZHJhZ01peGlucyB9IGZyb20gXCJlYXN5LWRyYWctYW5kLWRyb3BcIjtcblxuaW1wb3J0IFNpemVhYmxlRGl2IGZyb20gXCIuLi9kaXYvc2l6ZWFibGVcIjtcbmltcG9ydCBTaXplYWJsZVNlY3Rpb24gZnJvbSBcIi4uL3NlY3Rpb24vc2l6ZWFibGVcIjtcblxuaW1wb3J0IHsgcmVzZXRDdXJzb3IgfSBmcm9tIFwiLi4vY3Vyc29yXCI7XG5cbmNsYXNzIFNwbGl0dGVyRGl2IGV4dGVuZHMgRWxlbWVudCB7XG4gIG1vdXNlT3V0SGFuZGxlcihldmVudCwgZWxlbWVudCkge1xuICAgIHJlc2V0Q3Vyc29yKCk7XG4gIH1cblxuICBzdG9wRHJhZ0hhbmRsZXIoZHJvcEVsZW1lbnQsIGFib3J0ZWQsIGVsZW1lbnQsIGRvbmUpIHtcbiAgICByZXNldEN1cnNvcigpO1xuXG4gICAgZG9uZSgpO1xuICB9XG5cbiAgZ2V0U2l6ZWFibGVFbGVtZW50KCkge1xuICAgIGxldCBzaXplYWJsZUVsZW1lbnQ7XG5cbiAgICBjb25zdCBuZXh0U2libGluZ0VsZW1lbnQgPSB0aGlzLmdldE5leHRTaWJsaW5nRWxlbWVudCgpLFxuICAgICAgICAgIHByZXZpb3VzU2libGluZ0VsZW1lbnQgPSB0aGlzLmdldFByZXZpb3VzU2libGluZ0VsZW1lbnQoKSxcbiAgICAgICAgICBuZXh0U2libGluZ0VsZW1lbnRTaXplYWJsZUVsZW1lbnQgPSBpc0VsZW1lbnRTaXplYWJsZUVsZW1lbnQobmV4dFNpYmxpbmdFbGVtZW50KSxcbiAgICAgICAgICBwcmV2aW91c1NpYmxpbmdFbGVtZW50U2l6ZWFibGVFbGVtZW50ID0gaXNFbGVtZW50U2l6ZWFibGVFbGVtZW50KHByZXZpb3VzU2libGluZ0VsZW1lbnQpO1xuXG4gICAgaWYgKG5leHRTaWJsaW5nRWxlbWVudFNpemVhYmxlRWxlbWVudCkge1xuICAgICAgc2l6ZWFibGVFbGVtZW50ID0gbmV4dFNpYmxpbmdFbGVtZW50OyAvLy9cbiAgICB9XG5cbiAgICBpZiAocHJldmlvdXNTaWJsaW5nRWxlbWVudFNpemVhYmxlRWxlbWVudCkge1xuICAgICAgc2l6ZWFibGVFbGVtZW50ID0gcHJldmlvdXNTaWJsaW5nRWxlbWVudDsgLy8vXG4gICAgfVxuXG4gICAgcmV0dXJuIHNpemVhYmxlRWxlbWVudDtcbiAgfVxuXG4gIGdldERpcmVjdGlvbigpIHtcbiAgICBsZXQgZGlyZWN0aW9uO1xuXG4gICAgY29uc3QgbmV4dFNpYmxpbmdFbGVtZW50ID0gdGhpcy5nZXROZXh0U2libGluZ0VsZW1lbnQoKSxcbiAgICAgICAgICBwcmV2aW91c1NpYmxpbmdFbGVtZW50ID0gdGhpcy5nZXRQcmV2aW91c1NpYmxpbmdFbGVtZW50KCksXG4gICAgICAgICAgbmV4dFNpYmxpbmdFbGVtZW50U2l6ZWFibGVFbGVtZW50ID0gaXNFbGVtZW50U2l6ZWFibGVFbGVtZW50KG5leHRTaWJsaW5nRWxlbWVudCksXG4gICAgICAgICAgcHJldmlvdXNTaWJsaW5nRWxlbWVudFNpemVhYmxlRWxlbWVudCA9IGlzRWxlbWVudFNpemVhYmxlRWxlbWVudChwcmV2aW91c1NpYmxpbmdFbGVtZW50KTtcblxuICAgIGlmIChuZXh0U2libGluZ0VsZW1lbnRTaXplYWJsZUVsZW1lbnQpIHtcbiAgICAgIGRpcmVjdGlvbiA9ICsxO1xuICAgIH1cblxuICAgIGlmIChwcmV2aW91c1NpYmxpbmdFbGVtZW50U2l6ZWFibGVFbGVtZW50KSB7XG4gICAgICBkaXJlY3Rpb24gPSAtMTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGlyZWN0aW9uO1xuICB9XG5cbiAgZW5hYmxlKCkge1xuICAgIHRoaXMucmVtb3ZlQ2xhc3MoXCJkaXNhYmxlZFwiKTtcbiAgfVxuXG4gIGRpc2FibGUoKSB7XG4gICAgdGhpcy5hZGRDbGFzcyhcImRpc2FibGVkXCIpO1xuICB9XG5cbiAgaXNEaXNhYmxlZCgpIHtcbiAgICBjb25zdCBkaXNhYmxlZCA9IHRoaXMuaGFzQ2xhc3MoXCJkaXNhYmxlZFwiKTtcblxuICAgIHJldHVybiBkaXNhYmxlZDtcbiAgfVxuXG4gIGRpZE1vdW50KCkge1xuICAgIHRoaXMuZW5hYmxlRHJhZygpO1xuXG4gICAgdGhpcy5vbkRyYWcodGhpcy5kcmFnSGFuZGxlciwgdGhpcyk7XG5cbiAgICB0aGlzLm9uU3RvcERyYWcodGhpcy5zdG9wRHJhZ0hhbmRsZXIsIHRoaXMpO1xuXG4gICAgdGhpcy5vblN0YXJ0RHJhZyh0aGlzLnN0YXJ0RHJhZ0hhbmRsZXIsIHRoaXMpO1xuXG4gICAgdGhpcy5vbk1vdXNlT3Zlcih0aGlzLm1vdXNlT3ZlckhhbmRsZXIsIHRoaXMpO1xuXG4gICAgdGhpcy5vbk1vdXNlT3V0KHRoaXMubW91c2VPdXRIYW5kbGVyLCB0aGlzKTtcbiAgfVxuXG4gIHdpbGxVbm1vdW50KCkge1xuICAgIHRoaXMub2ZmTW91c2VPdXQodGhpcy5tb3VzZU91dEhhbmRsZXIsIHRoaXMpO1xuXG4gICAgdGhpcy5vZmZNb3VzZU92ZXIodGhpcy5tb3VzZU92ZXJIYW5kbGVyLCB0aGlzKTtcblxuICAgIHRoaXMub2ZmU3RhcnREcmFnKHRoaXMuc3RhcnREcmFnSGFuZGxlciwgdGhpcyk7XG5cbiAgICB0aGlzLm9mZlN0b3BEcmFnKHRoaXMuc3RvcERyYWdIYW5kbGVyLCB0aGlzKTtcblxuICAgIHRoaXMub2ZmRHJhZyh0aGlzLmRyYWdIYW5kbGVyLCB0aGlzKTtcblxuICAgIHRoaXMuZGlzYWJsZURyYWcoKTtcbiAgfVxuXG4gIGluaXRpYWxpc2UoKSB7XG4gICAgdGhpcy5zZXRJbml0aWFsU3RhdGUoKTtcbiAgfVxuXG4gIHN0YXRpYyB0YWdOYW1lID0gXCJkaXZcIjtcblxuICBzdGF0aWMgaWdub3JlZFByb3BlcnRpZXMgPSBbXG4gICAgXCJvbkRyYWdcIixcbiAgICBcImRpc2FibGVkXCIsXG4gICAgXCJvblN0b3BEcmFnXCIsXG4gICAgXCJvblN0YXJ0RHJhZ1wiXG4gIF07XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIGNsYXNzTmFtZTogXCJzcGxpdHRlclwiXG4gIH07XG5cbiAgc3RhdGljIGZyb21DbGFzcyhDbGFzcywgcHJvcGVydGllcykge1xuICAgIGNvbnN0IHNwbGl0dGVyRGl2ID0gRWxlbWVudC5mcm9tQ2xhc3MoQ2xhc3MsIHByb3BlcnRpZXMpO1xuXG4gICAgcmV0dXJuIHNwbGl0dGVyRGl2O1xuICB9XG59XG5cbk9iamVjdC5hc3NpZ24oU3BsaXR0ZXJEaXYucHJvdG90eXBlLCBkcmFnTWl4aW5zKTtcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFN0eWxlKFNwbGl0dGVyRGl2KWBcblxuICBmbGV4LXNocmluazogMDtcblxuYDtcblxuZnVuY3Rpb24gaXNFbGVtZW50U2l6ZWFibGVFbGVtZW50KGVsZW1lbnQpIHtcbiAgY29uc3QgZWxlbWVudFNpemVhYmxlRWxlbWVudCA9IChlbGVtZW50IGluc3RhbmNlb2YgU2l6ZWFibGVEaXYpIHx8IChlbGVtZW50IGluc3RhbmNlb2YgU2l6ZWFibGVTZWN0aW9uKTtcblxuICByZXR1cm4gZWxlbWVudFNpemVhYmxlRWxlbWVudDtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHdpdGhTdHlsZSBmcm9tIFwiZWFzeS13aXRoLXN0eWxlXCI7ICAvLy9cblxuaW1wb3J0IFNwbGl0dGVyIGZyb20gXCIuLi9zcGxpdHRlclwiO1xuXG5pbXBvcnQgeyBjb2x1bW5SZXNpemVDdXJzb3IgfSBmcm9tIFwiLi4vLi4vY3Vyc29yXCI7XG5cbmNsYXNzIFZlcnRpY2FsU3BsaXR0ZXIgZXh0ZW5kcyBTcGxpdHRlciB7XG4gIHNldEN1cnNvcigpIHtcbiAgICBjb25zdCBkaXNhYmxlZCA9IHRoaXMuaXNEaXNhYmxlZCgpO1xuXG4gICAgaWYgKCFkaXNhYmxlZCkge1xuICAgICAgY29sdW1uUmVzaXplQ3Vyc29yKCk7XG4gICAgfVxuICB9XG5cbiAgbW91c2VPdmVySGFuZGxlcihldmVudCwgZWxlbWVudCkge1xuICAgIHRoaXMuc2V0Q3Vyc29yKCk7XG4gIH1cblxuICBzdGFydERyYWdIYW5kbGVyKGVsZW1lbnQpIHtcbiAgICBjb25zdCBkaXNhYmxlZCA9IHRoaXMuaXNEaXNhYmxlZCgpO1xuXG4gICAgaWYgKCFkaXNhYmxlZCkge1xuICAgICAgY29uc3Qgc2l6ZWFibGVFbGVtZW50ID0gdGhpcy5nZXRTaXplYWJsZUVsZW1lbnQoKSxcbiAgICAgICAgICAgIHNpemVhYmxlRWxlbWVudFdpZHRoID0gc2l6ZWFibGVFbGVtZW50LmdldFdpZHRoKCksXG4gICAgICAgICAgICBwcmV2aW91c1NpemVhYmxlRWxlbWVudFdpZHRoID0gc2l6ZWFibGVFbGVtZW50V2lkdGg7ICAvLy9cblxuICAgICAgdGhpcy5zZXRQcmV2aW91c1NpemVhYmxlRWxlbWVudFdpZHRoKHByZXZpb3VzU2l6ZWFibGVFbGVtZW50V2lkdGgpO1xuICAgIH1cblxuICAgIHRoaXMuc2V0Q3Vyc29yKCk7XG4gIH1cblxuICBkcmFnSGFuZGxlcihyZWxhdGl2ZU1vdXNlVG9wLCByZWxhdGl2ZU1vdXNlTGVmdCkge1xuICAgIGNvbnN0IGRpc2FibGVkID0gdGhpcy5pc0Rpc2FibGVkKCk7XG5cbiAgICBpZiAoIWRpc2FibGVkKSB7XG4gICAgICBjb25zdCBkaXJlY3Rpb24gPSB0aGlzLmdldERpcmVjdGlvbigpLFxuICAgICAgICAgICAgc2l6ZWFibGVFbGVtZW50ID0gdGhpcy5nZXRTaXplYWJsZUVsZW1lbnQoKSxcbiAgICAgICAgICAgIHByZXZpb3VzU2l6ZWFibGVFbGVtZW50V2lkdGggPSB0aGlzLmdldFByZXZpb3VzU2l6ZWFibGVFbGVtZW50V2lkdGgoKSxcbiAgICAgICAgICAgIHNpemVhYmxlRWxlbWVudFdpZHRoID0gcHJldmlvdXNTaXplYWJsZUVsZW1lbnRXaWR0aCAtIGRpcmVjdGlvbiAqIHJlbGF0aXZlTW91c2VMZWZ0LFxuICAgICAgICAgICAgd2lkdGggPSBzaXplYWJsZUVsZW1lbnRXaWR0aDsgLy8vXG5cbiAgICAgIHNpemVhYmxlRWxlbWVudC5zZXRXaWR0aCh3aWR0aCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0UHJldmlvdXNTaXplYWJsZUVsZW1lbnRXaWR0aCgpIHtcbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuZ2V0U3RhdGUoKSxcbiAgICAgICAgICB7IHByZXZpb3VzU2l6ZWFibGVFbGVtZW50V2lkdGggfSA9IHN0YXRlO1xuXG4gICAgcmV0dXJuIHByZXZpb3VzU2l6ZWFibGVFbGVtZW50V2lkdGg7XG4gIH1cblxuICBzZXRQcmV2aW91c1NpemVhYmxlRWxlbWVudFdpZHRoKHByZXZpb3VzU2l6ZWFibGVFbGVtZW50V2lkdGgpIHtcbiAgICB0aGlzLnVwZGF0ZVN0YXRlKHtcbiAgICAgIHByZXZpb3VzU2l6ZWFibGVFbGVtZW50V2lkdGhcbiAgICB9KTtcbiAgfVxuXG4gIHNldEluaXRpYWxTdGF0ZSgpIHtcbiAgICBjb25zdCBwcmV2aW91c1NpemVhYmxlRWxlbWVudFdpZHRoID0gbnVsbDtcblxuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgcHJldmlvdXNTaXplYWJsZUVsZW1lbnRXaWR0aFxuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIGNsYXNzTmFtZTogXCJ2ZXJ0aWNhbFwiXG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhTdHlsZShWZXJ0aWNhbFNwbGl0dGVyKWBcblxuICB3aWR0aDogMXJlbTtcblxuYDtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHdpdGhTdHlsZSBmcm9tIFwiZWFzeS13aXRoLXN0eWxlXCI7ICAvLy9cblxuaW1wb3J0IFNwbGl0dGVyIGZyb20gXCIuLi9zcGxpdHRlclwiO1xuXG5pbXBvcnQgeyByb3dSZXNpemVDdXJzb3IgfSBmcm9tIFwiLi4vLi4vY3Vyc29yXCI7XG5cbmNsYXNzIEhvcml6b250YWxTcGxpdHRlciBleHRlbmRzIFNwbGl0dGVyIHtcbiAgc2V0Q3Vyc29yKCkge1xuICAgIGNvbnN0IGRpc2FibGVkID0gdGhpcy5pc0Rpc2FibGVkKCk7XG5cbiAgICBpZiAoIWRpc2FibGVkKSB7XG4gICAgICByb3dSZXNpemVDdXJzb3IoKTtcbiAgICB9XG4gIH1cblxuICBtb3VzZU92ZXJIYW5kbGVyKGV2ZW50LCBlbGVtZW50KSB7XG4gICAgdGhpcy5zZXRDdXJzb3IoKTtcbiAgfVxuXG4gIHN0YXJ0RHJhZ0hhbmRsZXIoZWxlbWVudCkge1xuICAgIGNvbnN0IGRpc2FibGVkID0gdGhpcy5pc0Rpc2FibGVkKCk7XG5cbiAgICBpZiAoIWRpc2FibGVkKSB7XG4gICAgICBjb25zdCBzaXplYWJsZUVsZW1lbnQgPSB0aGlzLmdldFNpemVhYmxlRWxlbWVudCgpLFxuICAgICAgICAgICAgc2l6ZWFibGVFbGVtZW50SGVpZ2h0ID0gc2l6ZWFibGVFbGVtZW50LmdldEhlaWdodCgpLFxuICAgICAgICAgICAgcHJldmlvdXNTaXplYWJsZUVsZW1lbnRIZWlnaHQgPSBzaXplYWJsZUVsZW1lbnRIZWlnaHQ7ICAvLy9cblxuICAgICAgdGhpcy5zZXRQcmV2aW91c1NpemVhYmxlRWxlbWVudEhlaWdodChwcmV2aW91c1NpemVhYmxlRWxlbWVudEhlaWdodCk7XG4gICAgfVxuXG4gICAgdGhpcy5zZXRDdXJzb3IoKTtcbiAgfVxuXG4gIGRyYWdIYW5kbGVyKHJlbGF0aXZlTW91c2VUb3AsIHJlbGF0aXZlTW91c2VMZWZ0KSB7XG4gICAgY29uc3QgZGlzYWJsZWQgPSB0aGlzLmlzRGlzYWJsZWQoKTtcblxuICAgIGlmICghZGlzYWJsZWQpIHtcbiAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IHRoaXMuZ2V0RGlyZWN0aW9uKCksXG4gICAgICAgICAgICBzaXplYWJsZUVsZW1lbnQgPSB0aGlzLmdldFNpemVhYmxlRWxlbWVudCgpLFxuICAgICAgICAgICAgcHJldmlvdXNTaXplYWJsZUVsZW1lbnRIZWlnaHQgPSB0aGlzLmdldFByZXZpb3VzU2l6ZWFibGVFbGVtZW50SGVpZ2h0KCksXG4gICAgICAgICAgICBzaXplYWJsZUVsZW1lbnRIZWlnaHQgPSBwcmV2aW91c1NpemVhYmxlRWxlbWVudEhlaWdodCAtIGRpcmVjdGlvbiAqIHJlbGF0aXZlTW91c2VUb3AsXG4gICAgICAgICAgICBoZWlnaHQgPSBzaXplYWJsZUVsZW1lbnRIZWlnaHQ7IC8vL1xuXG4gICAgICBzaXplYWJsZUVsZW1lbnQuc2V0SGVpZ2h0KGhlaWdodCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0UHJldmlvdXNTaXplYWJsZUVsZW1lbnRIZWlnaHQoKSB7XG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLmdldFN0YXRlKCksXG4gICAgICAgICAgeyBwcmV2aW91c1NpemVhYmxlRWxlbWVudEhlaWdodCB9ID0gc3RhdGU7XG5cbiAgICByZXR1cm4gcHJldmlvdXNTaXplYWJsZUVsZW1lbnRIZWlnaHQ7XG4gIH1cblxuICBzZXRQcmV2aW91c1NpemVhYmxlRWxlbWVudEhlaWdodChwcmV2aW91c1NpemVhYmxlRWxlbWVudEhlaWdodCkge1xuICAgIHRoaXMudXBkYXRlU3RhdGUoe1xuICAgICAgcHJldmlvdXNTaXplYWJsZUVsZW1lbnRIZWlnaHRcbiAgICB9KTtcbiAgfVxuXG4gIHNldEluaXRpYWxTdGF0ZSgpIHtcbiAgICBjb25zdCBwcmV2aW91c1NpemVhYmxlRWxlbWVudEhlaWdodCA9IG51bGw7XG5cbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIHByZXZpb3VzU2l6ZWFibGVFbGVtZW50SGVpZ2h0XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgZGVmYXVsdFByb3BlcnRpZXMgPSB7XG4gICAgY2xhc3NOYW1lOiBcImhvcml6b250YWxcIlxuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCB3aXRoU3R5bGUoSG9yaXpvbnRhbFNwbGl0dGVyKWBcblxuICBoZWlnaHQ6IDFyZW07XG5cbmA7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIGN1cnNvciB9IGZyb20gXCIuL2N1cnNvclwiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIFJvd0RpdiB9IGZyb20gXCIuL2Rpdi9yb3dcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUm93c0RpdiB9IGZyb20gXCIuL2Rpdi9yb3dzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENvbHVtbkRpdiB9IGZyb20gXCIuL2Rpdi9jb2x1bW5cIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ29sdW1uc0RpdiB9IGZyb20gXCIuL2Rpdi9jb2x1bW5zXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFNwbGl0dGVyRGl2IH0gZnJvbSBcIi4vZGl2L3NwbGl0dGVyXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFNpemVhYmxlRGl2IH0gZnJvbSBcIi4vZGl2L3NpemVhYmxlXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFNpemVhYmxlU2VjdGlvbiB9IGZyb20gXCIuL3NlY3Rpb24vc2l6ZWFibGVcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgVmVydGljYWxTcGxpdHRlckRpdiB9IGZyb20gXCIuL2Rpdi9zcGxpdHRlci92ZXJ0aWNhbFwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBIb3Jpem9udGFsU3BsaXR0ZXJEaXYgfSBmcm9tIFwiLi9kaXYvc3BsaXR0ZXIvaG9yaXpvbnRhbFwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgd2l0aFN0eWxlIGZyb20gXCJlYXN5LXdpdGgtc3R5bGVcIjsgIC8vL1xuXG5pbXBvcnQgWWFwcCBmcm9tIFwiLi4vaW5kZXhcIjsgIC8vL1xuXG5leHBvcnQgZGVmYXVsdCB3aXRoU3R5bGUoY2xhc3MgZXh0ZW5kcyBZYXBwIHtcbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIGVkaXRhYmxlOiB0cnVlXG4gIH07XG59KWBcblxuICBib3JkZXI6IDFweCBzb2xpZDtcbiAgYm9yZGVyLWNvbG9yOiAjNjY2O1xuICBcbmA7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB3aXRoU3R5bGUgZnJvbSBcImVhc3ktd2l0aC1zdHlsZVwiOyAgLy8vXG5cbmNvbnN0IFN1YkhlYWRpbmcgPSB3aXRoU3R5bGUuaDJgXG5cbiAgbWFyZ2luOiAxcmVtIDAgMC41cmVtIDA7XG4gIGZvbnQtc2l6ZTogMnJlbTtcbiAgXG4gIDpmaXJzdC1vZi10eXBlIHtcbiAgICBtYXJnaW4tdG9wOiAwO1xuICB9XG5cbmA7XG5cbmV4cG9ydCBkZWZhdWx0IFN1YkhlYWRpbmc7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB3aXRoU3R5bGUgZnJvbSBcImVhc3ktd2l0aC1zdHlsZVwiOyAgLy8vXG5cbmltcG9ydCB7IFRleHRhcmVhIH0gZnJvbSBcImVhc3lcIjtcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFN0eWxlKFRleHRhcmVhKWBcblxuICBib3JkZXI6IDFweCBzb2xpZCBkYXJrZ3JleTtcbiAgcmVzaXplOiBub25lO1xuICBwYWRkaW5nOiAwLjI1cmVtO1xuICBmbGV4LWdyb3c6IDE7XG4gIGZvbnQtc2l6ZTogMS4ycmVtO1xuICB3aGl0ZS1zcGFjZTogcHJlO1xuICBmb250LWZhbWlseTogbW9ub3NwYWNlO1xuXG5gO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVGV4dGFyZWEgZnJvbSBcIi4uL3RleHRhcmVhXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJORlRleHRhcmVhIGV4dGVuZHMgVGV4dGFyZWEge1xuICBnZXRCTkYoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldFZhbHVlKCksXG4gICAgICAgICAgYm5mID0gdmFsdWU7IC8vL1xuXG4gICAgcmV0dXJuIGJuZjtcbiAgfVxuXG4gIHNldEJORihibmYpIHtcbiAgICBjb25zdCB2YWx1ZSA9IGJuZjtcblxuICAgIHRoaXMuc2V0VmFsdWUodmFsdWUpO1xuICB9XG5cbiAgcGFyZW50Q29udGV4dCgpIHtcbiAgICBjb25zdCBnZXRCTkYgPSB0aGlzLmdldEJORi5iaW5kKHRoaXMpLFxuICAgICAgICAgIHNldEJORiA9IHRoaXMuc2V0Qk5GLmJpbmQodGhpcyk7XG5cbiAgICByZXR1cm4gKHtcbiAgICAgIGdldEJORixcbiAgICAgIHNldEJORlxuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIGNsYXNzTmFtZTogXCJibmZcIixcbiAgICBzcGVsbENoZWNrOiBcImZhbHNlXCJcbiAgfTtcbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgRU1QVFlfU1RSSU5HID0gXCJcIjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFRleHRhcmVhIGZyb20gXCIuLi90ZXh0YXJlYVwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRva2Vuc1RleHRhcmVhIGV4dGVuZHMgVGV4dGFyZWEge1xuICBzZXRUb2tlbnModG9rZW5zKSB7XG4gICAgaWYgKHRva2VucyAhPT0gbnVsbCkge1xuICAgICAgbGV0IGxpbmVOdW1iZXIgPSAxLFxuICAgICAgICAgIHByZXZpb3VzVG9rZW4gPSBudWxsO1xuXG4gICAgICBjb25zdCBodG1sID0gdG9rZW5zLnJlZHVjZSgoaHRtbCwgdG9rZW4pID0+IHtcbiAgICAgICAgY29uc3QgdG9rZW5IVE1MID0gdG9rZW4uYXNIVE1MKCk7XG5cbiAgICAgICAgaWYgKHByZXZpb3VzVG9rZW4gPT09IG51bGwpIHtcbiAgICAgICAgICBodG1sICs9IGAke2xpbmVOdW1iZXIrK306IGA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgcHJldmlvdXNUb2tlbkVuZE9mTGluZVRva2VuID0gcHJldmlvdXNUb2tlbi5pc0VuZE9mTGluZVRva2VuKCk7XG5cbiAgICAgICAgICBpZiAocHJldmlvdXNUb2tlbkVuZE9mTGluZVRva2VuKSB7XG4gICAgICAgICAgICBodG1sICs9IGAke2xpbmVOdW1iZXIrK306IGA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaHRtbCArPSB0b2tlbkhUTUw7XG5cbiAgICAgICAgcHJldmlvdXNUb2tlbiA9IHRva2VuO1xuXG4gICAgICAgIHJldHVybiBodG1sO1xuICAgICAgfSwgRU1QVFlfU1RSSU5HKTtcblxuICAgICAgdGhpcy5odG1sKGh0bWwpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNsZWFyVG9rZW5zKCk7XG4gICAgfVxuICB9XG5cbiAgY2xlYXJUb2tlbnMoKSB7XG4gICAgY29uc3QgaHRtbCA9IEVNUFRZX1NUUklORztcblxuICAgIHRoaXMuaHRtbChodG1sKTtcbiAgfVxuXG4gIHBhcmVudENvbnRleHQoKSB7XG4gICAgY29uc3Qgc2V0VG9rZW5zID0gdGhpcy5zZXRUb2tlbnMuYmluZCh0aGlzKSxcbiAgICAgICAgICBjbGVhclRva2VucyA9IHRoaXMuY2xlYXJUb2tlbnMuYmluZCh0aGlzKTtcblxuICAgIHJldHVybiAoe1xuICAgICAgc2V0VG9rZW5zLFxuICAgICAgY2xlYXJUb2tlbnNcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcGVydGllcyA9IHtcbiAgICBjbGFzc05hbWU6IFwidG9rZW5zXCIsXG4gICAgc3BlbGxDaGVjazogXCJmYWxzZVwiLFxuICAgIHJlYWRPbmx5OiB0cnVlXG4gIH07XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHdpdGhTdHlsZSBmcm9tIFwiZWFzeS13aXRoLXN0eWxlXCI7ICAvLy9cblxuaW1wb3J0IHsgU2l6ZWFibGVEaXYgfSBmcm9tIFwiZWFzeS1sYXlvdXRcIjtcblxuY2xhc3MgVG9wU2l6ZWFibGVEaXYgZXh0ZW5kcyBTaXplYWJsZURpdiB7XG4gIHBhcmVudENvbnRleHQoKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGdldFRvcFNpemVhYmxlRGl2SGVpZ2h0ID0gdGhpcy5nZXRIZWlnaHQuYmluZCh0aGlzKSxcbiAgICAgICAgICBwYXJlbnRDb250ZXh0ID0gT2JqZWN0LmFzc2lnbihjb250ZXh0LCB7XG4gICAgICAgICAgICBnZXRUb3BTaXplYWJsZURpdkhlaWdodFxuICAgICAgICAgIH0pO1xuXG4gICAgcmV0dXJuIHBhcmVudENvbnRleHQ7XG4gIH1cblxuICBzdGF0aWMgZGVmYXVsdFByb3BlcnRpZXMgPSB7XG4gICAgY2xhc3NOYW1lOiBcInRvcFwiXG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhTdHlsZShUb3BTaXplYWJsZURpdilgXG5cbiAgaGVpZ2h0OiA0OHJlbTtcbiAgbWluLWhlaWdodDogMTJyZW07XG4gIFxuYDtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHdpdGhTdHlsZSBmcm9tIFwiZWFzeS13aXRoLXN0eWxlXCI7ICAvLy9cblxuaW1wb3J0IHsgU2l6ZWFibGVEaXYgfSBmcm9tIFwiZWFzeS1sYXlvdXRcIjtcblxuY2xhc3MgTGVmdFNpemVhYmxlRGl2IGV4dGVuZHMgU2l6ZWFibGVEaXYge1xuICBwYXJlbnRDb250ZXh0KCkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBnZXRMZWZ0U2l6ZWFibGVEaXZXaWR0aCA9IHRoaXMuZ2V0V2lkdGguYmluZCh0aGlzKSxcbiAgICAgICAgICBwYXJlbnRDb250ZXh0ID0gT2JqZWN0LmFzc2lnbihjb250ZXh0LCB7XG4gICAgICAgICAgICBnZXRMZWZ0U2l6ZWFibGVEaXZXaWR0aFxuICAgICAgICAgIH0pO1xuXG4gICAgcmV0dXJuIHBhcmVudENvbnRleHQ7XG4gIH1cblxuICBzdGF0aWMgZGVmYXVsdFByb3BlcnRpZXMgPSB7XG4gICAgY2xhc3NOYW1lOiBcImxlZnRcIlxuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCB3aXRoU3R5bGUoTGVmdFNpemVhYmxlRGl2KWBcblxuICB3aWR0aDogNjByZW07XG4gIG1pbi13aWR0aDogMjRyZW07XG4gIFxuYDtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHdpdGhTdHlsZSBmcm9tIFwiZWFzeS13aXRoLXN0eWxlXCI7ICAvLy9cblxuaW1wb3J0IHsgU2l6ZWFibGVEaXYgfSBmcm9tIFwiZWFzeS1sYXlvdXRcIjtcblxuY2xhc3MgUmlnaHRTaXplYWJsZURpdiBleHRlbmRzIFNpemVhYmxlRGl2IHtcbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIGNsYXNzTmFtZTogXCJyaWdodFwiXG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhTdHlsZShSaWdodFNpemVhYmxlRGl2KWBcblxuICBoZWlnaHQ6IDI0cmVtO1xuICBtaW4taGVpZ2h0OiAxMnJlbTtcbiAgXG5gO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgd2l0aFN0eWxlIGZyb20gXCJlYXN5LXdpdGgtc3R5bGVcIjsgIC8vL1xuXG5pbXBvcnQgeyBTaXplYWJsZURpdiB9IGZyb20gXCJlYXN5LWxheW91dFwiO1xuXG5jbGFzcyBNaWRkbGVTaXplYWJsZURpdiBleHRlbmRzIFNpemVhYmxlRGl2IHtcbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIGNsYXNzTmFtZTogXCJtaWRkbGVcIlxuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCB3aXRoU3R5bGUoTWlkZGxlU2l6ZWFibGVEaXYpYFxuXG4gIGhlaWdodDogMTJyZW07XG4gIG1pbi1oZWlnaHQ6IDZyZW07XG4gIFxuYDtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFRleHRhcmVhIGZyb20gXCIuLi90ZXh0YXJlYVwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBhcnNlVHJlZVRleHRhcmVhIGV4dGVuZHMgVGV4dGFyZWEge1xuICBzZXRQYXJzZVRyZWUocGFyc2VUcmVlKSB7XG4gICAgaWYgKHBhcnNlVHJlZSAhPT0gbnVsbCkge1xuICAgICAgcGFyc2VUcmVlLnNoaWZ0TGluZSgpOyAgLy9cblxuICAgICAgY29uc3QgcGFyc2VUcmVlU3RyaW5nID0gcGFyc2VUcmVlLmFzU3RyaW5nKCksXG4gICAgICAgICAgICB2YWx1ZSA9IHBhcnNlVHJlZVN0cmluZzsgIC8vL1xuXG4gICAgICB0aGlzLnNldFZhbHVlKHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jbGVhclBhcnNlVHJlZSgpO1xuICAgIH1cbiAgfVxuXG4gIGNsZWFyUGFyc2VUcmVlKCkge1xuICAgIGNvbnN0IHZhbHVlID0gRU1QVFlfU1RSSU5HO1xuXG4gICAgdGhpcy5zZXRWYWx1ZSh2YWx1ZSk7XG4gIH1cblxuICBwYXJlbnRDb250ZXh0KCkge1xuICAgIGNvbnN0IHNldFBhcnNlVHJlZSA9IHRoaXMuc2V0UGFyc2VUcmVlLmJpbmQodGhpcyksXG4gICAgICAgICAgY2xlYXJQYXJzZVRyZWUgPSB0aGlzLmNsZWFyUGFyc2VUcmVlLmJpbmQodGhpcyk7XG5cbiAgICByZXR1cm4gKHtcbiAgICAgIHNldFBhcnNlVHJlZSxcbiAgICAgIGNsZWFyUGFyc2VUcmVlXG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgZGVmYXVsdFByb3BlcnRpZXMgPSB7XG4gICAgY2xhc3NOYW1lOiBcInRva2Vuc1wiLFxuICAgIHNwZWxsQ2hlY2s6IFwiZmFsc2VcIixcbiAgICByZWFkT25seTogdHJ1ZVxuICB9O1xufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBUZXh0YXJlYSBmcm9tIFwiLi4vdGV4dGFyZWFcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTGV4aWNhbEVudHJpZXNUZXh0YXJlYSBleHRlbmRzIFRleHRhcmVhIHtcbiAgZ2V0TGV4aWNhbEVudHJpZXMoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldFZhbHVlKCksXG4gICAgICAgICAgbGV4aWNhbEVudHJpZXMgPSBKU09OLnBhcnNlKHZhbHVlKTtcblxuICAgIHJldHVybiBsZXhpY2FsRW50cmllcztcbiAgfVxuXG4gIHNldExleGljYWxFbnRyaWVzKGxleGljYWxFbnRyaWVzKSB7XG4gICAgY29uc3QgdmFsdWUgPSBKU09OLnN0cmluZ2lmeShsZXhpY2FsRW50cmllcywgbnVsbCwgXCIgIFwiKTtcblxuICAgIHRoaXMuc2V0VmFsdWUodmFsdWUpO1xuICB9XG5cbiAgcGFyZW50Q29udGV4dCgpIHtcbiAgICBjb25zdCBnZXRMZXhpY2FsRW50cmllcyA9IHRoaXMuZ2V0TGV4aWNhbEVudHJpZXMuYmluZCh0aGlzKSxcbiAgICAgICAgICBzZXRMZXhpY2FsRW50cmllcyA9IHRoaXMuc2V0TGV4aWNhbEVudHJpZXMuYmluZCh0aGlzKTtcblxuICAgIHJldHVybiAoe1xuICAgICAgZ2V0TGV4aWNhbEVudHJpZXMsXG4gICAgICBzZXRMZXhpY2FsRW50cmllc1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIGNsYXNzTmFtZTogXCJsZXhpY2FsLWVudHJpZXNcIixcbiAgICBzcGVsbENoZWNrOiBcImZhbHNlXCJcbiAgfTtcbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuY29uc3QgeyBmaXJzdCB9ID0gYXJyYXlVdGlsaXRpZXM7XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGFydFJ1bGVGcm9tUnVsZXMocnVsZXMpIHtcbiAgY29uc3QgZmlyc3RSdWxlID0gZmlyc3QocnVsZXMpLFxuICAgICAgICBzdGFydFJ1bGUgPSBmaXJzdFJ1bGU7ICAvLy9cblxuICByZXR1cm4gc3RhcnRSdWxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcnVsZU1hcEZyb21SdWxlcyhydWxlcykge1xuICBjb25zdCBydWxlTWFwID0gcnVsZXMucmVkdWNlKChydWxlTWFwLCBydWxlKSA9PiB7XG4gICAgY29uc3QgcnVsZU5hbWUgPSBydWxlLmdldE5hbWUoKTtcblxuICAgIHJ1bGVNYXBbcnVsZU5hbWVdID0gcnVsZTtcblxuICAgIHJldHVybiBydWxlTWFwO1xuICB9LCB7fSk7XG5cbiAgcmV0dXJuIHJ1bGVNYXA7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB3aXRoU3R5bGUgZnJvbSBcImVhc3ktd2l0aC1zdHlsZVwiOyAgLy8vXG5cbmltcG9ydCB7IEVsZW1lbnQgfSBmcm9tIFwiZWFzeVwiO1xuaW1wb3J0IHsgQk5GTGV4ZXIgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5pbXBvcnQgeyBCTkZQYXJzZXIgfSBmcm9tIFwib2NjYW0tcGFyc2Vyc1wiO1xuaW1wb3J0IHsgZWxpbWluYXRlTGVmdFJlY3Vyc2lvbiwgcmVtb3ZlT3JSZW5hbWVJbnRlcm1lZGlhdGVOb2RlcyB9IGZyb20gXCJvY2NhbS1ncmFtbWFyLXV0aWxpdGllc1wiO1xuaW1wb3J0IHsgUm93RGl2LCBSb3dzRGl2LCBDb2x1bW5EaXYsIENvbHVtbnNEaXYsIFZlcnRpY2FsU3BsaXR0ZXJEaXYsIEhvcml6b250YWxTcGxpdHRlckRpdiB9IGZyb20gXCJlYXN5LWxheW91dFwiO1xuXG5pbXBvcnQgWWFwcCBmcm9tIFwiLi95YXBwXCI7XG5pbXBvcnQgU3ViSGVhZGluZyBmcm9tIFwiLi9zdWJIZWFkaW5nXCI7XG5pbXBvcnQgQk5GVGV4dGFyZWEgZnJvbSBcIi4vdGV4dGFyZWEvYm5mXCI7XG5pbXBvcnQgVG9rZW5zVGV4dGFyZWEgZnJvbSBcIi4vdGV4dGFyZWEvdG9rZW5zXCI7XG5pbXBvcnQgVG9wU2l6ZWFibGVEaXYgZnJvbSBcIi4vZGl2L3NpemVhYmxlL3RvcFwiO1xuaW1wb3J0IExlZnRTaXplYWJsZURpdiBmcm9tIFwiLi9kaXYvc2l6ZWFibGUvbGVmdFwiO1xuaW1wb3J0IFJpZ2h0U2l6ZWFibGVEaXYgZnJvbSBcIi4vZGl2L3NpemVhYmxlL3JpZ2h0XCI7XG5pbXBvcnQgTWlkZGxlU2l6ZWFibGVEaXYgZnJvbSBcIi4vZGl2L3NpemVhYmxlL21pZGRsZVwiO1xuaW1wb3J0IFBhcnNlVHJlZVRleHRhcmVhIGZyb20gXCIuL3RleHRhcmVhL3BhcnNlVHJlZVwiO1xuaW1wb3J0IExleGljYWxFbnRyaWVzVGV4dGFyZWEgZnJvbSBcIi4vdGV4dGFyZWEvbGV4aWNhbEVudHJpZXNcIjtcblxuaW1wb3J0IHsgcnVsZU1hcEZyb21SdWxlcywgc3RhcnRSdWxlRnJvbVJ1bGVzIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9ydWxlc1wiO1xuXG5jb25zdCBibmZMZXhlciA9IEJORkxleGVyLmZyb21Ob3RoaW5nKCksXG4gICAgICBibmZQYXJzZXIgPSBCTkZQYXJzZXIuZnJvbU5vdGhpbmcoKTtcblxuY2xhc3MgVmlldyBleHRlbmRzIEVsZW1lbnQge1xuICBjb250ZW50Q2hhbmdlSGFuZGxlcihldmVudCwgZWxlbWVudCkge1xuICAgIHRoaXMudXBkYXRlKCk7XG4gIH1cblxuICBrZXlVcEhhbmRsZXIoZXZlbnQsIGVsZW1lbnQpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgbGV4aWNhbEVudHJpZXMgPSB0aGlzLmdldExleGljYWxFbnRyaWVzKCksXG4gICAgICAgICAgICBlbnRyaWVzID0gbGV4aWNhbEVudHJpZXMsIC8vL1xuICAgICAgICAgICAgYm5mID0gdGhpcy5nZXRCTkYoKSxcbiAgICAgICAgICAgIHRva2VucyA9IGJuZkxleGVyLnRva2Vuc0Zyb21CTkYoYm5mKSxcbiAgICAgICAgICAgIHJ1bGVzID0gYm5mUGFyc2VyLnJ1bGVzRnJvbVRva2Vucyh0b2tlbnMpLFxuICAgICAgICAgICAgcnVsZU1hcCA9IHJ1bGVNYXBGcm9tUnVsZXMocnVsZXMpO1xuXG4gICAgICBsZXQgc3RhcnRSdWxlID0gc3RhcnRSdWxlRnJvbVJ1bGVzKHJ1bGVzKTtcblxuICAgICAgc3RhcnRSdWxlID0gZWxpbWluYXRlTGVmdFJlY3Vyc2lvbihzdGFydFJ1bGUsIHJ1bGVNYXApO1xuXG4gICAgICBjb25zdCB7IFBsdWdpbiB9ID0gdGhpcy5jb25zdHJ1Y3RvcixcbiAgICAgICAgICAgIHsgTGV4ZXIsIFBhcnNlciB9ID0gUGx1Z2luLFxuICAgICAgICAgICAgbGV4ZXIgPSBMZXhlci5mcm9tRW50cmllcyhlbnRyaWVzKSxcbiAgICAgICAgICAgIHBhcnNlciA9IG5ldyBQYXJzZXIoc3RhcnRSdWxlLCBydWxlTWFwKSwgIC8vL1xuICAgICAgICAgICAgeWFwcExleGVyID0gbGV4ZXIsICAvLy9cbiAgICAgICAgICAgIHlhcHBQYXJzZXIgPSBwYXJzZXI7ICAvLy9cblxuICAgICAgdGhpcy5zZXRZYXBwTGV4ZXIoeWFwcExleGVyKTtcblxuICAgICAgdGhpcy5zZXRZYXBwUGFyc2VyKHlhcHBQYXJzZXIpO1xuXG4gICAgICB0aGlzLnVwZGF0ZVlhcHAoKTtcblxuICAgICAgdGhpcy51cGRhdGUoKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIGRyYWdIYW5kbGVyKCkge1xuICAgIGNvbnN0IGxlZnRTaXplYWJsZURpdldpZHRoID0gdGhpcy5nZXRMZWZ0U2l6ZWFibGVEaXZXaWR0aCgpLFxuICAgICAgICAgIHRvcFNpemVhYmxlRGl2SGVpZ2h0ID0gdGhpcy5nZXRUb3BTaXplYWJsZURpdkhlaWdodCgpLFxuICAgICAgICAgIHlhcHBXaWR0aCA9IGxlZnRTaXplYWJsZURpdldpZHRoLCAvLy9cbiAgICAgICAgICB5YXBwSGVpZ2h0ID0gdG9wU2l6ZWFibGVEaXZIZWlnaHQ7ICAvLy9cblxuICAgIHRoaXMuc2V0WWFwcFdpZHRoKHlhcHBXaWR0aCk7XG4gICAgdGhpcy5zZXRZYXBwSGVpZ2h0KHlhcHBIZWlnaHQpO1xuXG4gICAgdGhpcy5yZXNpemVZYXBwKCk7XG4gIH1cblxuICB1cGRhdGUoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGxldCBwYXJzZVRyZWUgPSBudWxsO1xuXG4gICAgICBjb25zdCBwbHVnaW4gPSB0aGlzLmdldFBsdWdpbigpLFxuICAgICAgICAgICAgdG9rZW5zID0gcGx1Z2luLmdldFRva2VucygpLFxuICAgICAgICAgICAgbm9kZSA9IHBsdWdpbi5nZXROb2RlKCk7XG5cbiAgICAgIGlmIChub2RlICE9PSBudWxsKSB7XG4gICAgICAgIHJlbW92ZU9yUmVuYW1lSW50ZXJtZWRpYXRlTm9kZXMobm9kZSk7XG5cbiAgICAgICAgcGFyc2VUcmVlID0gbm9kZS5hc1BhcnNlVHJlZSh0b2tlbnMpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnNldFRva2Vucyh0b2tlbnMpO1xuXG4gICAgICB0aGlzLnNldFBhcnNlVHJlZShwYXJzZVRyZWUpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmxvZyhlcnJvcik7XG5cbiAgICAgIHRoaXMuY2xlYXJUb2tlbnMoKTtcblxuICAgICAgdGhpcy5jbGVhclBhcnNlVHJlZSgpO1xuICAgIH1cbiAgfVxuXG4gIGRpZE1vdW50KCkge1xuICAgIHRoaXMudXBkYXRlKCk7XG5cbiAgICB0aGlzLmRyYWdIYW5kbGVyKCk7IC8vL1xuXG4gICAgdGhpcy5yZXNpemVZYXBwKCk7ICAvLy9cbiAgfVxuXG4gIHdpbGxVbm1vdW50KCkge1xuICAgIC8vL1xuICB9XG5cbiAgY2hpbGRFbGVtZW50cygpIHtcbiAgICBjb25zdCB7IFBsdWdpbiwgZmlyYUNvZGUsIGluaXRpYWxDb250ZW50IH0gPSB0aGlzLmNvbnN0cnVjdG9yLFxuICAgICAgICAgIGRyYWdIYW5kbGVyID0gdGhpcy5kcmFnSGFuZGxlci5iaW5kKHRoaXMpLFxuICAgICAgICAgIGtleVVwSGFuZGxlciA9IHRoaXMua2V5VXBIYW5kbGVyLmJpbmQodGhpcyksXG4gICAgICAgICAgY29udGVudENoYW5nZUhhbmRsZXIgPSB0aGlzLmNvbnRlbnRDaGFuZ2VIYW5kbGVyLmJpbmQodGhpcyk7XG5cbiAgICByZXR1cm4gKFtcblxuICAgICAgPENvbHVtbnNEaXY+XG4gICAgICAgIDxMZWZ0U2l6ZWFibGVEaXY+XG4gICAgICAgICAgPFJvd3NEaXY+XG4gICAgICAgICAgICA8VG9wU2l6ZWFibGVEaXY+XG4gICAgICAgICAgICAgIDxZYXBwIFBsdWdpbj17UGx1Z2lufSBmaXJhQ29kZT17ZmlyYUNvZGV9IG9uQ29udGVudENoYW5nZT17Y29udGVudENoYW5nZUhhbmRsZXJ9ID5cbiAgICAgICAgICAgICAgICB7aW5pdGlhbENvbnRlbnR9XG4gICAgICAgICAgICAgIDwvWWFwcD5cbiAgICAgICAgICAgIDwvVG9wU2l6ZWFibGVEaXY+XG4gICAgICAgICAgICA8SG9yaXpvbnRhbFNwbGl0dGVyRGl2IG9uRHJhZz17ZHJhZ0hhbmRsZXJ9Lz5cbiAgICAgICAgICAgIDxSb3dEaXY+XG4gICAgICAgICAgICAgIDxSb3dzRGl2PlxuICAgICAgICAgICAgICAgIDxNaWRkbGVTaXplYWJsZURpdj5cbiAgICAgICAgICAgICAgICAgIDxSb3dzRGl2PlxuICAgICAgICAgICAgICAgICAgICA8U3ViSGVhZGluZz5cbiAgICAgICAgICAgICAgICAgICAgICBUb2tlbnNcbiAgICAgICAgICAgICAgICAgICAgPC9TdWJIZWFkaW5nPlxuICAgICAgICAgICAgICAgICAgICA8VG9rZW5zVGV4dGFyZWEgLz5cbiAgICAgICAgICAgICAgICAgIDwvUm93c0Rpdj5cbiAgICAgICAgICAgICAgICA8L01pZGRsZVNpemVhYmxlRGl2PlxuICAgICAgICAgICAgICAgIDxIb3Jpem9udGFsU3BsaXR0ZXJEaXYgLz5cbiAgICAgICAgICAgICAgICA8Um93c0Rpdj5cbiAgICAgICAgICAgICAgICAgIDxTdWJIZWFkaW5nPlxuICAgICAgICAgICAgICAgICAgICBQYXJzZSB0cmVlXG4gICAgICAgICAgICAgICAgICA8L1N1YkhlYWRpbmc+XG4gICAgICAgICAgICAgICAgICA8UGFyc2VUcmVlVGV4dGFyZWEgLz5cbiAgICAgICAgICAgICAgICA8L1Jvd3NEaXY+XG4gICAgICAgICAgICAgIDwvUm93c0Rpdj5cbiAgICAgICAgICAgIDwvUm93RGl2PlxuICAgICAgICAgIDwvUm93c0Rpdj5cbiAgICAgICAgPC9MZWZ0U2l6ZWFibGVEaXY+XG4gICAgICAgIDxWZXJ0aWNhbFNwbGl0dGVyRGl2IG9uRHJhZz17ZHJhZ0hhbmRsZXJ9Lz5cbiAgICAgICAgPENvbHVtbkRpdj5cbiAgICAgICAgICA8Um93c0Rpdj5cbiAgICAgICAgICAgIDxSaWdodFNpemVhYmxlRGl2PlxuICAgICAgICAgICAgICA8Um93c0Rpdj5cbiAgICAgICAgICAgICAgICA8U3ViSGVhZGluZz5cbiAgICAgICAgICAgICAgICAgIExleGljYWwgZW50cmllc1xuICAgICAgICAgICAgICAgIDwvU3ViSGVhZGluZz5cbiAgICAgICAgICAgICAgICA8TGV4aWNhbEVudHJpZXNUZXh0YXJlYSBvbktleVVwPXtrZXlVcEhhbmRsZXJ9IC8+XG4gICAgICAgICAgICAgIDwvUm93c0Rpdj5cbiAgICAgICAgICAgIDwvUmlnaHRTaXplYWJsZURpdj5cbiAgICAgICAgICAgIDxIb3Jpem9udGFsU3BsaXR0ZXJEaXYgLz5cbiAgICAgICAgICAgIDxSb3dEaXY+XG4gICAgICAgICAgICAgIDxSb3dzRGl2PlxuICAgICAgICAgICAgICAgIDxTdWJIZWFkaW5nPlxuICAgICAgICAgICAgICAgICAgQk5GXG4gICAgICAgICAgICAgICAgPC9TdWJIZWFkaW5nPlxuICAgICAgICAgICAgICAgIDxCTkZUZXh0YXJlYSBvbktleVVwPXtrZXlVcEhhbmRsZXJ9IC8+XG4gICAgICAgICAgICAgIDwvUm93c0Rpdj5cbiAgICAgICAgICAgIDwvUm93RGl2PlxuICAgICAgICAgIDwvUm93c0Rpdj5cbiAgICAgICAgPC9Db2x1bW5EaXY+XG4gICAgICA8L0NvbHVtbnNEaXY+XG5cbiAgICBdKTtcbiAgfVxuXG4gIGluaXRpYWxpc2UoKSB7XG4gICAgdGhpcy5hc3NpZ25Db250ZXh0KCk7XG5cbiAgICBjb25zdCB7IFBsdWdpbiB9ID0gdGhpcy5jb25zdHJ1Y3RvcixcbiAgICAgICAgICB7IExleGVyLCBQYXJzZXIgfSA9IFBsdWdpbixcbiAgICAgICAgICB7IGJuZiB9ID0gUGFyc2VyLFxuICAgICAgICAgIHsgZW50cmllcyB9ID0gTGV4ZXIsXG4gICAgICAgICAgbGV4aWNhbEVudHJpZXMgPSBlbnRyaWVzOyAvLy9cblxuICAgIHRoaXMuc2V0Qk5GKGJuZik7XG5cbiAgICB0aGlzLnNldExleGljYWxFbnRyaWVzKGxleGljYWxFbnRyaWVzKTtcbiAgfVxuXG4gIHN0YXRpYyB0YWdOYW1lID0gXCJkaXZcIjtcblxuICBzdGF0aWMgZGVmYXVsdFByb3BlcnRpZXMgPSB7XG4gICAgY2xhc3NOYW1lOiBcInZpZXdcIlxuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCB3aXRoU3R5bGUoVmlldylgXG5cbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwdmg7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIHBhZGRpbmc6IDFyZW07XG4gIFxuYDtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFZpZXcgZnJvbSBcIi4uL3ZpZXdcIjtcblxuaW1wb3J0IFhNTFBsdWdpbiBmcm9tIFwiLi4vLi4vcGx1Z2luL3htbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBYTUxWaWV3IGV4dGVuZHMgVmlldyB7XG4gIHN0YXRpYyBQbHVnaW4gPSBYTUxQbHVnaW47XG5cbiAgc3RhdGljIGZpcmFDb2RlID0gZmFsc2U7XG5cbiAgc3RhdGljIGluaXRpYWxDb250ZW50ID0gYDw/eG1sIHZlcnNpb249XCIxLjBcIiBlbmNvZGluZz1cIlVURi04XCI/PlxuPCEtLSBMb29rIHRvIFdpbmR3YXJkIGJ5IElhaW4gTS4gQmFua3MgLS0+XG48Ym9vaz5cbiAgPG5hbWU+XG4gICAgTG9vayB0byBXaW5kd2FyZFxuICA8L25hbWU+XG4gIDxhdXRob3I+XG4gICAgSWFpbiBNLiBCYW5rc1xuICA8L2F1dGhvcj5cbiAgPGxhbmd1YWdlPlxuICAgIEVuZ2xpc2hcbiAgPC9sYW5ndWFnZT5cbiAgPGdlbnJlPlxuICAgIFNjaWVuY2UgZmljdGlvblxuICA8L2dlbnJlPlxuPC9ib29rPmA7XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIGNsYXNzTmFtZTogXCJ4bWxcIlxuICB9O1xufTtcbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVmlldyBmcm9tIFwiLi4vdmlld1wiO1xuXG5pbXBvcnQgSlNPTlBsdWdpbiBmcm9tIFwiLi4vLi4vcGx1Z2luL2pzb25cIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSlNPTlZpZXcgZXh0ZW5kcyBWaWV3IHtcbiAgc3RhdGljIFBsdWdpbiA9IEpTT05QbHVnaW47XG5cbiAgc3RhdGljIGZpcmFDb2RlID0gdHJ1ZTtcblxuICBzdGF0aWMgaW5pdGlhbENvbnRlbnQgPSBgeyAgXG4gIFwidHlwZVwiOiBcImJvb2tcIixcbiAgXCJ0aXRsZVwiOiBcIkxvb2sgdG8gV2luZHdhcmRcIixcbiAgXCJhdXRob3JcIjogXCJMb29rIHRvIFdpbmR3YXJkXCIsXG4gIFwic3RvcmVzXCIgOiBbe1xuICAgIFwiaWRlbnRpZmllclwiOiAxMjNcbiAgfV0sXG4gIFwiZGV0YWlsc1wiIDoge1xuICAgIFwiaW4tcHJpbnRcIjogdHJ1ZSxcbiAgICBcInN0b2NrLWNvdW50XCI6IDEyM1xuICB9XG59YDtcblxuICBzdGF0aWMgZGVmYXVsdFByb3BlcnRpZXMgPSB7XG4gICAgY2xhc3NOYW1lOiBcImpzb25cIlxuICB9O1xufTtcbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVmlldyBmcm9tIFwiLi4vdmlld1wiO1xuXG5pbXBvcnQgSmF2YVNjcmlwdFBsdWdpbiBmcm9tIFwiLi4vLi4vcGx1Z2luL2phdmFzY3JpcHRcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSmF2YVNjcmlwdFZpZXcgZXh0ZW5kcyBWaWV3IHtcbiAgc3RhdGljIFBsdWdpbiA9IEphdmFTY3JpcHRQbHVnaW47XG5cbiAgc3RhdGljIGZpcmFDb2RlID0gdHJ1ZTtcblxuICBzdGF0aWMgaW5pdGlhbENvbnRlbnQgPSBgXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBcImp1eHRhcG9zZVwiO1xuXG5pbXBvcnQgd2l0aFN0eWxlIGZyb20gXCJlYXN5LXdpdGgtc3R5bGVcIjsgLy8vXG5cbmltcG9ydCB7IEJvZHkgfSBmcm9tIFwiZWFzeVwiO1xuXG5mdW5jdGlvbiBzaW1wbGVBcHBsaWNhdGlvbihzZWxlY3Rvcikge1xuICBjb25zdCBib2R5ID0gbmV3IEJvZHkoc2VsZWN0b3IpO1xuXG4gIGJvZHkubW91bnQoXG5cbiAgICA8cD5cbiAgICAgIEEgc2ltcGxlIGFwcGxpY2F0aW9uLlxuICAgIDwvcD5cblxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCB3aXRoU3R5bGUoc2ltcGxlQXBwbGljYXRpb24pXFxgXG5cbiAgY29sb3I6ICMzMzM7XG5cblxcYDtgO1xuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcGVydGllcyA9IHtcbiAgICBjbGFzc05hbWU6IFwiamF2YXNjcmlwdFwiXG4gIH07XG59O1xuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBcImp1eHRhcG9zZVwiO1xuXG5pbXBvcnQgeyBCb2R5IH0gZnJvbSBcImVhc3lcIjtcblxuaW1wb3J0IHsgcmVuZGVyWWFwcFN0eWxlcyB9IGZyb20gXCIuL2luZGV4XCI7IC8vL1xuXG5pbXBvcnQgWE1MVmlldyBmcm9tIFwiLi9leGFtcGxlL3ZpZXcveG1sXCI7XG5pbXBvcnQgSlNPTlZpZXcgZnJvbSBcIi4vZXhhbXBsZS92aWV3L2pzb25cIjtcbmltcG9ydCBKYXZhU2NyaXB0VmlldyBmcm9tIFwiLi9leGFtcGxlL3ZpZXcvamF2YXNjcmlwdFwiO1xuXG5sZXQgVmlldztcblxuY29uc3QgYm9keSA9IG5ldyBCb2R5KCksXG4gICAgICBleGFtcGxlID0gd2luZG93LmxvY2F0aW9uLnNlYXJjaC5zdWJzdHJpbmcoMSk7ICAvLy9cblxuc3dpdGNoIChleGFtcGxlKSB7XG4gIGNhc2UgXCJ4bWxcIjogVmlldyA9IFhNTFZpZXc7IGJyZWFrO1xuICBjYXNlIFwianNvblwiOiBWaWV3ID0gSlNPTlZpZXc7IGJyZWFrO1xuICBjYXNlIFwiamF2YXNjcmlwdFwiOiBWaWV3ID0gSmF2YVNjcmlwdFZpZXc7IGJyZWFrO1xufVxuXG5yZW5kZXJZYXBwU3R5bGVzKCk7XG5cbmJvZHkubW91bnQoXG5cbiAgPFZpZXcgLz5cblxuKTtcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7OztBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVlLFVBQU0sU0FBTiwyQkFBQTt5QkFDRCxLQUFLLE1BQUk7O0FBQ25CLGVBQUssTUFBTTtBQUNYLGVBQUssT0FBTzs7OztZQUdkLEtBQUE7bUJBQUEsa0JBQVM7QUFDUCxxQkFBTyxLQUFLOzs7O1lBR2QsS0FBQTttQkFBQSxtQkFBVTtBQUNSLHFCQUFPLEtBQUs7Ozs7Ozt3QkFYSzs7Ozs7QUVGckI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRWUsVUFBTSxTQUFOLDJCQUFBO3lCQUNELEtBQUssTUFBTSxPQUFPLFFBQU07O0FBQ2xDLGVBQUssTUFBTTtBQUNYLGVBQUssT0FBTztBQUNaLGVBQUssUUFBUTtBQUNiLGVBQUss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
|
|
43724
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL29mZnNldC5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9saWIvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy9ib3VuZHMuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvbGliLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvY29uc3RhbnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy91dGlsaXRpZXMvb2JqZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy91dGlsaXRpZXMvYXJyYXkuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL3V0aWxpdGllcy9uYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy91dGlsaXRpZXMvZG9tLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy9taXhpbnMvZWxlbWVudC5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvdGV4dEVsZW1lbnQuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL3V0aWxpdGllcy9lbGVtZW50cy5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvbWl4aW5zL2pzeC5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvZXZlbnRUeXBlcy5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvbWl4aW5zL2tleS5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvbWl4aW5zL2NsaWNrLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy9taXhpbnMvc3RhdGUuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL2NvbnRlbnRUeXBlcy5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvbWl4aW5zL3Jlc2l6ZS5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvbWl4aW5zL2V2ZW50LmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy9taXhpbnMvbW91c2UuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL21peGlucy9zY3JvbGwuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL2VsZW1lbnQuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL2JvdW5kcy5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvcmVhY3QuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL2JvdW5kcy5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvZWxlbWVudC9ib2R5LmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L2xpYi9lbGVtZW50Lzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvZWxlbWVudC9saW5rLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L2xpYi9lbGVtZW50Lzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvbWl4aW5zL2NoYW5nZS5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvaW5wdXRFbGVtZW50LmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy9pbnB1dEVsZW1lbnQvaW5wdXQuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvbGliL2lucHV0RWxlbWVudC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL2VsZW1lbnQvYnV0dG9uLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L2xpYi9lbGVtZW50Lzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvZWxlbWVudC9zZWxlY3QuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL2VsZW1lbnQvY2hlY2tib3guanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL2lucHV0RWxlbWVudC90ZXh0YXJlYS5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9saWIvaW5wdXRFbGVtZW50Lzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvbWl4aW5zL3dpbmRvdy5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvd2luZG93LmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy9ib3VuZHMuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL2J1dHRvbnMuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL2RvY3VtZW50LmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvanV4dGFwb3NlL3NyYy9qdXh0YXBvc2UuanMiLCAibm9kZV9tb2R1bGVzL2p1eHRhcG9zZS9zcmMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL3dpdGgtc3R5bGUvc3JjL3RhZ05hbWVzLmpzIiwgIm5vZGVfbW9kdWxlcy9uZWNlc3Nhcnkvc3JjL2xldmVscy5qcyIsICJub2RlX21vZHVsZXMvbmVjZXNzYXJ5L3NyYy9tZXRob2RzLmpzIiwgIm5vZGVfbW9kdWxlcy9uZWNlc3Nhcnkvc3JjL2hlYWRlcnMuanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMva2V5Q29kZXMuanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvZW5jb2RpbmdzLmpzIiwgIm5vZGVfbW9kdWxlcy9uZWNlc3Nhcnkvc3JjL2NoYXJhY3RlcnMuanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvc3RhdHVzQ29kZXMuanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvY29udGVudFR5cGVzLmpzIiwgIm5vZGVfbW9kdWxlcy9uZWNlc3Nhcnkvc3JjL3N0YXR1c01lc3NhZ2VzLmpzIiwgIm5vZGVfbW9kdWxlcy9uZWNlc3Nhcnkvc3JjL3V0aWxpdGllcy9hcnJheS5qcyIsICJub2RlX21vZHVsZXMvbmVjZXNzYXJ5L3NyYy9jb25zdGFudHMuanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvdXRpbGl0aWVzL2h0dHAuanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvdXRpbGl0aWVzL2FqYXguanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvdXRpbGl0aWVzL3BhdGguanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvdXRpbGl0aWVzL2FzeW5jaHJvbm91cy5qcyIsICJub2RlX21vZHVsZXMvbmVjZXNzYXJ5L3NyYy9icm93c2VyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3V0aWxpdGllcy9jb250ZW50LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3R5cGVzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3Rva2VuLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvbGliLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy9jb25zdGFudHMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vc2lnbmlmaWNhbnQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9saWIvdG9rZW4vPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvbGliL3NyYy9jb25zdGFudHMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvY29uc3RhbnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3J1bGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvc3BlY2lhbFN5bWJvbHMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvYm5mL2VudHJpZXMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdXRpbGl0aWVzL3Rva2VuLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL2NvbW1vbi9sZXhlci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy90b2tlbi9ub25TaWduaWZpY2FudC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL2xpYi90b2tlbi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vbm9uU2lnbmlmaWNhbnQvd2hpdGVzcGFjZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL2xpYi90b2tlbi9ub25TaWduaWZpY2FudC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vc2lnbmlmaWNhbnQvcmVndWxhckV4cHJlc3Npb24uanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9saWIvdG9rZW4vc2lnbmlmaWNhbnQvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3Rva2VuL25vblNpZ25pZmljYW50L2VuZE9mTGluZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL2xpYi90b2tlbi9ub25TaWduaWZpY2FudC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vc2lnbmlmaWNhbnQvc3RyaW5nTGl0ZXJhbC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL2xpYi90b2tlbi9zaWduaWZpY2FudC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vc2lnbmlmaWNhbnQvc3RyaW5nTGl0ZXJhbC9kb3VibHlRdW90ZWQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9saWIvdG9rZW4vc2lnbmlmaWNhbnQvc3RyaW5nTGl0ZXJhbC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvYm5mL2xleGVyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvbGliL2JuZi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvYmFzaWMvZW50cmllcy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy90b2tlbi9zaWduaWZpY2FudC9zdHJpbmdMaXRlcmFsL3NpbmdseVF1b3RlZC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL2xpYi90b2tlbi9zaWduaWZpY2FudC9zdHJpbmdMaXRlcmFsLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L3NpbmdsZUxpbmUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9saWIvdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9zaW5nbGVMaW5lL3B5dGhvblN0eWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvbGliL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvc2luZ2xlTGluZS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9lbmRPZkxpbmUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9saWIvdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvZW5kT2YuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9saWIvdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL2VuZE9mL3B5dGhvblN0eWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvbGliL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL2VuZE9mLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9zdGFydE9mLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvbGliL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9zdGFydE9mL3B5dGhvblN0eWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvbGliL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL3N0YXJ0T2YvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL21pZGRsZU9mLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvbGliL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9taWRkbGVPZi9weXRob25TdHlsZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL2xpYi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9taWRkbGVPZi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvYmFzaWMvbGV4ZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9saWIvYmFzaWMvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3Rva2VuL3NpZ25pZmljYW50L2VuZE9mTGluZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL2xpYi90b2tlbi9zaWduaWZpY2FudC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vc2lnbmlmaWNhbnQvY29tbWVudC9lbmRPZkxpbmUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9saWIvdG9rZW4vc2lnbmlmaWNhbnQvY29tbWVudC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9zaW5nbGVMaW5lL2NTdHlsZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL2xpYi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L3NpbmdsZUxpbmUvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL2VuZE9mL2NTdHlsZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL2xpYi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9lbmRPZi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvc3RhcnRPZi9jU3R5bGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9saWIvdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvc3RhcnRPZi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvbWlkZGxlT2YvY1N0eWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvbGliL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL21pZGRsZU9mLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvd2l0aC1zdHlsZS9zcmMvY3NzL2VudHJpZXMuanMiLCAibm9kZV9tb2R1bGVzL3dpdGgtc3R5bGUvc3JjL2Nzcy9sZXhlci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL2JuZi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvY29uc3RhbnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy91dGlsaXRpZXMvc3RyaW5nLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2RlZmF1bHRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9zdGF0ZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy91dGlsaXRpZXMvYXJyYXkuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnNlVHJlZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFyc2VUcmVlL3ZlcnRpY2FsQnJhbmNoLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJzZVRyZWUvcnVsZU5hbWUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL3BhcnNlVHJlZS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnNlVHJlZS9ob3Jpem9udGFsQnJhbmNoLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJzZVRyZWUvY2hpbGROb2Rlcy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvcGFyc2VUcmVlLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFyc2VUcmVlL25vblRlcm1pbmFsTm9kZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvcGFyc2VUcmVlLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ub25UZXJtaW5hbC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvbm9kZS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL25vZGUvYm5mL25hbWUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL25vZGUvYm5mLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvdXRpbGl0aWVzL3BhcnQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3V0aWxpdGllcy9sb29rQWhlYWQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2RlZmluaXRpb24uanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFydC90ZXJtaW5hbC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvcGFydC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnNlVHJlZS90ZXJtaW5hbE5vZGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL3BhcnNlVHJlZS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL25vZGUvdGVybWluYWwuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL25vZGUvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJ0L3Rlcm1pbmFsL3NpZ25pZmljYW50VG9rZW5UeXBlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9wYXJ0L3Rlcm1pbmFsLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvZGVmaW5pdGlvbi9uYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9kZWZpbml0aW9uLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZU5hbWVzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL25hbWUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL3J1bGUvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJ0L25vblRlcm1pbmFsLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9wYXJ0Lzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFydFR5cGVzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJ0L25vblRlcm1pbmFsL29wdGlvbmFsUGFydC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFydC9ub25UZXJtaW5hbC9jb2xsZWN0aW9uT2ZQYXJ0cy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvcGFydC9ub25UZXJtaW5hbC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnQvbm9uVGVybWluYWwvb25lT3JNb3JlUGFydHMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnQvbm9uVGVybWluYWwvemVyb09yTW9yZVBhcnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy91dGlsaXRpZXMvYm5mLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL2JuZi9wYXJ0LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJ0L25vblRlcm1pbmFsL3J1bGVOYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9wYXJ0L25vblRlcm1pbmFsLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvZGVmaW5pdGlvbi9ydWxlTmFtZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvZGVmaW5pdGlvbi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2RlZmluaXRpb24vcGFydFJ1bGUvdGVybWluYWwuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL2RlZmluaXRpb24vcGFydFJ1bGUvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL3BhcnRSdWxlL25vblRlcm1pbmFsLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9kZWZpbml0aW9uL3BhcnRSdWxlLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS9wYXJ0LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9ydWxlLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvcnVsZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvbm9kZS9ibmYvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJ0L3Rlcm1pbmFsL3Rlcm1pbmFsU3ltYm9sLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9wYXJ0L3Rlcm1pbmFsLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvZGVmaW5pdGlvbi9ydWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9kZWZpbml0aW9uLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS9ydWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9ydWxlLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvZXJyb3IuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL25vZGUvYm5mLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFydC90ZXJtaW5hbC93aWxkY2FyZC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvcGFydC90ZXJtaW5hbC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2RlZmluaXRpb24vZXJyb3IuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL2RlZmluaXRpb24vPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL2Vycm9yLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9ydWxlLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvZG9jdW1lbnQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL25vZGUvYm5mLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFydC9ub25UZXJtaW5hbC9jaG9pY2VPZlBhcnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9wYXJ0L25vblRlcm1pbmFsLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvZGVmaW5pdGlvbi9kb2N1bWVudC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvZGVmaW5pdGlvbi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvZG9jdW1lbnQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL3J1bGUvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL2JuZi9ydWxlTmFtZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvbm9kZS9ibmYvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL3J1bGVOYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9ydWxlLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvd2lsZGNhcmQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL25vZGUvYm5mLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvZGVmaW5pdGlvbi90ZXJtaW5hbFN5bWJvbC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvZGVmaW5pdGlvbi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvd2lsZGNhcmQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL3J1bGUvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJzZVRyZWUvZW5kT2ZMaW5lTm9kZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvcGFyc2VUcmVlLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS90ZXJtaW5hbC9lbmRPZkxpbmUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL25vZGUvdGVybWluYWwvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJ0L3Rlcm1pbmFsL2VuZE9mTGluZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvcGFydC90ZXJtaW5hbC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL25vZGUvYm5mL2VuZE9mTGluZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvbm9kZS9ibmYvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL2VuZE9mTGluZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvcnVsZS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvcXVhbnRpZmllci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvcnVsZS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL25vZGUvYm5mL2RlZmluaXRpb24uanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL25vZGUvYm5mLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvZGVmaW5pdGlvbi9kZWZpbml0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9kZWZpbml0aW9uLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS9kZWZpbml0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9ydWxlLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvZGVmaW5pdGlvbnMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL25vZGUvYm5mLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFydC9ub25UZXJtaW5hbC9zZXF1ZW5jZU9mUGFydHMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL3BhcnQvbm9uVGVybWluYWwvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL2RlZmluaXRpb25zLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9kZWZpbml0aW9uLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS9kZWZpbml0aW9ucy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvcnVsZS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL25vZGUvYm5mL3BhcnQvdGVybWluYWwuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL25vZGUvYm5mL3BhcnQvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL3Rlcm1pbmFsUGFydC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvcnVsZS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL25vZGUvYm5mL2Nob2ljZU9mUGFydHMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL25vZGUvYm5mLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvZGVmaW5pdGlvbi9jaG9pY2VPZlBhcnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9kZWZpbml0aW9uLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS9jaG9pY2VPZlBhcnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9ydWxlLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvdGVybWluYWxTeW1ib2wuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL25vZGUvYm5mLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvZGVmaW5pdGlvbi9zaWduaWZpY2FudFRva2VuVHlwZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvZGVmaW5pdGlvbi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvdGVybWluYWxTeW1ib2wuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL3J1bGUvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL2JuZi9wYXJ0L25vblRlcm1pbmFsLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL3BhcnRSdWxlL25vblRlcm1pbmFsL3J1bGVOYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9kZWZpbml0aW9uL3BhcnRSdWxlL25vblRlcm1pbmFsLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS9ub25UZXJtaW5hbFBhcnQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL3J1bGUvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL2JuZi9zZXF1ZW5jZU9mUGFydHMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL25vZGUvYm5mLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvZGVmaW5pdGlvbi9zZXF1ZW5jZU9mUGFydHMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL2RlZmluaXRpb24vPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL3NlcXVlbmNlT2ZQYXJ0cy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvcnVsZS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnNlVHJlZS9ub1doaXRlc3BhY2VOb2RlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9wYXJzZVRyZWUvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL3Rlcm1pbmFsL25vV2hpdGVzcGFjZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvbm9kZS90ZXJtaW5hbC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnQvdGVybWluYWwvbm9XaGl0ZXNwYWNlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9wYXJ0L3Rlcm1pbmFsLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvbm9XaGl0ZXNwYWNlUGFydC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvbm9kZS9ibmYvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL25vV2hpdGVzcGFjZVBhcnQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL2RlZmluaXRpb24vPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL25vV2hpdGVzcGFjZVBhcnQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL3J1bGUvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL2JuZi9tb2RpZmllci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvbm9kZS9ibmYvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL2xvb2tBaGVhZE1vZGlmaWVyUnVsZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvZGVmaW5pdGlvbi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvbG9va0FoZWFkTW9kaWZpZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL3J1bGUvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL2FtYmlndW91c01vZGlmaWVyUnVsZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvZGVmaW5pdGlvbi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvYW1iaWd1b3VzTW9kaWZpZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL3J1bGUvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJ0L3Rlcm1pbmFsL3JlZ3VsYXJFeHByZXNzaW9uLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9wYXJ0L3Rlcm1pbmFsLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvcmVndWxhckV4cHJlc3Npb24uanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL25vZGUvYm5mLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS9yZWd1bGFyRXhwcmVzc2lvbi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvcnVsZS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL25vZGUvYm5mL3F1YW50aWZpZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL25vZGUvYm5mLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvZGVmaW5pdGlvbi9xdWFudGlmaWVyUnVsZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvZGVmaW5pdGlvbi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvb3B0aW9uYWxRdWFudGlmaWVyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9ydWxlLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS9vbmVPck1vcmVRdWFudGlmaWVyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9ydWxlLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS96ZXJvT3JNb3JlUXVhbnRpZmllci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvcnVsZS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL25vZGUvYm5mL3NpZ25pZmljYW50VG9rZW5UeXBlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL3NpZ25pZmljYW50VG9rZW5UeXBlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9ydWxlLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvdXRpbGl0aWVzL3J1bGVzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvcGFyc2VyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9ibmYvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9iYXNpYy9ibmYuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3V0aWxpdGllcy9wYXJzZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2NvbW1vbi9wYXJzZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL2NvbW1vbi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2Jhc2ljL3BhcnNlci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvYmFzaWMvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJ0cy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL3dpdGgtc3R5bGUvc3JjL2Nzcy9ibmYuanMiLCAibm9kZV9tb2R1bGVzL3dpdGgtc3R5bGUvc3JjL2Nzcy9wYXJzZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWRvbS9zcmMvdXRpbGl0aWVzL2FycmF5LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1kb20vc3JjL3NwcmVhZC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tZG9tL2xpYi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWRvbS9zcmMvcXVlcnkuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWRvbS9zcmMvdXRpbGl0aWVzL3F1ZXJ5LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1kb20vc3JjL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy93aXRoLXN0eWxlL3NyYy9jb25zdGFudHMuanMiLCAibm9kZV9tb2R1bGVzL3dpdGgtc3R5bGUvc3JjL3V0aWxpdGllcy9jb250ZW50LmpzIiwgIm5vZGVfbW9kdWxlcy93aXRoLXN0eWxlL3NyYy9zdHlsZS9kZWNsYXJhdGlvbi5qcyIsICJub2RlX21vZHVsZXMvd2l0aC1zdHlsZS9zcmMvc3R5bGUvZGVjbGFyYXRpb25zLmpzIiwgIm5vZGVfbW9kdWxlcy93aXRoLXN0eWxlL3NyYy9zdHlsZS9ydWxlU2V0LmpzIiwgIm5vZGVfbW9kdWxlcy93aXRoLXN0eWxlL3NyYy9zdHlsZS9ydWxlU2V0cy5qcyIsICJub2RlX21vZHVsZXMvd2l0aC1zdHlsZS9zcmMvc3R5bGUvbWVkaWEuanMiLCAibm9kZV9tb2R1bGVzL3dpdGgtc3R5bGUvc3JjL3N0eWxlL21lZGlhcy5qcyIsICJub2RlX21vZHVsZXMvd2l0aC1zdHlsZS9zcmMvc3R5bGUuanMiLCAibm9kZV9tb2R1bGVzL3dpdGgtc3R5bGUvc3JjL3V0aWxpdGllcy9zdHlsZXMuanMiLCAibm9kZV9tb2R1bGVzL3dpdGgtc3R5bGUvc3JjL3V0aWxpdGllcy9jbGFzc05hbWUuanMiLCAibm9kZV9tb2R1bGVzL3dpdGgtc3R5bGUvc3JjL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5LXdpdGgtc3R5bGUvc3JjL3V0aWxpdGllcy9jbGFzcy5qcyIsICJub2RlX21vZHVsZXMvZWFzeS13aXRoLXN0eWxlL3NyYy9jb25zdGFudHMuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3ktd2l0aC1zdHlsZS9zcmMvd2l0aFN0eWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5LXdpdGgtc3R5bGUvc3JjL2NvbnN0YW50cy5qcyIsICJub2RlX21vZHVsZXMvZWFzeS13aXRoLXN0eWxlL3NyYy9pbmRleC5qcyIsICJzcmMvdXRpbGl0aWVzL2Nzcy5qcyIsICJzcmMvY29uc3RhbnRzLmpzIiwgInNyYy9taXhpbnMvc3R5bGUuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3ktcmljaHRleHRhcmVhL3NyYy9zZWxlY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzL2Vhc3ktcmljaHRleHRhcmVhL2xpYi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL2Vhc3ktcmljaHRleHRhcmVhL3NyYy9yaWNoVGV4dGFyZWEuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3ktcmljaHRleHRhcmVhL2xpYi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL2Vhc3ktcmljaHRleHRhcmVhL3NyYy9icm93c2VyLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5LXJpY2h0ZXh0YXJlYS9zcmMvYnJvd3Nlci5qcyIsICJzcmMvc3R5bGVzLmpzIiwgInNyYy9jb2xvdXJzLmpzIiwgInNyYy9zY2hlbWUvY29sb3VyLmpzIiwgInNyYy9yaWNoVGV4dGFyZWEuanMiLCAic3JjL2xpbmVOdW1iZXJzLmpzIiwgInNyYy91dGlsaXRpZXMvdG9rZW5zLmpzIiwgInNyYy9ndXR0ZXIuanMiLCAic3JjL2VsZW1lbnQvc2Nyb2xsYWJsZS5qcyIsICJsaWIvZWxlbWVudC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAic3JjL3N5bnRheC5qcyIsICJzcmMvcHJldHR5UHJpbnRlci5qcyIsICJzcmMvdXRpbGl0aWVzL3Njcm9sbGJhclRoaWNrbmVzcy5qcyIsICJzcmMvcGx1Z2luLmpzIiwgInNyYy9sZXhlci95YXBwLmpzIiwgImxpYi9sZXhlci88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAic3JjL2xleGVyL3htbC5qcyIsICJsaWIvbGV4ZXIvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1ncmFtbWFyLXV0aWxpdGllcy9zcmMvdXRpbGl0aWVzL3J1bGVzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1ncmFtbWFyLXV0aWxpdGllcy9zcmMvdXRpbGl0aWVzL3JlY3Vyc2l2ZVBhcnQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXItdXRpbGl0aWVzL3NyYy91dGlsaXRpZXMvZGVmaW5pdGlvbi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tZ3JhbW1hci11dGlsaXRpZXMvc3JjL3R5cGVzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1ncmFtbWFyLXV0aWxpdGllcy9zcmMvZGVmaW5pdGlvbi9yZWN1cnNpdmUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXItdXRpbGl0aWVzL2xpYi9kZWZpbml0aW9uLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tZ3JhbW1hci11dGlsaXRpZXMvc3JjL2RlZmluaXRpb24vbGVmdFJlY3Vyc2l2ZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tZ3JhbW1hci11dGlsaXRpZXMvbGliL2RlZmluaXRpb24vPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1ncmFtbWFyLXV0aWxpdGllcy9zcmMvbm9kZS9yZWR1Y2VkLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1ncmFtbWFyLXV0aWxpdGllcy9saWIvbm9kZS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXItdXRpbGl0aWVzL3NyYy91dGlsaXRpZXMvY2xhc3MuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXItdXRpbGl0aWVzL3NyYy91dGlsaXRpZXMvcnVsZU5hbWUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXItdXRpbGl0aWVzL3NyYy9ydWxlL3JlZHVjZWQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXItdXRpbGl0aWVzL2xpYi9ydWxlLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tZ3JhbW1hci11dGlsaXRpZXMvc3JjL25vZGUvcmVwZWF0ZWQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXItdXRpbGl0aWVzL2xpYi9ub2RlLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tZ3JhbW1hci11dGlsaXRpZXMvc3JjL3J1bGUvcmVwZWF0ZWQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXItdXRpbGl0aWVzL2xpYi9ydWxlLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tZ3JhbW1hci11dGlsaXRpZXMvc3JjL3V0aWxpdGllcy9wYXJ0LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1ncmFtbWFyLXV0aWxpdGllcy9zcmMvZGVmaW5pdGlvbi9ydWxlTmFtZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tZ3JhbW1hci11dGlsaXRpZXMvbGliL2RlZmluaXRpb24vPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1ncmFtbWFyLXV0aWxpdGllcy9zcmMvcnVsZS9yZXdyaXR0ZW4uanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXItdXRpbGl0aWVzL2xpYi9ydWxlLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tZ3JhbW1hci11dGlsaXRpZXMvc3JjL3V0aWxpdGllcy9wYXJ0cy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tZ3JhbW1hci11dGlsaXRpZXMvc3JjL2RlZmluaXRpb24vcmVwZWF0ZWQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXItdXRpbGl0aWVzL3NyYy9kZWZpbml0aW9uL3Jld3JpdHRlbi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tZ3JhbW1hci11dGlsaXRpZXMvc3JjL3V0aWxpdGllcy9ydWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1ncmFtbWFyLXV0aWxpdGllcy9zcmMvZGVmaW5pdGlvbi9sZWZ0UmVjdXJzaXZlL2RpcmVjdGx5LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1ncmFtbWFyLXV0aWxpdGllcy9saWIvZGVmaW5pdGlvbi9sZWZ0UmVjdXJzaXZlLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tZ3JhbW1hci11dGlsaXRpZXMvc3JjL2RlZmluaXRpb24vbGVmdFJlY3Vyc2l2ZS9pbXBsaWNpdGx5LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1ncmFtbWFyLXV0aWxpdGllcy9zcmMvZGVmaW5pdGlvbi91bmFyeS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tZ3JhbW1hci11dGlsaXRpZXMvbGliL2RlZmluaXRpb24vPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1ncmFtbWFyLXV0aWxpdGllcy9zcmMvZGVmaW5pdGlvbi9sZWZ0UmVjdXJzaXZlL2luZGlyZWN0bHkuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXItdXRpbGl0aWVzL2xpYi9kZWZpbml0aW9uL2xlZnRSZWN1cnNpdmUvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1ncmFtbWFyLXV0aWxpdGllcy9zcmMvZWxpbWluYXRlTGVmdFJlY3Vyc2lvbi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tZ3JhbW1hci11dGlsaXRpZXMvc3JjL3V0aWxpdGllcy9wYXJzZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXItdXRpbGl0aWVzL3NyYy9yZW1vdmVPclJlbmFtZUludGVybWVkaWF0ZU5vZGVzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1ncmFtbWFyLXV0aWxpdGllcy9zcmMvaW5kZXguanMiLCAic3JjL3BhcnNlci95YXBwLmpzIiwgImxpYi9wYXJzZXIvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgInNyYy9wYXJzZXIveG1sLmpzIiwgImxpYi9wYXJzZXIvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgInNyYy90b2tlblR5cGVzLmpzIiwgInNyYy90b2tlbi9zaWduaWZpY2FudC9lcnJvci5qcyIsICJsaWIvdG9rZW4vc2lnbmlmaWNhbnQvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgInNyYy9wcm9jZXNzb3IuanMiLCAic3JjL3Rva2VuL3NpZ25pZmljYW50L25hbWUuanMiLCAibGliL3Rva2VuL3NpZ25pZmljYW50Lzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJzcmMvdG9rZW4vc2lnbmlmaWNhbnQvY29tbWVudC5qcyIsICJsaWIvdG9rZW4vc2lnbmlmaWNhbnQvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgInNyYy90b2tlbi9zaWduaWZpY2FudC9hdHRyaWJ1dGUuanMiLCAibGliL3Rva2VuL3NpZ25pZmljYW50Lzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJzcmMvcHJvY2Vzc29yL3htbC5qcyIsICJsaWIvcHJvY2Vzc29yLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJzcmMvbGFuZ3VhZ2VzLmpzIiwgInNyYy9wbHVnaW4veG1sLmpzIiwgImxpYi9wbHVnaW4vPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgInNyYy9sZXhlci9qc29uLmpzIiwgImxpYi9sZXhlci88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAic3JjL3BhcnNlci9qc29uLmpzIiwgImxpYi9wYXJzZXIvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgInNyYy9wcm9jZXNzb3IvanNvbi5qcyIsICJsaWIvcHJvY2Vzc29yLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJzcmMvcGx1Z2luL2pzb24uanMiLCAibGliL3BsdWdpbi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAic3JjL2xleGVyL3BsYWluVGV4dC5qcyIsICJsaWIvbGV4ZXIvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgInNyYy9wYXJzZXIvcGxhaW5UZXh0LmpzIiwgImxpYi9wYXJzZXIvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgInNyYy9wcm9jZXNzb3IvcGxhaW5UZXh0LmpzIiwgImxpYi9wcm9jZXNzb3IvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgInNyYy9wbHVnaW4vcGxhaW5UZXh0LmpzIiwgImxpYi9wbHVnaW4vPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgInNyYy9sZXhlci9qYXZhc2NyaXB0LmpzIiwgImxpYi9sZXhlci88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAic3JjL3BhcnNlci9qYXZhc2NyaXB0LmpzIiwgImxpYi9wYXJzZXIvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgInNyYy90b2tlbi9zaWduaWZpY2FudC9qc3guanMiLCAibGliL3Rva2VuL3NpZ25pZmljYW50Lzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJzcmMvdG9rZW4vc2lnbmlmaWNhbnQvc3RyaW5nLmpzIiwgImxpYi90b2tlbi9zaWduaWZpY2FudC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAic3JjL3Rva2VuL3NpZ25pZmljYW50L3ZhcmlhYmxlLmpzIiwgImxpYi90b2tlbi9zaWduaWZpY2FudC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAic3JjL3Rva2VuL3NpZ25pZmljYW50L2FyZ3VtZW50LmpzIiwgImxpYi90b2tlbi9zaWduaWZpY2FudC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAic3JjL3Byb2Nlc3Nvci9qYXZhc2NyaXB0LmpzIiwgImxpYi9wcm9jZXNzb3IvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgInNyYy9wbHVnaW4vamF2YXNjcmlwdC5qcyIsICJsaWIvcGx1Z2luLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJzcmMvdXRpbGl0aWVzL3BsdWdpbi5qcyIsICJzcmMvdXRpbGl0aWVzL3Byb3BlcnRpZXMuanMiLCAic3JjL3V0aWxpdGllcy9jb250ZW50LmpzIiwgInNyYy9kZWZhdWx0cy5qcyIsICJzcmMveWFwcC5qcyIsICJzcmMvc2NoZW1lL3N5bnRheC94bWwuanMiLCAic3JjL3N0eWxlL3N5bnRheC94bWwuanMiLCAic3JjL3NjaGVtZS9zeW50YXgvanNvbi5qcyIsICJzcmMvc3R5bGUvc3ludGF4L2pzb24uanMiLCAic3JjL3NjaGVtZS9zeW50YXgvZGVmYXVsdC5qcyIsICJzcmMvc3R5bGUvc3ludGF4L2RlZmF1bHQuanMiLCAic3JjL3NjaGVtZS9zeW50YXgvamF2YVNjcmlwdC5qcyIsICJzcmMvc3R5bGUvc3ludGF4L2phdmFTY3JpcHQuanMiLCAic3JjL3N0eWxlL3N5bnRheC5qcyIsICJzcmMvc3R5bGUvZmlyYUNvZGUuanMiLCAic3JjL3JlbmRlcllhcHBTdHlsZXMuanMiLCAic3JjL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5LWxheW91dC9zcmMvY29uc3RhbnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5LWxheW91dC9zcmMvY3Vyc29ycy5qcyIsICJub2RlX21vZHVsZXMvZWFzeS1sYXlvdXQvc3JjL2N1cnNvci5qcyIsICJub2RlX21vZHVsZXMvZWFzeS1sYXlvdXQvc3JjL2Rpdi9yb3cuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3ktbGF5b3V0L3NyYy9kaXYvcm93cy5qcyIsICJub2RlX21vZHVsZXMvZWFzeS1sYXlvdXQvc3JjL2Rpdi9jb2x1bW4uanMiLCAibm9kZV9tb2R1bGVzL2Vhc3ktbGF5b3V0L3NyYy9kaXYvY29sdW1ucy5qcyIsICJub2RlX21vZHVsZXMvZWFzeS1kcmFnLWFuZC1kcm9wL3NyYy9jb25zdGFudHMuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3ktZHJhZy1hbmQtZHJvcC9zcmMvdXRpbGl0aWVzL2V2ZW50LmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5LWRyYWctYW5kLWRyb3Avc3JjL21peGlucy9kcmFnLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5LWRyYWctYW5kLWRyb3AvbGliL3NyYy9jb25zdGFudHMuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3ktZHJhZy1hbmQtZHJvcC9zcmMvbWl4aW5zL2Ryb3AuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3ktZHJhZy1hbmQtZHJvcC9saWIvc3JjL2NvbnN0YW50cy5qcyIsICJub2RlX21vZHVsZXMvZWFzeS1kcmFnLWFuZC1kcm9wL3NyYy9lbGVtZW50L2RyYWcuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3ktZHJhZy1hbmQtZHJvcC9zcmMvZWxlbWVudC9kcm9wLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5LWRyYWctYW5kLWRyb3Avc3JjL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5LWxheW91dC9zcmMvZGl2L3NpemVhYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5LWxheW91dC9zcmMvc2VjdGlvbi9zaXplYWJsZS5qcyIsICJub2RlX21vZHVsZXMvZWFzeS1sYXlvdXQvc3JjL2Rpdi9zcGxpdHRlci5qcyIsICJub2RlX21vZHVsZXMvZWFzeS1sYXlvdXQvc3JjL2Rpdi9zcGxpdHRlci92ZXJ0aWNhbC5qcyIsICJub2RlX21vZHVsZXMvZWFzeS1sYXlvdXQvc3JjL2Rpdi9zcGxpdHRlci9ob3Jpem9udGFsLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5LWxheW91dC9zcmMvaW5kZXguanMiLCAic3JjL2V4YW1wbGUveWFwcC5qcyIsICJzcmMvZXhhbXBsZS9zdWJIZWFkaW5nLmpzIiwgInNyYy9leGFtcGxlL3RleHRhcmVhLmpzIiwgInNyYy9leGFtcGxlL3RleHRhcmVhL2JuZi5qcyIsICJsaWIvZXhhbXBsZS90ZXh0YXJlYS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAic3JjL2V4YW1wbGUvY29uc3RhbnRzLmpzIiwgInNyYy9leGFtcGxlL3RleHRhcmVhL3Rva2Vucy5qcyIsICJsaWIvZXhhbXBsZS90ZXh0YXJlYS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAic3JjL2V4YW1wbGUvZGl2L3NpemVhYmxlL3RvcC5qcyIsICJzcmMvZXhhbXBsZS9kaXYvc2l6ZWFibGUvbGVmdC5qcyIsICJzcmMvZXhhbXBsZS9kaXYvc2l6ZWFibGUvcmlnaHQuanMiLCAic3JjL2V4YW1wbGUvZGl2L3NpemVhYmxlL21pZGRsZS5qcyIsICJzcmMvZXhhbXBsZS90ZXh0YXJlYS9wYXJzZVRyZWUuanMiLCAibGliL2V4YW1wbGUvdGV4dGFyZWEvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgInNyYy9leGFtcGxlL3RleHRhcmVhL2xleGljYWxFbnRyaWVzLmpzIiwgImxpYi9leGFtcGxlL3RleHRhcmVhLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJzcmMvdXRpbGl0aWVzL3J1bGVzLmpzIiwgInNyYy9leGFtcGxlL3ZpZXcuanMiLCAic3JjL2V4YW1wbGUvdmlldy94bWwuanMiLCAibGliL2V4YW1wbGUvdmlldy88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAic3JjL2V4YW1wbGUvdmlldy9qc29uLmpzIiwgImxpYi9leGFtcGxlL3ZpZXcvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgInNyYy9leGFtcGxlL3ZpZXcvamF2YXNjcmlwdC5qcyIsICJsaWIvZXhhbXBsZS92aWV3Lzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJzcmMvZXhhbXBsZS5qcyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE9mZnNldCB7XG4gIGNvbnN0cnVjdG9yKHRvcCwgbGVmdCkge1xuICAgIHRoaXMudG9wID0gdG9wO1xuICAgIHRoaXMubGVmdCA9IGxlZnQ7XG4gIH1cblxuICBnZXRUb3AoKSB7XG4gICAgcmV0dXJuIHRoaXMudG9wO1xuICB9XG5cbiAgZ2V0TGVmdCgpIHtcbiAgICByZXR1cm4gdGhpcy5sZWZ0O1xuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQm91bmRzIHtcbiAgY29uc3RydWN0b3IodG9wLCBsZWZ0LCByaWdodCwgYm90dG9tKSB7XG4gICAgdGhpcy50b3AgPSB0b3A7XG4gICAgdGhpcy5sZWZ0ID0gbGVmdDtcbiAgICB0aGlzLnJpZ2h0ID0gcmlnaHQ7XG4gICAgdGhpcy5ib3R0b20gPSBib3R0b207XG4gIH1cblxuICBnZXRUb3AoKSB7XG4gICAgcmV0dXJuIHRoaXMudG9wO1xuICB9XG5cbiAgZ2V0TGVmdCgpIHtcbiAgICByZXR1cm4gdGhpcy5sZWZ0O1xuICB9XG5cbiAgZ2V0UmlnaHQoKSB7XG4gICAgcmV0dXJuIHRoaXMucmlnaHQ7XG4gIH1cblxuICBnZXRCb3R0b20oKSB7XG4gICAgcmV0dXJuIHRoaXMuYm90dG9tO1xuICB9XG5cbiAgZ2V0V2lkdGgoKSB7XG4gICAgY29uc3Qgd2lkdGggPSAodGhpcy5yaWdodCAtIHRoaXMubGVmdCk7XG5cbiAgICByZXR1cm4gd2lkdGg7XG4gIH1cblxuICBnZXRIZWlnaHQoKSB7XG4gICAgY29uc3QgaGVpZ2h0ID0gKHRoaXMuYm90dG9tIC0gdGhpcy50b3ApO1xuXG4gICAgcmV0dXJuIGhlaWdodDtcbiAgfVxuICBcbiAgc2V0VG9wKHRvcCkge1xuICAgIHRoaXMudG9wID0gdG9wO1xuICB9XG5cbiAgc2V0TGVmdChsZWZ0KSB7XG4gICAgdGhpcy5sZWZ0ID0gbGVmdDtcbiAgfVxuXG4gIHNldFJpZ2h0KHJpZ2h0KSB7XG4gICAgdGhpcy5yaWdodCA9IHJpZ2h0O1xuICB9XG5cbiAgc2V0Qm90dG9tKGJvdHRvbSkge1xuICAgIHRoaXMuYm90dG9tID0gYm90dG9tO1xuICB9XG5cbiAgc2hpZnQoaG9yaXpvbnRhbE9mZnNldCwgdmVydGljYWxPZmZzZXQpIHtcbiAgICB0aGlzLnRvcCArPSB2ZXJ0aWNhbE9mZnNldDtcbiAgICB0aGlzLmxlZnQgKz0gaG9yaXpvbnRhbE9mZnNldDtcbiAgICB0aGlzLnJpZ2h0ICs9IGhvcml6b250YWxPZmZzZXQ7XG4gICAgdGhpcy5ib3R0b20gKz0gdmVydGljYWxPZmZzZXQ7XG4gIH1cblxuICBpc092ZXJsYXBwaW5nTW91c2UobW91c2VUb3AsIG1vdXNlTGVmdCkge1xuICAgIHJldHVybiAoICAodGhpcy50b3AgPD0gbW91c2VUb3ApXG4gICAgICAgICAgICYmICh0aGlzLmxlZnQgPD0gbW91c2VMZWZ0KVxuICAgICAgICAgICAmJiAodGhpcy5yaWdodCA+IG1vdXNlTGVmdClcbiAgICAgICAgICAgJiYgKHRoaXMuYm90dG9tID4gbW91c2VUb3ApICApO1xuICB9XG5cbiAgYXJlT3ZlcmxhcHBpbmcoYm91bmRzKSB7XG4gICAgcmV0dXJuICggICh0aGlzLnRvcCA8IGJvdW5kcy5ib3R0b20pXG4gICAgICAgICAgICYmICh0aGlzLmxlZnQgPCBib3VuZHMucmlnaHQpXG4gICAgICAgICAgICYmICh0aGlzLnJpZ2h0ID4gYm91bmRzLmxlZnQpXG4gICAgICAgICAgICYmICh0aGlzLmJvdHRvbSA+IGJvdW5kcy50b3ApICApO1xuICB9XG5cbiAgc3RhdGljIGZyb21Cb3VuZGluZ0NsaWVudFJlY3QoYm91bmRpbmdDbGllbnRSZWN0KSB7XG4gICAgY29uc3Qgd2luZG93U2Nyb2xsVG9wID0gd2luZG93LnBhZ2VZT2Zmc2V0LCAvLy9cbiAgICAgICAgICB3aW5kb3dTY3JvbGxMZWZ0ID0gd2luZG93LnBhZ2VYT2Zmc2V0LCAgLy8vXG4gICAgICAgICAgdG9wID0gYm91bmRpbmdDbGllbnRSZWN0LnRvcCArIHdpbmRvd1Njcm9sbFRvcCxcbiAgICAgICAgICBsZWZ0ID0gYm91bmRpbmdDbGllbnRSZWN0LmxlZnQgKyB3aW5kb3dTY3JvbGxMZWZ0LFxuICAgICAgICAgIHJpZ2h0ID0gYm91bmRpbmdDbGllbnRSZWN0LnJpZ2h0ICsgd2luZG93U2Nyb2xsTGVmdCxcbiAgICAgICAgICBib3R0b20gPSBib3VuZGluZ0NsaWVudFJlY3QuYm90dG9tICsgd2luZG93U2Nyb2xsVG9wLFxuICAgICAgICAgIGJvdW5kcyA9IG5ldyBCb3VuZHModG9wLCBsZWZ0LCByaWdodCwgYm90dG9tKTtcblxuICAgIHJldHVybiBib3VuZHM7XG4gIH1cblxuICBzdGF0aWMgZnJvbVRvcExlZnRXaWR0aEFuZEhlaWdodCh0b3AsIGxlZnQsIHdpZHRoLCBoZWlnaHQpIHtcbiAgICBjb25zdCBib3R0b20gPSB0b3AgKyBoZWlnaHQsXG4gICAgICAgICAgcmlnaHQgPSBsZWZ0ICsgd2lkdGgsXG4gICAgICAgICAgYm91bmRzID0gbmV3IEJvdW5kcyh0b3AsIGxlZnQsIHJpZ2h0LCBib3R0b20pO1xuXG4gICAgcmV0dXJuIGJvdW5kcztcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBGT1IgPSBcImZvclwiO1xuZXhwb3J0IGNvbnN0IEJPRFkgPSBcImJvZHlcIjtcbmV4cG9ydCBjb25zdCBOT05FID0gXCJub25lXCI7XG5leHBvcnQgY29uc3QgU1BBQ0UgPSBcIiBcIjtcbmV4cG9ydCBjb25zdCBDTEFTUyA9IFwiY2xhc3NcIjtcbmV4cG9ydCBjb25zdCBXSURUSCA9IFwid2lkdGhcIjtcbmV4cG9ydCBjb25zdCBCTE9DSyA9IFwiYmxvY2tcIjtcbmV4cG9ydCBjb25zdCBIRUlHSFQgPSBcImhlaWdodFwiO1xuZXhwb3J0IGNvbnN0IE9CSkVDVCA9IFwib2JqZWN0XCI7XG5leHBvcnQgY29uc3QgU1RSSU5HID0gXCJzdHJpbmdcIjtcbmV4cG9ydCBjb25zdCBESVNQTEFZID0gXCJkaXNwbGF5XCI7XG5leHBvcnQgY29uc3QgQk9PTEVBTiA9IFwiYm9vbGVhblwiO1xuZXhwb3J0IGNvbnN0IERJU0FCTEVEID0gXCJkaXNhYmxlZFwiO1xuZXhwb3J0IGNvbnN0IEZVTkNUSU9OID0gXCJmdW5jdGlvblwiO1xuZXhwb3J0IGNvbnN0IFdJTERDQVJEID0gXCIqXCI7XG5leHBvcnQgY29uc3QgSFRNTF9GT1IgPSBcImh0bWxGb3JcIjtcbmV4cG9ydCBjb25zdCBVTkRFRklORUQgPSAndW5kZWZpbmVkJztcbmV4cG9ydCBjb25zdCBDTEFTU19OQU1FID0gXCJjbGFzc05hbWVcIjtcbmV4cG9ydCBjb25zdCBBQk9VVF9CTEFOSyA9IFwiYWJvdXQ6YmxhbmtcIjtcbmV4cG9ydCBjb25zdCBFTVBUWV9TVFJJTkcgPSBcIlwiO1xuZXhwb3J0IGNvbnN0IFNWR19OQU1FU1BBQ0VfVVJJID0gXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfUFJPUEVSVElFUyA9IFwiZGVmYXVsdFByb3BlcnRpZXNcIjtcbmV4cG9ydCBjb25zdCBJR05PUkVEX1BST1BFUlRJRVMgPSBcImlnbm9yZWRQcm9wZXJ0aWVzXCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEJPT0xFQU4gfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5lKHRhcmdldCwgc291cmNlID0ge30pIHtcbiAgdGFyZ2V0ID0geyAuLi50YXJnZXQgfTsgIC8vL1xuXG4gIGNvbnN0IG5hbWVzID0gT2JqZWN0LmtleXMoc291cmNlKTsgIC8vL1xuXG4gIG5hbWVzLmZvckVhY2goKG5hbWUpID0+IHtcbiAgICBjb25zdCB0YXJnZXRWYWx1ZSA9IHRhcmdldFtuYW1lXSxcbiAgICAgICAgICBzb3VyY2VWYWx1ZSA9IHNvdXJjZVtuYW1lXSxcbiAgICAgICAgICB0YXJnZXRIYXNPd25Qcm9wZXJ0eSA9IHRhcmdldC5oYXNPd25Qcm9wZXJ0eShuYW1lKTtcblxuICAgIHRhcmdldFtuYW1lXSA9IHRhcmdldEhhc093blByb3BlcnR5ID9cbiAgICAgICAgICAgICAgICAgICAgIGNvbWJpbmVWYWx1ZXModGFyZ2V0VmFsdWUsIHNvdXJjZVZhbHVlKSA6XG4gICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZVZhbHVlOyAvLy9cbiAgfSk7XG5cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBydW5lKHRhcmdldCwgbmFtZXMgPSBbXSkge1xuICB0YXJnZXQgPSB7IC4uLnRhcmdldCB9OyAgLy8vXG5cbiAgbmFtZXMuZm9yRWFjaCgobmFtZSkgPT4ge1xuICAgIGNvbnN0IHRhcmdldEhhc093blByb3BlcnR5ID0gdGFyZ2V0Lmhhc093blByb3BlcnR5KG5hbWUpO1xuXG4gICAgaWYgKHRhcmdldEhhc093blByb3BlcnR5KSB7XG4gICAgICBkZWxldGUgdGFyZ2V0W25hbWVdO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuZnVuY3Rpb24gY29tYmluZVZhbHVlcyh0YXJnZXRWYWx1ZSwgc291cmNlVmFsdWUpIHtcbiAgY29uc3QgdGFyZ2V0VmFsdWVCb29sZWFuID0gaXNWYWx1ZUJvb2xlYW4odGFyZ2V0VmFsdWUpLFxuICAgICAgICBzb3VyY2VWYWx1ZUJvb2xlYW4gPSBpc1ZhbHVlQm9vbGVhbihzb3VyY2VWYWx1ZSksXG4gICAgICAgIGNvbWJpbmVkVmFsdWUgPSAodGFyZ2V0VmFsdWVCb29sZWFuICYmIHNvdXJjZVZhbHVlQm9vbGVhbikgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRWYWx1ZSA6IC8vL1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAke3RhcmdldFZhbHVlfSAke3NvdXJjZVZhbHVlfWA7XG5cbiAgcmV0dXJuIGNvbWJpbmVkVmFsdWU7XG59XG5cbmZ1bmN0aW9uIGlzVmFsdWVCb29sZWFuKHZhbHVlKSB7XG4gIGNvbnN0IHZhbHVlQm9vbGVhbiA9ICh0eXBlb2YgdmFsdWUgPT09IEJPT0xFQU4pO1xuXG4gIHJldHVybiB2YWx1ZUJvb2xlYW47XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBmaXJzdChhcnJheSkgeyByZXR1cm4gYXJyYXlbMF07IH1cblxuZXhwb3J0IGZ1bmN0aW9uIHB1c2goYXJyYXkxLCBhcnJheTIpIHsgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoYXJyYXkxLCBhcnJheTIpOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBhdWdtZW50KGFycmF5MSwgYXJyYXkyLCB0ZXN0KSB7XG4gIGFycmF5MSA9IFsgLi4uYXJyYXkxIF07IC8vL1xuXG4gIGFycmF5Mi5mb3JFYWNoKChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHBhc3NlZCA9IHRlc3QoZWxlbWVudCwgaW5kZXgpO1xuXG4gICAgaWYgKHBhc3NlZCkge1xuICAgICAgYXJyYXkxLnB1c2goZWxlbWVudCk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gYXJyYXkxO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmxhdHRlbihhcnJheSkge1xuICByZXR1cm4gYXJyYXkucmVkdWNlKChhcnJheSwgZWxlbWVudCkgPT4ge1xuICAgIGFycmF5ID0gYXJyYXkuY29uY2F0KGVsZW1lbnQpOyAgLy8vXG5cbiAgICByZXR1cm4gYXJyYXk7XG4gIH0sIFtdKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGd1YXJhbnRlZShhcnJheU9yRWxlbWVudCkge1xuICBhcnJheU9yRWxlbWVudCA9IGFycmF5T3JFbGVtZW50IHx8IFtdO1xuXG4gIHJldHVybiAoYXJyYXlPckVsZW1lbnQgaW5zdGFuY2VvZiBBcnJheSkgP1xuICAgICAgICAgICAgYXJyYXlPckVsZW1lbnQgOlxuICAgICAgICAgICAgICBbYXJyYXlPckVsZW1lbnRdO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNTVkdUYWdOYW1lKHRhZ05hbWUpIHtcbiAgcmV0dXJuIHN2Z1RhZ05hbWVzLmluY2x1ZGVzKHRhZ05hbWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNTVkdBdHRyaWJ1dGVOYW1lKGF0dHJpYnV0ZU5hbWUpIHtcbiAgcmV0dXJuIHN2Z0F0dHJpYnV0ZU5hbWVzLmluY2x1ZGVzKGF0dHJpYnV0ZU5hbWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNIVE1MQXR0cmlidXRlTmFtZShhdHRyaWJ1dGVOYW1lKSB7XG4gIHJldHVybiBodG1sQXR0cmlidXRlTmFtZXMuaW5jbHVkZXMoYXR0cmlidXRlTmFtZSk7XG59XG5cbmNvbnN0IHN2Z1RhZ05hbWVzID0gW1xuICAgICAgICBcImFsdEdseXBoXCIsIFwiYW5pbWF0ZVwiLCBcImFuaW1hdGVDb2xvclwiLCBcImFuaW1hdGVNb3Rpb25cIiwgXCJhbmltYXRlVHJhbnNmb3JtXCIsIFwiYW5pbWF0aW9uXCIsIFwiYXVkaW9cIixcbiAgICAgICAgXCJjaXJjbGVcIiwgXCJjbGlwUGF0aFwiLCBcImNvbG9yLXByb2ZpbGVcIiwgXCJjdXJzb3JcIixcbiAgICAgICAgXCJkZWZzXCIsIFwiZGVzY1wiLCBcImRpc2NhcmRcIixcbiAgICAgICAgXCJlbGxpcHNlXCIsXG4gICAgICAgIFwiZmVCbGVuZFwiLCBcImZlQ29sb3JNYXRyaXhcIiwgXCJmZUNvbXBvbmVudFRyYW5zZmVyXCIsIFwiZmVDb21wb3NpdGVcIiwgXCJmZUNvbnZvbHZlTWF0cml4XCIsIFwiZmVEaWZmdXNlTGlnaHRpbmdcIiwgXCJmZURpc3BsYWNlbWVudE1hcFwiLCBcImZlRGlzdGFudExpZ2h0XCIsIFwiZmVEcm9wU2hhZG93XCIsIFwiZmVGbG9vZFwiLCBcImZlRnVuY0FcIiwgXCJmZUZ1bmNCXCIsIFwiZmVGdW5jR1wiLCBcImZlRnVuY1JcIiwgXCJmZUdhdXNzaWFuQmx1clwiLCBcImZlSW1hZ2VcIiwgXCJmZU1lcmdlXCIsIFwiZmVNZXJnZU5vZGVcIiwgXCJmZU1vcnBob2xvZ3lcIiwgXCJmZU9mZnNldFwiLCBcImZlUG9pbnRMaWdodFwiLCBcImZlU3BlY3VsYXJMaWdodGluZ1wiLCBcImZlU3BvdExpZ2h0XCIsIFwiZmVUaWxlXCIsIFwiZmVUdXJidWxlbmNlXCIsIFwiZmlsdGVyXCIsIFwiZm9udFwiLCBcImZvbnQtZmFjZVwiLCBcImZvbnQtZmFjZS1mb3JtYXRcIiwgXCJmb250LWZhY2UtbmFtZVwiLCBcImZvbnQtZmFjZS11cmlcIiwgXCJmb3JlaWduT2JqZWN0XCIsXG4gICAgICAgIFwiZ1wiLCBcImdseXBoXCIsIFwiZ2x5cGhSZWZcIixcbiAgICAgICAgXCJoYW5kbGVyXCIsIFwiaGF0Y2hcIiwgXCJoYXRjaHBhdGhcIiwgXCJoa2VyblwiLFxuICAgICAgICBcImltYWdlXCIsIFwibGluZVwiLCBcImxpbmVhckdyYWRpZW50XCIsXG4gICAgICAgIFwibGlzdGVuZXJcIixcbiAgICAgICAgXCJtYXJrZXJcIiwgXCJtYXNrXCIsIFwibWVzaFwiLCBcIm1lc2hncmFkaWVudFwiLCBcIm1lc2hwYXRjaFwiLCBcIm1lc2hyb3dcIiwgXCJtZXRhZGF0YVwiLCBcIm1pc3NpbmctZ2x5cGhcIiwgXCJtcGF0aFwiLFxuICAgICAgICBcInBhdGhcIiwgXCJwYXR0ZXJuXCIsIFwicG9seWdvblwiLCBcInBvbHlsaW5lXCIsIFwicHJlZmV0Y2hcIixcbiAgICAgICAgXCJyYWRpYWxHcmFkaWVudFwiLCBcInJlY3RcIixcbiAgICAgICAgXCJzY3JpcHRcIiwgXCJzZXRcIiwgXCJzb2xpZGNvbG9yXCIsIFwic3RvcFwiLCBcInN0eWxlXCIsIFwic3ZnXCIsIFwic3dpdGNoXCIsIFwic3ltYm9sXCIsXG4gICAgICAgIFwidGJyZWFrXCIsIFwidGV4dFwiLCBcInRleHRBcmVhXCIsIFwidGV4dFBhdGhcIiwgXCJ0aXRsZVwiLCBcInRyZWZcIiwgXCJ0c3BhblwiLFxuICAgICAgICBcInVua25vd25cIiwgXCJ1c2VcIixcbiAgICAgICAgXCJ2aWRlb1wiLCBcInZpZXdcIiwgXCJ2a2VyblwiXG4gICAgICBdLFxuICAgICAgc3ZnQXR0cmlidXRlTmFtZXMgPSBbXG4gICAgICAgIFwiYWNjZW50LWhlaWdodFwiLCBcImFjY3VtdWxhdGVcIiwgXCJhZGRpdGl2ZVwiLCBcImFsaWdubWVudC1iYXNlbGluZVwiLCBcImFscGhhYmV0aWNcIiwgXCJhbXBsaXR1ZGVcIiwgXCJhcmFiaWMtZm9ybVwiLCBcImFzY2VudFwiLCBcImF0dHJpYnV0ZU5hbWVcIiwgXCJhdHRyaWJ1dGVUeXBlXCIsIFwiYXppbXV0aFwiLFxuICAgICAgICBcImJhbmR3aWR0aFwiLCBcImJhc2VGcmVxdWVuY3lcIiwgXCJiYXNlUHJvZmlsZVwiLCBcImJhc2VsaW5lLXNoaWZ0XCIsIFwiYmJveFwiLCBcImJlZ2luXCIsIFwiYmlhc1wiLCBcImJ5XCIsXG4gICAgICAgIFwiY2FsY01vZGVcIiwgXCJjYXAtaGVpZ2h0XCIsIFwiY2xpcFwiLCBcImNsYXNzTmFtZVwiLCBcImNsaXAtcGF0aFwiLCBcImNsaXAtcnVsZVwiLCBcImNsaXBQYXRoVW5pdHNcIiwgXCJjb2xvclwiLCBcImNvbG9yLWludGVycG9sYXRpb25cIiwgXCJjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnNcIiwgXCJjb2xvci1wcm9maWxlXCIsIFwiY29sb3ItcmVuZGVyaW5nXCIsIFwiY29udGVudFNjcmlwdFR5cGVcIiwgXCJjb250ZW50U3R5bGVUeXBlXCIsIFwiY3Jvc3NvcmlnaW5cIiwgXCJjdXJzb3JcIiwgXCJjeFwiLCBcImN5XCIsXG4gICAgICAgIFwiZFwiLCBcImRlZmF1bHRBY3Rpb25cIiwgXCJkZXNjZW50XCIsIFwiZGlmZnVzZUNvbnN0YW50XCIsIFwiZGlyZWN0aW9uXCIsIFwiZGlzcGxheVwiLCBcImRpdmlzb3JcIiwgXCJkb21pbmFudC1iYXNlbGluZVwiLCBcImRvd25sb2FkXCIsIFwiZHVyXCIsIFwiZHhcIiwgXCJkeVwiLFxuICAgICAgICBcImVkZ2VNb2RlXCIsIFwiZWRpdGFibGVcIiwgXCJlbGV2YXRpb25cIiwgXCJlbmFibGUtYmFja2dyb3VuZFwiLCBcImVuZFwiLCBcImV2ZW50XCIsIFwiZXhwb25lbnRcIiwgXCJleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkXCIsXG4gICAgICAgIFwiZmlsbFwiLCBcImZpbGwtb3BhY2l0eVwiLCBcImZpbGwtcnVsZVwiLCBcImZpbHRlclwiLCBcImZpbHRlclJlc1wiLCBcImZpbHRlclVuaXRzXCIsIFwiZmxvb2QtY29sb3JcIiwgXCJmbG9vZC1vcGFjaXR5XCIsIFwiZm9jdXNIaWdobGlnaHRcIiwgXCJmb2N1c2FibGVcIiwgXCJmb250LWZhbWlseVwiLCBcImZvbnQtc2l6ZVwiLCBcImZvbnQtc2l6ZS1hZGp1c3RcIiwgXCJmb250LXN0cmV0Y2hcIiwgXCJmb250LXN0eWxlXCIsIFwiZm9udC12YXJpYW50XCIsIFwiZm9udC13ZWlnaHRcIiwgXCJmb3JtYXRcIiwgXCJmclwiLCBcImZyb21cIiwgXCJmeFwiLCBcImZ5XCIsXG4gICAgICAgIFwiZzFcIiwgXCJnMlwiLCBcImdseXBoLW5hbWVcIiwgXCJnbHlwaC1vcmllbnRhdGlvbi1ob3Jpem9udGFsXCIsIFwiZ2x5cGgtb3JpZW50YXRpb24tdmVydGljYWxcIiwgXCJnbHlwaFJlZlwiLCBcImdyYWRpZW50VHJhbnNmb3JtXCIsIFwiZ3JhZGllbnRVbml0c1wiLFxuICAgICAgICBcImhhbmRsZXJcIiwgXCJoYW5naW5nXCIsIFwiaGF0Y2hDb250ZW50VW5pdHNcIiwgXCJoYXRjaFVuaXRzXCIsIFwiaGVpZ2h0XCIsIFwiaG9yaXotYWR2LXhcIiwgXCJob3Jpei1vcmlnaW4teFwiLCBcImhvcml6LW9yaWdpbi15XCIsIFwiaHJlZlwiLCBcImhyZWZsYW5nXCIsXG4gICAgICAgIFwiaWRcIiwgXCJpZGVvZ3JhcGhpY1wiLCBcImltYWdlLXJlbmRlcmluZ1wiLCBcImluXCIsIFwiaW4yXCIsIFwiaW5pdGlhbFZpc2liaWxpdHlcIiwgXCJpbnRlcmNlcHRcIixcbiAgICAgICAgXCJrXCIsIFwiazFcIiwgXCJrMlwiLCBcImszXCIsIFwiazRcIiwgXCJrZXJuZWxNYXRyaXhcIiwgXCJrZXJuZWxVbml0TGVuZ3RoXCIsIFwia2VybmluZ1wiLCBcImtleVBvaW50c1wiLCBcImtleVNwbGluZXNcIiwgXCJrZXlUaW1lc1wiLFxuICAgICAgICBcImxlbmd0aEFkanVzdFwiLCBcImxldHRlci1zcGFjaW5nXCIsIFwibGlnaHRpbmctY29sb3JcIiwgXCJsaW1pdGluZ0NvbmVBbmdsZVwiLCBcImxvY2FsXCIsXG4gICAgICAgIFwibWFya2VyLWVuZFwiLCBcIm1hcmtlci1taWRcIiwgXCJtYXJrZXItc3RhcnRcIiwgXCJtYXJrZXJIZWlnaHRcIiwgXCJtYXJrZXJVbml0c1wiLCBcIm1hcmtlcldpZHRoXCIsIFwibWFza1wiLCBcIm1hc2tDb250ZW50VW5pdHNcIiwgXCJtYXNrVW5pdHNcIiwgXCJtYXRoZW1hdGljYWxcIiwgXCJtYXhcIiwgXCJtZWRpYVwiLCBcIm1lZGlhQ2hhcmFjdGVyRW5jb2RpbmdcIiwgXCJtZWRpYUNvbnRlbnRFbmNvZGluZ3NcIiwgXCJtZWRpYVNpemVcIiwgXCJtZWRpYVRpbWVcIiwgXCJtZXRob2RcIiwgXCJtaW5cIiwgXCJtb2RlXCIsXG4gICAgICAgIFwibmFtZVwiLCBcIm5hdi1kb3duXCIsIFwibmF2LWRvd24tbGVmdFwiLCBcIm5hdi1kb3duLXJpZ2h0XCIsIFwibmF2LWxlZnRcIiwgXCJuYXYtbmV4dFwiLCBcIm5hdi1wcmV2XCIsIFwibmF2LXJpZ2h0XCIsIFwibmF2LXVwXCIsIFwibmF2LXVwLWxlZnRcIiwgXCJuYXYtdXAtcmlnaHRcIiwgXCJudW1PY3RhdmVzXCIsXG4gICAgICAgIFwib2JzZXJ2ZXJcIiwgXCJvZmZzZXRcIiwgXCJvcGFjaXR5XCIsIFwib3BlcmF0b3JcIiwgXCJvcmRlclwiLCBcIm9yaWVudFwiLCBcIm9yaWVudGF0aW9uXCIsIFwib3JpZ2luXCIsIFwib3ZlcmZsb3dcIiwgXCJvdmVybGF5XCIsIFwib3ZlcmxpbmUtcG9zaXRpb25cIiwgXCJvdmVybGluZS10aGlja25lc3NcIixcbiAgICAgICAgXCJwYW5vc2UtMVwiLCBcInBhdGhcIiwgXCJwYXRoTGVuZ3RoXCIsIFwicGF0dGVybkNvbnRlbnRVbml0c1wiLCBcInBhdHRlcm5UcmFuc2Zvcm1cIiwgXCJwYXR0ZXJuVW5pdHNcIiwgXCJwaGFzZVwiLCBcInBpdGNoXCIsIFwicGxheWJhY2tPcmRlclwiLCBcInBsYXliYWNrb3JkZXJcIiwgXCJwb2ludGVyLWV2ZW50c1wiLCBcInBvaW50c1wiLCBcInBvaW50c0F0WFwiLCBcInBvaW50c0F0WVwiLCBcInBvaW50c0F0WlwiLCBcInByZXNlcnZlQWxwaGFcIiwgXCJwcmVzZXJ2ZUFzcGVjdFJhdGlvXCIsIFwicHJpbWl0aXZlVW5pdHNcIiwgXCJwcm9wYWdhdGVcIixcbiAgICAgICAgXCJyXCIsIFwicmFkaXVzXCIsIFwicmVmWFwiLCBcInJlZllcIiwgXCJyZW5kZXJpbmctaW50ZW50XCIsIFwicmVwZWF0Q291bnRcIiwgXCJyZXBlYXREdXJcIiwgXCJyZXF1aXJlZEV4dGVuc2lvbnNcIiwgXCJyZXF1aXJlZEZlYXR1cmVzXCIsIFwicmVxdWlyZWRGb250c1wiLCBcInJlcXVpcmVkRm9ybWF0c1wiLCBcInJlc3RhcnRcIiwgXCJyZXN1bHRcIiwgXCJyb3RhdGVcIiwgXCJyeFwiLCBcInJ5XCIsXG4gICAgICAgIFwic2NhbGVcIiwgXCJzZWVkXCIsIFwic2hhcGUtcmVuZGVyaW5nXCIsIFwic2lkZVwiLCBcInNsb3BlXCIsIFwic25hcHNob3RUaW1lXCIsIFwic3BhY2luZ1wiLCBcInNwZWN1bGFyQ29uc3RhbnRcIiwgXCJzcGVjdWxhckV4cG9uZW50XCIsIFwic3ByZWFkTWV0aG9kXCIsIFwic3JjXCIsIFwic3RhcnRPZmZzZXRcIiwgXCJzdGREZXZpYXRpb25cIiwgXCJzdGVtaFwiLCBcInN0ZW12XCIsIFwic3RpdGNoVGlsZXNcIiwgXCJzdG9wLWNvbG9yXCIsIFwic3RvcC1vcGFjaXR5XCIsIFwic3RyaWtldGhyb3VnaC1wb3NpdGlvblwiLCBcInN0cmlrZXRocm91Z2gtdGhpY2tuZXNzXCIsIFwic3RyaW5nXCIsIFwic3Ryb2tlXCIsIFwic3Ryb2tlLWRhc2hhcnJheVwiLCBcInN0cm9rZS1kYXNob2Zmc2V0XCIsIFwic3Ryb2tlLWxpbmVjYXBcIiwgXCJzdHJva2UtbGluZWpvaW5cIiwgXCJzdHJva2UtbWl0ZXJsaW1pdFwiLCBcInN0cm9rZS1vcGFjaXR5XCIsIFwic3Ryb2tlLXdpZHRoXCIsIFwic3R5bGVcIiwgXCJzdXJmYWNlU2NhbGVcIiwgXCJzeW5jQmVoYXZpb3JcIiwgXCJzeW5jQmVoYXZpb3JEZWZhdWx0XCIsIFwic3luY01hc3RlclwiLCBcInN5bmNUb2xlcmFuY2VcIiwgXCJzeW5jVG9sZXJhbmNlRGVmYXVsdFwiLCBcInN5c3RlbUxhbmd1YWdlXCIsXG4gICAgICAgIFwidGFibGVWYWx1ZXNcIiwgXCJ0YXJnZXRcIiwgXCJ0YXJnZXRYXCIsIFwidGFyZ2V0WVwiLCBcInRleHQtYW5jaG9yXCIsIFwidGV4dC1kZWNvcmF0aW9uXCIsIFwidGV4dC1yZW5kZXJpbmdcIiwgXCJ0ZXh0TGVuZ3RoXCIsIFwidGltZWxpbmVCZWdpblwiLCBcInRpbWVsaW5lYmVnaW5cIiwgXCJ0aXRsZVwiLCBcInRvXCIsIFwidHJhbnNmb3JtXCIsIFwidHJhbnNmb3JtQmVoYXZpb3JcIiwgXCJ0eXBlXCIsXG4gICAgICAgIFwidTFcIiwgXCJ1MlwiLCBcInVuZGVybGluZS1wb3NpdGlvblwiLCBcInVuZGVybGluZS10aGlja25lc3NcIiwgXCJ1bmljb2RlXCIsIFwidW5pY29kZS1iaWRpXCIsIFwidW5pY29kZS1yYW5nZVwiLCBcInVuaXRzLXBlci1lbVwiLFxuICAgICAgICBcInYtYWxwaGFiZXRpY1wiLCBcInYtaGFuZ2luZ1wiLCBcInYtaWRlb2dyYXBoaWNcIiwgXCJ2LW1hdGhlbWF0aWNhbFwiLCBcInZhbHVlc1wiLCBcInZlcnNpb25cIiwgXCJ2ZXJ0LWFkdi15XCIsIFwidmVydC1vcmlnaW4teFwiLCBcInZlcnQtb3JpZ2luLXlcIiwgXCJ2aWV3Qm94XCIsIFwidmlld1RhcmdldFwiLCBcInZpc2liaWxpdHlcIixcbiAgICAgICAgXCJ3aWR0aFwiLCBcIndpZHRoc1wiLCBcIndvcmQtc3BhY2luZ1wiLCBcIndyaXRpbmctbW9kZVwiLFxuICAgICAgICBcInhcIiwgXCJ4LWhlaWdodFwiLCBcIngxXCIsIFwieDJcIiwgXCJ4Q2hhbm5lbFNlbGVjdG9yXCIsXG4gICAgICAgIFwieVwiLCBcInkxXCIsIFwieTJcIiwgXCJ5Q2hhbm5lbFNlbGVjdG9yXCIsXG4gICAgICAgIFwielwiLCBcInpvb21BbmRQYW5cIlxuICAgICAgXSxcbiAgICAgIGh0bWxBdHRyaWJ1dGVOYW1lcyA9IFtcbiAgICAgICAgXCJhY2NlcHRcIiwgXCJhY2NlcHRDaGFyc2V0XCIsIFwiYWNjZXNzS2V5XCIsIFwiYWN0aW9uXCIsIFwiYWxsb3dcIiwgXCJhbGxvd0Z1bGxTY3JlZW5cIiwgXCJhbGxvd1RyYW5zcGFyZW5jeVwiLCBcImFsdFwiLCBcImFzeW5jXCIsIFwiYXV0b0NvbXBsZXRlXCIsIFwiYXV0b0ZvY3VzXCIsIFwiYXV0b1BsYXlcIixcbiAgICAgICAgXCJjYXB0dXJlXCIsIFwiY2VsbFBhZGRpbmdcIiwgXCJjZWxsU3BhY2luZ1wiLCBcImNoYWxsZW5nZVwiLCBcImNoYXJTZXRcIiwgXCJjaGVja2VkXCIsIFwiY2l0ZVwiLCBcImNsYXNzSURcIiwgXCJjbGFzc05hbWVcIiwgXCJjb2xTcGFuXCIsIFwiY29sc1wiLCBcImNvbnRlbnRcIiwgXCJjb250ZW50RWRpdGFibGVcIiwgXCJjb250ZXh0TWVudVwiLCBcImNvbnRyb2xzXCIsIFwiY29vcmRzXCIsIFwiY3Jvc3NPcmlnaW5cIixcbiAgICAgICAgXCJkYXRhXCIsIFwiZGF0ZVRpbWVcIiwgXCJkZWZhdWx0XCIsIFwiZGVmZXJcIiwgXCJkaXJcIiwgXCJkaXNhYmxlZFwiLCBcImRvd25sb2FkXCIsIFwiZHJhZ2dhYmxlXCIsXG4gICAgICAgIFwiZW5jVHlwZVwiLFxuICAgICAgICBcImZvcm1cIiwgXCJmb3JtQWN0aW9uXCIsIFwiZm9ybUVuY1R5cGVcIiwgXCJmb3JtTWV0aG9kXCIsIFwiZm9ybU5vVmFsaWRhdGVcIiwgXCJmb3JtVGFyZ2V0XCIsIFwiZnJhbWVCb3JkZXJcIixcbiAgICAgICAgXCJoZWFkZXJzXCIsIFwiaGVpZ2h0XCIsIFwiaGlkZGVuXCIsIFwiaGlnaFwiLCBcImhyZWZcIiwgXCJocmVmTGFuZ1wiLCBcImh0bWxGb3JcIiwgXCJodHRwRXF1aXZcIixcbiAgICAgICAgXCJpY29uXCIsIFwiaWRcIiwgXCJpbnB1dE1vZGVcIiwgXCJpbnRlZ3JpdHlcIiwgXCJpc1wiLFxuICAgICAgICBcImtleVBhcmFtc1wiLCBcImtleVR5cGVcIiwgXCJraW5kXCIsXG4gICAgICAgIFwibGFiZWxcIiwgXCJsYW5nXCIsIFwibGlzdFwiLCBcImxvb3BcIiwgXCJsb3dcIixcbiAgICAgICAgXCJtYW5pZmVzdFwiLCBcIm1hcmdpbkhlaWdodFwiLCBcIm1hcmdpbldpZHRoXCIsIFwibWF4XCIsIFwibWF4TGVuZ3RoXCIsIFwibWVkaWFcIiwgXCJtZWRpYUdyb3VwXCIsIFwibWV0aG9kXCIsIFwibWluXCIsIFwibWluTGVuZ3RoXCIsIFwibXVsdGlwbGVcIiwgXCJtdXRlZFwiLFxuICAgICAgICBcIm5hbWVcIiwgXCJub1ZhbGlkYXRlXCIsIFwibm9uY2VcIixcbiAgICAgICAgXCJvcGVuXCIsIFwib3B0aW11bVwiLFxuICAgICAgICBcInBhdHRlcm5cIiwgXCJwbGFjZWhvbGRlclwiLCBcInBvc3RlclwiLCBcInByZWxvYWRcIiwgXCJwcm9maWxlXCIsXG4gICAgICAgIFwicmFkaW9Hcm91cFwiLCBcInJlYWRPbmx5XCIsIFwicmVsXCIsIFwicmVxdWlyZWRcIiwgXCJyZXZlcnNlZFwiLCBcInJvbGVcIiwgXCJyb3dTcGFuXCIsIFwicm93c1wiLFxuICAgICAgICBcInNhbmRib3hcIiwgXCJzY29wZVwiLCBcInNjb3BlZFwiLCBcInNjcm9sbGluZ1wiLCBcInNlYW1sZXNzXCIsIFwic2VsZWN0ZWRcIiwgXCJzaGFwZVwiLCBcInNpemVcIiwgXCJzaXplc1wiLCBcInNwYW5cIiwgXCJzcGVsbENoZWNrXCIsIFwic3JjXCIsIFwic3JjRG9jXCIsIFwic3JjTGFuZ1wiLCBcInNyY1NldFwiLCBcInN0YXJ0XCIsIFwic3RlcFwiLCBcInN0eWxlXCIsIFwic3VtbWFyeVwiLFxuICAgICAgICBcInRhYkluZGV4XCIsIFwidGFyZ2V0XCIsIFwidGl0bGVcIiwgXCJ0eXBlXCIsXG4gICAgICAgIFwidXNlTWFwXCIsXG4gICAgICAgIFwidmFsdWVcIixcbiAgICAgICAgXCJ3aWR0aFwiLFxuICAgICAgICBcIndtb2RlXCIsXG4gICAgICAgIFwid3JhcFwiXG4gICAgICBdO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBwdXNoIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9hcnJheVwiO1xuaW1wb3J0IHsgV0lMRENBUkQgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBlbGVtZW50c0Zyb21ET01FbGVtZW50cyhkb21FbGVtZW50cykge1xuICBjb25zdCBkb21FbGVtZW50c1dpdGhFbGVtZW50cyA9IGZpbHRlckRPTU5vZGVzKGRvbUVsZW1lbnRzLCAoZG9tRWxlbWVudCkgPT4gKGRvbUVsZW1lbnQuX19lbGVtZW50X18gIT09IHVuZGVmaW5lZCkpLFxuICAgICAgICBlbGVtZW50cyA9IGRvbUVsZW1lbnRzV2l0aEVsZW1lbnRzLm1hcCgoZG9tRWxlbWVudCkgPT4gZG9tRWxlbWVudC5fX2VsZW1lbnRfXyk7XG5cbiAgcmV0dXJuIGVsZW1lbnRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNjZW5kYW50RE9NTm9kZXNGcm9tRE9NTm9kZShkb21Ob2RlLCBoZWlnaHQsIGFzY2VuZGFudERPTU5vZGVzID0gW10pIHtcbiAgaWYgKGhlaWdodCA+IDApIHtcbiAgICBjb25zdCBwYXJlbnRET01Ob2RlID0gZG9tTm9kZS5wYXJlbnRFbGVtZW50OyAgLy8vXG5cbiAgICBpZiAocGFyZW50RE9NTm9kZSAhPT0gbnVsbCkge1xuICAgICAgYXNjZW5kYW50RE9NTm9kZXMucHVzaChwYXJlbnRET01Ob2RlKTtcblxuICAgICAgaGVpZ2h0LS07XG5cbiAgICAgIGFzY2VuZGFudERPTU5vZGVzRnJvbURPTU5vZGUocGFyZW50RE9NTm9kZSwgaGVpZ2h0LCBhc2NlbmRhbnRET01Ob2Rlcyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGFzY2VuZGFudERPTU5vZGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVzY2VuZGFudERPTU5vZGVzRnJvbURPTU5vZGUoZG9tTm9kZSwgZGVwdGgsIGRlc2NlbmRhbnRET01Ob2RlcyA9IFtdKSB7XG4gIGlmIChkZXB0aCA+IDApIHtcbiAgICBjb25zdCBjaGlsZERPTU5vZGVzID0gZG9tTm9kZS5jaGlsZE5vZGVzOyAgLy8vXG5cbiAgICBwdXNoKGRlc2NlbmRhbnRET01Ob2RlcywgY2hpbGRET01Ob2Rlcyk7XG5cbiAgICBkZXB0aC0tO1xuXG4gICAgY2hpbGRET01Ob2Rlcy5mb3JFYWNoKChjaGlsZERPTU5vZGUpID0+IGRlc2NlbmRhbnRET01Ob2Rlc0Zyb21ET01Ob2RlKGNoaWxkRE9NTm9kZSwgZGVwdGgsIGRlc2NlbmRhbnRET01Ob2RlcykpO1xuICB9XG5cbiAgcmV0dXJuIGRlc2NlbmRhbnRET01Ob2Rlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbHRlckRPTU5vZGVzQnlTZWxlY3Rvcihkb21Ob2Rlcywgc2VsZWN0b3IpIHtcbiAgY29uc3QgZmlsdGVyZWRET01Ob2RlcyA9IGZpbHRlckRPTU5vZGVzKGRvbU5vZGVzLCAoZG9tTm9kZSkgPT4gZG9tTm9kZU1hdGNoZXNTZWxlY3Rvcihkb21Ob2RlLCBzZWxlY3RvcikpO1xuXG4gIHJldHVybiBmaWx0ZXJlZERPTU5vZGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZG9tTm9kZU1hdGNoZXNTZWxlY3Rvcihkb21Ob2RlLCBzZWxlY3Rvcikge1xuICBjb25zdCBkb21Ob2RlVHlwZSA9IGRvbU5vZGUubm9kZVR5cGU7XG5cbiAgc3dpdGNoIChkb21Ob2RlVHlwZSkge1xuICAgIGNhc2UgTm9kZS5FTEVNRU5UX05PREU6IHtcbiAgICAgIGNvbnN0IGRvbUVsZW1lbnQgPSBkb21Ob2RlOyAvLy9cblxuICAgICAgcmV0dXJuIGRvbUVsZW1lbnQubWF0Y2hlcyhzZWxlY3Rvcik7XG4gICAgfVxuXG4gICAgY2FzZSBOb2RlLlRFWFRfTk9ERToge1xuICAgICAgaWYgKHNlbGVjdG9yID09PSBXSUxEQ0FSRCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXJET01Ob2Rlcyhkb21Ob2RlcywgdGVzdCkge1xuICBjb25zdCBmaWx0ZXJlZERPTU5vZGVzID0gW10sXG4gICAgICAgIGRvbU5vZGVzTGVuZ3RoID0gZG9tTm9kZXMubGVuZ3RoO1xuXG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBkb21Ob2Rlc0xlbmd0aDsgaW5kZXgrKykge1xuICAgIGNvbnN0IGRvbU5vZGUgPSBkb21Ob2Rlc1tpbmRleF0sXG4gICAgICAgICAgcmVzdWx0ID0gdGVzdChkb21Ob2RlKTtcblxuICAgIGlmIChyZXN1bHQpIHtcbiAgICAgIGZpbHRlcmVkRE9NTm9kZXMucHVzaChkb21Ob2RlKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmlsdGVyZWRET01Ob2Rlcztcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgZmlyc3QgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5pbXBvcnQgeyBXSUxEQ0FSRCB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGRvbU5vZGVNYXRjaGVzU2VsZWN0b3IsIGVsZW1lbnRzRnJvbURPTUVsZW1lbnRzLCBmaWx0ZXJET01Ob2Rlc0J5U2VsZWN0b3IsIGFzY2VuZGFudERPTU5vZGVzRnJvbURPTU5vZGUsIGRlc2NlbmRhbnRET01Ob2Rlc0Zyb21ET01Ob2RlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9kb21cIjtcblxuZnVuY3Rpb24gZ2V0UGFyZW50RWxlbWVudChzZWxlY3RvciA9IFdJTERDQVJEKSB7XG4gIGxldCBwYXJlbnRFbGVtZW50ID0gbnVsbDtcblxuICBjb25zdCBwYXJlbnRET01FbGVtZW50ID0gdGhpcy5kb21FbGVtZW50LnBhcmVudEVsZW1lbnQ7XG5cbiAgaWYgKHBhcmVudERPTUVsZW1lbnQgIT09IG51bGwpIHtcbiAgICBpZiAocGFyZW50RE9NRWxlbWVudC5tYXRjaGVzKHNlbGVjdG9yKSkge1xuICAgICAgY29uc3QgcGFyZW50RE9NRWxlbWVudHMgPSBbcGFyZW50RE9NRWxlbWVudF0sXG4gICAgICAgICAgICBwYXJlbnRFbGVtZW50cyA9IGVsZW1lbnRzRnJvbURPTUVsZW1lbnRzKHBhcmVudERPTUVsZW1lbnRzKSxcbiAgICAgICAgICAgIGZpcnN0UGFyZW50RWxlbWVudCA9IGZpcnN0KHBhcmVudEVsZW1lbnRzKTtcblxuICAgICAgcGFyZW50RWxlbWVudCA9IGZpcnN0UGFyZW50RWxlbWVudCB8fCBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYXJlbnRFbGVtZW50O1xufVxuXG5mdW5jdGlvbiBnZXRDaGlsZEVsZW1lbnRzKHNlbGVjdG9yID0gV0lMRENBUkQpIHtcbiAgY29uc3QgY2hpbGRET01Ob2RlcyA9IHRoaXMuZG9tRWxlbWVudC5jaGlsZE5vZGVzLFxuICAgICAgICBjaGlsZERPTUVsZW1lbnRzID0gZmlsdGVyRE9NTm9kZXNCeVNlbGVjdG9yKGNoaWxkRE9NTm9kZXMsIHNlbGVjdG9yKSxcbiAgICAgICAgY2hpbGRFbGVtZW50cyA9IGVsZW1lbnRzRnJvbURPTUVsZW1lbnRzKGNoaWxkRE9NRWxlbWVudHMpO1xuXG4gIHJldHVybiBjaGlsZEVsZW1lbnRzO1xufVxuXG5mdW5jdGlvbiBnZXRBc2NlbmRhbnRFbGVtZW50cyhzZWxlY3RvciA9IFdJTERDQVJELCBtYXhpbXVtSGVpZ2h0ID0gSW5maW5pdHkpIHtcbiAgY29uc3QgaGVpZ2h0ID0gbWF4aW11bUhlaWdodCwgLy8vXG4gICAgICAgIGRvbU5vZGUgPSB0aGlzLmRvbUVsZW1lbnQsICAvLy9cbiAgICAgICAgYXNjZW5kYW50RE9NTm9kZXMgPSBhc2NlbmRhbnRET01Ob2Rlc0Zyb21ET01Ob2RlKGRvbU5vZGUsIGhlaWdodCksXG4gICAgICAgIGFzY2VuZGFudERPTUVsZW1lbnRzID0gZmlsdGVyRE9NTm9kZXNCeVNlbGVjdG9yKGFzY2VuZGFudERPTU5vZGVzLCBzZWxlY3RvciksXG4gICAgICAgIGFzY2VuZGFudEVsZW1lbnRzID0gZWxlbWVudHNGcm9tRE9NRWxlbWVudHMoYXNjZW5kYW50RE9NRWxlbWVudHMpO1xuXG4gIHJldHVybiBhc2NlbmRhbnRFbGVtZW50cztcbn1cblxuZnVuY3Rpb24gZ2V0RGVzY2VuZGFudEVsZW1lbnRzKHNlbGVjdG9yID0gV0lMRENBUkQsIG1heGltdW1EZXB0aCA9IEluZmluaXR5KSB7XG4gIGNvbnN0IGRlcHRoID0gbWF4aW11bURlcHRoLCAvLy9cbiAgICAgICAgZG9tTm9kZSA9IHRoaXMuZG9tRWxlbWVudCwgIC8vL1xuICAgICAgICBkZXNjZW5kYW50RE9NTm9kZXMgPSBkZXNjZW5kYW50RE9NTm9kZXNGcm9tRE9NTm9kZShkb21Ob2RlLCBkZXB0aCksXG4gICAgICAgIGRlc2NlbmRhbnRET01FbGVtZW50cyA9IGZpbHRlckRPTU5vZGVzQnlTZWxlY3RvcihkZXNjZW5kYW50RE9NTm9kZXMsIHNlbGVjdG9yKSxcbiAgICAgICAgZGVzY2VuZGFudEVsZW1lbnRzID0gZWxlbWVudHNGcm9tRE9NRWxlbWVudHMoZGVzY2VuZGFudERPTUVsZW1lbnRzKTtcblxuICByZXR1cm4gZGVzY2VuZGFudEVsZW1lbnRzO1xufVxuXG5mdW5jdGlvbiBnZXROZXh0U2libGluZ0VsZW1lbnQoc2VsZWN0b3IgPSBXSUxEQ0FSRCkge1xuICBsZXQgbmV4dFNpYmxpbmdFbGVtZW50ID0gbnVsbDtcblxuICBjb25zdCBuZXh0U2libGluZ0RPTU5vZGUgPSB0aGlzLmRvbUVsZW1lbnQubmV4dFNpYmxpbmc7XG5cbiAgaWYgKChuZXh0U2libGluZ0RPTU5vZGUgIT09IG51bGwpICYmIGRvbU5vZGVNYXRjaGVzU2VsZWN0b3IobmV4dFNpYmxpbmdET01Ob2RlLCBzZWxlY3RvcikpIHtcbiAgICBuZXh0U2libGluZ0VsZW1lbnQgPSBuZXh0U2libGluZ0RPTU5vZGUuX19lbGVtZW50X18gfHwgbnVsbDtcbiAgfVxuXG4gIHJldHVybiBuZXh0U2libGluZ0VsZW1lbnQ7XG59XG5cbmZ1bmN0aW9uIGdldFByZXZpb3VzU2libGluZ0VsZW1lbnQoc2VsZWN0b3IgPSBXSUxEQ0FSRCkge1xuICBsZXQgcHJldmlvdXNTaWJsaW5nRWxlbWVudCA9IG51bGw7XG5cbiAgY29uc3QgcHJldmlvdXNTaWJsaW5nRE9NTm9kZSA9IHRoaXMuZG9tRWxlbWVudC5wcmV2aW91c1NpYmxpbmc7ICAvLy9cblxuICBpZiAoKHByZXZpb3VzU2libGluZ0RPTU5vZGUgIT09IG51bGwpICYmIGRvbU5vZGVNYXRjaGVzU2VsZWN0b3IocHJldmlvdXNTaWJsaW5nRE9NTm9kZSwgc2VsZWN0b3IpKSB7XG4gICAgcHJldmlvdXNTaWJsaW5nRWxlbWVudCA9IHByZXZpb3VzU2libGluZ0RPTU5vZGUuX19lbGVtZW50X18gfHwgbnVsbDtcbiAgfVxuXG4gIHJldHVybiBwcmV2aW91c1NpYmxpbmdFbGVtZW50O1xufVxuXG5jb25zdCBlbGVtZW50TWl4aW5zID0ge1xuICBnZXRQYXJlbnRFbGVtZW50LFxuICBnZXRDaGlsZEVsZW1lbnRzLFxuICBnZXRBc2NlbmRhbnRFbGVtZW50cyxcbiAgZ2V0RGVzY2VuZGFudEVsZW1lbnRzLFxuICBnZXROZXh0U2libGluZ0VsZW1lbnQsXG4gIGdldFByZXZpb3VzU2libGluZ0VsZW1lbnRcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGVsZW1lbnRNaXhpbnM7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBPZmZzZXQgZnJvbSBcIi4vb2Zmc2V0XCI7XG5pbXBvcnQgQm91bmRzIGZyb20gXCIuL2JvdW5kc1wiO1xuaW1wb3J0IGVsZW1lbnRNaXhpbnMgZnJvbSBcIi4vbWl4aW5zL2VsZW1lbnRcIjtcblxuY2xhc3MgVGV4dEVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcih0ZXh0KSB7XG4gICAgdGhpcy5kb21FbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGV4dCk7IC8vL1xuXG4gICAgdGhpcy5kb21FbGVtZW50Ll9fZWxlbWVudF9fID0gdGhpcztcbiAgfVxuXG4gIGdldFRleHQoKSB7XG4gICAgY29uc3Qgbm9kZVZhbHVlID0gdGhpcy5kb21FbGVtZW50Lm5vZGVWYWx1ZSxcbiAgICAgICAgICB0ZXh0ID0gbm9kZVZhbHVlOyAvLy9cblxuICAgIHJldHVybiB0ZXh0O1xuICB9XG5cbiAgc2V0VGV4dCh0ZXh0KSB7XG4gICAgY29uc3Qgbm9kZVZhbHVlID0gdGV4dDsgLy8vXG5cbiAgICB0aGlzLmRvbUVsZW1lbnQubm9kZVZhbHVlID0gbm9kZVZhbHVlO1xuICB9XG5cbiAgZ2V0T2Zmc2V0KCkge1xuICAgIGNvbnN0IHRvcCA9IHRoaXMuZG9tRWxlbWVudC5vZmZzZXRUb3AsICAvLy9cbiAgICAgICAgICBsZWZ0ID0gdGhpcy5kb21FbGVtZW50Lm9mZnNldExlZnQsICAvLy9cbiAgICAgICAgICBvZmZzZXQgPSBuZXcgT2Zmc2V0KHRvcCwgbGVmdCk7XG5cbiAgICByZXR1cm4gb2Zmc2V0O1xuICB9XG5cbiAgZ2V0Qm91bmRzKCkge1xuICAgIGNvbnN0IGJvdW5kaW5nQ2xpZW50UmVjdCA9IHRoaXMuZG9tRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxcbiAgICAgICAgICBib3VuZHMgPSBCb3VuZHMuZnJvbUJvdW5kaW5nQ2xpZW50UmVjdChib3VuZGluZ0NsaWVudFJlY3QpO1xuXG4gICAgcmV0dXJuIGJvdW5kcztcbiAgfVxuXG4gIGdldFdpZHRoKCkge1xuICAgIGNvbnN0IGNsaWVudFdpZHRoID0gdGhpcy5kb21FbGVtZW50LmNsaWVudFdpZHRoLFxuICAgICAgICAgIHdpZHRoID0gY2xpZW50V2lkdGg7ICAvLy9cblxuICAgIHJldHVybiB3aWR0aDtcbiAgfVxuXG4gIGdldEhlaWdodCgpIHtcbiAgICBjb25zdCBjbGllbnRIZWlnaHQgPSB0aGlzLmRvbUVsZW1lbnQuY2xpZW50SGVpZ2h0LFxuICAgICAgICAgIGhlaWdodCA9IGNsaWVudEhlaWdodDsgIC8vL1xuXG4gICAgcmV0dXJuIGhlaWdodDtcbiAgfVxuXG4gIHByZXBlbmRUbyhwYXJlbnRFbGVtZW50KSB7IHBhcmVudEVsZW1lbnQucHJlcGVuZCh0aGlzKTsgfVxuXG4gIGFwcGVuZFRvKHBhcmVudEVsZW1lbnQpIHsgcGFyZW50RWxlbWVudC5hcHBlbmQodGhpcyk7IH1cblxuICBhZGRUbyhwYXJlbnRFbGVtZW50KSB7IHBhcmVudEVsZW1lbnQuYWRkKHRoaXMpOyB9XG5cbiAgcmVtb3ZlRnJvbShwYXJlbnRFbGVtZW50KSB7IHBhcmVudEVsZW1lbnQucmVtb3ZlKHRoaXMpOyB9XG5cbiAgaW5zZXJ0QmVmb3JlKHNpYmxpbmdFbGVtZW50KSB7XG4gICAgY29uc3QgcGFyZW50RE9NTm9kZSA9IHNpYmxpbmdFbGVtZW50LmRvbUVsZW1lbnQucGFyZW50Tm9kZSxcbiAgICAgICAgICBzaWJsaW5nRE9NRWxlbWVudCA9IHNpYmxpbmdFbGVtZW50LmRvbUVsZW1lbnQ7XG5cbiAgICBwYXJlbnRET01Ob2RlLmluc2VydEJlZm9yZSh0aGlzLmRvbUVsZW1lbnQsIHNpYmxpbmdET01FbGVtZW50KTtcbiAgfVxuXG4gIGluc2VydEFmdGVyKHNpYmxpbmdFbGVtZW50KSB7XG4gICAgY29uc3QgcGFyZW50RE9NTm9kZSA9IHNpYmxpbmdFbGVtZW50LmRvbUVsZW1lbnQucGFyZW50Tm9kZSxcbiAgICAgICAgICBzaWJsaW5nRE9NRWxlbWVudCA9IHNpYmxpbmdFbGVtZW50LmRvbUVsZW1lbnQ7XG5cbiAgICBwYXJlbnRET01Ob2RlLmluc2VydEJlZm9yZSh0aGlzLmRvbUVsZW1lbnQsIHNpYmxpbmdET01FbGVtZW50Lm5leHRTaWJsaW5nKTsgIC8vL1xuICB9XG5cbiAgcmVtb3ZlKCkge1xuICAgIHRoaXMuZG9tRWxlbWVudC5yZW1vdmUoKTtcbiAgfVxufVxuXG5PYmplY3QuYXNzaWduKFRleHRFbGVtZW50LnByb3RvdHlwZSwgZWxlbWVudE1peGlucyk7XG5cbmV4cG9ydCBkZWZhdWx0IFRleHRFbGVtZW50O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVGV4dEVsZW1lbnQgZnJvbSBcIi4uL3RleHRFbGVtZW50XCI7XG5cbmltcG9ydCB7IFNUUklORyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUZhbHNleUVsZW1lbnRzKGVsZW1lbnRzKSB7XG4gIGVsZW1lbnRzID0gZWxlbWVudHMucmVkdWNlKChlbGVtZW50cywgZWxlbWVudCkgPT4ge1xuICAgIGlmIChlbGVtZW50KSB7XG4gICAgICBlbGVtZW50cy5wdXNoKGVsZW1lbnQpO1xuICAgIH1cblxuICAgIHJldHVybiBlbGVtZW50cztcbiAgfSwgW10pO1xuXG4gIHJldHVybiBlbGVtZW50cztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VTdHJpbmdzV2l0aFRleHRFbGVtZW50cyhlbGVtZW50cykge1xuICBlbGVtZW50cyA9IGVsZW1lbnRzLm1hcCgoZWxlbWVudCkgPT4geyAgLy8vXG4gICAgaWYgKHR5cGVvZiBlbGVtZW50ID09PSBTVFJJTkcpIHtcbiAgICAgIGNvbnN0IHRleHQgPSBlbGVtZW50LCAgLy8vXG4gICAgICAgICAgICB0ZXh0RWxlbWVudCA9IG5ldyBUZXh0RWxlbWVudCh0ZXh0KTtcblxuICAgICAgZWxlbWVudCA9IHRleHRFbGVtZW50OyAvLy9cbiAgICB9XG5cbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfSk7XG5cbiAgcmV0dXJuIGVsZW1lbnRzO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBjb21iaW5lLCBwcnVuZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvb2JqZWN0XCI7XG5pbXBvcnQgeyBmaXJzdCwgZ3VhcmFudGVlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9hcnJheVwiO1xuaW1wb3J0IHsgaXNIVE1MQXR0cmlidXRlTmFtZSwgaXNTVkdBdHRyaWJ1dGVOYW1lIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9uYW1lXCI7XG5pbXBvcnQgeyByZW1vdmVGYWxzZXlFbGVtZW50cywgcmVwbGFjZVN0cmluZ3NXaXRoVGV4dEVsZW1lbnRzIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9lbGVtZW50c1wiO1xuaW1wb3J0IHsgRk9SLCBDTEFTUywgT0JKRUNULCBIVE1MX0ZPUiwgQ0xBU1NfTkFNRSwgQk9PTEVBTiwgRlVOQ1RJT04sIFNWR19OQU1FU1BBQ0VfVVJJIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5mdW5jdGlvbiBhcHBseVByb3BlcnRpZXMocHJvcGVydGllcywgZGVmYXVsdFByb3BlcnRpZXMsIGlnbm9yZWRQcm9wZXJ0aWVzKSB7XG4gIHRoaXMucHJvcGVydGllcyA9IGNvbWJpbmUocHJvcGVydGllcywgZGVmYXVsdFByb3BlcnRpZXMpO1xuXG4gIHByb3BlcnRpZXMgPSBwcnVuZSh0aGlzLnByb3BlcnRpZXMsIGlnbm9yZWRQcm9wZXJ0aWVzKTsgLy8vXG5cbiAgY29uc3QgeyBuYW1lc3BhY2VVUkkgfSA9IHRoaXMuZG9tRWxlbWVudCxcbiAgICAgICAgc3ZnID0gKG5hbWVzcGFjZVVSSSA9PT0gU1ZHX05BTUVTUEFDRV9VUkkpLCAvLy9cbiAgICAgICAgcHJvcGVydGllc0tleXMgPSBPYmplY3Qua2V5cyhwcm9wZXJ0aWVzKSxcbiAgICAgICAgbmFtZXMgPSBwcm9wZXJ0aWVzS2V5czsgIC8vLz1cblxuICBuYW1lcy5mb3JFYWNoKChuYW1lKSA9PiB7XG4gICAgY29uc3QgdmFsdWUgPSBwcm9wZXJ0aWVzW25hbWVdLFxuICAgICAgICAgIG5hbWVIYW5kbGVyTmFtZSA9IGlzTmFtZUhhbmRsZXJOYW1lKG5hbWUpO1xuXG4gICAgaWYgKG5hbWVIYW5kbGVyTmFtZSkge1xuICAgICAgYWRkSGFuZGxlcih0aGlzLCBuYW1lLCB2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG5hbWVBdHRyaWJ1dGVOYW1lID0gaXNOYW1lQXR0cmlidXRlTmFtZShuYW1lLCBzdmcpO1xuXG4gICAgICBpZiAobmFtZUF0dHJpYnV0ZU5hbWUpIHtcbiAgICAgICAgYWRkQXR0cmlidXRlKHRoaXMsIG5hbWUsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IGNoaWxkRWxlbWVudHMgPSBjaGlsZEVsZW1lbnRzRnJvbUVsZW1lbnQodGhpcykgfHwgcHJvcGVydGllcy5jaGlsZEVsZW1lbnRzLCAgLy8vXG4gICAgICAgIGNvbnRleHQgPSB7fTtcblxuICBjaGlsZEVsZW1lbnRzLmZvckVhY2goKGNoaWxkRWxlbWVudCkgPT4ge1xuICAgIHVwZGF0ZUNvbnRleHQoY2hpbGRFbGVtZW50LCBjb250ZXh0KTtcblxuICAgIHRoaXMuYWRkKGNoaWxkRWxlbWVudCk7XG4gIH0pO1xuXG4gIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG59XG5cbmZ1bmN0aW9uIGdldFByb3BlcnRpZXMoKSB7XG4gIHJldHVybiB0aGlzLnByb3BlcnRpZXM7XG59XG5cbmZ1bmN0aW9uIGdldENvbnRleHQoKSB7XG4gIHJldHVybiB0aGlzLmNvbnRleHQ7XG59XG5cbmZ1bmN0aW9uIGFzc2lnbkNvbnRleHQobmFtZXMsIHRoZW5EZWxldGUpIHtcbiAgY29uc3QgYXJndW1lbnRzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcblxuICBpZiAoYXJndW1lbnRzTGVuZ3RoID09PSAxKSB7XG4gICAgY29uc3QgZmlyc3RBcmd1bWVudCA9IGZpcnN0KGFyZ3VtZW50cyk7XG5cbiAgICBpZiAodHlwZW9mIGZpcnN0QXJndW1lbnQgPT09IEJPT0xFQU4pIHtcbiAgICAgIG5hbWVzID0gT2JqZWN0LmtleXModGhpcy5jb250ZXh0KTtcblxuICAgICAgdGhlbkRlbGV0ZSA9IGZpcnN0QXJndW1lbnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoZW5EZWxldGUgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGlmIChhcmd1bWVudHNMZW5ndGggPT09IDApIHtcbiAgICBuYW1lcyA9IE9iamVjdC5rZXlzKHRoaXMuY29udGV4dCk7XG5cbiAgICB0aGVuRGVsZXRlID0gdHJ1ZTtcbiAgfVxuXG4gIG5hbWVzLmZvckVhY2goKG5hbWUpID0+IHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuY29udGV4dFtuYW1lXSxcbiAgICAgICAgICBwcm9wZXJ0eU5hbWUgPSBuYW1lLCAgLy8vXG4gICAgICAgICAgZGVzY3JpcHRvciA9IHtcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZVxuICAgICAgICAgIH07XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTtcblxuICAgIGlmICh0aGVuRGVsZXRlKSB7XG4gICAgICBkZWxldGUgdGhpcy5jb250ZXh0W25hbWVdO1xuICAgIH1cbiAgfSwgW10pO1xufVxuXG5jb25zdCBqc3hNaXhpbnMgPSB7XG4gIGFwcGx5UHJvcGVydGllcyxcbiAgZ2V0UHJvcGVydGllcyxcbiAgZ2V0Q29udGV4dCxcbiAgYXNzaWduQ29udGV4dFxufTtcblxuZXhwb3J0IGRlZmF1bHQganN4TWl4aW5zO1xuXG5mdW5jdGlvbiBjaGlsZEVsZW1lbnRzRnJvbUVsZW1lbnQoZWxlbWVudCkge1xuICBsZXQgY2hpbGRFbGVtZW50cyA9IG51bGw7XG5cbiAgaWYgKHR5cGVvZiBlbGVtZW50LmNoaWxkRWxlbWVudHMgPT09IEZVTkNUSU9OKSB7XG4gICAgY2hpbGRFbGVtZW50cyA9IGVsZW1lbnQuY2hpbGRFbGVtZW50cy5jYWxsKGVsZW1lbnQpO1xuXG4gICAgY2hpbGRFbGVtZW50cyA9IGd1YXJhbnRlZShjaGlsZEVsZW1lbnRzKTtcblxuICAgIGNoaWxkRWxlbWVudHMgPSByZW1vdmVGYWxzZXlFbGVtZW50cyhjaGlsZEVsZW1lbnRzKTtcblxuICAgIGNoaWxkRWxlbWVudHMgPSByZXBsYWNlU3RyaW5nc1dpdGhUZXh0RWxlbWVudHMoY2hpbGRFbGVtZW50cyk7XG4gIH1cblxuICByZXR1cm4gY2hpbGRFbGVtZW50cztcbn1cblxuZnVuY3Rpb24gdXBkYXRlQ29udGV4dChjaGlsZEVsZW1lbnQsIGNvbnRleHQpIHtcbiAgY29uc3QgcGFyZW50Q29udGV4dCA9ICh0eXBlb2YgY2hpbGRFbGVtZW50LnBhcmVudENvbnRleHQgPT09IEZVTkNUSU9OKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkRWxlbWVudC5wYXJlbnRDb250ZXh0KCkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkRWxlbWVudC5jb250ZXh0OyAvLy9cblxuICBPYmplY3QuYXNzaWduKGNvbnRleHQsIHBhcmVudENvbnRleHQpO1xufVxuXG5mdW5jdGlvbiBhZGRIYW5kbGVyKGVsZW1lbnQsIG5hbWUsIHZhbHVlKSB7XG4gIGNvbnN0IGV2ZW50VHlwZSA9IG5hbWUuc3Vic3RyKDIpLnRvTG93ZXJDYXNlKCksIC8vL1xuICAgICAgICBoYW5kbGVyID0gdmFsdWU7ICAvLy9cblxuICBlbGVtZW50Lm9uKGV2ZW50VHlwZSwgaGFuZGxlcik7XG59XG5cbmZ1bmN0aW9uIGFkZEF0dHJpYnV0ZShlbGVtZW50LCBuYW1lLCB2YWx1ZSkge1xuICBpZiAobmFtZSA9PT0gQ0xBU1NfTkFNRSkge1xuICAgIG5hbWUgPSBDTEFTUztcbiAgfVxuXG4gIGlmIChuYW1lID09PSBIVE1MX0ZPUikge1xuICAgIG5hbWUgPSBGT1I7XG4gIH1cblxuICBpZiAodHlwZW9mIHZhbHVlID09PSBPQkpFQ1QpIHtcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXModmFsdWUpO1xuXG4gICAga2V5cy5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgIGVsZW1lbnQuZG9tRWxlbWVudFtuYW1lXVtrZXldID0gdmFsdWVba2V5XTtcbiAgICB9KTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09IEJPT0xFQU4pIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHZhbHVlID0gbmFtZTsgLy8vXG5cbiAgICAgIGVsZW1lbnQuYWRkQXR0cmlidXRlKG5hbWUsIHZhbHVlKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZWxlbWVudC5hZGRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzTmFtZUhhbmRsZXJOYW1lKG5hbWUpIHtcbiAgcmV0dXJuIC9eb24vLnRlc3QobmFtZSk7XG59XG5cbmZ1bmN0aW9uIGlzTmFtZUF0dHJpYnV0ZU5hbWUobmFtZSwgc3ZnKSB7XG4gIHJldHVybiBzdmcgPyBpc1NWR0F0dHJpYnV0ZU5hbWUobmFtZSkgOiBpc0hUTUxBdHRyaWJ1dGVOYW1lKG5hbWUpXG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBPUEVOX0VWRU5UX1RZUEUgPSBcIm9wZW5cIjtcbmV4cG9ydCBjb25zdCBNT1ZFX0VWRU5UX1RZUEUgPSBcIm1vdmVcIjtcbmV4cG9ydCBjb25zdCBCTFVSX0VWRU5UX1RZUEUgPSBcImJsdXJcIjtcbmV4cG9ydCBjb25zdCBEUkFHX0VWRU5UX1RZUEUgPSBcImRyYWdcIjtcbmV4cG9ydCBjb25zdCBEUk9QX0VWRU5UX1RZUEUgPSBcImRyb3BcIjtcbmV4cG9ydCBjb25zdCBXSEVFTF9FVkVOVF9UWVBFID0gXCJ3aGVlbFwiO1xuZXhwb3J0IGNvbnN0IElOUFVUX0VWRU5UX1RZUEUgPSBcImlucHV0XCI7XG5leHBvcnQgY29uc3QgRk9DVVNfRVZFTlRfVFlQRSA9IFwiZm9jdXNcIjtcbmV4cG9ydCBjb25zdCBDTElDS19FVkVOVF9UWVBFID0gXCJjbGlja1wiO1xuZXhwb3J0IGNvbnN0IEtFWVVQX0VWRU5UX1RZUEUgPSBcImtleXVwXCI7XG5leHBvcnQgY29uc3QgUkVNT1ZFX0VWRU5UX1RZUEUgPSBcInJlbW92ZVwiO1xuZXhwb3J0IGNvbnN0IENIQU5HRV9FVkVOVF9UWVBFID0gXCJjaGFuZ2VcIjtcbmV4cG9ydCBjb25zdCBSRVNJWkVfRVZFTlRfVFlQRSA9IFwicmVzaXplXCI7XG5leHBvcnQgY29uc3QgU0NST0xMX0VWRU5UX1RZUEUgPSBcInNjcm9sbFwiO1xuZXhwb3J0IGNvbnN0IEtFWURPV05fRVZFTlRfVFlQRSA9IFwia2V5ZG93blwiO1xuZXhwb3J0IGNvbnN0IE1PVVNFVVBfRVZFTlRfVFlQRSA9IFwibW91c2V1cFwiO1xuZXhwb3J0IGNvbnN0IEFVWENMSUNLX0VWRU5UX1RZUEUgPSBcImF1eGNsaWNrXCI7XG5leHBvcnQgY29uc3QgRFJBR19PVVRfRVZFTlRfVFlQRSA9IFwiZHJhZ291dFwiO1xuZXhwb3J0IGNvbnN0IE1PVVNFT1VUX0VWRU5UX1RZUEUgPSBcIm1vdXNlb3V0XCI7XG5leHBvcnQgY29uc3QgREJMQ0xJQ0tfRVZFTlRfVFlQRSA9IFwiZGJsY2xpY2tcIjtcbmV4cG9ydCBjb25zdCBNT1VTRU9WRVJfRVZFTlRfVFlQRSA9IFwibW91c2VvdmVyXCI7XG5leHBvcnQgY29uc3QgTU9VU0VET1dOX0VWRU5UX1RZUEUgPSBcIm1vdXNlZG93blwiO1xuZXhwb3J0IGNvbnN0IE1PVVNFTU9WRV9FVkVOVF9UWVBFID0gXCJtb3VzZW1vdmVcIjtcbmV4cG9ydCBjb25zdCBEUkFHX09WRVJfRVZFTlRfVFlQRSA9IFwiZHJhZ292ZXJcIjtcbmV4cG9ydCBjb25zdCBTVE9QX0RSQUdfRVZFTlRfVFlQRSA9IFwic3RvcGRyYWdcIjtcbmV4cG9ydCBjb25zdCBTVEFSVF9EUkFHX0VWRU5UX1RZUEUgPSBcInN0YXJ0ZHJhZ1wiO1xuZXhwb3J0IGNvbnN0IENPTlRFWFRNRU5VX0VWRU5UX1RZUEUgPSBcImNvbnRleHRtZW51XCI7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgT1BFTl9FVkVOVF9UWVBFLFxuICBNT1ZFX0VWRU5UX1RZUEUsXG4gIEJMVVJfRVZFTlRfVFlQRSxcbiAgRFJBR19FVkVOVF9UWVBFLFxuICBEUk9QX0VWRU5UX1RZUEUsXG4gIFdIRUVMX0VWRU5UX1RZUEUsXG4gIElOUFVUX0VWRU5UX1RZUEUsXG4gIEZPQ1VTX0VWRU5UX1RZUEUsXG4gIENMSUNLX0VWRU5UX1RZUEUsXG4gIEtFWVVQX0VWRU5UX1RZUEUsXG4gIFJFTU9WRV9FVkVOVF9UWVBFLFxuICBDSEFOR0VfRVZFTlRfVFlQRSxcbiAgUkVTSVpFX0VWRU5UX1RZUEUsXG4gIFNDUk9MTF9FVkVOVF9UWVBFLFxuICBLRVlET1dOX0VWRU5UX1RZUEUsXG4gIE1PVVNFVVBfRVZFTlRfVFlQRSxcbiAgQVVYQ0xJQ0tfRVZFTlRfVFlQRSxcbiAgRFJBR19PVVRfRVZFTlRfVFlQRSxcbiAgTU9VU0VPVVRfRVZFTlRfVFlQRSxcbiAgREJMQ0xJQ0tfRVZFTlRfVFlQRSxcbiAgTU9VU0VPVkVSX0VWRU5UX1RZUEUsXG4gIE1PVVNFRE9XTl9FVkVOVF9UWVBFLFxuICBNT1VTRU1PVkVfRVZFTlRfVFlQRSxcbiAgRFJBR19PVkVSX0VWRU5UX1RZUEUsXG4gIFNUT1BfRFJBR19FVkVOVF9UWVBFLFxuICBTVEFSVF9EUkFHX0VWRU5UX1RZUEUsXG4gIENPTlRFWFRNRU5VX0VWRU5UX1RZUEVcbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEtFWVVQX0VWRU5UX1RZUEUsIEtFWURPV05fRVZFTlRfVFlQRSB9IGZyb20gXCIuLi9ldmVudFR5cGVzXCI7XG5cbmZ1bmN0aW9uIG9uS2V5VXAoa2V5VXBIYW5kbGVyLCBlbGVtZW50KSB7IHRoaXMub24oS0VZVVBfRVZFTlRfVFlQRSwga2V5VXBIYW5kbGVyLCBlbGVtZW50KTsgfVxuXG5mdW5jdGlvbiBvZmZLZXlVcChrZXlVcEhhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vZmYoS0VZVVBfRVZFTlRfVFlQRSwga2V5VXBIYW5kbGVyLCBlbGVtZW50KTsgfVxuXG5mdW5jdGlvbiBvbktleURvd24oa2V5RG93bkhhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vbihLRVlET1dOX0VWRU5UX1RZUEUsIGtleURvd25IYW5kbGVyLCBlbGVtZW50KTsgfVxuXG5mdW5jdGlvbiBvZmZLZXlEb3duKGtleURvd25IYW5kbGVyLCBlbGVtZW50KSB7IHRoaXMub2ZmKEtFWURPV05fRVZFTlRfVFlQRSwga2V5RG93bkhhbmRsZXIsIGVsZW1lbnQpOyB9XG5cbmNvbnN0IGtleU1peGlucyA9IHtcbiAgb25LZXlVcCxcbiAgb2ZmS2V5VXAsXG4gIG9uS2V5RG93bixcbiAgb2ZmS2V5RG93blxufTtcblxuZXhwb3J0IGRlZmF1bHQga2V5TWl4aW5zO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBDTElDS19FVkVOVF9UWVBFLCBEQkxDTElDS19FVkVOVF9UWVBFIH0gZnJvbSBcIi4uL2V2ZW50VHlwZXNcIjtcblxuZnVuY3Rpb24gb25DbGljayhjbGlja0hhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vbihDTElDS19FVkVOVF9UWVBFLCBjbGlja0hhbmRsZXIsIGVsZW1lbnQpOyB9XG5cbmZ1bmN0aW9uIG9mZkNsaWNrKGNsaWNrSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9mZihDTElDS19FVkVOVF9UWVBFLCBjbGlja0hhbmRsZXIsIGVsZW1lbnQpOyB9XG5cbmZ1bmN0aW9uIG9uRG91YmxlQ2xpY2soY2xpY2tIYW5kbGVyLCBlbGVtZW50KSB7IHRoaXMub24oREJMQ0xJQ0tfRVZFTlRfVFlQRSwgY2xpY2tIYW5kbGVyLCBlbGVtZW50KTsgfVxuXG5mdW5jdGlvbiBvZmZEb3VibGVDbGljayhjbGlja0hhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vZmYoREJMQ0xJQ0tfRVZFTlRfVFlQRSwgY2xpY2tIYW5kbGVyLCBlbGVtZW50KTsgfVxuXG5jb25zdCBjbGlja01peGlucyA9IHtcbiAgb25DbGljayxcbiAgb2ZmQ2xpY2ssXG4gIG9uRG91YmxlQ2xpY2ssXG4gIG9mZkRvdWJsZUNsaWNrXG59O1xuXG5leHBvcnQgZGVmYXVsdCBjbGlja01peGlucztcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZnVuY3Rpb24gZ2V0U3RhdGUoKSB7XG4gIHJldHVybiB0aGlzLnN0YXRlO1xufVxuXG5mdW5jdGlvbiBzZXRTdGF0ZShzdGF0ZSkge1xuICB0aGlzLnN0YXRlID0gc3RhdGU7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVN0YXRlKHN0YXRlKSB7XG4gIE9iamVjdC5hc3NpZ24odGhpcy5zdGF0ZSwgc3RhdGUpO1xufVxuXG5jb25zdCBzdGF0ZU1peGlucyA9IHtcbiAgZ2V0U3RhdGUsXG4gIHNldFN0YXRlLFxuICB1cGRhdGVTdGF0ZVxufTtcblxuZXhwb3J0IGRlZmF1bHQgc3RhdGVNaXhpbnM7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBURVhUX0hUTUxfQ09OVEVOVF9UWVBFID0gXCJ0ZXh0L2h0bWxcIjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgUkVTSVpFX0VWRU5UX1RZUEUgfSBmcm9tIFwiLi4vZXZlbnRUeXBlc1wiO1xuaW1wb3J0IHsgT0JKRUNULCBBQk9VVF9CTEFOSyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IFRFWFRfSFRNTF9DT05URU5UX1RZUEUgfSBmcm9tIFwiLi4vY29udGVudFR5cGVzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBvblJlc2l6ZShyZXNpemVIYW5kbGVyLCBlbGVtZW50KSB7IHRoaXMub24oUkVTSVpFX0VWRU5UX1RZUEUsIHJlc2l6ZUhhbmRsZXIsIGVsZW1lbnQpOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBvZmZSZXNpemUocmVzaXplSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9mZihSRVNJWkVfRVZFTlRfVFlQRSwgcmVzaXplSGFuZGxlciwgZWxlbWVudCk7IH1cblxuZnVuY3Rpb24gYWRkUmVzaXplT2JqZWN0KCkge1xuICBjb25zdCByZXNpemVPYmplY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KE9CSkVDVCksXG4gICAgICAgIHN0eWxlID0gYGRpc3BsYXk6IGJsb2NrOyBcbiAgICAgICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlOyBcbiAgICAgICAgICAgICAgICAgdG9wOiAwOyBcbiAgICAgICAgICAgICAgICAgbGVmdDogMDsgXG4gICAgICAgICAgICAgICAgIGhlaWdodDogMTAwJTsgXG4gICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAlOyBcbiAgICAgICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsgXG4gICAgICAgICAgICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOyBcbiAgICAgICAgICAgICAgICAgei1pbmRleDogLTE7YCxcbiAgICAgICAgZGF0YSA9IEFCT1VUX0JMQU5LLFxuICAgICAgICB0eXBlID0gVEVYVF9IVE1MX0NPTlRFTlRfVFlQRTtcblxuICByZXNpemVPYmplY3Quc2V0QXR0cmlidXRlKFwic3R5bGVcIiwgc3R5bGUpO1xuXG4gIHJlc2l6ZU9iamVjdC5kYXRhID0gZGF0YTtcblxuICByZXNpemVPYmplY3QudHlwZSA9IHR5cGU7XG5cbiAgdGhpcy5fX3Jlc2l6ZU9iamVjdF9fID0gcmVzaXplT2JqZWN0O1xuXG4gIHJlc2l6ZU9iamVjdC5vbmxvYWQgPSAoKSA9PiByZXNpemVPYmplY3RMb2FkSGFuZGxlcih0aGlzKTtcblxuICB0aGlzLmRvbUVsZW1lbnQuYXBwZW5kQ2hpbGQocmVzaXplT2JqZWN0KTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlUmVzaXplT2JqZWN0KCkge1xuICBjb25zdCByZXNpemVPYmplY3QgPSB0aGlzLl9fcmVzaXplT2JqZWN0X18sXG4gICAgICAgIG9iamVjdFdpbmRvdyA9IHJlc2l6ZU9iamVjdC5jb250ZW50RG9jdW1lbnQuZGVmYXVsdFZpZXc7ICAvLy9cblxuICBvYmplY3RXaW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihSRVNJWkVfRVZFTlRfVFlQRSwgcmVzaXplRXZlbnRMaXN0ZW5lcik7XG5cbiAgdGhpcy5kb21FbGVtZW50LnJlbW92ZUNoaWxkKHJlc2l6ZU9iamVjdCk7XG5cbiAgZGVsZXRlIHRoaXMuX19yZXNpemVPYmplY3RfXztcbn1cblxuY29uc3QgcmVzaXplTWl4aW5zID0ge1xuICBvblJlc2l6ZSxcbiAgb2ZmUmVzaXplLFxuICBhZGRSZXNpemVPYmplY3QsXG4gIHJlbW92ZVJlc2l6ZU9iamVjdFxufTtcblxuZXhwb3J0IGRlZmF1bHQgcmVzaXplTWl4aW5zO1xuXG5mdW5jdGlvbiByZXNpemVPYmplY3RMb2FkSGFuZGxlcihlbGVtZW50KSB7XG4gIGNvbnN0IHJlc2l6ZU9iamVjdCA9IGVsZW1lbnQuX19yZXNpemVPYmplY3RfXyxcbiAgICAgICAgcmVzaXplT2JqZWN0V2luZG93ID0gcmVzaXplT2JqZWN0LmNvbnRlbnREb2N1bWVudC5kZWZhdWx0VmlldzsgIC8vL1xuXG4gIHJlc2l6ZU9iamVjdFdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFJFU0laRV9FVkVOVF9UWVBFLCAoZXZlbnQpID0+IHtcbiAgICBjb25zdCByZXNpemVFdmVudExpc3RlbmVycyA9IGVsZW1lbnQuZmluZEV2ZW50TGlzdGVuZXJzKFJFU0laRV9FVkVOVF9UWVBFKTtcblxuICAgIHJlc2l6ZUV2ZW50TGlzdGVuZXJzLmZvckVhY2goKHJlc2l6ZUV2ZW50TGlzdGVuZXIpID0+IHJlc2l6ZUV2ZW50TGlzdGVuZXIoZXZlbnQpKTtcbiAgfSk7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IFNQQUNFIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgUkVTSVpFX0VWRU5UX1RZUEUgfSBmcm9tIFwiLi4vZXZlbnRUeXBlc1wiO1xuaW1wb3J0IHsgcmVtb3ZlUmVzaXplT2JqZWN0IH0gZnJvbSBcIi4uL21peGlucy9yZXNpemVcIjtcblxuZnVuY3Rpb24gb24oZXZlbnRUeXBlcywgaGFuZGxlciwgZWxlbWVudCA9IHRoaXMpIHtcbiAgZXZlbnRUeXBlcyA9IGV2ZW50VHlwZXMuc3BsaXQoU1BBQ0UpO1xuXG4gIGV2ZW50VHlwZXMuZm9yRWFjaCgoZXZlbnRUeXBlKSA9PiB7XG4gICAgaWYgKGV2ZW50VHlwZSA9PT0gUkVTSVpFX0VWRU5UX1RZUEUpIHtcbiAgICAgIGNvbnN0IHJlc2l6ZUV2ZW50TGlzdGVuZXJzID0gdGhpcy5maW5kRXZlbnRMaXN0ZW5lcnMoUkVTSVpFX0VWRU5UX1RZUEUpLFxuICAgICAgICAgICAgcmVzaXplRXZlbnRMaXN0ZW5lcnNMZW5ndGggPSByZXNpemVFdmVudExpc3RlbmVycy5sZW5ndGg7XG5cbiAgICAgIGlmIChyZXNpemVFdmVudExpc3RlbmVyc0xlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aGlzLmFkZFJlc2l6ZU9iamVjdCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGV2ZW50TGlzdGVuZXIgPSB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KTtcblxuICAgIHRoaXMuZG9tRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgZXZlbnRMaXN0ZW5lcik7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBvZmYoZXZlbnRUeXBlcywgaGFuZGxlciwgZWxlbWVudCA9IHRoaXMpIHtcbiAgZXZlbnRUeXBlcyA9IGV2ZW50VHlwZXMuc3BsaXQoU1BBQ0UpO1xuXG4gIGV2ZW50VHlwZXMuZm9yRWFjaCgoZXZlbnRUeXBlKSA9PiB7XG4gICAgY29uc3QgZXZlbnRMaXN0ZW5lciA9IHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpO1xuXG4gICAgdGhpcy5kb21FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBldmVudExpc3RlbmVyKTtcblxuICAgIGlmIChldmVudFR5cGUgPT09IFJFU0laRV9FVkVOVF9UWVBFKSB7XG4gICAgICBjb25zdCByZXNpemVFdmVudExpc3RlbmVycyA9IHRoaXMuZmluZEV2ZW50TGlzdGVuZXJzKFJFU0laRV9FVkVOVF9UWVBFKSxcbiAgICAgICAgICAgIHJlc2l6ZUV2ZW50TGlzdGVuZXJzTGVuZ3RoID0gcmVzaXplRXZlbnRMaXN0ZW5lcnMubGVuZ3RoO1xuXG4gICAgICBpZiAocmVzaXplRXZlbnRMaXN0ZW5lcnNMZW5ndGggPT09IDApIHtcbiAgICAgICAgcmVtb3ZlUmVzaXplT2JqZWN0KHRoaXMpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KSB7XG4gIGlmICh0aGlzLmV2ZW50TGlzdGVuZXJzID09PSB1bmRlZmluZWQpIHtcbiAgICB0aGlzLmV2ZW50TGlzdGVuZXJzID0gW107XG4gIH1cblxuICBjb25zdCBldmVudExpc3RlbmVyID0gdGhpcy5jcmVhdGVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgZWxlbWVudCk7XG5cbiAgdGhpcy5ldmVudExpc3RlbmVycy5wdXNoKGV2ZW50TGlzdGVuZXIpO1xuXG4gIHJldHVybiBldmVudExpc3RlbmVyO1xufVxuXG5mdW5jdGlvbiByZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgZWxlbWVudCkge1xuICBjb25zdCBldmVudExpc3RlbmVyID0gdGhpcy5maW5kRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpLFxuICAgICAgICBpbmRleCA9IHRoaXMuZXZlbnRMaXN0ZW5lcnMuaW5kZXhPZihldmVudExpc3RlbmVyKSxcbiAgICAgICAgc3RhcnQgPSBpbmRleCwgIC8vL1xuICAgICAgICBkZWxldGVDb3VudCA9IDE7XG5cbiAgdGhpcy5ldmVudExpc3RlbmVycy5zcGxpY2Uoc3RhcnQsIGRlbGV0ZUNvdW50KTtcblxuICBpZiAodGhpcy5ldmVudExpc3RlbmVycy5sZW5ndGggPT09IDApIHtcbiAgICBkZWxldGUgdGhpcy5ldmVudExpc3RlbmVycztcbiAgfVxuXG4gIHJldHVybiBldmVudExpc3RlbmVyO1xufVxuXG5mdW5jdGlvbiBmaW5kRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpIHtcbiAgY29uc3QgZXZlbnRMaXN0ZW5lciA9IHRoaXMuZXZlbnRMaXN0ZW5lcnMuZmluZCgoZXZlbnRMaXN0ZW5lcikgPT4ge1xuICAgIGlmICgoZXZlbnRMaXN0ZW5lci5lbGVtZW50ID09PSBlbGVtZW50KSAmJiAoZXZlbnRMaXN0ZW5lci5oYW5kbGVyID09PSBoYW5kbGVyKSAmJiAoZXZlbnRMaXN0ZW5lci5ldmVudFR5cGUgPT09IGV2ZW50VHlwZSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGV2ZW50TGlzdGVuZXI7XG59XG5cbmZ1bmN0aW9uIGZpbmRFdmVudExpc3RlbmVycyhldmVudFR5cGUpIHtcbiAgY29uc3QgZXZlbnRMaXN0ZW5lcnMgPSBbXTtcblxuICBpZiAodGhpcy5ldmVudExpc3RlbmVycyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5ldmVudExpc3RlbmVycy5mb3JFYWNoKChldmVudExpc3RlbmVyKSA9PiB7XG4gICAgICBjb25zdCBmb3VuZCA9IChldmVudExpc3RlbmVyLmV2ZW50VHlwZSA9PT0gZXZlbnRUeXBlKTtcblxuICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgIGV2ZW50TGlzdGVuZXJzLnB1c2goZXZlbnRMaXN0ZW5lcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gZXZlbnRMaXN0ZW5lcnM7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KSB7XG4gIGxldCBldmVudExpc3RlbmVyO1xuXG4gIGNvbnN0IGhhbmRsZXJFbGVtZW50ID0gZWxlbWVudDsgLy8vXG5cbiAgZXZlbnRMaXN0ZW5lciA9IChldmVudCkgPT4ge1xuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzOyAvLy9cblxuICAgIGhhbmRsZXIuY2FsbChoYW5kbGVyRWxlbWVudCwgZXZlbnQsIGVsZW1lbnQpO1xuICB9O1xuXG4gIE9iamVjdC5hc3NpZ24oZXZlbnRMaXN0ZW5lciwge1xuICAgIGVsZW1lbnQsXG4gICAgaGFuZGxlcixcbiAgICBldmVudFR5cGVcbiAgfSk7XG5cbiAgcmV0dXJuIGV2ZW50TGlzdGVuZXI7XG59XG5cbmNvbnN0IGV2ZW50TWl4aW5zID0ge1xuICBvbixcbiAgb2ZmLFxuICBhZGRFdmVudExpc3RlbmVyLFxuICByZW1vdmVFdmVudExpc3RlbmVyLFxuICBjcmVhdGVFdmVudExpc3RlbmVyLFxuICBmaW5kRXZlbnRMaXN0ZW5lcixcbiAgZmluZEV2ZW50TGlzdGVuZXJzXG59O1xuXG5leHBvcnQgZGVmYXVsdCBldmVudE1peGlucztcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgTU9VU0VVUF9FVkVOVF9UWVBFLFxuICAgICAgICAgTU9VU0VPVVRfRVZFTlRfVFlQRSxcbiAgICAgICAgIE1PVVNFRE9XTl9FVkVOVF9UWVBFLFxuICAgICAgICAgTU9VU0VPVkVSX0VWRU5UX1RZUEUsXG4gICAgICAgICBNT1VTRU1PVkVfRVZFTlRfVFlQRSB9IGZyb20gXCIuLi9ldmVudFR5cGVzXCI7XG5cbmZ1bmN0aW9uIG9uTW91c2VVcChtb3VzZVVwSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9uKE1PVVNFVVBfRVZFTlRfVFlQRSwgbW91c2VVcEhhbmRsZXIsIGVsZW1lbnQpOyB9XG5cbmZ1bmN0aW9uIG9mZk1vdXNlVXAobW91c2VVcEhhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vZmYoTU9VU0VVUF9FVkVOVF9UWVBFLCBtb3VzZVVwSGFuZGxlciwgZWxlbWVudCk7IH1cblxuZnVuY3Rpb24gb25Nb3VzZU91dChtb3VzZU91dEhhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vbihNT1VTRU9VVF9FVkVOVF9UWVBFLCBtb3VzZU91dEhhbmRsZXIsIGVsZW1lbnQpOyB9XG5cbmZ1bmN0aW9uIG9mZk1vdXNlT3V0KG1vdXNlT3V0SGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9mZihNT1VTRU9VVF9FVkVOVF9UWVBFLCBtb3VzZU91dEhhbmRsZXIsIGVsZW1lbnQpOyB9XG5cbmZ1bmN0aW9uIG9uTW91c2VEb3duKG1vdXNlRG93bkhhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vbihNT1VTRURPV05fRVZFTlRfVFlQRSwgbW91c2VEb3duSGFuZGxlciwgZWxlbWVudCk7IH1cblxuZnVuY3Rpb24gb2ZmTW91c2VEb3duKG1vdXNlRG93bkhhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vZmYoTU9VU0VET1dOX0VWRU5UX1RZUEUsIG1vdXNlRG93bkhhbmRsZXIsIGVsZW1lbnQpOyB9XG5cbmZ1bmN0aW9uIG9uTW91c2VPdmVyKG1vdXNlT3ZlckhhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vbihNT1VTRU9WRVJfRVZFTlRfVFlQRSwgbW91c2VPdmVySGFuZGxlciwgZWxlbWVudCk7IH1cblxuZnVuY3Rpb24gb2ZmTW91c2VPdmVyKG1vdXNlT3ZlckhhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vZmYoTU9VU0VPVkVSX0VWRU5UX1RZUEUsIG1vdXNlT3ZlckhhbmRsZXIsIGVsZW1lbnQpOyB9XG5cbmZ1bmN0aW9uIG9uTW91c2VNb3ZlKG1vdXNlTW92ZUhhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vbihNT1VTRU1PVkVfRVZFTlRfVFlQRSwgbW91c2VNb3ZlSGFuZGxlciwgZWxlbWVudCk7IH1cblxuZnVuY3Rpb24gb2ZmTW91c2VNb3ZlKG1vdXNlTW92ZUhhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vZmYoTU9VU0VNT1ZFX0VWRU5UX1RZUEUsIG1vdXNlTW92ZUhhbmRsZXIsIGVsZW1lbnQpOyB9XG5cbmNvbnN0IG1vdXNlTWl4aW5zID0ge1xuICBvbk1vdXNlVXAsXG4gIG9mZk1vdXNlVXAsXG4gIG9uTW91c2VPdXQsXG4gIG9mZk1vdXNlT3V0LFxuICBvbk1vdXNlRG93bixcbiAgb2ZmTW91c2VEb3duLFxuICBvbk1vdXNlT3ZlcixcbiAgb2ZmTW91c2VPdmVyLFxuICBvbk1vdXNlTW92ZSxcbiAgb2ZmTW91c2VNb3ZlXG59O1xuXG5leHBvcnQgZGVmYXVsdCBtb3VzZU1peGlucztcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgU0NST0xMX0VWRU5UX1RZUEUgfSBmcm9tIFwiLi4vZXZlbnRUeXBlc1wiO1xuXG5mdW5jdGlvbiBvblNjcm9sbChzY3JvbGxIYW5kbGVyLCBlbGVtZW50KSB7IHRoaXMub24oU0NST0xMX0VWRU5UX1RZUEUsIHNjcm9sbEhhbmRsZXIsIGVsZW1lbnQpOyB9XG5cbmZ1bmN0aW9uIG9mZlNjcm9sbChzY3JvbGxIYW5kbGVyLCBlbGVtZW50KSB7IHRoaXMub2ZmKFNDUk9MTF9FVkVOVF9UWVBFLCBzY3JvbGxIYW5kbGVyLCBlbGVtZW50KTsgfVxuXG5mdW5jdGlvbiBnZXRTY3JvbGxUb3AoKSB7IHJldHVybiB0aGlzLmRvbUVsZW1lbnQuc2Nyb2xsVG9wOyB9XG5cbmZ1bmN0aW9uIGdldFNjcm9sbExlZnQoKSB7IHJldHVybiB0aGlzLmRvbUVsZW1lbnQuc2Nyb2xsTGVmdDsgfVxuXG5mdW5jdGlvbiBzZXRTY3JvbGxUb3Aoc2Nyb2xsVG9wKSB7IHRoaXMuZG9tRWxlbWVudC5zY3JvbGxUb3AgPSBzY3JvbGxUb3A7IH1cblxuZnVuY3Rpb24gc2V0U2Nyb2xsTGVmdChzY3JvbGxMZWZ0KSB7IHRoaXMuZG9tRWxlbWVudC5zY3JvbGxMZWZ0ID0gc2Nyb2xsTGVmdDsgfVxuXG5jb25zdCBzY3JvbGxNaXhpbnMgPSB7XG4gIG9uU2Nyb2xsLFxuICBvZmZTY3JvbGwsXG4gIGdldFNjcm9sbFRvcCxcbiAgZ2V0U2Nyb2xsTGVmdCxcbiAgc2V0U2Nyb2xsVG9wLFxuICBzZXRTY3JvbGxMZWZ0XG59O1xuXG5leHBvcnQgZGVmYXVsdCBzY3JvbGxNaXhpbnM7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBPZmZzZXQgZnJvbSBcIi4vb2Zmc2V0XCI7XG5pbXBvcnQgQm91bmRzIGZyb20gXCIuL2JvdW5kc1wiO1xuaW1wb3J0IGpzeE1peGlucyBmcm9tIFwiLi9taXhpbnMvanN4XCI7XG5pbXBvcnQga2V5TWl4aW5zIGZyb20gXCIuL21peGlucy9rZXlcIjtcbmltcG9ydCBjbGlja01peGlucyBmcm9tIFwiLi9taXhpbnMvY2xpY2tcIjtcbmltcG9ydCBzdGF0ZU1peGlucyBmcm9tIFwiLi9taXhpbnMvc3RhdGVcIjtcbmltcG9ydCBldmVudE1peGlucyBmcm9tIFwiLi9taXhpbnMvZXZlbnRcIjtcbmltcG9ydCBtb3VzZU1peGlucyBmcm9tIFwiLi9taXhpbnMvbW91c2VcIjtcbmltcG9ydCByZXNpemVNaXhpbnMgZnJvbSBcIi4vbWl4aW5zL3Jlc2l6ZVwiO1xuaW1wb3J0IHNjcm9sbE1peGlucyBmcm9tIFwiLi9taXhpbnMvc2Nyb2xsXCI7XG5pbXBvcnQgZWxlbWVudE1peGlucyBmcm9tIFwiLi9taXhpbnMvZWxlbWVudFwiO1xuXG5pbXBvcnQgeyBjb21iaW5lIH0gZnJvbSBcIi4vdXRpbGl0aWVzL29iamVjdFwiO1xuaW1wb3J0IHsgaXNTVkdUYWdOYW1lIH0gZnJvbSBcIi4vdXRpbGl0aWVzL25hbWVcIjtcbmltcG9ydCB7IGZpcnN0LCBhdWdtZW50IH0gZnJvbSBcIi4vdXRpbGl0aWVzL2FycmF5XCI7XG5pbXBvcnQgeyBOT05FLFxuICAgICAgICAgQkxPQ0ssXG4gICAgICAgICBXSURUSCxcbiAgICAgICAgIFNUUklORyxcbiAgICAgICAgIEhFSUdIVCxcbiAgICAgICAgIERJU1BMQVksXG4gICAgICAgICBESVNBQkxFRCxcbiAgICAgICAgIEVNUFRZX1NUUklORyxcbiAgICAgICAgIFNWR19OQU1FU1BBQ0VfVVJJLFxuICAgICAgICAgREVGQVVMVF9QUk9QRVJUSUVTLFxuICAgICAgICAgSUdOT1JFRF9QUk9QRVJUSUVTIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5cbmNsYXNzIEVsZW1lbnQge1xuICBjb25zdHJ1Y3RvcihzZWxlY3Rvcikge1xuICAgIGlmIChzZWxlY3Rvcikge1xuICAgICAgdGhpcy5kb21FbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7XG5cbiAgICAgIHRoaXMuZG9tRWxlbWVudC5fX2VsZW1lbnRfXyA9IHRoaXM7IC8vL1xuICAgIH1cbiAgfVxuXG4gIGdldERPTUVsZW1lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZG9tRWxlbWVudDtcbiAgfVxuXG4gIGdldE9mZnNldCgpIHtcbiAgICBjb25zdCB0b3AgPSB0aGlzLmRvbUVsZW1lbnQub2Zmc2V0VG9wLCAgLy8vXG4gICAgICAgICAgbGVmdCA9IHRoaXMuZG9tRWxlbWVudC5vZmZzZXRMZWZ0LCAgLy8vXG4gICAgICAgICAgb2Zmc2V0ID0gbmV3IE9mZnNldCh0b3AsIGxlZnQpO1xuXG4gICAgcmV0dXJuIG9mZnNldDtcbiAgfVxuXG4gIGdldEJvdW5kcygpIHtcbiAgICBjb25zdCBib3VuZGluZ0NsaWVudFJlY3QgPSB0aGlzLmRvbUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksXG4gICAgICAgICAgYm91bmRzID0gQm91bmRzLmZyb21Cb3VuZGluZ0NsaWVudFJlY3QoYm91bmRpbmdDbGllbnRSZWN0KTtcblxuICAgIHJldHVybiBib3VuZHM7XG4gIH1cblxuICBnZXRXaWR0aChpbmNsdWRlQm9yZGVyID0gdHJ1ZSkge1xuICAgIGNvbnN0IHdpZHRoID0gaW5jbHVkZUJvcmRlciA/XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZG9tRWxlbWVudC5vZmZzZXRXaWR0aCA6XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5kb21FbGVtZW50LmNsaWVudFdpZHRoO1xuXG4gICAgcmV0dXJuIHdpZHRoO1xuICB9XG5cbiAgc2V0V2lkdGgod2lkdGgpIHtcbiAgICB3aWR0aCA9IGAke3dpZHRofXB4YDsgLy8vXG5cbiAgICB0aGlzLnN0eWxlKFdJRFRILCB3aWR0aCk7XG4gIH1cblxuICBnZXRIZWlnaHQoaW5jbHVkZUJvcmRlciA9IHRydWUpIHtcbiAgICBjb25zdCBoZWlnaHQgPSBpbmNsdWRlQm9yZGVyID9cbiAgICAgICAgICAgICAgICAgICAgIHRoaXMuZG9tRWxlbWVudC5vZmZzZXRIZWlnaHQgOlxuICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRvbUVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuXG4gICAgcmV0dXJuIGhlaWdodDtcbiAgfVxuXG4gIHNldEhlaWdodChoZWlnaHQpIHtcbiAgICBoZWlnaHQgPSBgJHtoZWlnaHR9cHhgOyAvLy9cblxuICAgIHRoaXMuc3R5bGUoSEVJR0hULCBoZWlnaHQpO1xuICB9XG5cbiAgaGFzQXR0cmlidXRlKG5hbWUpIHsgcmV0dXJuIHRoaXMuZG9tRWxlbWVudC5oYXNBdHRyaWJ1dGUobmFtZSk7IH1cblxuICBnZXRBdHRyaWJ1dGUobmFtZSkgeyByZXR1cm4gdGhpcy5kb21FbGVtZW50LmdldEF0dHJpYnV0ZShuYW1lKTsgfVxuXG4gIHNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSkgeyB0aGlzLmRvbUVsZW1lbnQuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKTsgfVxuXG4gIGNsZWFyQXR0cmlidXRlKG5hbWUpIHsgdGhpcy5kb21FbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShuYW1lKTsgfVxuXG4gIGFkZEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSkgeyB0aGlzLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7IH1cblxuICByZW1vdmVBdHRyaWJ1dGUobmFtZSkgeyB0aGlzLmNsZWFyQXR0cmlidXRlKG5hbWUpOyB9XG5cbiAgc2V0Q2xhc3MoY2xhc3NOYW1lKSB7IHRoaXMuZG9tRWxlbWVudC5jbGFzc05hbWUgPSBjbGFzc05hbWU7IH1cblxuICBhZGRDbGFzcyhjbGFzc05hbWUpIHsgdGhpcy5kb21FbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKTsgfVxuXG4gIHJlbW92ZUNsYXNzKGNsYXNzTmFtZSkgeyB0aGlzLmRvbUVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShjbGFzc05hbWUpOyB9XG5cbiAgdG9nZ2xlQ2xhc3MoY2xhc3NOYW1lKSB7IHRoaXMuZG9tRWxlbWVudC5jbGFzc0xpc3QudG9nZ2xlKGNsYXNzTmFtZSk7IH1cblxuICBoYXNDbGFzcyhjbGFzc05hbWUpIHsgcmV0dXJuIHRoaXMuZG9tRWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lKTsgfVxuXG4gIGNsZWFyQ2xhc3NlcygpIHsgdGhpcy5kb21FbGVtZW50LmNsYXNzTmFtZSA9IEVNUFRZX1NUUklORzsgfVxuXG4gIHByZXBlbmRUbyhwYXJlbnRFbGVtZW50KSB7IHBhcmVudEVsZW1lbnQucHJlcGVuZCh0aGlzKTsgfVxuXG4gIGFwcGVuZFRvKHBhcmVudEVsZW1lbnQpIHsgcGFyZW50RWxlbWVudC5hcHBlbmQodGhpcyk7IH1cblxuICBhZGRUbyhwYXJlbnRFbGVtZW50KSB7IHBhcmVudEVsZW1lbnQuYWRkKHRoaXMpOyB9XG5cbiAgcmVtb3ZlRnJvbShwYXJlbnRFbGVtZW50KSB7IHBhcmVudEVsZW1lbnQucmVtb3ZlKHRoaXMpOyB9XG5cbiAgaW5zZXJ0QmVmb3JlKHNpYmxpbmdFbGVtZW50KSB7XG4gICAgY29uc3QgcGFyZW50RE9NTm9kZSA9IHNpYmxpbmdFbGVtZW50LmRvbUVsZW1lbnQucGFyZW50Tm9kZSxcbiAgICAgICAgICBzaWJsaW5nRE9NRWxlbWVudCA9IHNpYmxpbmdFbGVtZW50LmRvbUVsZW1lbnQ7XG5cbiAgICBwYXJlbnRET01Ob2RlLmluc2VydEJlZm9yZSh0aGlzLmRvbUVsZW1lbnQsIHNpYmxpbmdET01FbGVtZW50KTtcbiAgfVxuXG4gIGluc2VydEFmdGVyKHNpYmxpbmdFbGVtZW50KSB7XG4gICAgY29uc3QgcGFyZW50RE9NTm9kZSA9IHNpYmxpbmdFbGVtZW50LmRvbUVsZW1lbnQucGFyZW50Tm9kZSxcbiAgICAgICAgICBzaWJsaW5nRE9NRWxlbWVudCA9IHNpYmxpbmdFbGVtZW50LmRvbUVsZW1lbnQ7XG5cbiAgICBwYXJlbnRET01Ob2RlLmluc2VydEJlZm9yZSh0aGlzLmRvbUVsZW1lbnQsIHNpYmxpbmdET01FbGVtZW50Lm5leHRTaWJsaW5nKTsgIC8vL1xuICB9XG5cbiAgcHJlcGVuZChlbGVtZW50KSB7XG4gICAgY29uc3QgZG9tRWxlbWVudCA9IGVsZW1lbnQuZG9tRWxlbWVudCxcbiAgICAgICAgICBmaXJzdENoaWxkRE9NRWxlbWVudCA9IHRoaXMuZG9tRWxlbWVudC5maXJzdENoaWxkO1xuXG4gICAgdGhpcy5kb21FbGVtZW50Lmluc2VydEJlZm9yZShkb21FbGVtZW50LCBmaXJzdENoaWxkRE9NRWxlbWVudCk7XG4gIH1cblxuICBhcHBlbmQoZWxlbWVudCkge1xuICAgIGNvbnN0IGRvbUVsZW1lbnQgPSBlbGVtZW50LmRvbUVsZW1lbnQ7XG5cbiAgICB0aGlzLmRvbUVsZW1lbnQuaW5zZXJ0QmVmb3JlKGRvbUVsZW1lbnQsIG51bGwpOyAvLy9cbiAgfVxuXG4gIGFkZChlbGVtZW50KSB7IHRoaXMuYXBwZW5kKGVsZW1lbnQpOyB9XG5cbiAgcmVtb3ZlKGVsZW1lbnQpIHtcbiAgICBpZiAoZWxlbWVudCkge1xuICAgICAgY29uc3QgZG9tRWxlbWVudCA9IGVsZW1lbnQuZG9tRWxlbWVudDtcblxuICAgICAgdGhpcy5kb21FbGVtZW50LnJlbW92ZUNoaWxkKGRvbUVsZW1lbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRvbUVsZW1lbnQucmVtb3ZlKCk7XG4gICAgfVxuICB9XG5cbiAgbW91bnQoZWxlbWVudCkge1xuICAgIGNvbnN0IGRlc2NlbmRhbnRFbGVtZW50cyA9IGVsZW1lbnQuZ2V0RGVzY2VuZGFudEVsZW1lbnRzKCksXG4gICAgICAgICAgZWxlbWVudHMgPSBbXG4gICAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgICAgLi4uZGVzY2VuZGFudEVsZW1lbnRzXG4gICAgICAgICAgXTtcblxuICAgIHRoaXMuYWRkKGVsZW1lbnQpO1xuXG4gICAgZWxlbWVudHMucmV2ZXJzZSgpOyAvLy9cblxuICAgIGVsZW1lbnRzLmZvckVhY2goKGVsZW1lbnQpID0+IChlbGVtZW50LmRpZE1vdW50ICYmIGVsZW1lbnQuZGlkTW91bnQoKSkpOyAgLy8vXG4gIH1cblxuICB1bm1vdW50KGVsZW1lbnQpIHtcbiAgICBjb25zdCBkZXNjZW5kYW50RWxlbWVudHMgPSBlbGVtZW50LmdldERlc2NlbmRhbnRFbGVtZW50cygpLFxuICAgICAgICAgIGVsZW1lbnRzID0gW1xuICAgICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICAgIC4uLmRlc2NlbmRhbnRFbGVtZW50c1xuICAgICAgICAgIF07XG5cbiAgICBlbGVtZW50cy5mb3JFYWNoKChlbGVtZW50KSA9PiAoZWxlbWVudC53aWxsVW5tb3VudCAmJiBlbGVtZW50LndpbGxVbm1vdW50KCkpKTsgIC8vL1xuXG4gICAgdGhpcy5yZW1vdmUoZWxlbWVudCk7XG4gIH1cblxuICBzaG93KGRpc3BsYXlTdHlsZSA9IEJMT0NLKSB7IHRoaXMuZGlzcGxheShkaXNwbGF5U3R5bGUpOyB9XG5cbiAgaGlkZSgpIHsgdGhpcy5zdHlsZShESVNQTEFZLCBOT05FKTsgfVxuXG4gIGRpc3BsYXkoZGlzcGxheSkgeyB0aGlzLnN0eWxlKERJU1BMQVksIGRpc3BsYXkpOyB9XG5cbiAgZW5hYmxlKCkgeyB0aGlzLmNsZWFyQXR0cmlidXRlKERJU0FCTEVEKTsgfVxuXG4gIGRpc2FibGUoKSB7IHRoaXMuc2V0QXR0cmlidXRlKERJU0FCTEVELCBESVNBQkxFRCk7IH1cblxuICBpc0VuYWJsZWQoKSB7XG4gICAgY29uc3QgZGlzYWJsZWQgPSB0aGlzLmlzRGlzYWJsZWQoKSxcbiAgICAgICAgICBlbmFibGVkID0gIWRpc2FibGVkO1xuXG4gICAgcmV0dXJuIGVuYWJsZWQ7XG4gIH1cblxuICBpc0Rpc2FibGVkKCkge1xuICAgIGNvbnN0IGRpc2FibGVkID0gdGhpcy5oYXNBdHRyaWJ1dGUoRElTQUJMRUQpO1xuXG4gICAgcmV0dXJuIGRpc2FibGVkO1xuICB9XG4gIFxuICBpc0Rpc3BsYXllZCgpIHtcbiAgICBjb25zdCBkaXNwbGF5ID0gdGhpcy5jc3MoRElTUExBWSksXG4gICAgICAgICAgZGlzcGxheWVkID0gKGRpc3BsYXkgIT09IE5PTkUpO1xuICAgIFxuICAgIHJldHVybiBkaXNwbGF5ZWQ7XG4gIH1cblxuICBpc1Nob3dpbmcoKSB7XG4gICAgY29uc3QgZGlzcGxheWVkID0gdGhpcy5pc0Rpc3BsYXllZCgpLFxuICAgICAgICAgIHNob3dpbmcgPSBkaXNwbGF5ZWQ7ICAvLy9cblxuICAgIHJldHVybiBzaG93aW5nO1xuICB9XG5cbiAgaXNIaWRkZW4oKSB7XG4gICAgY29uc3QgZGlzcGxheWVkID0gdGhpcy5pc0Rpc3BsYXllZCgpLFxuICAgICAgICAgIGhpZGRlbiA9ICFkaXNwbGF5ZWQ7XG5cbiAgICByZXR1cm4gaGlkZGVuO1xuICB9XG5cbiAgc3R5bGUobmFtZSwgdmFsdWUpIHtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5kb21FbGVtZW50LnN0eWxlW25hbWVdID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHN0eWxlID0gdGhpcy5kb21FbGVtZW50LnN0eWxlW25hbWVdO1xuXG4gICAgICByZXR1cm4gc3R5bGU7XG4gICAgfVxuICB9XG5cbiAgaHRtbChodG1sKSB7XG4gICAgaWYgKGh0bWwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgaW5uZXJIVE1MID0gdGhpcy5kb21FbGVtZW50LmlubmVySFRNTDtcblxuICAgICAgaHRtbCA9IGlubmVySFRNTDsgLy8vXG5cbiAgICAgIHJldHVybiBodG1sO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBpbm5lckhUTUwgPSBodG1sOyAvLy9cblxuICAgICAgdGhpcy5kb21FbGVtZW50LmlubmVySFRNTCA9IGlubmVySFRNTFxuICAgIH1cbiAgfVxuXG4gIGNzcyhjc3MpIHtcbiAgICBpZiAoY3NzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGNvbXB1dGVkU3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKHRoaXMuZG9tRWxlbWVudCksXG4gICAgICAgICAgICBjc3MgPSB7fTtcblxuICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGNvbXB1dGVkU3R5bGUubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgIGNvbnN0IGZpcnN0Q29tcHV0ZWRTdHlsZSA9IGZpcnN0W2NvbXB1dGVkU3R5bGVdLFxuICAgICAgICAgICAgICBuYW1lID0gZmlyc3RDb21wdXRlZFN0eWxlLCAgLy8vXG4gICAgICAgICAgICAgIHZhbHVlID0gY29tcHV0ZWRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKG5hbWUpOyAvLy9cblxuICAgICAgICBjc3NbbmFtZV0gPSB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNzcztcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBjc3MgPT09IFNUUklORykge1xuICAgICAgbGV0IG5hbWUgPSBjc3M7IC8vL1xuXG4gICAgICBjb25zdCBjb21wdXRlZFN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLmRvbUVsZW1lbnQpLFxuICAgICAgICAgICAgdmFsdWUgPSBjb21wdXRlZFN0eWxlLmdldFByb3BlcnR5VmFsdWUobmFtZSk7IC8vL1xuXG4gICAgICBjc3MgPSB2YWx1ZTsgIC8vL1xuXG4gICAgICByZXR1cm4gY3NzO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBuYW1lcyA9IE9iamVjdC5rZXlzKGNzcyk7IC8vL1xuXG4gICAgICBuYW1lcy5mb3JFYWNoKChuYW1lKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gY3NzW25hbWVdO1xuXG4gICAgICAgIHRoaXMuc3R5bGUobmFtZSwgdmFsdWUpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIFxuICBibHVyKCkgeyB0aGlzLmRvbUVsZW1lbnQuYmx1cigpOyB9XG5cbiAgZm9jdXMoKSB7IHRoaXMuZG9tRWxlbWVudC5mb2N1cygpOyB9XG5cbiAgaGFzRm9jdXMoKSB7XG4gICAgY29uc3QgZm9jdXMgPSAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gdGhpcy5kb21FbGVtZW50KTsgIC8vL1xuXG4gICAgcmV0dXJuIGZvY3VzO1xuICB9XG5cbiAgc3RhdGljIGZyb21DbGFzcyhDbGFzcywgcHJvcGVydGllcywgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XG4gICAgY29uc3QgeyB0YWdOYW1lIH0gPSBDbGFzcyxcbiAgICAgICAgICBlbGVtZW50ID0gZWxlbWVudEZyb21UYWdOYW1lKENsYXNzLCB0YWdOYW1lLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpLFxuICAgICAgICAgIGRlZmF1bHRQcm9wZXJ0aWVzID0gZGVmYXVsdFByb3BlcnRpZXNGcm9tQ2xhc3MoQ2xhc3MpLFxuICAgICAgICAgIGlnbm9yZWRQcm9wZXJ0aWVzID0gaWdub3JlZFByb3BlcnRpZXNGcm9tQ2xhc3MoQ2xhc3MpO1xuXG4gICAgZWxlbWVudC5hcHBseVByb3BlcnRpZXMocHJvcGVydGllcywgZGVmYXVsdFByb3BlcnRpZXMsIGlnbm9yZWRQcm9wZXJ0aWVzKTtcblxuICAgIGVsZW1lbnQuaW5pdGlhbGlzZSAmJiBlbGVtZW50LmluaXRpYWxpc2UoKTsgLy8vXG5cbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tVGFnTmFtZSh0YWdOYW1lLCBwcm9wZXJ0aWVzLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHtcbiAgICBjb25zdCBDbGFzcyA9IEVsZW1lbnQsICAvLy9cbiAgICAgICAgICBlbGVtZW50ID0gZWxlbWVudEZyb21UYWdOYW1lKENsYXNzLCB0YWdOYW1lLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpLFxuICAgICAgICAgIGRlZmF1bHRQcm9wZXJ0aWVzID0ge30sIC8vL1xuICAgICAgICAgIGlnbm9yZWRQcm9wZXJ0aWVzID0gW107IC8vL1xuXG4gICAgZWxlbWVudC5hcHBseVByb3BlcnRpZXMocHJvcGVydGllcywgZGVmYXVsdFByb3BlcnRpZXMsIGlnbm9yZWRQcm9wZXJ0aWVzKTtcblxuICAgIGVsZW1lbnQuaW5pdGlhbGlzZSAmJiBlbGVtZW50LmluaXRpYWxpc2UoKTsgLy8vXG5cbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxufVxuXG5PYmplY3QuYXNzaWduKEVsZW1lbnQucHJvdG90eXBlLCBqc3hNaXhpbnMpO1xuT2JqZWN0LmFzc2lnbihFbGVtZW50LnByb3RvdHlwZSwga2V5TWl4aW5zKTtcbk9iamVjdC5hc3NpZ24oRWxlbWVudC5wcm90b3R5cGUsIGNsaWNrTWl4aW5zKTtcbk9iamVjdC5hc3NpZ24oRWxlbWVudC5wcm90b3R5cGUsIHN0YXRlTWl4aW5zKTtcbk9iamVjdC5hc3NpZ24oRWxlbWVudC5wcm90b3R5cGUsIGV2ZW50TWl4aW5zKTtcbk9iamVjdC5hc3NpZ24oRWxlbWVudC5wcm90b3R5cGUsIG1vdXNlTWl4aW5zKTtcbk9iamVjdC5hc3NpZ24oRWxlbWVudC5wcm90b3R5cGUsIHJlc2l6ZU1peGlucyk7XG5PYmplY3QuYXNzaWduKEVsZW1lbnQucHJvdG90eXBlLCBzY3JvbGxNaXhpbnMpO1xuT2JqZWN0LmFzc2lnbihFbGVtZW50LnByb3RvdHlwZSwgZWxlbWVudE1peGlucyk7XG5cbmV4cG9ydCBkZWZhdWx0IEVsZW1lbnQ7XG5cbmZ1bmN0aW9uIGVsZW1lbnRGcm9tVGFnTmFtZShDbGFzcywgdGFnTmFtZSwgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XG4gIGNvbnN0IHNlbGVjdG9yID0gbnVsbCxcbiAgICAgICAgZWxlbWVudCA9IG5ldyAoRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQuY2FsbChDbGFzcywgbnVsbCwgc2VsZWN0b3IsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cykpO1xuXG4gIGVsZW1lbnQuZG9tRWxlbWVudCA9IGlzU1ZHVGFnTmFtZSh0YWdOYW1lKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFNWR19OQU1FU1BBQ0VfVVJJLCB0YWdOYW1lKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpO1xuXG4gIGVsZW1lbnQuZG9tRWxlbWVudC5fX2VsZW1lbnRfXyA9IGVsZW1lbnQ7IC8vL1xuXG4gIHJldHVybiBlbGVtZW50O1xufVxuXG5mdW5jdGlvbiBkZWZhdWx0UHJvcGVydGllc0Zyb21DbGFzcyhDbGFzcywgZGVmYXVsdFByb3BlcnRpZXMgPSB7fSkge1xuICBpZiAoQ2xhc3MuaGFzT3duUHJvcGVydHkoREVGQVVMVF9QUk9QRVJUSUVTKSkge1xuICAgIGRlZmF1bHRQcm9wZXJ0aWVzID0gY29tYmluZShkZWZhdWx0UHJvcGVydGllcywgQ2xhc3NbREVGQVVMVF9QUk9QRVJUSUVTXSk7XG4gIH1cblxuICBjb25zdCBzdXBlckNsYXNzID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKENsYXNzKTtcblxuICBpZiAoc3VwZXJDbGFzcyAhPT0gbnVsbCkge1xuICAgIGRlZmF1bHRQcm9wZXJ0aWVzID0gZGVmYXVsdFByb3BlcnRpZXNGcm9tQ2xhc3Moc3VwZXJDbGFzcywgZGVmYXVsdFByb3BlcnRpZXMpO1xuICB9XG5cbiAgcmV0dXJuIGRlZmF1bHRQcm9wZXJ0aWVzO1xufVxuXG5mdW5jdGlvbiBpZ25vcmVkUHJvcGVydGllc0Zyb21DbGFzcyhDbGFzcywgaWdub3JlZFByb3BlcnRpZXMgPSBbXSkge1xuICBpZiAoQ2xhc3MuaGFzT3duUHJvcGVydHkoSUdOT1JFRF9QUk9QRVJUSUVTKSkge1xuICAgIGlnbm9yZWRQcm9wZXJ0aWVzID0gYXVnbWVudChpZ25vcmVkUHJvcGVydGllcywgQ2xhc3NbSUdOT1JFRF9QUk9QRVJUSUVTXSwgKGlnbm9yZWRQcm9wZXJ0eSkgPT4gIWlnbm9yZWRQcm9wZXJ0aWVzLmluY2x1ZGVzKGlnbm9yZWRQcm9wZXJ0eSkpO1xuICB9XG5cbiAgY29uc3Qgc3VwZXJDbGFzcyA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihDbGFzcyk7XG5cbiAgaWYgKHN1cGVyQ2xhc3MgIT09IG51bGwpIHtcbiAgICBpZ25vcmVkUHJvcGVydGllcyA9IGlnbm9yZWRQcm9wZXJ0aWVzRnJvbUNsYXNzKHN1cGVyQ2xhc3MsIGlnbm9yZWRQcm9wZXJ0aWVzKTtcbiAgfVxuXG4gIHJldHVybiBpZ25vcmVkUHJvcGVydGllcztcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQm91bmRzIHtcbiAgY29uc3RydWN0b3IodG9wLCBsZWZ0LCByaWdodCwgYm90dG9tKSB7XG4gICAgdGhpcy50b3AgPSB0b3A7XG4gICAgdGhpcy5sZWZ0ID0gbGVmdDtcbiAgICB0aGlzLnJpZ2h0ID0gcmlnaHQ7XG4gICAgdGhpcy5ib3R0b20gPSBib3R0b207XG4gIH1cblxuICBnZXRUb3AoKSB7XG4gICAgcmV0dXJuIHRoaXMudG9wO1xuICB9XG5cbiAgZ2V0TGVmdCgpIHtcbiAgICByZXR1cm4gdGhpcy5sZWZ0O1xuICB9XG5cbiAgZ2V0UmlnaHQoKSB7XG4gICAgcmV0dXJuIHRoaXMucmlnaHQ7XG4gIH1cblxuICBnZXRCb3R0b20oKSB7XG4gICAgcmV0dXJuIHRoaXMuYm90dG9tO1xuICB9XG5cbiAgZ2V0V2lkdGgoKSB7XG4gICAgY29uc3Qgd2lkdGggPSAodGhpcy5yaWdodCAtIHRoaXMubGVmdCk7XG5cbiAgICByZXR1cm4gd2lkdGg7XG4gIH1cblxuICBnZXRIZWlnaHQoKSB7XG4gICAgY29uc3QgaGVpZ2h0ID0gKHRoaXMuYm90dG9tIC0gdGhpcy50b3ApO1xuXG4gICAgcmV0dXJuIGhlaWdodDtcbiAgfVxuICBcbiAgc2V0VG9wKHRvcCkge1xuICAgIHRoaXMudG9wID0gdG9wO1xuICB9XG5cbiAgc2V0TGVmdChsZWZ0KSB7XG4gICAgdGhpcy5sZWZ0ID0gbGVmdDtcbiAgfVxuXG4gIHNldFJpZ2h0KHJpZ2h0KSB7XG4gICAgdGhpcy5yaWdodCA9IHJpZ2h0O1xuICB9XG5cbiAgc2V0Qm90dG9tKGJvdHRvbSkge1xuICAgIHRoaXMuYm90dG9tID0gYm90dG9tO1xuICB9XG5cbiAgc2hpZnQoaG9yaXpvbnRhbE9mZnNldCwgdmVydGljYWxPZmZzZXQpIHtcbiAgICB0aGlzLnRvcCArPSB2ZXJ0aWNhbE9mZnNldDtcbiAgICB0aGlzLmxlZnQgKz0gaG9yaXpvbnRhbE9mZnNldDtcbiAgICB0aGlzLnJpZ2h0ICs9IGhvcml6b250YWxPZmZzZXQ7XG4gICAgdGhpcy5ib3R0b20gKz0gdmVydGljYWxPZmZzZXQ7XG4gIH1cblxuICBpc092ZXJsYXBwaW5nTW91c2UobW91c2VUb3AsIG1vdXNlTGVmdCkge1xuICAgIHJldHVybiAoICAodGhpcy50b3AgPD0gbW91c2VUb3ApXG4gICAgICAgICAgICYmICh0aGlzLmxlZnQgPD0gbW91c2VMZWZ0KVxuICAgICAgICAgICAmJiAodGhpcy5yaWdodCA+IG1vdXNlTGVmdClcbiAgICAgICAgICAgJiYgKHRoaXMuYm90dG9tID4gbW91c2VUb3ApICApO1xuICB9XG5cbiAgYXJlT3ZlcmxhcHBpbmcoYm91bmRzKSB7XG4gICAgcmV0dXJuICggICh0aGlzLnRvcCA8IGJvdW5kcy5ib3R0b20pXG4gICAgICAgICAgICYmICh0aGlzLmxlZnQgPCBib3VuZHMucmlnaHQpXG4gICAgICAgICAgICYmICh0aGlzLnJpZ2h0ID4gYm91bmRzLmxlZnQpXG4gICAgICAgICAgICYmICh0aGlzLmJvdHRvbSA+IGJvdW5kcy50b3ApICApO1xuICB9XG5cbiAgc3RhdGljIGZyb21Cb3VuZGluZ0NsaWVudFJlY3QoYm91bmRpbmdDbGllbnRSZWN0KSB7XG4gICAgY29uc3Qgd2luZG93U2Nyb2xsVG9wID0gd2luZG93LnBhZ2VZT2Zmc2V0LCAvLy9cbiAgICAgICAgICB3aW5kb3dTY3JvbGxMZWZ0ID0gd2luZG93LnBhZ2VYT2Zmc2V0LCAgLy8vXG4gICAgICAgICAgdG9wID0gYm91bmRpbmdDbGllbnRSZWN0LnRvcCArIHdpbmRvd1Njcm9sbFRvcCxcbiAgICAgICAgICBsZWZ0ID0gYm91bmRpbmdDbGllbnRSZWN0LmxlZnQgKyB3aW5kb3dTY3JvbGxMZWZ0LFxuICAgICAgICAgIHJpZ2h0ID0gYm91bmRpbmdDbGllbnRSZWN0LnJpZ2h0ICsgd2luZG93U2Nyb2xsTGVmdCxcbiAgICAgICAgICBib3R0b20gPSBib3VuZGluZ0NsaWVudFJlY3QuYm90dG9tICsgd2luZG93U2Nyb2xsVG9wLFxuICAgICAgICAgIGJvdW5kcyA9IG5ldyBCb3VuZHModG9wLCBsZWZ0LCByaWdodCwgYm90dG9tKTtcblxuICAgIHJldHVybiBib3VuZHM7XG4gIH1cblxuICBzdGF0aWMgZnJvbVRvcExlZnRXaWR0aEFuZEhlaWdodCh0b3AsIGxlZnQsIHdpZHRoLCBoZWlnaHQpIHtcbiAgICBjb25zdCBib3R0b20gPSB0b3AgKyBoZWlnaHQsXG4gICAgICAgICAgcmlnaHQgPSBsZWZ0ICsgd2lkdGgsXG4gICAgICAgICAgYm91bmRzID0gbmV3IEJvdW5kcyh0b3AsIGxlZnQsIHJpZ2h0LCBib3R0b20pO1xuXG4gICAgcmV0dXJuIGJvdW5kcztcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRWxlbWVudCBmcm9tIFwiLi9lbGVtZW50XCI7XG5cbmltcG9ydCB7IGZsYXR0ZW4gfSBmcm9tIFwiLi91dGlsaXRpZXMvYXJyYXlcIjtcbmltcG9ydCB7IFNUUklORywgRlVOQ1RJT04gfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IHJlbW92ZUZhbHNleUVsZW1lbnRzLCByZXBsYWNlU3RyaW5nc1dpdGhUZXh0RWxlbWVudHMgfSBmcm9tIFwiLi91dGlsaXRpZXMvZWxlbWVudHNcIjtcblxuZnVuY3Rpb24gY3JlYXRlRWxlbWVudChmaXJzdEFyZ3VtZW50LCBwcm9wZXJ0aWVzLCAuLi5jaGlsZEVsZW1lbnRzKSB7XG4gIGxldCBlbGVtZW50ID0gbnVsbDtcblxuICBpZiAoZmlyc3RBcmd1bWVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY2hpbGRFbGVtZW50cyA9IHNhbml0aXNlQ2hpbGRFbGVtZW50cyhjaGlsZEVsZW1lbnRzKTtcblxuICAgIHByb3BlcnRpZXMgPSBPYmplY3QuYXNzaWduKHtcbiAgICAgIGNoaWxkRWxlbWVudHNcbiAgICB9LCBwcm9wZXJ0aWVzKTtcblxuICAgIGlmIChmYWxzZSkge1xuICAgICAgLy8vXG4gICAgfSBlbHNlIGlmIChpc1N1YmNsYXNzT2YoZmlyc3RBcmd1bWVudCwgRWxlbWVudCkpIHtcbiAgICAgIGNvbnN0IENsYXNzID0gZmlyc3RBcmd1bWVudDsgIC8vL1xuXG4gICAgICBlbGVtZW50ID0gQ2xhc3MuZnJvbUNsYXNzKENsYXNzLCBwcm9wZXJ0aWVzKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBmaXJzdEFyZ3VtZW50ID09PSBTVFJJTkcpIHtcbiAgICAgIGNvbnN0IHRhZ05hbWUgPSBmaXJzdEFyZ3VtZW50OyAvLy9cblxuICAgICAgZWxlbWVudCA9IEVsZW1lbnQuZnJvbVRhZ05hbWUodGFnTmFtZSwgcHJvcGVydGllcyk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZmlyc3RBcmd1bWVudCA9PT0gRlVOQ1RJT04pIHtcbiAgICAgIGNvbnN0IGVsZW1lbnRGdW5jdGlvbiA9IGZpcnN0QXJndW1lbnQ7ICAvLy9cblxuICAgICAgZWxlbWVudCA9IGVsZW1lbnRGdW5jdGlvbihwcm9wZXJ0aWVzKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZWxlbWVudDtcbn1cblxuY29uc3QgUmVhY3QgPSB7XG4gIGNyZWF0ZUVsZW1lbnRcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFJlYWN0O1xuXG5mdW5jdGlvbiBzYW5pdGlzZUNoaWxkRWxlbWVudHMoY2hpbGRFbGVtZW50cykge1xuICBjaGlsZEVsZW1lbnRzID0gZmxhdHRlbihjaGlsZEVsZW1lbnRzKTtcblxuICBjaGlsZEVsZW1lbnRzID0gcmVtb3ZlRmFsc2V5RWxlbWVudHMoY2hpbGRFbGVtZW50cyk7XG5cbiAgY2hpbGRFbGVtZW50cyA9IHJlcGxhY2VTdHJpbmdzV2l0aFRleHRFbGVtZW50cyhjaGlsZEVsZW1lbnRzKTtcblxuICByZXR1cm4gY2hpbGRFbGVtZW50cztcbn1cblxuZnVuY3Rpb24gaXNTdWJjbGFzc09mKGFyZ3VtZW50LCBDbGFzcykge1xuICBsZXQgc3ViY2xhc3NPZiA9IGZhbHNlO1xuXG4gIGlmIChhcmd1bWVudC5uYW1lID09PSBDbGFzcy5uYW1lKSB7IC8vL1xuICAgIHN1YmNsYXNzT2YgPSB0cnVlO1xuICB9IGVsc2Uge1xuICAgIGFyZ3VtZW50ID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKGFyZ3VtZW50KTsgLy8vXG5cbiAgICBpZiAoYXJndW1lbnQpIHtcbiAgICAgIHN1YmNsYXNzT2YgPSBpc1N1YmNsYXNzT2YoYXJndW1lbnQsIENsYXNzKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3ViY2xhc3NPZjtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQm91bmRzIHtcbiAgY29uc3RydWN0b3IodG9wLCBsZWZ0LCByaWdodCwgYm90dG9tKSB7XG4gICAgdGhpcy50b3AgPSB0b3A7XG4gICAgdGhpcy5sZWZ0ID0gbGVmdDtcbiAgICB0aGlzLnJpZ2h0ID0gcmlnaHQ7XG4gICAgdGhpcy5ib3R0b20gPSBib3R0b207XG4gIH1cblxuICBnZXRUb3AoKSB7XG4gICAgcmV0dXJuIHRoaXMudG9wO1xuICB9XG5cbiAgZ2V0TGVmdCgpIHtcbiAgICByZXR1cm4gdGhpcy5sZWZ0O1xuICB9XG5cbiAgZ2V0UmlnaHQoKSB7XG4gICAgcmV0dXJuIHRoaXMucmlnaHQ7XG4gIH1cblxuICBnZXRCb3R0b20oKSB7XG4gICAgcmV0dXJuIHRoaXMuYm90dG9tO1xuICB9XG5cbiAgZ2V0V2lkdGgoKSB7XG4gICAgY29uc3Qgd2lkdGggPSAodGhpcy5yaWdodCAtIHRoaXMubGVmdCk7XG5cbiAgICByZXR1cm4gd2lkdGg7XG4gIH1cblxuICBnZXRIZWlnaHQoKSB7XG4gICAgY29uc3QgaGVpZ2h0ID0gKHRoaXMuYm90dG9tIC0gdGhpcy50b3ApO1xuXG4gICAgcmV0dXJuIGhlaWdodDtcbiAgfVxuICBcbiAgc2V0VG9wKHRvcCkge1xuICAgIHRoaXMudG9wID0gdG9wO1xuICB9XG5cbiAgc2V0TGVmdChsZWZ0KSB7XG4gICAgdGhpcy5sZWZ0ID0gbGVmdDtcbiAgfVxuXG4gIHNldFJpZ2h0KHJpZ2h0KSB7XG4gICAgdGhpcy5yaWdodCA9IHJpZ2h0O1xuICB9XG5cbiAgc2V0Qm90dG9tKGJvdHRvbSkge1xuICAgIHRoaXMuYm90dG9tID0gYm90dG9tO1xuICB9XG5cbiAgc2hpZnQoaG9yaXpvbnRhbE9mZnNldCwgdmVydGljYWxPZmZzZXQpIHtcbiAgICB0aGlzLnRvcCArPSB2ZXJ0aWNhbE9mZnNldDtcbiAgICB0aGlzLmxlZnQgKz0gaG9yaXpvbnRhbE9mZnNldDtcbiAgICB0aGlzLnJpZ2h0ICs9IGhvcml6b250YWxPZmZzZXQ7XG4gICAgdGhpcy5ib3R0b20gKz0gdmVydGljYWxPZmZzZXQ7XG4gIH1cblxuICBpc092ZXJsYXBwaW5nTW91c2UobW91c2VUb3AsIG1vdXNlTGVmdCkge1xuICAgIHJldHVybiAoICAodGhpcy50b3AgPD0gbW91c2VUb3ApXG4gICAgICAgICAgICYmICh0aGlzLmxlZnQgPD0gbW91c2VMZWZ0KVxuICAgICAgICAgICAmJiAodGhpcy5yaWdodCA+IG1vdXNlTGVmdClcbiAgICAgICAgICAgJiYgKHRoaXMuYm90dG9tID4gbW91c2VUb3ApICApO1xuICB9XG5cbiAgYXJlT3ZlcmxhcHBpbmcoYm91bmRzKSB7XG4gICAgcmV0dXJuICggICh0aGlzLnRvcCA8IGJvdW5kcy5ib3R0b20pXG4gICAgICAgICAgICYmICh0aGlzLmxlZnQgPCBib3VuZHMucmlnaHQpXG4gICAgICAgICAgICYmICh0aGlzLnJpZ2h0ID4gYm91bmRzLmxlZnQpXG4gICAgICAgICAgICYmICh0aGlzLmJvdHRvbSA+IGJvdW5kcy50b3ApICApO1xuICB9XG5cbiAgc3RhdGljIGZyb21Cb3VuZGluZ0NsaWVudFJlY3QoYm91bmRpbmdDbGllbnRSZWN0KSB7XG4gICAgY29uc3Qgd2luZG93U2Nyb2xsVG9wID0gd2luZG93LnBhZ2VZT2Zmc2V0LCAvLy9cbiAgICAgICAgICB3aW5kb3dTY3JvbGxMZWZ0ID0gd2luZG93LnBhZ2VYT2Zmc2V0LCAgLy8vXG4gICAgICAgICAgdG9wID0gYm91bmRpbmdDbGllbnRSZWN0LnRvcCArIHdpbmRvd1Njcm9sbFRvcCxcbiAgICAgICAgICBsZWZ0ID0gYm91bmRpbmdDbGllbnRSZWN0LmxlZnQgKyB3aW5kb3dTY3JvbGxMZWZ0LFxuICAgICAgICAgIHJpZ2h0ID0gYm91bmRpbmdDbGllbnRSZWN0LnJpZ2h0ICsgd2luZG93U2Nyb2xsTGVmdCxcbiAgICAgICAgICBib3R0b20gPSBib3VuZGluZ0NsaWVudFJlY3QuYm90dG9tICsgd2luZG93U2Nyb2xsVG9wLFxuICAgICAgICAgIGJvdW5kcyA9IG5ldyBCb3VuZHModG9wLCBsZWZ0LCByaWdodCwgYm90dG9tKTtcblxuICAgIHJldHVybiBib3VuZHM7XG4gIH1cblxuICBzdGF0aWMgZnJvbVRvcExlZnRXaWR0aEFuZEhlaWdodCh0b3AsIGxlZnQsIHdpZHRoLCBoZWlnaHQpIHtcbiAgICBjb25zdCBib3R0b20gPSB0b3AgKyBoZWlnaHQsXG4gICAgICAgICAgcmlnaHQgPSBsZWZ0ICsgd2lkdGgsXG4gICAgICAgICAgYm91bmRzID0gbmV3IEJvdW5kcyh0b3AsIGxlZnQsIHJpZ2h0LCBib3R0b20pO1xuXG4gICAgcmV0dXJuIGJvdW5kcztcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRWxlbWVudCBmcm9tIFwiLi4vZWxlbWVudFwiO1xuXG5pbXBvcnQgeyBCT0RZIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCb2R5IGV4dGVuZHMgRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKHNlbGVjdG9yID0gQk9EWSkge1xuICAgIHN1cGVyKHNlbGVjdG9yKTtcbiAgfVxuXG4gIHN0YXRpYyB0YWdOYW1lID0gXCJib2R5XCI7XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IEVsZW1lbnQgZnJvbSBcIi4uL2VsZW1lbnRcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTGluayBleHRlbmRzIEVsZW1lbnQge1xuICBnZXRIUmVmKCkgeyByZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGUoXCJocmVmXCIpOyB9XG5cbiAgc2V0SFJlZihocmVmKSB7IHJldHVybiB0aGlzLnNldEF0dHJpYnV0ZShcImhyZWZcIiwgaHJlZik7IH1cblxuICBzdGF0aWMgdGFnTmFtZSA9IFwiYVwiO1xufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IENIQU5HRV9FVkVOVF9UWVBFIH0gZnJvbSBcIi4uL2V2ZW50VHlwZXNcIjtcblxuZnVuY3Rpb24gb25DaGFuZ2UoY2hhbmdlSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9uKENIQU5HRV9FVkVOVF9UWVBFLCBjaGFuZ2VIYW5kbGVyLCBlbGVtZW50KTsgfVxuXG5mdW5jdGlvbiBvZmZDaGFuZ2UoY2hhbmdlSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9mZihDSEFOR0VfRVZFTlRfVFlQRSwgY2hhbmdlSGFuZGxlciwgZWxlbWVudCk7IH1cblxuY29uc3QgY2hhbmdlTWl4aW5zID0ge1xuICBvbkNoYW5nZSxcbiAgb2ZmQ2hhbmdlXG59O1xuXG5leHBvcnQgZGVmYXVsdCBjaGFuZ2VNaXhpbnM7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBFbGVtZW50IGZyb20gXCIuL2VsZW1lbnRcIjtcbmltcG9ydCBjaGFuZ2VNaXhpbnMgZnJvbSBcIi4vbWl4aW5zL2NoYW5nZVwiO1xuXG5pbXBvcnQgeyBDSEFOR0VfRVZFTlRfVFlQRSB9IGZyb20gXCIuL2V2ZW50VHlwZXNcIjtcblxuY2xhc3MgSW5wdXRFbGVtZW50IGV4dGVuZHMgRWxlbWVudCB7XG4gIG9uQ2hhbmdlKGNoYW5nZUhhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vbihDSEFOR0VfRVZFTlRfVFlQRSwgY2hhbmdlSGFuZGxlciwgZWxlbWVudCk7IH1cblxuICBvZmZDaGFuZ2UoY2hhbmdlSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9mZihDSEFOR0VfRVZFTlRfVFlQRSwgY2hhbmdlSGFuZGxlciwgZWxlbWVudCk7IH1cblxuICBvblJlc2l6ZShyZXNpemVIYW5kbGVyLCBlbGVtZW50KSB7fSAvLy9cblxuICBvZmZSZXNpemUocmVzaXplSGFuZGxlciwgZWxlbWVudCkge30gIC8vL1xuXG4gIGdldFZhbHVlKCkgeyByZXR1cm4gdGhpcy5kb21FbGVtZW50LnZhbHVlOyB9XG5cbiAgZ2V0U2VsZWN0aW9uU3RhcnQoKSB7IHJldHVybiB0aGlzLmRvbUVsZW1lbnQuc2VsZWN0aW9uU3RhcnQ7IH1cblxuICBnZXRTZWxlY3Rpb25FbmQoKSB7IHJldHVybiB0aGlzLmRvbUVsZW1lbnQuc2VsZWN0aW9uRW5kOyB9XG4gIFxuICBpc1JlYWRPbmx5KCkgeyByZXR1cm4gdGhpcy5kb21FbGVtZW50LnJlYWRPbmx5OyB9XG5cbiAgc2V0VmFsdWUodmFsdWUpIHsgdGhpcy5kb21FbGVtZW50LnZhbHVlID0gdmFsdWU7IH1cblxuICBzZXRTZWxlY3Rpb25TdGFydChzZWxlY3Rpb25TdGFydCkgeyB0aGlzLmRvbUVsZW1lbnQuc2VsZWN0aW9uU3RhcnQgPSBzZWxlY3Rpb25TdGFydDsgfVxuXG4gIHNldFNlbGVjdGlvbkVuZChzZWxlY3Rpb25FbmQpIHsgdGhpcy5kb21FbGVtZW50LnNlbGVjdGlvbkVuZCA9IHNlbGVjdGlvbkVuZDsgfVxuXG4gIHNldFJlYWRPbmx5KHJlYWRPbmx5KSB7IHRoaXMuZG9tRWxlbWVudC5yZWFkT25seSA9IHJlYWRPbmx5OyB9XG5cbiAgc2VsZWN0KCkgeyB0aGlzLmRvbUVsZW1lbnQuc2VsZWN0KCk7IH1cbn1cblxuT2JqZWN0LmFzc2lnbihJbnB1dEVsZW1lbnQucHJvdG90eXBlLCBjaGFuZ2VNaXhpbnMpO1xuXG5leHBvcnQgZGVmYXVsdCBJbnB1dEVsZW1lbnQ7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBJbnB1dEVsZW1lbnQgZnJvbSBcIi4uL2lucHV0RWxlbWVudFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJbnB1dCBleHRlbmRzIElucHV0RWxlbWVudCB7XG4gIHN0YXRpYyB0YWdOYW1lID0gXCJpbnB1dFwiO1xufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBFbGVtZW50IGZyb20gXCIuLi9lbGVtZW50XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJ1dHRvbiBleHRlbmRzIEVsZW1lbnQge1xuICBzdGF0aWMgdGFnTmFtZSA9IFwiYnV0dG9uXCI7XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IEVsZW1lbnQgZnJvbSBcIi4uL2VsZW1lbnRcIjtcbmltcG9ydCBjaGFuZ2VNaXhpbnMgZnJvbSBcIi4uL21peGlucy9jaGFuZ2VcIjtcblxuY2xhc3MgU2VsZWN0IGV4dGVuZHMgRWxlbWVudCB7XG4gIG9uUmVzaXplKHJlc2l6ZUhhbmRsZXIsIGVsZW1lbnQpIHt9IC8vL1xuXG4gIG9mZlJlc2l6ZShyZXNpemVIYW5kbGVyLCBlbGVtZW50KSB7fSAgLy8vXG5cbiAgZ2V0VmFsdWUoKSB7IHJldHVybiB0aGlzLmRvbUVsZW1lbnQudmFsdWU7IH1cblxuICBzZXRWYWx1ZSh2YWx1ZSkgeyB0aGlzLmRvbUVsZW1lbnQudmFsdWUgPSB2YWx1ZTsgfVxuXG4gIHN0YXRpYyB0YWdOYW1lID0gXCJzZWxlY3RcIjtcbn1cblxuT2JqZWN0LmFzc2lnbihTZWxlY3QucHJvdG90eXBlLCBjaGFuZ2VNaXhpbnMpO1xuXG5leHBvcnQgZGVmYXVsdCBTZWxlY3Q7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBFbGVtZW50IGZyb20gXCIuLi9lbGVtZW50XCI7XG5pbXBvcnQgY2hhbmdlTWl4aW5zIGZyb20gXCIuLi9taXhpbnMvY2hhbmdlXCI7XG5cbmNsYXNzIENoZWNrYm94IGV4dGVuZHMgRWxlbWVudCB7XG4gIGlzQ2hlY2tlZCgpIHsgcmV0dXJuIHRoaXMuZG9tRWxlbWVudC5jaGVja2VkOyB9XG5cbiAgY2hlY2soY2hlY2tlZCA9IHRydWUpIHsgdGhpcy5kb21FbGVtZW50LmNoZWNrZWQgPSBjaGVja2VkOyB9XG5cbiAgc3RhdGljIHRhZ05hbWUgPSBcImlucHV0XCI7XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIHR5cGU6IFwiY2hlY2tib3hcIlxuICB9O1xufVxuXG5PYmplY3QuYXNzaWduKENoZWNrYm94LnByb3RvdHlwZSwgY2hhbmdlTWl4aW5zKTtcblxuZXhwb3J0IGRlZmF1bHQgQ2hlY2tib3g7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBJbnB1dEVsZW1lbnQgZnJvbSBcIi4uL2lucHV0RWxlbWVudFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXh0YXJlYSBleHRlbmRzIElucHV0RWxlbWVudCB7XG4gIHN0YXRpYyB0YWdOYW1lID0gXCJ0ZXh0YXJlYVwiO1xufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IG9uUmVzaXplLCBvZmZSZXNpemUgfSBmcm9tIFwiLi4vbWl4aW5zL3Jlc2l6ZVwiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG9uUmVzaXplLFxuICBvZmZSZXNpemVcbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBrZXlNaXhpbnMgZnJvbSBcIi4vbWl4aW5zL2tleVwiO1xuaW1wb3J0IGV2ZW50TWl4aW5zIGZyb20gXCIuL21peGlucy9ldmVudFwiO1xuaW1wb3J0IG1vdXNlTWl4aW5zIGZyb20gXCIuL21peGlucy9tb3VzZVwiO1xuaW1wb3J0IGNsaWNrTWl4aW5zIGZyb20gXCIuL21peGlucy9jbGlja1wiO1xuaW1wb3J0IHdpbmRvd01peGlucyBmcm9tIFwiLi9taXhpbnMvd2luZG93XCI7XG5cbmltcG9ydCB7IFVOREVGSU5FRCB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuXG5jbGFzcyBXaW5kb3cge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmRvbUVsZW1lbnQgPSB3aW5kb3c7IC8vL1xuICB9XG5cbiAgYXNzaWduKC4uLnNvdXJjZXMpIHtcbiAgICBjb25zdCB0YXJnZXQgPSB0aGlzLmRvbUVsZW1lbnQ7IC8vL1xuXG4gICAgT2JqZWN0LmFzc2lnbih0YXJnZXQsIC4uLnNvdXJjZXMpO1xuICB9XG5cbiAgYWRkUmVzaXplT2JqZWN0KCkge30gLy8vXG5cbiAgcmVtb3ZlUmVzaXplT2JqZWN0KCkge30gLy8vXG5cbiAgZ2V0V2lkdGgoKSB7IHJldHVybiB0aGlzLmRvbUVsZW1lbnQuaW5uZXJXaWR0aDsgfSAvLy9cbiAgXG4gIGdldEhlaWdodCgpIHsgcmV0dXJuIHRoaXMuZG9tRWxlbWVudC5pbm5lckhlaWdodDsgfSAvLy9cblxuICBnZXRTY3JvbGxUb3AoKSB7IHJldHVybiB0aGlzLmRvbUVsZW1lbnQucGFnZVlPZmZzZXQ7IH0gIC8vL1xuXG4gIGdldFNjcm9sbExlZnQoKSB7IHJldHVybiB0aGlzLmRvbUVsZW1lbnQucGFnZVhPZmZzZXQ7IH0gLy8vXG59XG5cbk9iamVjdC5hc3NpZ24oV2luZG93LnByb3RvdHlwZSwga2V5TWl4aW5zKTtcbk9iamVjdC5hc3NpZ24oV2luZG93LnByb3RvdHlwZSwgZXZlbnRNaXhpbnMpO1xuT2JqZWN0LmFzc2lnbihXaW5kb3cucHJvdG90eXBlLCBtb3VzZU1peGlucyk7XG5PYmplY3QuYXNzaWduKFdpbmRvdy5wcm90b3R5cGUsIGNsaWNrTWl4aW5zKTtcbk9iamVjdC5hc3NpZ24oV2luZG93LnByb3RvdHlwZSwgd2luZG93TWl4aW5zKTtcblxuZXhwb3J0IGRlZmF1bHQgKHR5cGVvZiB3aW5kb3cgPT09IFVOREVGSU5FRCkgPyB1bmRlZmluZWQgOiBuZXcgV2luZG93KCk7ICAvLy9cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQm91bmRzIHtcbiAgY29uc3RydWN0b3IodG9wLCBsZWZ0LCByaWdodCwgYm90dG9tKSB7XG4gICAgdGhpcy50b3AgPSB0b3A7XG4gICAgdGhpcy5sZWZ0ID0gbGVmdDtcbiAgICB0aGlzLnJpZ2h0ID0gcmlnaHQ7XG4gICAgdGhpcy5ib3R0b20gPSBib3R0b207XG4gIH1cblxuICBnZXRUb3AoKSB7XG4gICAgcmV0dXJuIHRoaXMudG9wO1xuICB9XG5cbiAgZ2V0TGVmdCgpIHtcbiAgICByZXR1cm4gdGhpcy5sZWZ0O1xuICB9XG5cbiAgZ2V0UmlnaHQoKSB7XG4gICAgcmV0dXJuIHRoaXMucmlnaHQ7XG4gIH1cblxuICBnZXRCb3R0b20oKSB7XG4gICAgcmV0dXJuIHRoaXMuYm90dG9tO1xuICB9XG5cbiAgZ2V0V2lkdGgoKSB7XG4gICAgY29uc3Qgd2lkdGggPSAodGhpcy5yaWdodCAtIHRoaXMubGVmdCk7XG5cbiAgICByZXR1cm4gd2lkdGg7XG4gIH1cblxuICBnZXRIZWlnaHQoKSB7XG4gICAgY29uc3QgaGVpZ2h0ID0gKHRoaXMuYm90dG9tIC0gdGhpcy50b3ApO1xuXG4gICAgcmV0dXJuIGhlaWdodDtcbiAgfVxuICBcbiAgc2V0VG9wKHRvcCkge1xuICAgIHRoaXMudG9wID0gdG9wO1xuICB9XG5cbiAgc2V0TGVmdChsZWZ0KSB7XG4gICAgdGhpcy5sZWZ0ID0gbGVmdDtcbiAgfVxuXG4gIHNldFJpZ2h0KHJpZ2h0KSB7XG4gICAgdGhpcy5yaWdodCA9IHJpZ2h0O1xuICB9XG5cbiAgc2V0Qm90dG9tKGJvdHRvbSkge1xuICAgIHRoaXMuYm90dG9tID0gYm90dG9tO1xuICB9XG5cbiAgc2hpZnQoaG9yaXpvbnRhbE9mZnNldCwgdmVydGljYWxPZmZzZXQpIHtcbiAgICB0aGlzLnRvcCArPSB2ZXJ0aWNhbE9mZnNldDtcbiAgICB0aGlzLmxlZnQgKz0gaG9yaXpvbnRhbE9mZnNldDtcbiAgICB0aGlzLnJpZ2h0ICs9IGhvcml6b250YWxPZmZzZXQ7XG4gICAgdGhpcy5ib3R0b20gKz0gdmVydGljYWxPZmZzZXQ7XG4gIH1cblxuICBpc092ZXJsYXBwaW5nTW91c2UobW91c2VUb3AsIG1vdXNlTGVmdCkge1xuICAgIHJldHVybiAoICAodGhpcy50b3AgPD0gbW91c2VUb3ApXG4gICAgICAgICAgICYmICh0aGlzLmxlZnQgPD0gbW91c2VMZWZ0KVxuICAgICAgICAgICAmJiAodGhpcy5yaWdodCA+IG1vdXNlTGVmdClcbiAgICAgICAgICAgJiYgKHRoaXMuYm90dG9tID4gbW91c2VUb3ApICApO1xuICB9XG5cbiAgYXJlT3ZlcmxhcHBpbmcoYm91bmRzKSB7XG4gICAgcmV0dXJuICggICh0aGlzLnRvcCA8IGJvdW5kcy5ib3R0b20pXG4gICAgICAgICAgICYmICh0aGlzLmxlZnQgPCBib3VuZHMucmlnaHQpXG4gICAgICAgICAgICYmICh0aGlzLnJpZ2h0ID4gYm91bmRzLmxlZnQpXG4gICAgICAgICAgICYmICh0aGlzLmJvdHRvbSA+IGJvdW5kcy50b3ApICApO1xuICB9XG5cbiAgc3RhdGljIGZyb21Cb3VuZGluZ0NsaWVudFJlY3QoYm91bmRpbmdDbGllbnRSZWN0KSB7XG4gICAgY29uc3Qgd2luZG93U2Nyb2xsVG9wID0gd2luZG93LnBhZ2VZT2Zmc2V0LCAvLy9cbiAgICAgICAgICB3aW5kb3dTY3JvbGxMZWZ0ID0gd2luZG93LnBhZ2VYT2Zmc2V0LCAgLy8vXG4gICAgICAgICAgdG9wID0gYm91bmRpbmdDbGllbnRSZWN0LnRvcCArIHdpbmRvd1Njcm9sbFRvcCxcbiAgICAgICAgICBsZWZ0ID0gYm91bmRpbmdDbGllbnRSZWN0LmxlZnQgKyB3aW5kb3dTY3JvbGxMZWZ0LFxuICAgICAgICAgIHJpZ2h0ID0gYm91bmRpbmdDbGllbnRSZWN0LnJpZ2h0ICsgd2luZG93U2Nyb2xsTGVmdCxcbiAgICAgICAgICBib3R0b20gPSBib3VuZGluZ0NsaWVudFJlY3QuYm90dG9tICsgd2luZG93U2Nyb2xsVG9wLFxuICAgICAgICAgIGJvdW5kcyA9IG5ldyBCb3VuZHModG9wLCBsZWZ0LCByaWdodCwgYm90dG9tKTtcblxuICAgIHJldHVybiBib3VuZHM7XG4gIH1cblxuICBzdGF0aWMgZnJvbVRvcExlZnRXaWR0aEFuZEhlaWdodCh0b3AsIGxlZnQsIHdpZHRoLCBoZWlnaHQpIHtcbiAgICBjb25zdCBib3R0b20gPSB0b3AgKyBoZWlnaHQsXG4gICAgICAgICAgcmlnaHQgPSBsZWZ0ICsgd2lkdGgsXG4gICAgICAgICAgYm91bmRzID0gbmV3IEJvdW5kcyh0b3AsIGxlZnQsIHJpZ2h0LCBib3R0b20pO1xuXG4gICAgcmV0dXJuIGJvdW5kcztcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgTEVGVF9NT1VTRV9CVVRUT04gPSAwO1xuZXhwb3J0IGNvbnN0IFJJR0hUX01PVVNFX0JVVFRPTiA9IDI7XG5leHBvcnQgY29uc3QgTUlERExFX01PVVNFX0JVVFRPTiA9IDE7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgTEVGVF9NT1VTRV9CVVRUT04sXG4gIFJJR0hUX01PVVNFX0JVVFRPTixcbiAgTUlERExFX01PVVNFX0JVVFRPTlxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IGtleU1peGlucyBmcm9tIFwiLi9taXhpbnMva2V5XCI7XG5pbXBvcnQgY2xpY2tNaXhpbnMgZnJvbSBcIi4vbWl4aW5zL2NsaWNrXCI7XG5pbXBvcnQgZXZlbnRNaXhpbnMgZnJvbSBcIi4vbWl4aW5zL2V2ZW50XCI7XG5pbXBvcnQgbW91c2VNaXhpbnMgZnJvbSBcIi4vbWl4aW5zL21vdXNlXCI7XG5cbmltcG9ydCB7IFVOREVGSU5FRCB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuXG5jbGFzcyBEb2N1bWVudCB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuZG9tRWxlbWVudCA9IGRvY3VtZW50OyAvLy9cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCAodHlwZW9mIGRvY3VtZW50ID09PSBVTkRFRklORUQpID8gdW5kZWZpbmVkIDogbmV3IERvY3VtZW50KCk7ICAvLy9cblxuT2JqZWN0LmFzc2lnbihEb2N1bWVudC5wcm90b3R5cGUsIGtleU1peGlucyk7XG5PYmplY3QuYXNzaWduKERvY3VtZW50LnByb3RvdHlwZSwgY2xpY2tNaXhpbnMpO1xuT2JqZWN0LmFzc2lnbihEb2N1bWVudC5wcm90b3R5cGUsIGV2ZW50TWl4aW5zKTtcbk9iamVjdC5hc3NpZ24oRG9jdW1lbnQucHJvdG90eXBlLCBtb3VzZU1peGlucyk7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgUmVhY3QgfSBmcm9tIFwiLi9yZWFjdFwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBCb3VuZHMgfSBmcm9tIFwiLi9ib3VuZHNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgT2Zmc2V0IH0gZnJvbSBcIi4vb2Zmc2V0XCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgQm9keSB9IGZyb20gXCIuL2VsZW1lbnQvYm9keVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBMaW5rIH0gZnJvbSBcIi4vZWxlbWVudC9saW5rXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIElucHV0IH0gZnJvbSBcIi4vaW5wdXRFbGVtZW50L2lucHV0XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEJ1dHRvbiB9IGZyb20gXCIuL2VsZW1lbnQvYnV0dG9uXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFNlbGVjdCB9IGZyb20gXCIuL2VsZW1lbnQvc2VsZWN0XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEVsZW1lbnQgfSBmcm9tIFwiLi9lbGVtZW50XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENoZWNrYm94IH0gZnJvbSBcIi4vZWxlbWVudC9jaGVja2JveFwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBUZXh0YXJlYSB9IGZyb20gXCIuL2lucHV0RWxlbWVudC90ZXh0YXJlYVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBUZXh0RWxlbWVudCB9IGZyb20gXCIuL3RleHRFbGVtZW50XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIElucHV0RWxlbWVudCB9IGZyb20gXCIuL2lucHV0RWxlbWVudFwiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIHdpbmRvdyB9IGZyb20gXCIuL3dpbmRvd1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBidXR0b25zIH0gZnJvbSBcIi4vYnV0dG9uc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBkb2N1bWVudCB9IGZyb20gXCIuL2RvY3VtZW50XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGV2ZW50VHlwZXMgfSBmcm9tIFwiLi9ldmVudFR5cGVzXCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IFJlYWN0LCB3aW5kb3cgfSBmcm9tIFwiZWFzeVwiO1xuXG53aW5kb3cuYXNzaWduKHtcbiAgUmVhY3Rcbn0pO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgXCIuL2p1eHRhcG9zZVwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCB0YWdOYW1lcyA9IFtcbiAgXCJhXCIsIFwiYWJiclwiLCBcImFkZHJlc3NcIiwgXCJhc2lkZVwiLCBcImF1ZGlvXCIsXG4gIFwiYlwiLCBcImJhc2VcIiwgXCJiZGlcIiwgXCJiZG9cIiwgXCJibG9ja3F1b3RlXCIsIFwiYm9keVwiLCBcImJyXCIsIFwiYnV0dG9uXCIsXG4gIFwiY2FudmFzXCIsIFwiY2FwdGlvblwiLCBcImNpdGVcIiwgXCJjb2RlXCIsIFwiY29sXCIsIFwiY29sZ3JvdXBcIixcbiAgXCJkYXRhXCIsIFwiZGF0YWxpc3RcIiwgXCJkZFwiLCBcImRlbFwiLCBcImRldGFpbHNcIiwgXCJkZm5cIiwgXCJkaWFsb2dcIiwgXCJkaXZcIiwgXCJkbFwiLCBcImR0XCIsIFwiZW1cIiwgXCJlbWJlZFwiLCBcImZpZWxkc2V0XCIsIFwiZmlnY2FwdGlvblwiLCBcImZpZ3VyZVwiLCBcImZvb3RlclwiLCBcImZvcm1cIixcbiAgXCJoMVwiLCBcImgyXCIsIFwiaDNcIiwgXCJoNFwiLCBcImg1XCIsIFwiaDZcIiwgXCJoZWFkXCIsIFwiaGVhZGVyXCIsIFwiaHJcIiwgXCJodG1sXCIsXG4gIFwiaVwiLCBcImlmcmFtZVwiLCBcImltZ1wiLCBcImlucHV0XCIsIFwiaW5zXCIsIFwia2JkXCIsIFwibGFiZWxcIiwgXCJsZWdlbmRcIiwgXCJsaVwiLCBcImxpbmtcIixcbiAgXCJtYWluXCIsIFwibWFwXCIsIFwibWFya1wiLCBcIm1ldGFcIiwgXCJtZXRlclwiLCBcIm5hdlwiLCBcIm5vc2NyaXB0XCIsXG4gIFwib2JqZWN0XCIsIFwib2xcIiwgXCJvcHRncm91cFwiLCBcIm9wdGlvblwiLCBcIm91dHB1dFwiLFxuICBcInBcIiwgXCJwYXJhbVwiLCBcInBpY3R1cmVcIiwgXCJwcmVcIiwgXCJwcm9ncmVzc1wiLFxuICBcInFcIiwgXCJycFwiLCBcInJ0XCIsIFwicnVieVwiLFxuICBcInNcIiwgXCJzYW1wXCIsIFwic2NyaXB0XCIsIFwic2VjdGlvblwiLCBcInNlbGVjdFwiLCBcInNtYWxsXCIsIFwic291cmNlXCIsIFwic3BhblwiLCBcInN0cm9uZ1wiLCBcInN0eWxlXCIsIFwic3ViXCIsIFwic3VtbWFyeVwiLCBcInN1cFwiLCBcInN2Z1wiLFxuICBcInRhYmxlXCIsIFwidGJvZHlcIiwgXCJ0ZFwiLCBcInRlbXBsYXRlXCIsIFwidGV4dGFyZWFcIiwgXCJ0Zm9vdFwiLCBcInRoXCIsIFwidGhlYWRcIiwgXCJ0aW1lXCIsIFwidGl0bGVcIiwgXCJ0clwiLCBcInRyYWNrXCIsXG4gIFwidVwiLCBcInVsXCIsXG4gIFwidmFyXCIsIFwidmlkZW9cIixcbiAgXCJ3YnJcIlxuXTtcblxuZXhwb3J0IGRlZmF1bHQgdGFnTmFtZXM7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBUUkFDRV9MRVZFTCA9IFwidHJhY2VcIjtcbmV4cG9ydCBjb25zdCBERUJVR19MRVZFTCA9IFwiZGVidWdcIjtcbmV4cG9ydCBjb25zdCBJTkZPX0xFVkVMID0gXCJpbmZvXCI7XG5leHBvcnQgY29uc3QgV0FSTklOR19MRVZFTCA9IFwid2FybmluZ1wiO1xuZXhwb3J0IGNvbnN0IEVSUk9SX0xFVkVMID0gXCJlcnJvclwiO1xuZXhwb3J0IGNvbnN0IEZBVEFMX0xFVkVMID0gXCJmYXRhbFwiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIFRSQUNFX0xFVkVMLFxuICBERUJVR19MRVZFTCxcbiAgSU5GT19MRVZFTCxcbiAgV0FSTklOR19MRVZFTCxcbiAgRVJST1JfTEVWRUwsXG4gIEZBVEFMX0xFVkVMXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgR0VUX01FVEhPRCA9IFwiR0VUXCI7XG5leHBvcnQgY29uc3QgUE9TVF9NRVRIT0QgPSBcIlBPU1RcIjtcbmV4cG9ydCBjb25zdCBQQVRDSF9NRVRIT0QgPSBcIlBBVENIXCI7XG5leHBvcnQgY29uc3QgREVMRVRFX01FVEhPRCA9IFwiREVMRVRFXCI7XG5leHBvcnQgY29uc3QgT1BUSU9OU19NRVRIT0QgPSBcIk9QVElPTlNcIjtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBHRVRfTUVUSE9ELFxuICBQT1NUX01FVEhPRCxcbiAgUEFUQ0hfTUVUSE9ELFxuICBERUxFVEVfTUVUSE9ELFxuICBPUFRJT05TX01FVEhPRFxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IFBSQUdNQV9IRUFERVIgPSBcInByYWdtYVwiO1xuZXhwb3J0IGNvbnN0IEFDQ0VQVF9IRUFERVIgPSBcImFjY2VwdFwiO1xuZXhwb3J0IGNvbnN0IExPQ0FUSU9OX0hFQURFUiA9IFwibG9jYXRpb25cIjtcbmV4cG9ydCBjb25zdCBVU0VSX0FHRU5UX0hFQURFUiA9IFwidXNlci1hZ2VudFwiO1xuZXhwb3J0IGNvbnN0IENPTlRFTlRfVFlQRV9IRUFERVIgPSBcImNvbnRlbnQtdHlwZVwiO1xuZXhwb3J0IGNvbnN0IEFVVEhPUklaQVRJT05fSEVBREVSID0gXCJhdXRob3JpemF0aW9uXCI7XG5leHBvcnQgY29uc3QgQ0FDSEVfQ09OVFJPTF9IRUFERVIgPSBcImNhY2hlLWNvbnRyb2xcIjtcbmV4cG9ydCBjb25zdCBDT05URU5UX0xFTkdUSF9IRUFERVIgPSBcImNvbnRlbnQtbGVuZ3RoXCI7XG5leHBvcnQgY29uc3QgVFJBTlNGRVJfRU5DT0RJTkdfSEVBREVSID0gXCJ0cmFuc2Zlci1lbmNvZGluZ1wiO1xuZXhwb3J0IGNvbnN0IENPTlRFTlRfRElTUE9TSVRJT05fSEVBREVSID0gXCJjb250ZW50LWRpc3Bvc2l0aW9uXCI7XG5leHBvcnQgY29uc3QgQUNDRVNTX0NPTlRST0xfQUxMT1dfT1JJR0lOX0hFQURFUiA9IFwiYWNjZXNzLWNvbnRyb2wtYWxsb3ctb3JpZ2luXCI7XG5leHBvcnQgY29uc3QgQUNDRVNTX0NPTlRST0xfQUxMT1dfTUVUSE9EU19IRUFERVIgPSBcImFjY2Vzcy1jb250cm9sLWFsbG93LW1ldGhvZHNcIjtcbmV4cG9ydCBjb25zdCBBQ0NFU1NfQ09OVFJPTF9BTExPV19IRUFERVJTX0hFQURFUiA9IFwiYWNjZXNzLWNvbnRyb2wtYWxsb3ctaGVhZGVyc1wiO1xuZXhwb3J0IGNvbnN0IEFDQ0VTU19DT05UUk9MX1JFUVVFU1RfTUVUSE9EX0hFQURFUiA9IFwiYWNjZXNzLWNvbnRyb2wtcmVxdWVzdC1tZXRob2RcIjtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBQUkFHTUFfSEVBREVSLFxuICBBQ0NFUFRfSEVBREVSLFxuICBMT0NBVElPTl9IRUFERVIsXG4gIFVTRVJfQUdFTlRfSEVBREVSLFxuICBDT05URU5UX1RZUEVfSEVBREVSLFxuICBBVVRIT1JJWkFUSU9OX0hFQURFUixcbiAgQ0FDSEVfQ09OVFJPTF9IRUFERVIsXG4gIENPTlRFTlRfTEVOR1RIX0hFQURFUixcbiAgVFJBTlNGRVJfRU5DT0RJTkdfSEVBREVSLFxuICBDT05URU5UX0RJU1BPU0lUSU9OX0hFQURFUixcbiAgQUNDRVNTX0NPTlRST0xfQUxMT1dfT1JJR0lOX0hFQURFUixcbiAgQUNDRVNTX0NPTlRST0xfQUxMT1dfTUVUSE9EU19IRUFERVIsXG4gIEFDQ0VTU19DT05UUk9MX0FMTE9XX0hFQURFUlNfSEVBREVSLFxuICBBQ0NFU1NfQ09OVFJPTF9SRVFVRVNUX01FVEhPRF9IRUFERVJcbn07IiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgU0hJRlRfS0VZX0NPREUgPSAxNjtcbmV4cG9ydCBjb25zdCBFU0NBUEVfS0VZQ09ERSA9IDI3O1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIFNISUZUX0tFWV9DT0RFLFxuICBFU0NBUEVfS0VZQ09ERVxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IFVURjhfRU5DT0RJTkcgPSBcInV0ZjhcIjtcbmV4cG9ydCBjb25zdCBVVEZfOF9FTkNPRElORyA9IFwidXRmLThcIjtcbmV4cG9ydCBjb25zdCBCQVNFNjRfRU5DT0RJTkcgPSBcImJhc2U2NFwiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIFVURjhfRU5DT0RJTkcsXG4gIFVURl84X0VOQ09ESU5HLFxuICBCQVNFNjRfRU5DT0RJTkdcbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBFVFhfQ0hBUkFDVEVSID0gXCJcXHUwMDAzXCI7XG5leHBvcnQgY29uc3QgQkFSX0NIQVJBQ1RFUiA9IFwifFwiO1xuZXhwb3J0IGNvbnN0IERBU0hfQ0hBUkFDVEVSID0gXCItXCI7XG5leHBvcnQgY29uc3QgU1BBQ0VfQ0hBUkFDVEVSID0gXCIgXCI7XG5leHBvcnQgY29uc3QgQ09NTUFfQ0hBUkFDVEVSID0gXCIsXCI7XG5leHBvcnQgY29uc3QgQ09MT05fQ0hBUkFDVEVSID0gXCI6XCI7XG5leHBvcnQgY29uc3QgUEVSSU9EX0NIQVJBQ1RFUiA9IFwiLlwiO1xuZXhwb3J0IGNvbnN0IENUUkxfQ19DSEFSQUNURVIgPSBcIl5DXCI7XG5leHBvcnQgY29uc3QgV0lMRENBUkRfQ0hBUkFDVEVSID0gXCIqXCI7XG5leHBvcnQgY29uc3QgQkFDS1RJQ0tfREVMSU1JVEVSID0gXCJgXCI7XG5leHBvcnQgY29uc3QgTkVXX0xJTkVfQ0hBUkFDVEVSID0gXCJcXG5cIjtcbmV4cG9ydCBjb25zdCBCQUNLU1BBQ0VfQ0hBUkFDVEVSID0gU3RyaW5nLmZyb21DaGFyQ29kZSgxMjcpO1xuZXhwb3J0IGNvbnN0IEFNUEVSU0FORF9DSEFSQUNURVIgPSBcIiZcIjtcbmV4cG9ydCBjb25zdCBMRVNTX1RIQU5fQ0hBUkFDVEVSID0gXCImbHQ7XCI7XG5leHBvcnQgY29uc3QgR1JFQVRFUl9USEFOX0NIQVJBQ1RFUiA9IFwiJmd0O1wiO1xuZXhwb3J0IGNvbnN0IEZPUldBUkRfU0xBU0hfQ0hBUkFDVEVSID0gXCIvXCI7XG5leHBvcnQgY29uc3QgQ0FSUklBR0VfUkVUVVJOX0NIQVJBQ1RFUiA9IFwiXFxyXCI7XG5leHBvcnQgY29uc3QgRVhDTEFNQVRJT05fTUFSS19DSEFSQUNURVIgPSBcIiFcIjtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBFVFhfQ0hBUkFDVEVSLFxuICBCQVJfQ0hBUkFDVEVSLFxuICBEQVNIX0NIQVJBQ1RFUixcbiAgU1BBQ0VfQ0hBUkFDVEVSLFxuICBDT01NQV9DSEFSQUNURVIsXG4gIENPTE9OX0NIQVJBQ1RFUixcbiAgUEVSSU9EX0NIQVJBQ1RFUixcbiAgQ1RSTF9DX0NIQVJBQ1RFUixcbiAgV0lMRENBUkRfQ0hBUkFDVEVSLFxuICBCQUNLVElDS19ERUxJTUlURVIsXG4gIE5FV19MSU5FX0NIQVJBQ1RFUixcbiAgQU1QRVJTQU5EX0NIQVJBQ1RFUixcbiAgQkFDS1NQQUNFX0NIQVJBQ1RFUixcbiAgTEVTU19USEFOX0NIQVJBQ1RFUixcbiAgR1JFQVRFUl9USEFOX0NIQVJBQ1RFUixcbiAgRk9SV0FSRF9TTEFTSF9DSEFSQUNURVIsXG4gIENBUlJJQUdFX1JFVFVSTl9DSEFSQUNURVIsXG4gIEVYQ0xBTUFUSU9OX01BUktfQ0hBUkFDVEVSXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgWkVST18wX1NUQVRVU19DT0RFID0gMDtcbmV4cG9ydCBjb25zdCBPS18yMDBfU1RBVFVTX0NPREUgPSAyMDA7XG5leHBvcnQgY29uc3QgRk9VTkRfMzAyX1NUQVRVU19DT0RFID0gMzAyO1xuZXhwb3J0IGNvbnN0IENSRUFURURfMjAxX1NUQVRVU19DT0RFID0gMjAxO1xuZXhwb3J0IGNvbnN0IFNFRV9PVEhFUl8zMDNfU1RBVFVTX0NPREUgPSAzMDM7XG5leHBvcnQgY29uc3QgRk9SQklEREVOXzQwM19TVEFUVVNfQ09ERSA9IDQwMztcbmV4cG9ydCBjb25zdCBOT1RfRk9VTkRfNDA0X1NUQVRVU19DT0RFID0gNDA0O1xuZXhwb3J0IGNvbnN0IE5PX0NPTlRFTlRfMjA0X1NUQVRVU19DT0RFID0gMjA0O1xuZXhwb3J0IGNvbnN0IEJBRF9HQVRFV0FZXzUwMl9TVEFUVVNfQ09ERSA9IDUwMjtcbmV4cG9ydCBjb25zdCBCQURfUkVRVUVTVF80MDBfU1RBVFVTX0NPREUgPSA0MDA7XG5leHBvcnQgY29uc3QgVU5BVVRIT1JJU0VEXzQwMV9TVEFUVVNfQ09ERSA9IDQwMTtcbmV4cG9ydCBjb25zdCBSRVFVRVNUX1RJTUVPVVRfNDA4X1NUQVRVU19DT0RFID0gNDA4O1xuZXhwb3J0IGNvbnN0IFRPT19NQU5ZX1JFUVVFU1RTXzQyOV9TVEFUVVNfQ09ERSA9IDQyOTtcbmV4cG9ydCBjb25zdCBTRVJWSUNFX1VOQVZBSUxBQkxFXzUwM19TVEFUVVNfQ09ERSA9IDUwMztcbmV4cG9ydCBjb25zdCBJTlRFUk5BTF9TRVJWRVJfRVJST1JfNTAwX1NUQVRVU19DT0RFID0gNTAwO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIFpFUk9fMF9TVEFUVVNfQ09ERSxcbiAgT0tfMjAwX1NUQVRVU19DT0RFLFxuICBGT1VORF8zMDJfU1RBVFVTX0NPREUsXG4gIENSRUFURURfMjAxX1NUQVRVU19DT0RFLFxuICBTRUVfT1RIRVJfMzAzX1NUQVRVU19DT0RFLFxuICBGT1JCSURERU5fNDAzX1NUQVRVU19DT0RFLFxuICBOT1RfRk9VTkRfNDA0X1NUQVRVU19DT0RFLFxuICBOT19DT05URU5UXzIwNF9TVEFUVVNfQ09ERSxcbiAgQkFEX0dBVEVXQVlfNTAyX1NUQVRVU19DT0RFLFxuICBCQURfUkVRVUVTVF80MDBfU1RBVFVTX0NPREUsXG4gIFVOQVVUSE9SSVNFRF80MDFfU1RBVFVTX0NPREUsXG4gIFJFUVVFU1RfVElNRU9VVF80MDhfU1RBVFVTX0NPREUsXG4gIFRPT19NQU5ZX1JFUVVFU1RTXzQyOV9TVEFUVVNfQ09ERSxcbiAgU0VSVklDRV9VTkFWQUlMQUJMRV81MDNfU1RBVFVTX0NPREUsXG4gIElOVEVSTkFMX1NFUlZFUl9FUlJPUl81MDBfU1RBVFVTX0NPREVcbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBURVhUX0hUTUxfQ09OVEVOVF9UWVBFID0gXCJ0ZXh0L2h0bWxcIjtcbmV4cG9ydCBjb25zdCBURVhUX1BMQUlOX0NPTlRFTlRfVFlQRSA9IFwidGV4dC9wbGFpblwiO1xuZXhwb3J0IGNvbnN0IEFQUExJQ0FUSU9OX0pTT05fQ09OVEVOVF9UWVBFID0gXCJhcHBsaWNhdGlvbi9qc29uXCI7XG5leHBvcnQgY29uc3QgQVBQTElDQVRJT05fT0NURVRfU1RSRUFNX0NPTlRFTlRfVFlQRSA9IFwiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtXCI7XG5leHBvcnQgY29uc3QgQVBQTElDQVRJT05fWF9XV1dfRk9STV9FTkNPREVEX0NPTlRFTlRfVFlQRSA9IFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCI7XG5leHBvcnQgY29uc3QgVEVYVF9IVE1MX0NIQVJTRVRfVVRGXzhfQ09OVEVOVF9UWVBFID0gXCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLThcIjtcbmV4cG9ydCBjb25zdCBURVhUX1BMQUlOX0NIQVJTRVRfVVRGXzhfQ09OVEVOVF9UWVBFID0gXCJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04XCI7XG5leHBvcnQgY29uc3QgQVBQTElDQVRJT05fSlNPTl9DSEFSU0VUX1VURl84X0NPTlRFTlRfVFlQRSA9IFwiYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOFwiO1xuZXhwb3J0IGNvbnN0IEFQUExJQ0FUSU9OX1hfV1dXX0ZPUk1fRU5DT0RFRF9DSEFSU0VUX1VURl84X0NPTlRFTlRfVFlQRSA9IFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkOyBjaGFyc2V0PXV0Zi04XCI7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgVEVYVF9IVE1MX0NPTlRFTlRfVFlQRSxcbiAgVEVYVF9QTEFJTl9DT05URU5UX1RZUEUsXG4gIEFQUExJQ0FUSU9OX0pTT05fQ09OVEVOVF9UWVBFLFxuICBBUFBMSUNBVElPTl9PQ1RFVF9TVFJFQU1fQ09OVEVOVF9UWVBFLFxuICBBUFBMSUNBVElPTl9KU09OX0NIQVJTRVRfVVRGXzhfQ09OVEVOVF9UWVBFLFxuICBURVhUX0hUTUxfQ0hBUlNFVF9VVEZfOF9DT05URU5UX1RZUEUsXG4gIFRFWFRfUExBSU5fQ0hBUlNFVF9VVEZfOF9DT05URU5UX1RZUEUsXG4gIEFQUExJQ0FUSU9OX1hfV1dXX0ZPUk1fRU5DT0RFRF9DT05URU5UX1RZUEUsXG4gIEFQUExJQ0FUSU9OX1hfV1dXX0ZPUk1fRU5DT0RFRF9DSEFSU0VUX1VURl84X0NPTlRFTlRfVFlQRVxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IFpFUk9fMF9TVEFUVVNfTUVTU0FHRSA9IFwiXCI7XG5leHBvcnQgY29uc3QgT0tfMjAwX1NUQVRVU19NRVNTQUdFID0gXCJPS1wiO1xuZXhwb3J0IGNvbnN0IEZPVU5EXzMwMl9TVEFUVVNfTUVTU0FHRSA9IFwiRm91bmRcIjtcbmV4cG9ydCBjb25zdCBDUkVBVEVEXzIwMV9TVEFUVVNfTUVTU0FHRSA9IFwiQ3JlYXRlZFwiO1xuZXhwb3J0IGNvbnN0IFNFRV9PVEhFUl8zMDNfU1RBVFVTX01FU1NBR0UgPSBcIlNlZSBvdGhlclwiO1xuZXhwb3J0IGNvbnN0IEZPUkJJRERFTl80MDNfU1RBVFVTX01FU1NBR0UgPSBcIkZvcmJpZGRlblwiO1xuZXhwb3J0IGNvbnN0IE5PVF9GT1VORF80MDRfU1RBVFVTX01FU1NBR0UgPSBcIk5vdCBmb3VuZFwiO1xuZXhwb3J0IGNvbnN0IE5PX0NPTlRFTlRfMjA0X1NUQVRVU19NRVNTQUdFID0gXCJObyBjb250ZW50XCI7XG5leHBvcnQgY29uc3QgQkFEX0dBVEVXQVlfNTAyX1NUQVRVU19NRVNTQUdFID0gXCJCYWQgZ2F0ZXdheVwiO1xuZXhwb3J0IGNvbnN0IEJBRF9SRVFVRVNUXzQwMF9TVEFUVVNfTUVTU0FHRSA9IFwiQmFkIHJlcXVlc3RcIjtcbmV4cG9ydCBjb25zdCBVTkFVVEhPUklTRURfNDAxX1NUQVRVU19NRVNTQUdFID0gXCJVbmF1dGhvcmlzZWRcIjtcbmV4cG9ydCBjb25zdCBSRVFVRVNUX1RJTUVPVVRfNDA4X1NUQVRVU19NRVNTQUdFID0gXCJSZXF1ZXN0IHRpbWVvdXRcIjtcbmV4cG9ydCBjb25zdCBUT09fTUFOWV9SRVFVRVNUU180MjlfU1RBVFVTX01FU1NBR0UgPSBcIlRvbyBtYW55IHJlcXVlc3RzXCI7XG5leHBvcnQgY29uc3QgU0VSVklDRV9VTkFWQUlMQUJMRV81MDNfU1RBVFVTX01FU1NBR0UgPSBcIlNlcnZpY2UgdW5hdmFpbGFibGVcIjtcbmV4cG9ydCBjb25zdCBJTlRFUk5BTF9TRVJWRVJfRVJST1JfNTAwX1NUQVRVU19NRVNTQUdFID0gXCJJbnRlcm5hbCBzZXJ2ZXIgZXJyb3JcIjtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBaRVJPXzBfU1RBVFVTX01FU1NBR0UsXG4gIE9LXzIwMF9TVEFUVVNfTUVTU0FHRSxcbiAgRk9VTkRfMzAyX1NUQVRVU19NRVNTQUdFLFxuICBDUkVBVEVEXzIwMV9TVEFUVVNfTUVTU0FHRSxcbiAgU0VFX09USEVSXzMwM19TVEFUVVNfTUVTU0FHRSxcbiAgRk9SQklEREVOXzQwM19TVEFUVVNfTUVTU0FHRSxcbiAgTk9UX0ZPVU5EXzQwNF9TVEFUVVNfTUVTU0FHRSxcbiAgTk9fQ09OVEVOVF8yMDRfU1RBVFVTX01FU1NBR0UsXG4gIEJBRF9HQVRFV0FZXzUwMl9TVEFUVVNfTUVTU0FHRSxcbiAgQkFEX1JFUVVFU1RfNDAwX1NUQVRVU19NRVNTQUdFLFxuICBVTkFVVEhPUklTRURfNDAxX1NUQVRVU19NRVNTQUdFLFxuICBSRVFVRVNUX1RJTUVPVVRfNDA4X1NUQVRVU19NRVNTQUdFLFxuICBUT09fTUFOWV9SRVFVRVNUU180MjlfU1RBVFVTX01FU1NBR0UsXG4gIFNFUlZJQ0VfVU5BVkFJTEFCTEVfNTAzX1NUQVRVU19NRVNTQUdFLFxuICBJTlRFUk5BTF9TRVJWRVJfRVJST1JfNTAwX1NUQVRVU19NRVNTQUdFXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gZmlyc3QoYXJyYXkpIHsgcmV0dXJuIGFycmF5WzBdO31cblxuZXhwb3J0IGZ1bmN0aW9uIHNlY29uZChhcnJheSkgeyByZXR1cm4gYXJyYXlbMV07IH1cblxuZXhwb3J0IGZ1bmN0aW9uIHRoaXJkKGFycmF5KSB7IHJldHVybiBhcnJheVsyXTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gZm91cnRoKGFycmF5KSB7IHJldHVybiBhcnJheVszXTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gZmlmdGgoYXJyYXkpIHsgcmV0dXJuIGFycmF5WzRdOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWZ0aExhc3QoYXJyYXkpIHsgcmV0dXJuIGFycmF5W2FycmF5Lmxlbmd0aCAtIDVdOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3VydGhMYXN0KGFycmF5KSB7IHJldHVybiBhcnJheVthcnJheS5sZW5ndGggLSA0XTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gdGhpcmRMYXN0KGFycmF5KSB7IHJldHVybiBhcnJheVthcnJheS5sZW5ndGggLSAzXTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gc2Vjb25kTGFzdChhcnJheSkgeyByZXR1cm4gYXJyYXlbYXJyYXkubGVuZ3RoIC0gMl07IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpcnN0TGFzdChhcnJheSkgeyByZXR1cm4gYXJyYXlbYXJyYXkubGVuZ3RoIC0gMV07IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhc3QoYXJyYXkpIHsgcmV0dXJuIGFycmF5W2FycmF5Lmxlbmd0aCAtIDFdOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBoZWFkKGFycmF5KSB7IHJldHVybiBhcnJheS5zbGljZSgwLCAxKTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gdGFpbChhcnJheSkgeyByZXR1cm4gYXJyYXkuc2xpY2UoMSk7IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGJhY2soYXJyYXkpIHsgcmV0dXJuIGFycmF5LnNsaWNlKGFycmF5Lmxlbmd0aCAtIDEpOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9udChhcnJheSkgeyByZXR1cm4gYXJyYXkuc2xpY2UoMCwgYXJyYXkubGVuZ3RoIC0gMSk7IH1cblxuZXhwb3J0IGZ1bmN0aW9uIHB1c2goYXJyYXkxLCBhcnJheTIpIHsgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoYXJyYXkxLCBhcnJheTIpOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiB1bnNoaWZ0KGFycmF5MSwgYXJyYXkyKSB7IEFycmF5LnByb3RvdHlwZS51bnNoaWZ0LmFwcGx5KGFycmF5MSwgYXJyYXkyKTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gY29uY2F0KGFycmF5MSwgZWxlbWVudE9yQXJyYXkyKSB7XG4gIGNvbnN0IGFycmF5MiA9IChlbGVtZW50T3JBcnJheTIgaW5zdGFuY2VvZiBBcnJheSkgP1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50T3JBcnJheTIgOlxuICAgICAgICAgICAgICAgICAgICAgW2VsZW1lbnRPckFycmF5Ml07XG4gIFxuICBwdXNoKGFycmF5MSwgYXJyYXkyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsZWFyKGFycmF5KSB7XG4gIGNvbnN0IHN0YXJ0ID0gMDtcbiAgXG4gIHJldHVybiBhcnJheS5zcGxpY2Uoc3RhcnQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29weShhcnJheTEsIGFycmF5Mikge1xuICBjb25zdCBzdGFydCA9IDAsXG4gICAgICAgIGRlbGV0ZUNvdW50ID0gYXJyYXkyLmxlbmd0aDsgIC8vL1xuICBcbiAgc3BsaWNlKGFycmF5MSwgc3RhcnQsIGRlbGV0ZUNvdW50LCBhcnJheTIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2UoYXJyYXkxLCBhcnJheTIpIHsgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoYXJyYXkxLCBhcnJheTIpOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBzcGxpY2UoYXJyYXkxLCBzdGFydCwgZGVsZXRlQ291bnQgPSBJbmZpbml0eSwgYXJyYXkyID0gW10pIHtcbiAgY29uc3QgYXJncyA9IFtzdGFydCwgZGVsZXRlQ291bnQsIC4uLmFycmF5Ml0sXG4gICAgICAgIGRlbGV0ZWRJdGVtc0FycmF5ID0gQXJyYXkucHJvdG90eXBlLnNwbGljZS5hcHBseShhcnJheTEsIGFyZ3MpO1xuXG4gIHJldHVybiBkZWxldGVkSXRlbXNBcnJheTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2UoYXJyYXksIGVsZW1lbnQsIHRlc3QpIHtcbiAgbGV0IHN0YXJ0O1xuICBcbiAgY29uc3QgZm91bmQgPSBhcnJheS5zb21lKChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHBhc3NlZCA9IHRlc3QoZWxlbWVudCwgaW5kZXgpO1xuXG4gICAgaWYgKHBhc3NlZCkge1xuICAgICAgc3RhcnQgPSBpbmRleDsgIC8vL1xuICAgICAgXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuICBcbiAgaWYgKGZvdW5kKSB7XG4gICAgY29uc3QgZGVsZXRlQ291bnQgPSAxO1xuXG4gICAgYXJyYXkuc3BsaWNlKHN0YXJ0LCBkZWxldGVDb3VudCwgZWxlbWVudCk7XG4gIH1cblxuICByZXR1cm4gZm91bmQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXIoYXJyYXksIHRlc3QpIHtcbiAgY29uc3QgZmlsdGVyZWRFbGVtZW50cyA9IFtdO1xuICBcbiAgYmFja3dhcmRzRm9yRWFjaChhcnJheSwgKGVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgcGFzc2VkID0gdGVzdChlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAoIXBhc3NlZCkge1xuICAgICAgY29uc3Qgc3RhcnQgPSBpbmRleCwgIC8vL1xuICAgICAgICAgICAgZGVsZXRlQ291bnQgPSAxLFxuICAgICAgICAgICAgZGVsZXRlZEVsZW1lbnRzID0gYXJyYXkuc3BsaWNlKHN0YXJ0LCBkZWxldGVDb3VudCksXG4gICAgICAgICAgICBmaXJzdERlbGV0ZWRFbGVtZW50ID0gZmlyc3QoZGVsZXRlZEVsZW1lbnRzKTtcbiAgICAgIFxuICAgICAgZmlsdGVyZWRFbGVtZW50cy51bnNoaWZ0KGZpcnN0RGVsZXRlZEVsZW1lbnQpOyAgLy8vXG4gICAgfVxuICB9KTtcbiAgXG4gIHJldHVybiBmaWx0ZXJlZEVsZW1lbnRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmluZChhcnJheSwgdGVzdCkge1xuICBjb25zdCBlbGVtZW50cyA9IFtdO1xuXG4gIGZvcndhcmRzRm9yRWFjaChhcnJheSwgKGVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgcGFzc2VkID0gdGVzdChlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAocGFzc2VkKSB7XG4gICAgICBlbGVtZW50cy5wdXNoKGVsZW1lbnQpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGVsZW1lbnRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJ1bmUoYXJyYXksIHRlc3QpIHtcbiAgbGV0IHBydW5lZEVsZW1lbnQgPSB1bmRlZmluZWQ7XG4gIFxuICBhcnJheS5zb21lKChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHBhc3NlZCA9IHRlc3QoZWxlbWVudCwgaW5kZXgpO1xuXG4gICAgaWYgKCFwYXNzZWQpIHtcbiAgICAgIGNvbnN0IHN0YXJ0ID0gaW5kZXgsICAvLy9cbiAgICAgICAgICAgIGRlbGV0ZUNvdW50ID0gMSxcbiAgICAgICAgICAgIGRlbGV0ZWRFbGVtZW50cyA9IGFycmF5LnNwbGljZShzdGFydCwgZGVsZXRlQ291bnQpLFxuICAgICAgICAgICAgZmlyc3REZWxldGVkRWxlbWVudCA9IGZpcnN0KGRlbGV0ZWRFbGVtZW50cyk7XG4gICAgICBcbiAgICAgIHBydW5lZEVsZW1lbnQgPSBmaXJzdERlbGV0ZWRFbGVtZW50OyAgLy8vXG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG4gIFxuICByZXR1cm4gcHJ1bmVkRWxlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhdGNoKGFycmF5LCBlbGVtZW50LCB0ZXN0KSB7XG4gIGNvbnN0IGZvdW5kID0gYXJyYXkuc29tZSgoZWxlbWVudCwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBwYXNzZWQgPSB0ZXN0KGVsZW1lbnQsIGluZGV4KTtcblxuICAgIGlmIChwYXNzZWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG5cblxuICBpZiAoZm91bmQpIHtcbiAgICBhcnJheS5wdXNoKGVsZW1lbnQpO1xuICB9XG5cbiAgcmV0dXJuIGZvdW5kO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXVnbWVudChhcnJheTEsIGFycmF5MiwgdGVzdCkge1xuICBhcnJheTIuZm9yRWFjaCgoZWxlbWVudCwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBwYXNzZWQgPSB0ZXN0KGVsZW1lbnQsIGluZGV4KTtcblxuICAgIGlmIChwYXNzZWQpIHtcbiAgICAgIGFycmF5MS5wdXNoKGVsZW1lbnQpO1xuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXBhcmF0ZShhcnJheSwgYXJyYXkxLCBhcnJheTIsIHRlc3QpIHtcbiAgYXJyYXkuZm9yRWFjaCgoZWxlbWVudCwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBwYXNzZWQgPSB0ZXN0KGVsZW1lbnQsIGluZGV4KTtcblxuICAgIHBhc3NlZCA/XG4gICAgICBhcnJheTEucHVzaChlbGVtZW50KSA6XG4gICAgICAgIGFycmF5Mi5wdXNoKGVsZW1lbnQpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcndhcmRzU29tZShhcnJheSwgY2FsbGJhY2spIHtcbiAgY29uc3QgYXJyYXlMZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGFycmF5TGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgICByZXN1bHQgPSBjYWxsYmFjayhlbGVtZW50LCBpbmRleCk7XG4gICAgXG4gICAgaWYgKHJlc3VsdCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmFja3dhcmRzU29tZShhcnJheSwgY2FsbGJhY2spIHtcbiAgY29uc3QgYXJyYXlMZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgZm9yIChsZXQgaW5kZXggPSBhcnJheUxlbmd0aCAtIDE7IGluZGV4ID49IDA7IGluZGV4LS0pIHtcbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdLFxuICAgICAgICAgIHJlc3VsdCA9IGNhbGxiYWNrKGVsZW1lbnQsIGluZGV4KTtcblxuICAgIGlmIChyZXN1bHQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcndhcmRzRXZlcnkoYXJyYXksIGNhbGxiYWNrKSB7XG4gIGNvbnN0IGFycmF5TGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBhcnJheUxlbmd0aDsgaW5kZXgrKykge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF0sXG4gICAgICAgICAgcmVzdWx0ID0gY2FsbGJhY2soZWxlbWVudCwgaW5kZXgpO1xuXG4gICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJhY2t3YXJkc0V2ZXJ5KGFycmF5LCBjYWxsYmFjaykge1xuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IGFycmF5TGVuZ3RoIC0gMTsgaW5kZXggPj0gMDsgaW5kZXgtLSkge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF0sXG4gICAgICAgICAgcmVzdWx0ID0gY2FsbGJhY2soZWxlbWVudCwgaW5kZXgpO1xuXG4gICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcndhcmRzUmVkdWNlKGFycmF5LCBjYWxsYmFjaywgaW5pdGlhbFZhbHVlKSB7XG4gIGxldCB2YWx1ZSA9IGluaXRpYWxWYWx1ZTtcblxuICBmb3J3YXJkc0ZvckVhY2goYXJyYXksIChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgIHZhbHVlID0gY2FsbGJhY2sodmFsdWUsIGVsZW1lbnQsIGluZGV4KTtcbiAgfSk7XG5cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmFja3dhcmRzUmVkdWNlKGFycmF5LCBjYWxsYmFjaywgaW5pdGlhbFZhbHVlKSB7XG4gIGxldCB2YWx1ZSA9IGluaXRpYWxWYWx1ZTtcblxuICBiYWNrd2FyZHNGb3JFYWNoKGFycmF5LCAoZWxlbWVudCwgaW5kZXgpID0+IHtcbiAgICB2YWx1ZSA9IGNhbGxiYWNrKHZhbHVlLCBlbGVtZW50LCBpbmRleCk7XG4gIH0pO1xuXG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcndhcmRzRm9yRWFjaChhcnJheSwgY2FsbGJhY2spIHtcbiAgY29uc3QgYXJyYXlMZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGFycmF5TGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcblxuICAgIGNhbGxiYWNrKGVsZW1lbnQsIGluZGV4KTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYmFja3dhcmRzRm9yRWFjaChhcnJheSwgY2FsbGJhY2spIHtcbiAgY29uc3QgYXJyYXlMZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgZm9yIChsZXQgaW5kZXggPSBhcnJheUxlbmd0aCAtIDE7IGluZGV4ID49IDA7IGluZGV4LS0pIHtcbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgY2FsbGJhY2soZWxlbWVudCwgaW5kZXgpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZmlyc3QsXG4gIHNlY29uZCxcbiAgdGhpcmQsXG4gIGZvdXJ0aCxcbiAgZmlmdGgsXG4gIGZpZnRoTGFzdCxcbiAgZm91cnRoTGFzdCxcbiAgdGhpcmRMYXN0LFxuICBzZWNvbmRMYXN0LFxuICBmaXJzdExhc3QsXG4gIGxhc3QsXG4gIGhlYWQsXG4gIHRhaWwsXG4gIGJhY2ssXG4gIGZyb250LFxuICBwdXNoLFxuICB1bnNoaWZ0LFxuICBjb25jYXQsXG4gIGNsZWFyLFxuICBjb3B5LFxuICBtZXJnZSxcbiAgc3BsaWNlLFxuICByZXBsYWNlLFxuICBmaWx0ZXIsXG4gIGZpbmQsXG4gIHBydW5lLFxuICBwYXRjaCxcbiAgYXVnbWVudCxcbiAgc2VwYXJhdGUsXG4gIGZvcndhcmRzU29tZSxcbiAgYmFja3dhcmRzU29tZSxcbiAgZm9yd2FyZHNFdmVyeSxcbiAgYmFja3dhcmRzRXZlcnksXG4gIGZvcndhcmRzUmVkdWNlLFxuICBiYWNrd2FyZHNSZWR1Y2UsXG4gIGZvcndhcmRzRm9yRWFjaCxcbiAgYmFja3dhcmRzRm9yRWFjaFxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IERBVEEgPSBcImRhdGFcIjtcbmV4cG9ydCBjb25zdCBFUlJPUiA9IFwiZXJyb3JcIjtcbmV4cG9ydCBjb25zdCBTVFJJTkcgPSBcInN0cmluZ1wiO1xuZXhwb3J0IGNvbnN0IE5VTUJFUiA9IFwibnVtYmVyXCI7XG5leHBvcnQgY29uc3QgQk9PTEVBTiA9IFwiYm9vbGVhblwiO1xuZXhwb3J0IGNvbnN0IERFRkFVTFQgPSBcImRlZmF1bHRcIjtcbmV4cG9ydCBjb25zdCBFTlZJUk9OTUVOVCA9IFwiRU5WSVJPTk1FTlRcIjtcbmV4cG9ydCBjb25zdCBFTVBUWV9TVFJJTkcgPSBcIlwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzZWNvbmQgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBDT0xPTl9DSEFSQUNURVIsIEFNUEVSU0FORF9DSEFSQUNURVIgfSBmcm9tIFwiLi4vY2hhcmFjdGVyc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gb3ZlcndyaXRlKGhlYWRlcnMsIG5hbWUsIHZhbHVlKSB7XG4gIGNvbnN0IGxvd2VyQ2FzZU5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCksXG4gICAgICAgIGV4aXN0aW5nTmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhoZWFkZXJzKSwgIC8vL1xuICAgICAgICBleGlzdGluZ05hbWUgPSBleGlzdGluZ05hbWVzLmZpbmQoKGV4aXN0aW5nTmFtZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGV4aXN0aW5nTG93ZXJDYXNlTmFtZSA9IGV4aXN0aW5nTmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICAgICAgaWYgKGV4aXN0aW5nTG93ZXJDYXNlTmFtZSA9PT0gbG93ZXJDYXNlTmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KSB8fCBudWxsO1xuXG4gIGlmIChleGlzdGluZ05hbWUgIT09IG51bGwpIHtcbiAgICBoZWFkZXJzW2V4aXN0aW5nTmFtZV0gPSB2YWx1ZTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdW5kZXJ3cml0ZShoZWFkZXJzLCBuYW1lLCB2YWx1ZSkge1xuICBjb25zdCBsb3dlckNhc2VOYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpLFxuICAgICAgICBleGlzdGluZ05hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoaGVhZGVycyksICAvLy9cbiAgICAgICAgZXhpc3RpbmdOYW1lID0gZXhpc3RpbmdOYW1lcy5maW5kKChleGlzdGluZ05hbWUpID0+IHtcbiAgICAgICAgICBjb25zdCBleGlzdGluZ0xvd2VyQ2FzZU5hbWUgPSBleGlzdGluZ05hbWUudG9Mb3dlckNhc2UoKTtcblxuICAgICAgICAgIGlmIChleGlzdGluZ0xvd2VyQ2FzZU5hbWUgPT09IGxvd2VyQ2FzZU5hbWUpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSkgfHwgbnVsbDtcblxuICBpZiAoZXhpc3RpbmdOYW1lID09PSBudWxsKSB7XG4gICAgaGVhZGVyc1tuYW1lXSA9IHZhbHVlO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwb3J0RnJvbUhvc3QoaG9zdCkge1xuICBsZXQgcG9ydDtcblxuICBjb25zdCBtYXRjaGVzID0gaG9zdC5tYXRjaCgvXmh0dHBzPzpcXC9cXC8oW15cXC9dKykvKSxcbiAgICAgICAgc2Vjb25kTWF0Y2ggPSBzZWNvbmQobWF0Y2hlcyksXG4gICAgICAgIGluZGV4ID0gc2Vjb25kTWF0Y2guaW5kZXhPZihDT0xPTl9DSEFSQUNURVIpO1xuXG4gIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICBjb25zdCBzZWN1cmUgPSBzZWN1cmVGcm9tSG9zdChob3N0KTtcblxuICAgIHBvcnQgPSBzZWN1cmUgPyA0NDMgOiA4MDsgLy8vXG4gIH0gZWxzZSB7XG4gICAgY29uc3Qgc3RhcnQgPSBpbmRleCArIDEsXG4gICAgICAgICAgcG9ydFN0cmluZyA9IHNlY29uZE1hdGNoLnN1YnN0cmluZyhzdGFydCk7XG5cbiAgICBwb3J0ID0gTnVtYmVyKHBvcnRTdHJpbmcpO1xuICB9XG5cbiAgcmV0dXJuIHBvcnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZWN1cmVGcm9tSG9zdChob3N0KSB7XG4gIGNvbnN0IHNlY3VyZSA9IC9eaHR0cHM6XFwvXFwvLy50ZXN0KGhvc3QpO1xuXG4gIHJldHVybiBzZWN1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBob3N0bmFtZUZyb21Ib3N0KGhvc3QpIHtcbiAgY29uc3QgbWF0Y2hlcyA9IGhvc3QubWF0Y2goL15odHRwcz86XFwvXFwvKFteOlxcL10rKS8pLFxuICAgICAgICBzZWNvbmRNYXRjaCA9IHNlY29uZChtYXRjaGVzKSxcbiAgICAgICAgaG9zdG5hbWUgPSBzZWNvbmRNYXRjaDsgLy8vXG5cbiAgcmV0dXJuIGhvc3RuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcXVlcnlTdHJpbmdGcm9tUXVlcnkocXVlcnkpIHtcbiAgY29uc3QgbmFtZXMgPSBPYmplY3Qua2V5cyhxdWVyeSksXG4gICAgICAgIG5hbWVzTGVuZ3RoID0gbmFtZXMubGVuZ3RoLFxuICAgICAgICBsYXN0SW5kZXggPSBuYW1lc0xlbmd0aCAtIDEsXG4gICAgICAgIHF1ZXJ5U3RyaW5nID0gbmFtZXMucmVkdWNlKChxdWVyeVN0cmluZywgbmFtZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHF1ZXJ5W25hbWVdLFxuICAgICAgICAgICAgICAgIGVuY29kZWROYW1lID0gZW5jb2RlVVJJQ29tcG9uZW50KG5hbWUpLFxuICAgICAgICAgICAgICAgIGVuY29kZWRWYWx1ZSA9IGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSksXG4gICAgICAgICAgICAgICAgYW1wZXJzYW5kT3JOb3RoaW5nID0gKGluZGV4ICE9PSBsYXN0SW5kZXgpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFNUEVSU0FORF9DSEFSQUNURVIgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFTVBUWV9TVFJJTkc7XG4gIFxuICAgICAgICAgIHF1ZXJ5U3RyaW5nICs9IGAke2VuY29kZWROYW1lfT0ke2VuY29kZWRWYWx1ZX0ke2FtcGVyc2FuZE9yTm90aGluZ31gO1xuICBcbiAgICAgICAgICByZXR1cm4gcXVlcnlTdHJpbmc7XG4gICAgICAgIH0sIEVNUFRZX1NUUklORyk7XG5cbiAgcmV0dXJuIHF1ZXJ5U3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXJsRnJvbUhvc3RVUklBbmRRdWVyeShob3N0LCB1cmksIHF1ZXJ5KSB7XG4gIGNvbnN0IHF1ZXJ5U3RyaW5nID0gcXVlcnlTdHJpbmdGcm9tUXVlcnkocXVlcnkpLFxuICAgICAgICB1cmwgPSAocXVlcnlTdHJpbmcgPT09IEVNUFRZX1NUUklORykgP1xuICAgICAgICAgICAgICAgIGAke2hvc3R9JHt1cml9YCA6XG4gICAgICAgICAgICAgICAgICBgJHtob3N0fSR7dXJpfT8ke3F1ZXJ5U3RyaW5nfWA7XG5cbiAgcmV0dXJuIHVybDtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBvdmVyd3JpdGUsXG4gIHVuZGVyd3JpdGUsXG4gIHBvcnRGcm9tSG9zdCxcbiAgc2VjdXJlRnJvbUhvc3QsXG4gIGhvc3RuYW1lRnJvbUhvc3QsXG4gIHF1ZXJ5U3RyaW5nRnJvbVF1ZXJ5LFxuICB1cmxGcm9tSG9zdFVSSUFuZFF1ZXJ5XG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBHRVRfTUVUSE9ELCBQT1NUX01FVEhPRCB9IGZyb20gXCIuLi9tZXRob2RzXCI7XG5pbXBvcnQgeyBBUFBMSUNBVElPTl9KU09OX0NPTlRFTlRfVFlQRSB9IGZyb20gXCIuLi9jb250ZW50VHlwZXNcIjtcbmltcG9ydCB7IEFDQ0VQVF9IRUFERVIsIENPTlRFTlRfVFlQRV9IRUFERVIgfSBmcm9tIFwiLi4vaGVhZGVyc1wiO1xuaW1wb3J0IHsgdW5kZXJ3cml0ZSwgdXJsRnJvbUhvc3RVUklBbmRRdWVyeSB9IGZyb20gXCIuLi91dGlsaXRpZXMvaHR0cFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0KGhvc3QsIHVyaSwgcXVlcnksIGhlYWRlcnMsIGNhbGxiYWNrKSB7XG4gIGlmIChjYWxsYmFjayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgY2FsbGJhY2sgPSBoZWFkZXJzOyAvLy9cbiAgICBoZWFkZXJzID0ge307XG4gIH1cblxuICBjb25zdCBtZXRob2QgPSBHRVRfTUVUSE9ELFxuICAgICAgICBhY2NlcHQgPSBBUFBMSUNBVElPTl9KU09OX0NPTlRFTlRfVFlQRSxcbiAgICAgICAgY29udGVudCA9IG51bGw7XG5cbiAgdW5kZXJ3cml0ZUFjY2VwdEhlYWRlcihoZWFkZXJzLCBhY2NlcHQpO1xuXG4gIHJlcXVlc3QoaG9zdCwgdXJpLCBxdWVyeSwgbWV0aG9kLCBoZWFkZXJzLCBjb250ZW50LCBjYWxsYmFjayk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwb3N0KGhvc3QsIHVyaSwgcXVlcnksIGhlYWRlcnMsIGNvbnRlbnQsIGNhbGxiYWNrKSB7XG4gIGlmIChjYWxsYmFjayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgY2FsbGJhY2sgPSBjb250ZW50O1xuICAgIGNvbnRlbnQgPSBoZWFkZXJzO1xuICAgIGhlYWRlcnMgPSB7fTtcbiAgfVxuXG4gIGNvbnN0IG1ldGhvZCA9IFBPU1RfTUVUSE9ELFxuICAgICAgICBhY2NlcHQgPSBBUFBMSUNBVElPTl9KU09OX0NPTlRFTlRfVFlQRSxcbiAgICAgICAgY29udGVudFR5cGUgPSBBUFBMSUNBVElPTl9KU09OX0NPTlRFTlRfVFlQRTtcblxuICB1bmRlcndyaXRlQWNjZXB0SGVhZGVyKGhlYWRlcnMsIGFjY2VwdCk7XG5cbiAgdW5kZXJ3cml0ZUNvbnRlbnRUeXBlSGVhZGVyKGhlYWRlcnMsIGNvbnRlbnRUeXBlKTtcblxuICByZXF1ZXN0KGhvc3QsIHVyaSwgcXVlcnksIG1ldGhvZCwgaGVhZGVycywgY29udGVudCwgY2FsbGJhY2spO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVxdWVzdChob3N0LCB1cmksIHF1ZXJ5LCBtZXRob2QsIGhlYWRlcnMsIGNvbnRlbnQsIGNhbGxiYWNrKSB7XG4gIGNvbnN0IHVybCA9IHVybEZyb21Ib3N0VVJJQW5kUXVlcnkoaG9zdCwgdXJpLCBxdWVyeSksXG4gICAgICAgIGFjY2VwdCA9IGhlYWRlcnNbQUNDRVBUX0hFQURFUl0gfHwgbnVsbCxcbiAgICAgICAgY29udGVudFR5cGUgPSBoZWFkZXJzW0NPTlRFTlRfVFlQRV9IRUFERVJdIHx8IG51bGwsXG4gICAgICAgIHhtbEh0dHBSZXF1ZXN0ID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cbiAgaWYgKGNvbnRlbnRUeXBlID09PSBBUFBMSUNBVElPTl9KU09OX0NPTlRFTlRfVFlQRSkge1xuICAgIGNvbnN0IGpzb24gPSBjb250ZW50LCAgLy8vXG4gICAgICAgICAganNvblN0cmluZyA9IEpTT04uc3RyaW5naWZ5KGpzb24pO1xuXG4gICAgY29udGVudCA9IGpzb25TdHJpbmc7ICAvLy9cbiAgfVxuXG4gIHhtbEh0dHBSZXF1ZXN0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9ICgpID0+IHtcbiAgICBjb25zdCB7IHJlYWR5U3RhdGUsIHN0YXR1cywgcmVzcG9uc2UgfSA9IHhtbEh0dHBSZXF1ZXN0LFxuICAgICAgICAgIHN0YXR1c0NvZGUgPSBzdGF0dXM7XG5cbiAgICBpZiAocmVhZHlTdGF0ZSA9PSA0KSB7XG4gICAgICBsZXQgY29udGVudCA9IHJlc3BvbnNlO1xuXG4gICAgICBpZiAoYWNjZXB0ID09PSBBUFBMSUNBVElPTl9KU09OX0NPTlRFTlRfVFlQRSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGpzb25TdHJpbmcgPSBjb250ZW50LCAgLy8vXG4gICAgICAgICAgICAgICAganNvbiA9IEpTT04ucGFyc2UoanNvblN0cmluZyk7XG5cbiAgICAgICAgICBjb250ZW50ID0ganNvbjsgIC8vL1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGNvbnRlbnQgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNhbGxiYWNrKGNvbnRlbnQsIHN0YXR1c0NvZGUpO1xuICAgIH1cbiAgfTtcblxuICB4bWxIdHRwUmVxdWVzdC5vcGVuKG1ldGhvZCwgdXJsKTtcblxuICBpZiAoYWNjZXB0ICE9PSBudWxsKSB7XG4gICAgeG1sSHR0cFJlcXVlc3Quc2V0UmVxdWVzdEhlYWRlcihBQ0NFUFRfSEVBREVSLCBhY2NlcHQpO1xuICB9XG5cbiAgaWYgKGNvbnRlbnRUeXBlICE9PSBudWxsKSB7XG4gICAgeG1sSHR0cFJlcXVlc3Quc2V0UmVxdWVzdEhlYWRlcihDT05URU5UX1RZUEVfSEVBREVSLCBjb250ZW50VHlwZSk7XG4gIH1cblxuICAoY29udGVudCAhPT0gbnVsbCkgP1xuICAgIHhtbEh0dHBSZXF1ZXN0LnNlbmQoY29udGVudCkgOlxuICAgICAgeG1sSHR0cFJlcXVlc3Quc2VuZCgpO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGdldCxcbiAgcG9zdCxcbiAgcmVxdWVzdFxufVxuXG5mdW5jdGlvbiB1bmRlcndyaXRlQWNjZXB0SGVhZGVyKGhlYWRlcnMsIGFjY2VwdCkge1xuICBjb25zdCBuYW1lID0gQUNDRVBUX0hFQURFUiwgIC8vL1xuICAgICAgICB2YWx1ZSA9IGFjY2VwdDsgLy8vXG5cbiAgdW5kZXJ3cml0ZShoZWFkZXJzLCBuYW1lLCB2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIHVuZGVyd3JpdGVDb250ZW50VHlwZUhlYWRlcihoZWFkZXJzLCBjb250ZW50VFlwZSkge1xuICBjb25zdCBuYW1lID0gQ09OVEVOVF9UWVBFX0hFQURFUiwgIC8vL1xuICAgICAgICB2YWx1ZSA9IGNvbnRlbnRUWXBlOyAvLy9cblxuICB1bmRlcndyaXRlKGhlYWRlcnMsIG5hbWUsIHZhbHVlKTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgZmlyc3QsIHNlY29uZCwgbGFzdCB9IGZyb20gXCIuLi91dGlsaXRpZXMvYXJyYXlcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzUGF0aE5hbWUocGF0aCkge1xuICBwYXRoID0gcGF0aC5yZXBsYWNlKC9eXFwvLywgRU1QVFlfU1RSSU5HKS5yZXBsYWNlKC9cXC8kLywgRU1QVFlfU1RSSU5HKTsgLy8vXG5cbiAgY29uc3QgcGF0aE5hbWUgPSAoL1xcLy8udGVzdChwYXRoKSA9PT0gZmFsc2UpO1xuXG4gIHJldHVybiBwYXRoTmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUGF0aFRvcG1vc3ROYW1lKHBhdGgpIHtcbiAgY29uc3QgcGF0aE5hbWUgPSBpc1BhdGhOYW1lKHBhdGgpLFxuICAgICAgICBwYXRoQWJzb2x1dGVQYXRoID0gaXNQYXRoQWJzb2x1dGVQYXRoKHBhdGgpLFxuICAgICAgICBwYXRoVG9wbW9zdE5hbWUgPSAocGF0aE5hbWUgJiYgcGF0aEFic29sdXRlUGF0aCk7XG5cbiAgcmV0dXJuIHBhdGhUb3Btb3N0TmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUGF0aFJlbGF0aXZlUGF0aChwYXRoKSB7XG4gIGNvbnN0IHBhdGhSZWxhdGl2ZVBhdGggPSAhL15cXC8vLnRlc3QocGF0aCk7XG5cbiAgcmV0dXJuIHBhdGhSZWxhdGl2ZVBhdGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1BhdGhBYnNvbHV0ZVBhdGgocGF0aCkge1xuICBjb25zdCBwYXRoQWJzb2x1dGVQYXRoID0gL15cXC8vLnRlc3QocGF0aCk7XG5cbiAgcmV0dXJuIHBhdGhBYnNvbHV0ZVBhdGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1RvcG1vc3ROYW1lSW5BYnNvbHV0ZVBhdGgodG9wbW9zdE5hbWUsIGFic29sdXRlUGF0aCkge1xuICBjb25zdCByZWdFeHAgPSBuZXcgUmVnRXhwKGBeJHt0b3Btb3N0TmFtZX0oPzpcXFxcLy4rKT8kYCksXG4gICAgICAgIHRvcG1vc3ROYW1lSW5BYnNvbHV0ZVBhdGggPSByZWdFeHAudGVzdChhYnNvbHV0ZVBhdGgpO1xuXG4gIHJldHVybiB0b3Btb3N0TmFtZUluQWJzb2x1dGVQYXRoXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5lUGF0aHMocGF0aCwgcmVsYXRpdmVQYXRoKSB7XG4gIGxldCBjb21iaW5lZFBhdGggPSBudWxsO1xuXG4gIGNvbnN0IHBhdGhOYW1lcyA9IHBhdGguc3BsaXQoL1xcLy8pLFxuICAgICAgICByZWxhdGl2ZVBhdGhOYW1lcyA9IHJlbGF0aXZlUGF0aC5zcGxpdCgvXFwvLyk7XG5cbiAgbGV0IGxhc3RQYXRoTmFtZSxcbiAgICAgIGZpcnN0UmVsYXRpdmVQYXRoTmFtZSA9IGZpcnN0KHJlbGF0aXZlUGF0aE5hbWVzKTtcblxuICBpZiAoZmlyc3RSZWxhdGl2ZVBhdGhOYW1lID09PSBcIi5cIikge1xuICAgIHJlbGF0aXZlUGF0aE5hbWVzLnNoaWZ0KCk7XG4gIH1cblxuICBmaXJzdFJlbGF0aXZlUGF0aE5hbWUgPSBmaXJzdChyZWxhdGl2ZVBhdGhOYW1lcyk7XG4gIGxhc3RQYXRoTmFtZSA9IGxhc3QocGF0aE5hbWVzKTtcblxuICB3aGlsZSAoKGZpcnN0UmVsYXRpdmVQYXRoTmFtZSA9PT0gXCIuLlwiKSAmJiAobGFzdFBhdGhOYW1lICE9PSB1bmRlZmluZWQpKSB7XG4gICAgcmVsYXRpdmVQYXRoTmFtZXMuc2hpZnQoKTtcbiAgICBwYXRoTmFtZXMucG9wKCk7XG5cbiAgICBmaXJzdFJlbGF0aXZlUGF0aE5hbWUgPSBmaXJzdChyZWxhdGl2ZVBhdGhOYW1lcyk7XG4gICAgbGFzdFBhdGhOYW1lID0gbGFzdChwYXRoTmFtZXMpO1xuICB9XG5cbiAgaWYgKGxhc3RQYXRoTmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgY29tYmluZWRQYXRoTmFtZXMgPSBbXS5jb25jYXQocGF0aE5hbWVzKS5jb25jYXQocmVsYXRpdmVQYXRoTmFtZXMpO1xuXG4gICAgY29tYmluZWRQYXRoID0gY29tYmluZWRQYXRoTmFtZXMuam9pbihcIi9cIik7XG4gIH1cblxuICByZXR1cm4gY29tYmluZWRQYXRoO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uY2F0ZW5hdGVQYXRocyhwYXRoLCByZWxhdGl2ZVBhdGgpIHtcbiAgcGF0aCA9IHBhdGgucmVwbGFjZSgvXFwvJC8sIEVNUFRZX1NUUklORyk7ICAvLy9cblxuICBjb25zdCBjb25jYXRlbmF0ZWRQYXRoID0gYCR7cGF0aH0vJHtyZWxhdGl2ZVBhdGh9YDtcblxuICByZXR1cm4gY29uY2F0ZW5hdGVkUGF0aDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJvdHRvbW1vc3ROYW1lRnJvbVBhdGgocGF0aCkge1xuICBsZXQgYm90dG9tbW9zdE5hbWUgPSBudWxsO1xuXG4gIGNvbnN0IG1hdGNoZXMgPSBwYXRoLm1hdGNoKC9eLipcXC8oW15cXC9dK1xcLz8pJC8pO1xuXG4gIGlmIChtYXRjaGVzICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc2Vjb25kTWF0Y2ggPSBzZWNvbmQobWF0Y2hlcyk7XG5cbiAgICBib3R0b21tb3N0TmFtZSA9IHNlY29uZE1hdGNoOyAgLy8vXG4gIH1cblxuICByZXR1cm4gYm90dG9tbW9zdE5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b3Btb3N0RGlyZWN0b3J5UGF0aEZyb21QYXRoKHBhdGgpIHtcbiAgY29uc3QgbWF0Y2hlcyA9IHBhdGgubWF0Y2goL14oLispXFwvW15cXC9dK1xcLz8kLyksXG4gICAgICAgIHNlY29uZE1hdGNoID0gc2Vjb25kKG1hdGNoZXMpLFxuICAgICAgICB0b3Btb3N0RGlyZWN0b3J5UGF0aCA9IHNlY29uZE1hdGNoOyAvLy9cblxuICByZXR1cm4gdG9wbW9zdERpcmVjdG9yeVBhdGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b3Btb3N0RGlyZWN0b3J5TmFtZUZyb21QYXRoKHBhdGgpIHtcbiAgbGV0IHRvcG1vc3REaXJlY3RvcnlOYW1lID0gbnVsbDtcblxuICBjb25zdCBtYXRjaGVzID0gcGF0aC5tYXRjaCgvXihbXlxcL10rKVxcLy4rJC8pO1xuXG4gIGlmIChtYXRjaGVzICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc2Vjb25kTWF0Y2ggPSBzZWNvbmQobWF0Y2hlcyk7XG5cbiAgICB0b3Btb3N0RGlyZWN0b3J5TmFtZSA9IHNlY29uZE1hdGNoOyAgLy8vXG4gIH1cblxuICByZXR1cm4gdG9wbW9zdERpcmVjdG9yeU5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXRoV2l0aG91dEJvdHRvbW1vc3ROYW1lRnJvbVBhdGgocGF0aCkge1xuICBsZXQgcGF0aFdpdGhvdXRCb3R0b21tb3N0TmFtZSA9IG51bGw7XG5cbiAgY29uc3QgbWF0Y2hlcyA9IHBhdGgubWF0Y2goL14oLiopXFwvW15cXC9dK1xcLz8kLyk7XG5cbiAgaWYgKG1hdGNoZXMgIT09IG51bGwpIHtcbiAgICBjb25zdCBzZWNvbmRNYXRjaCA9IHNlY29uZChtYXRjaGVzKTtcblxuICAgIHBhdGhXaXRob3V0Qm90dG9tbW9zdE5hbWUgPSBzZWNvbmRNYXRjaDsgLy8vXG4gIH1cblxuICByZXR1cm4gcGF0aFdpdGhvdXRCb3R0b21tb3N0TmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhdGhXaXRob3V0VG9wbW9zdERpcmVjdG9yeU5hbWVGcm9tUGF0aChwYXRoKSB7XG4gIGxldCBwYXRoV2l0aG91dFRvcG1vc3REaXJlY3RvcnlOYW1lID0gbnVsbDtcblxuICBjb25zdCBtYXRjaGVzID0gcGF0aC5tYXRjaCgvXlteXFwvXStcXC8oLispJC8pO1xuXG4gIGlmIChtYXRjaGVzICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc2Vjb25kTWF0Y2ggPSBzZWNvbmQobWF0Y2hlcyk7XG5cbiAgICBwYXRoV2l0aG91dFRvcG1vc3REaXJlY3RvcnlOYW1lID0gc2Vjb25kTWF0Y2g7XG4gIH1cblxuICByZXR1cm4gcGF0aFdpdGhvdXRUb3Btb3N0RGlyZWN0b3J5TmFtZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBpc1BhdGhOYW1lLFxuICBpc1BhdGhUb3Btb3N0TmFtZSxcbiAgaXNQYXRoUmVsYXRpdmVQYXRoLFxuICBpc1BhdGhBYnNvbHV0ZVBhdGgsXG4gIGlzVG9wbW9zdE5hbWVJbkFic29sdXRlUGF0aCxcbiAgY29tYmluZVBhdGhzLFxuICBjb25jYXRlbmF0ZVBhdGhzLFxuICBib3R0b21tb3N0TmFtZUZyb21QYXRoLFxuICB0b3Btb3N0RGlyZWN0b3J5UGF0aEZyb21QYXRoLFxuICB0b3Btb3N0RGlyZWN0b3J5TmFtZUZyb21QYXRoLFxuICBwYXRoV2l0aG91dEJvdHRvbW1vc3ROYW1lRnJvbVBhdGgsXG4gIHBhdGhXaXRob3V0VG9wbW9zdERpcmVjdG9yeU5hbWVGcm9tUGF0aFxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiB3aGlsc3Qob3BlcmF0aW9uLCBkb25lLCBjb250ZXh0KSB7XHJcbiAgbGV0IGNvdW50ID0gLTE7XHJcblxyXG4gIGZ1bmN0aW9uIG5leHQoKSB7XHJcbiAgICBjb3VudCsrO1xyXG5cclxuICAgIGNvbnN0IGluZGV4ID0gY291bnQsICAvLy9cclxuICAgICAgICAgIHRlcm1pbmF0ZSA9IG9wZXJhdGlvbihuZXh0LCBkb25lLCBjb250ZXh0LCBpbmRleCk7XHJcblxyXG4gICAgaWYgKHRlcm1pbmF0ZSkge1xyXG4gICAgICBkb25lKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZXh0KCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBmb3JFYWNoKGFycmF5LCBvcGVyYXRpb24sIGRvbmUsIGNvbnRleHQpIHtcclxuICBjb25zdCBsZW5ndGggPSBhcnJheS5sZW5ndGg7ICAvLy9cclxuXHJcbiAgbGV0IGNvdW50ID0gLTE7XHJcblxyXG4gIGZ1bmN0aW9uIG5leHQoKSB7XHJcbiAgICBjb3VudCsrO1xyXG5cclxuICAgIGNvbnN0IHRlcm1pbmF0ZSA9IChjb3VudCA9PT0gbGVuZ3RoKTtcclxuXHJcbiAgICBpZiAodGVybWluYXRlKSB7XHJcbiAgICAgIGRvbmUoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGluZGV4ID0gY291bnQsICAvLy9cclxuICAgICAgICAgICAgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcclxuXHJcbiAgICAgIG9wZXJhdGlvbihlbGVtZW50LCBuZXh0LCBkb25lLCBjb250ZXh0LCBpbmRleCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZXh0KCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzZXF1ZW5jZShvcGVyYXRpb25zLCBkb25lLCBjb250ZXh0KSB7XHJcbiAgY29uc3QgbGVuZ3RoID0gb3BlcmF0aW9ucy5sZW5ndGg7ICAvLy9cclxuXHJcbiAgbGV0IGNvdW50ID0gLTE7XHJcblxyXG4gIGZ1bmN0aW9uIG5leHQoKSB7XHJcbiAgICBjb3VudCsrO1xyXG5cclxuICAgIGNvbnN0IHRlcm1pbmF0ZSA9IChjb3VudCA9PT0gbGVuZ3RoKTtcclxuXHJcbiAgICBpZiAodGVybWluYXRlKSB7XHJcbiAgICAgIGRvbmUoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGluZGV4ID0gY291bnQsICAvLy9cclxuICAgICAgICAgICAgb3BlcmF0aW9uID0gb3BlcmF0aW9uc1tpbmRleF07XHJcblxyXG4gICAgICBvcGVyYXRpb24obmV4dCwgZG9uZSwgY29udGV4dCwgaW5kZXgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmV4dCgpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZXZlbnR1YWxseShvcGVyYXRpb25zLCBkb25lLCBjb250ZXh0KSB7XHJcbiAgY29uc3QgbGVuZ3RoID0gb3BlcmF0aW9ucy5sZW5ndGg7ICAvLy9cclxuXHJcbiAgbGV0IGNvdW50ID0gMDtcclxuXHJcbiAgZnVuY3Rpb24gbmV4dCgpIHtcclxuICAgIGNvdW50Kys7XHJcblxyXG4gICAgY29uc3QgdGVybWluYXRlID0gKGNvdW50ID09PSBsZW5ndGgpO1xyXG5cclxuICAgIGlmICh0ZXJtaW5hdGUpIHtcclxuICAgICAgZG9uZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb3BlcmF0aW9ucy5mb3JFYWNoKChvcGVyYXRpb24sIGluZGV4KSA9PiB7XHJcbiAgICBvcGVyYXRpb24obmV4dCwgZG9uZSwgY29udGV4dCwgaW5kZXgpO1xyXG4gIH0pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmVwZWF0ZWRseShvcGVyYXRpb24sIGxlbmd0aCwgZG9uZSwgY29udGV4dCkge1xyXG4gIGxldCBjb3VudCA9IDA7XHJcblxyXG4gIGZ1bmN0aW9uIG5leHQoKSB7XHJcbiAgICBjb3VudCsrO1xyXG5cclxuICAgIGNvbnN0IHRlcm1pbmF0ZSA9IChjb3VudCA9PT0gbGVuZ3RoKTtcclxuXHJcbiAgICBpZiAodGVybWluYXRlKSB7XHJcbiAgICAgIGRvbmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcclxuICAgIG9wZXJhdGlvbihuZXh0LCBkb25lLCBjb250ZXh0LCBpbmRleCk7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZHNGb3JFYWNoKGFycmF5LCBvcGVyYXRpb24sIGRvbmUsIGNvbnRleHQpIHtcclxuICBjb25zdCBsZW5ndGggPSBhcnJheS5sZW5ndGg7ICAvLy9cclxuXHJcbiAgbGV0IGNvdW50ID0gLTE7XHJcblxyXG4gIGZ1bmN0aW9uIG5leHQoKSB7XHJcbiAgICBjb3VudCsrO1xyXG5cclxuICAgIGNvbnN0IHRlcm1pbmF0ZSA9IChjb3VudCA9PT0gbGVuZ3RoKTtcclxuXHJcbiAgICBpZiAodGVybWluYXRlKSB7XHJcbiAgICAgIGRvbmUoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGluZGV4ID0gY291bnQsICAvLy9cclxuICAgICAgICAgICAgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcclxuXHJcbiAgICAgIG9wZXJhdGlvbihlbGVtZW50LCBuZXh0LCBkb25lLCBjb250ZXh0LCBpbmRleCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZXh0KCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBiYWNrd2FyZHNGb3JFYWNoKGFycmF5LCBvcGVyYXRpb24sIGRvbmUsIGNvbnRleHQpIHtcclxuICBjb25zdCBsZW5ndGggPSBhcnJheS5sZW5ndGg7ICAvLy9cclxuXHJcbiAgbGV0IGNvdW50ID0gbGVuZ3RoO1xyXG5cclxuICBmdW5jdGlvbiBuZXh0KCkge1xyXG4gICAgY291bnQtLTtcclxuXHJcbiAgICBjb25zdCB0ZXJtaW5hdGUgPSAoY291bnQgPT09IC0xKTtcclxuXHJcbiAgICBpZiAodGVybWluYXRlKSB7XHJcbiAgICAgIGRvbmUoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGluZGV4ID0gY291bnQsICAvLy9cclxuICAgICAgICAgICAgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcclxuXHJcbiAgICAgIG9wZXJhdGlvbihlbGVtZW50LCBuZXh0LCBkb25lLCBjb250ZXh0LCBpbmRleCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZXh0KCk7XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICB3aGlsc3QsXHJcbiAgZm9yRWFjaCxcclxuICBzZXF1ZW5jZSxcclxuICBldmVudHVhbGx5LFxyXG4gIHJlcGVhdGVkbHksXHJcbiAgZm9yd2FyZHNGb3JFYWNoLFxyXG4gIGJhY2t3YXJkc0ZvckVhY2hcclxufTtcclxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIGxldmVscyB9IGZyb20gXCIuL2xldmVsc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBtZXRob2RzIH0gZnJvbSBcIi4vbWV0aG9kc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBoZWFkZXJzIH0gZnJvbSBcIi4vaGVhZGVyc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBrZXlDb2RlcyB9IGZyb20gXCIuL2tleUNvZGVzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGVuY29kaW5ncyB9IGZyb20gXCIuL2VuY29kaW5nc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBjaGFyYWN0ZXJzIH0gZnJvbSBcIi4vY2hhcmFjdGVyc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBzdGF0dXNDb2RlcyB9IGZyb20gXCIuL3N0YXR1c0NvZGVzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGNvbnRlbnRUeXBlcyB9IGZyb20gXCIuL2NvbnRlbnRUeXBlc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBzdGF0dXNNZXNzYWdlcyB9IGZyb20gXCIuL3N0YXR1c01lc3NhZ2VzXCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgYWpheFV0aWxpdGllcyB9IGZyb20gXCIuL3V0aWxpdGllcy9hamF4XCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgcGF0aFV0aWxpdGllcyB9IGZyb20gXCIuL3V0aWxpdGllcy9wYXRoXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGh0dHBVdGlsaXRpZXMgfSBmcm9tIFwiLi91dGlsaXRpZXMvaHR0cFwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCIuL3V0aWxpdGllcy9hcnJheVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBhc3luY2hyb25vdXNVdGlsaXRpZXMgfSBmcm9tIFwiLi91dGlsaXRpZXMvYXN5bmNocm9ub3VzXCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5pbXBvcnQgeyBjaGFyYWN0ZXJzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xyXG5cclxuY29uc3QgeyBMRVNTX1RIQU5fQ0hBUkFDVEVSLCBBTVBFUlNBTkRfQ0hBUkFDVEVSLCBHUkVBVEVSX1RIQU5fQ0hBUkFDVEVSIH0gPSBjaGFyYWN0ZXJzO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNhbml0aXNlQ29udGVudChjb250ZW50KSB7XHJcbiAgY29uc3Qgc2FuaXRpc2VkQ29udGVudCA9IGNvbnRlbnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC8mLywgQU1QRVJTQU5EX0NIQVJBQ1RFUilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC88LywgTEVTU19USEFOX0NIQVJBQ1RFUilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC8+LywgR1JFQVRFUl9USEFOX0NIQVJBQ1RFUik7XHJcblxyXG4gIHJldHVybiBzYW5pdGlzZWRDb250ZW50O1xyXG59XHJcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IHR5cGVUeXBlID0gXCJ0eXBlXCI7XG5leHBvcnQgY29uc3QgbmFtZVR5cGUgPSBcIm5hbWVcIjtcbmV4cG9ydCBjb25zdCBjb21tZW50VHlwZSA9IFwiY29tbWVudFwiO1xuZXhwb3J0IGNvbnN0IGVuZE9mTGluZVR5cGUgPSBcImVuZC1vZi1saW5lXCI7XG5leHBvcnQgY29uc3Qgd2hpdGVzcGFjZVR5cGUgPSBcIndoaXRlc3BhY2VcIjtcbmV4cG9ydCBjb25zdCBzdHJpbmdMaXRlcmFsVHlwZSA9IFwic3RyaW5nLWxpdGVyYWxcIjtcbmV4cG9ydCBjb25zdCBlbmRPZkxpbmVDb21tZW50VHlwZSA9IGAke2VuZE9mTGluZVR5cGV9ICR7Y29tbWVudFR5cGV9YDtcbmV4cG9ydCBjb25zdCBzaW5nbGVMaW5lQ29tbWVudFR5cGUgPSBgc2luZ2xlLWxpbmUgJHtjb21tZW50VHlwZX1gO1xuZXhwb3J0IGNvbnN0IHJlZ3VsYXJFeHByZXNzaW9uVHlwZSA9IFwicmVndWxhci1leHByZXNzaW9uXCI7XG5leHBvcnQgY29uc3QgZW5kT2ZNdWx0aUxpbmVDb21tZW50VHlwZSA9IGBlbmQtb2YtbXVsdGktbGluZSAke2NvbW1lbnRUeXBlfWA7XG5leHBvcnQgY29uc3Qgc3RhcnRPZk11bHRpTGluZUNvbW1lbnRUeXBlID0gYHN0YXJ0LW9mLW11bHRpLWxpbmUgJHtjb21tZW50VHlwZX1gO1xuZXhwb3J0IGNvbnN0IG1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFR5cGUgPSBgbWlkZGxlLW9mLW11bHRpLWxpbmUgJHtjb21tZW50VHlwZX1gO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIHR5cGVUeXBlLFxuICBuYW1lVHlwZSxcbiAgY29tbWVudFR5cGUsXG4gIGVuZE9mTGluZVR5cGUsXG4gIHdoaXRlc3BhY2VUeXBlLFxuICBzdHJpbmdMaXRlcmFsVHlwZSxcbiAgZW5kT2ZMaW5lQ29tbWVudFR5cGUsXG4gIHNpbmdsZUxpbmVDb21tZW50VHlwZSxcbiAgcmVndWxhckV4cHJlc3Npb25UeXBlLFxuICBlbmRPZk11bHRpTGluZUNvbW1lbnRUeXBlLFxuICBzdGFydE9mTXVsdGlMaW5lQ29tbWVudFR5cGUsXG4gIG1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFR5cGVcbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5pbXBvcnQgeyBzYW5pdGlzZUNvbnRlbnQgfSBmcm9tIFwiLi91dGlsaXRpZXMvY29udGVudFwiO1xuaW1wb3J0IHsgY29tbWVudFR5cGUsIGVuZE9mTGluZVR5cGUsIHdoaXRlc3BhY2VUeXBlIH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuY29uc3QgeyBmaXJzdCB9ID0gYXJyYXlVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRva2VuIHtcbiAgY29uc3RydWN0b3IodHlwZSwgY29udGVudCwgaW5uZXJIVE1MLCBzaWduaWZpY2FudCkge1xuICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgdGhpcy5jb250ZW50ID0gY29udGVudDtcbiAgICB0aGlzLmlubmVySFRNTCA9IGlubmVySFRNTDtcbiAgICB0aGlzLnNpZ25pZmljYW50ID0gc2lnbmlmaWNhbnQ7XG4gIH1cblxuICBnZXRUeXBlKCkge1xuICAgIHJldHVybiB0aGlzLnR5cGU7XG4gIH1cblxuICBnZXRDb250ZW50KCkge1xuICAgIHJldHVybiB0aGlzLmNvbnRlbnQ7XG4gIH1cbiAgXG4gIGdldElubmVySFRNTCgpIHtcbiAgICByZXR1cm4gdGhpcy5pbm5lckhUTUw7XG4gIH1cblxuICBnZXRDb250ZW50TGVuZ3RoKCkge1xuICAgIGNvbnN0IGNvbnRlbnRMZW5ndGggPSB0aGlzLmNvbnRlbnQubGVuZ3RoO1xuXG4gICAgcmV0dXJuIGNvbnRlbnRMZW5ndGg7XG4gIH1cblxuICBpc1NpZ25pZmljYW50KCkge1xuICAgIHJldHVybiB0aGlzLnNpZ25pZmljYW50O1xuICB9XG4gIFxuICBpc0NvbW1lbnRUb2tlbigpIHtcbiAgICBjb25zdCB0eXBlSW5jbHVkZXNDb21tZW50VHlwZSA9IHRoaXMudHlwZS5pbmNsdWRlcyhjb21tZW50VHlwZSksXG4gICAgICAgICAgY29tbWVudFRva2VuID0gdHlwZUluY2x1ZGVzQ29tbWVudFR5cGU7IC8vL1xuXG4gICAgcmV0dXJuIGNvbW1lbnRUb2tlbjtcbiAgfVxuXG4gIGlzRW5kT2ZMaW5lVG9rZW4oKSB7XG4gICAgY29uc3QgdHlwZUVuZE9mTGluZVR5cGUgPSAodGhpcy50eXBlLmluY2x1ZGVzKGVuZE9mTGluZVR5cGUpKSxcbiAgICAgICAgICBlbmRPZkxpbmVUb2tlbiA9IHR5cGVFbmRPZkxpbmVUeXBlOyAvLy9cblxuICAgIHJldHVybiBlbmRPZkxpbmVUb2tlbjtcbiAgfVxuXG4gIGlzV2hpdGVzcGFjZVRva2VuKCkge1xuICAgIGNvbnN0IHR5cGVXaGl0ZXNwYWNlVHlwZSA9ICh0aGlzLnR5cGUgPT09IHdoaXRlc3BhY2VUeXBlKSxcbiAgICAgICAgICB3aGl0ZXNwYWNlVG9rZW4gPSB0eXBlV2hpdGVzcGFjZVR5cGU7IC8vL1xuXG4gICAgcmV0dXJuIHdoaXRlc3BhY2VUb2tlbjtcbiAgfVxuXG4gIGlzRXF1YWxUbyh0b2tlbikge1xuICAgIGNvbnN0IGVxdWFsVG9Ub2tlbiA9ICh0aGlzID09PSB0b2tlbik7XG5cbiAgICByZXR1cm4gZXF1YWxUb1Rva2VuO1xuICB9XG5cbiAgbWF0Y2godG9rZW4pIHtcbiAgICBjb25zdCB0eXBlID0gdG9rZW4uZ2V0VHlwZSgpLFxuICAgICAgICAgIGNvbnRlbnQgPSB0b2tlbi5nZXRDb250ZW50KCksXG4gICAgICAgICAgc2lnbmlmaWNhbnQgPSB0b2tlbi5pc1NpZ25pZmljYW50KCksXG4gICAgICAgICAgbWF0Y2hlcyA9ICgodGhpcy50eXBlID09PSB0eXBlKSAmJiAodGhpcy5jb250ZW50ID09PSBjb250ZW50KSAmJiAodGhpcy5zaWduaWZpY2FudCA9PT0gc2lnbmlmaWNhbnQpKTtcblxuICAgIHJldHVybiBtYXRjaGVzO1xuICB9XG5cbiAgYXNIVE1MKCkge1xuICAgIGNvbnN0IGNsYXNzTmFtZSA9IHRoaXMudHlwZSwgIC8vL1xuICAgICAgICAgIGh0bWwgPSBgPHNwYW4gY2xhc3M9XCIke2NsYXNzTmFtZX1cIj4ke3RoaXMuaW5uZXJIVE1MfTwvc3Bhbj5gO1xuXG4gICAgcmV0dXJuIGh0bWw7XG4gIH1cblxuICBjbG9uZShDbGFzcywgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24sIHNpZ25pZmljYW50LCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHtcbiAgICBsZXQgdG9rZW4gPSBudWxsO1xuXG4gICAgaWYgKHN0YXJ0UG9zaXRpb24gIT09IGVuZFBvc2l0aW9uKSB7XG4gICAgICBsZXQgY29udGVudCA9IHRoaXMuZ2V0Q29udGVudCgpO1xuXG4gICAgICBjb250ZW50ID0gY29udGVudC5zdWJzdHJpbmcoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOyAgLy8vXG5cbiAgICAgIGNvbnN0IHR5cGUgPSB0aGlzLmdldFR5cGUoKSxcbiAgICAgICAgICAgIHNhbml0aXNlZENvbnRlbnQgPSBzYW5pdGlzZUNvbnRlbnQoY29udGVudCksXG4gICAgICAgICAgICBpbm5lckhUTUwgPSBzYW5pdGlzZWRDb250ZW50OyAvLy9cblxuICAgICAgdG9rZW4gPSBuZXcgQ2xhc3ModHlwZSwgY29udGVudCwgaW5uZXJIVE1MLCBzaWduaWZpY2FudCwgLi4ucmVtYWluaW5nQXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdG9rZW47XG4gIH1cblxuICBzdGF0aWMgbWF0Y2goQ2xhc3MsIGNvbnRlbnQsIHNpZ25pZmljYW50LCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHtcbiAgICBsZXQgdG9rZW4gPSBudWxsO1xuXG4gICAgY29uc3QgeyByZWd1bGFyRXhwcmVzc2lvbiB9ID0gQ2xhc3MsXG4gICAgICAgICAgbWF0Y2hlcyA9IGNvbnRlbnQubWF0Y2gocmVndWxhckV4cHJlc3Npb24pO1xuXG4gICAgaWYgKG1hdGNoZXMgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHsgaW5kZXggfSA9IG1hdGNoZXM7XG5cbiAgICAgIGlmIChpbmRleCA9PT0gMCkge1xuICAgICAgICBjb25zdCBmaXJzdE1hdGNoID0gZmlyc3QobWF0Y2hlcyk7XG5cbiAgICAgICAgY29udGVudCA9IGZpcnN0TWF0Y2g7IC8vL1xuXG4gICAgICAgIGNvbnN0IGNvbnRlbnRMZW5ndGggPSBjb250ZW50Lmxlbmd0aDtcblxuICAgICAgICBpZiAoY29udGVudExlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25zdCB7IHR5cGUgfSA9IENsYXNzLFxuICAgICAgICAgICAgICAgIHNhbml0aXNlZENvbnRlbnQgPSBzYW5pdGlzZUNvbnRlbnQoY29udGVudCksXG4gICAgICAgICAgICAgICAgaW5uZXJIVE1MID0gc2FuaXRpc2VkQ29udGVudDsgLy8vXG5cbiAgICAgICAgICB0b2tlbiA9IG5ldyBDbGFzcyh0eXBlLCBjb250ZW50LCBpbm5lckhUTUwsIHNpZ25pZmljYW50LCAuLi5yZW1haW5pbmdBcmd1bWVudHMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRva2VuO1xuICB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KENsYXNzLCBjb250ZW50LCBzaWduaWZpY2FudCwgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XG4gICAgY29uc3QgeyB0eXBlIH0gPSBDbGFzcyxcbiAgICAgICAgICBzYW5pdGlzZWRDb250ZW50ID0gc2FuaXRpc2VDb250ZW50KGNvbnRlbnQpLFxuICAgICAgICAgIGlubmVySFRNTCA9IHNhbml0aXNlZENvbnRlbnQsIC8vL1xuICAgICAgICAgIHRva2VuID0gbmV3IENsYXNzKHR5cGUsIGNvbnRlbnQsIGlubmVySFRNTCwgc2lnbmlmaWNhbnQsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cyk7XG5cbiAgICByZXR1cm4gdG9rZW47XG4gIH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnRBbmRUeXBlKENsYXNzLCBjb250ZW50LCB0eXBlLCBzaWduaWZpY2FudCwgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XG4gICAgY29uc3Qgc2FuaXRpc2VkQ29udGVudCA9IHNhbml0aXNlQ29udGVudChjb250ZW50KSxcbiAgICAgICAgICBpbm5lckhUTUwgPSBzYW5pdGlzZWRDb250ZW50LCAvLy9cbiAgICAgICAgICB0b2tlbiA9IG5ldyBDbGFzcyh0eXBlLCBjb250ZW50LCBpbm5lckhUTUwsIHNpZ25pZmljYW50LCAuLi5yZW1haW5pbmdBcmd1bWVudHMpO1xuXG4gICAgcmV0dXJuIHRva2VuO1xuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IFUgPSBcInVcIjtcbmV4cG9ydCBjb25zdCBFTVBUWV9TVFJJTkcgPSBcIlwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVG9rZW4gZnJvbSBcIi4uL3Rva2VuXCI7XG5cbmNvbnN0IHNpZ25pZmljYW50ID0gdHJ1ZTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2lnbmlmaWNhbnRUb2tlbiBleHRlbmRzIFRva2VuIHtcbiAgY2xvbmUoQ2xhc3MsIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHtcbiAgICBpZiAoZW5kUG9zaXRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgZW5kUG9zaXRpb24gPSBzdGFydFBvc2l0aW9uOyAgLy8vXG4gICAgICBzdGFydFBvc2l0aW9uID0gQ2xhc3M7ICAvLy9cbiAgICAgIENsYXNzID0gU2lnbmlmaWNhbnRUb2tlbjsgLy8vXG4gICAgfVxuXG4gICAgY29uc3Qgc2lnbmlmaWNhbnRUb2tlbiA9IHN1cGVyLmNsb25lKENsYXNzLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbiwgc2lnbmlmaWNhbnQsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cyk7XG5cbiAgICByZXR1cm4gc2lnbmlmaWNhbnRUb2tlbjtcbiAgfVxuXG4gIHN0YXRpYyBtYXRjaChDbGFzcywgY29udGVudCwgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XG4gICAgaWYgKGNvbnRlbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29udGVudCA9IENsYXNzOyAgLy8vXG4gICAgICBDbGFzcyA9IFNpZ25pZmljYW50VG9rZW47IC8vL1xuICAgIH1cblxuICAgIGNvbnN0IHNpZ25pZmljYW50VG9rZW4gPSBUb2tlbi5tYXRjaChDbGFzcywgY29udGVudCwgc2lnbmlmaWNhbnQsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cyk7XG5cbiAgICByZXR1cm4gc2lnbmlmaWNhbnRUb2tlbjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChDbGFzcywgY29udGVudCwgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XG4gICAgaWYgKGNvbnRlbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29udGVudCA9IENsYXNzOyAgLy8vXG4gICAgICBDbGFzcyA9IFNpZ25pZmljYW50VG9rZW47IC8vL1xuICAgIH1cblxuICAgIGNvbnN0IHNpZ25pZmljYW50VG9rZW4gPSBUb2tlbi5mcm9tQ29udGVudChDbGFzcywgY29udGVudCwgc2lnbmlmaWNhbnQsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cyk7XG5cbiAgICByZXR1cm4gc2lnbmlmaWNhbnRUb2tlbjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudEFuZFR5cGUoQ2xhc3MsIGNvbnRlbnQsIHR5cGUsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cykge1xuICAgIGlmICh0eXBlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHR5cGUgPSBjb250ZW50OyAvLy9cbiAgICAgIGNvbnRlbnQgPSBDbGFzczsgIC8vL1xuICAgICAgQ2xhc3MgPSBTaWduaWZpY2FudFRva2VuOyAvLy9cbiAgICB9XG5cbiAgICBjb25zdCBzaWduaWZpY2FudFRva2VuID0gVG9rZW4uZnJvbUNvbnRlbnRBbmRUeXBlKENsYXNzLCBjb250ZW50LCB0eXBlLCBzaWduaWZpY2FudCwgLi4ucmVtYWluaW5nQXJndW1lbnRzKTtcblxuICAgIHJldHVybiBzaWduaWZpY2FudFRva2VuO1xuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IFUgPSBcInVcIjtcbmV4cG9ydCBjb25zdCBFTVBUWV9TVFJJTkcgPSBcIlwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgVSA9IFwidVwiO1xuZXhwb3J0IGNvbnN0IEVNUFRZX1NUUklORyA9IFwiXCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5pbXBvcnQgU2lnbmlmaWNhbnRUb2tlbiBmcm9tIFwiLi90b2tlbi9zaWduaWZpY2FudFwiO1xuXG5pbXBvcnQgeyBVLCBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcblxuY29uc3QgeyBmaXJzdCB9ID0gYXJyYXlVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ1bGUge1xuICBjb25zdHJ1Y3Rvcih0eXBlLCByZWd1bGFyRXhwcmVzc2lvbikge1xuICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgdGhpcy5yZWd1bGFyRXhwcmVzc2lvbiA9IHJlZ3VsYXJFeHByZXNzaW9uO1xuICB9XG4gIFxuICBnZXRUeXBlKCkge1xuICAgIHJldHVybiB0aGlzLnR5cGU7XG4gIH1cbiAgXG4gIGdldFJlZ3VsYXJFeHByZXNzaW9uKCkge1xuICAgIHJldHVybiB0aGlzLnJlZ3VsYXJFeHByZXNzaW9uO1xuICB9XG5cbiAgbWF0Y2goY29udGVudCkge1xuICAgIGxldCBzaWduaWZpY2FudFRva2VuID0gbnVsbDtcblxuICAgIGNvbnN0IG1hdGNoZXMgPSBjb250ZW50Lm1hdGNoKHRoaXMucmVndWxhckV4cHJlc3Npb24pO1xuXG4gICAgaWYgKG1hdGNoZXMgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHsgaW5kZXggfSA9IG1hdGNoZXM7XG5cbiAgICAgIGlmIChpbmRleCA9PT0gMCkge1xuICAgICAgICBjb25zdCBmaXJzdE1hdGNoID0gZmlyc3QobWF0Y2hlcyk7XG5cbiAgICAgICAgY29udGVudCA9IGZpcnN0TWF0Y2g7IC8vL1xuXG4gICAgICAgIGNvbnN0IGNvbnRlbnRMZW5ndGggPSBjb250ZW50Lmxlbmd0aDtcblxuICAgICAgICBpZiAoY29udGVudExlbmd0aCA+IDApIHtcbiAgICAgICAgICBzaWduaWZpY2FudFRva2VuID0gU2lnbmlmaWNhbnRUb2tlbi5mcm9tQ29udGVudEFuZFR5cGUoY29udGVudCwgdGhpcy50eXBlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzaWduaWZpY2FudFRva2VuO1xuICB9XG4gIFxuICBhc0VudHJ5KCkge1xuICAgIGNvbnN0IGVudHJ5ID0ge30sXG4gICAgICAgICAgcmVndWxhckV4cHJlc3Npb25QYXR0ZXJuID0gYCR7dGhpcy5yZWd1bGFyRXhwcmVzc2lvbn1gO1xuXG4gICAgZW50cnlbdGhpcy50eXBlXSA9IHJlZ3VsYXJFeHByZXNzaW9uUGF0dGVybjtcblxuICAgIHJldHVybiBlbnRyeTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tVG9rZW4oVG9rZW4pIHtcbiAgICBjb25zdCB7IHR5cGUsIHJlZ3VsYXJFeHByZXNzaW9uIH0gPSBUb2tlbixcbiAgICAgICAgICBydWxlID0gbmV3IFJ1bGUodHlwZSwgcmVndWxhckV4cHJlc3Npb24pO1xuXG4gICAgcmV0dXJuIHJ1bGU7XG4gIH1cblxuICBzdGF0aWMgZnJvbUVudHJ5KGVudHJ5KSB7XG4gICAgY29uc3QgZW50cnlLZXlzID0gT2JqZWN0LmtleXMoZW50cnkpLFxuICAgICAgICAgIGZpcnN0RW50cnlLZXkgPSBmaXJzdChlbnRyeUtleXMpLFxuICAgICAgICAgIHR5cGUgPSBmaXJzdEVudHJ5S2V5LCAvLy9cbiAgICAgICAgICByZWd1bGFyRXhwcmVzc2lvblBhdHRlcm4gPSBlbnRyeVt0eXBlXSxcbiAgICAgICAgICBydWxlID0gUnVsZS5mcm9tVHlwZUFuZFJlZ3VsYXJFeHByZXNzaW9uUGF0dGVybih0eXBlLCByZWd1bGFyRXhwcmVzc2lvblBhdHRlcm4pO1xuICAgICAgICBcbiAgICByZXR1cm4gcnVsZTsgXG4gIH1cblxuICBzdGF0aWMgZnJvbVR5cGVBbmRSZWd1bGFyRXhwcmVzc2lvblBhdHRlcm4odHlwZSwgcmVndWxhckV4cHJlc3Npb25QYXR0ZXJuKSB7XG4gICAgY29uc3QgdW5pY29kZSA9IGlzVW5pY29kZShyZWd1bGFyRXhwcmVzc2lvblBhdHRlcm4pLFxuICAgICAgICAgIGZsYWdzID0gdW5pY29kZSA/XG4gICAgICAgICAgICAgICAgICAgIFUgOlxuICAgICAgICAgICAgICAgICAgICAgIEVNUFRZX1NUUklORyxcbiAgICAgICAgICByZWdFeHAgPSBuZXcgUmVnRXhwKHJlZ3VsYXJFeHByZXNzaW9uUGF0dGVybiwgZmxhZ3MpLFxuICAgICAgICAgIHJlZ3VsYXJFeHByZXNzaW9uID0gcmVnRXhwLCAvLy9cbiAgICAgICAgICBydWxlID0gbmV3IFJ1bGUodHlwZSwgcmVndWxhckV4cHJlc3Npb24pO1xuXG4gICAgcmV0dXJuIHJ1bGU7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNVbmljb2RlKHJlZ3VsYXJFeHByZXNzaW9uUGF0dGVybikge1xuICBjb25zdCB1bmljb2RlUmVndWxhckV4cHJlc3Npb24gPSAvdXsvLCAvLy9cbiAgICAgICAgaW5kZXggPSByZWd1bGFyRXhwcmVzc2lvblBhdHRlcm4uc2VhcmNoKHVuaWNvZGVSZWd1bGFyRXhwcmVzc2lvbiksXG4gICAgICAgIHVuaWNvZGUgPSAoaW5kZXggIT09IC0xKTtcblxuICByZXR1cm4gdW5pY29kZTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmV4cG9ydCBjb25zdCBwbHVzID0gXCIrXCI7XHJcbmV4cG9ydCBjb25zdCB3aWxkY2FyZCA9IFwiLlwiO1xyXG5leHBvcnQgY29uc3QgYXN0ZXJpc2sgPSBcIipcIjtcclxuZXhwb3J0IGNvbnN0IGVsbGlwc2lzID0gXCIuLi5cIjtcclxuZXhwb3J0IGNvbnN0IHNlcGFyYXRvciA9IFwiOjo9XCI7XHJcbmV4cG9ydCBjb25zdCB0ZXJtaW5hdG9yID0gXCI7XCI7XHJcbmV4cG9ydCBjb25zdCB2ZXJ0aWNhbEJhciA9IFwifFwiO1xyXG5leHBvcnQgY29uc3Qgb3BlbkJyYWNrZXQgPSBcIihcIjtcclxuZXhwb3J0IGNvbnN0IGNsb3NlQnJhY2tldCA9IFwiKVwiO1xyXG5leHBvcnQgY29uc3QgcXVlc3Rpb25NYXJrID0gXCI/XCI7XHJcbmV4cG9ydCBjb25zdCBleGNsYW1hdGlvbk1hcmsgPSBcIiFcIjtcclxuZXhwb3J0IGNvbnN0IE5PX1dISVRFU1BBQ0UgPSBcIjxOT19XSElURVNQQUNFPlwiO1xyXG5leHBvcnQgY29uc3QgRU5EX09GX0xJTkUgPSBcIjxFTkRfT0ZfTElORT5cIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICBwbHVzLFxyXG4gIHdpbGRjYXJkLFxyXG4gIGFzdGVyaXNrLFxyXG4gIGVsbGlwc2lzLFxyXG4gIHNlcGFyYXRvcixcclxuICB0ZXJtaW5hdG9yLFxyXG4gIHZlcnRpY2FsQmFyLFxyXG4gIG9wZW5CcmFja2V0LFxyXG4gIGNsb3NlQnJhY2tldCxcclxuICBxdWVzdGlvbk1hcmssXHJcbiAgZXhjbGFtYXRpb25NYXJrLFxyXG4gIE5PX1dISVRFU1BBQ0UsXHJcbiAgRU5EX09GX0xJTkVcclxufTtcclxuIiwgIlwidXNlIHN0cmljdFwiO1xyXG5cclxuY29uc3QgZW50cmllcyA9IFtcclxuICB7XHJcbiAgICBcInNwZWNpYWxcIjogXCJeKD86Ojo9fFxcXFx8fFxcXFwofFxcXFwpfFxcXFw/fFxcXFwhfFxcXFwqfFxcXFwrfFxcXFwuXFxcXC5cXFxcLnxcXFxcLnxcdTAzQjV8O3w8Tk9fV0hJVEVTUEFDRT58PEVORF9PRl9MSU5FPilcIlxyXG4gIH0sXHJcbiAge1xyXG4gICAgXCJ0eXBlXCI6IFwiXlxcXFxbW15cXFxcXV0rXFxcXF1cIlxyXG4gIH0sXHJcbiAge1xyXG4gICAgXCJuYW1lXCI6IFwiXltcXFxcd35dK1wiXHJcbiAgfSxcclxuICB7XHJcbiAgICBcInVuYXNzaWduZWRcIjogXCJeW15cXFxcc10rXCJcclxuICB9XHJcbl07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBlbnRyaWVzO1xyXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBpbkNvbW1lbnRGcm9tVG9rZW5BbmRJbkNvbW1lbnQodG9rZW4sIGluQ29tbWVudCkge1xuICBjb25zdCB0b2tlbkNvbW1lbnRUb2tlbiA9IHRva2VuLmlzQ29tbWVudFRva2VuKCk7XG5cbiAgaWYgKHRva2VuQ29tbWVudFRva2VuKSB7XG4gICAgY29uc3QgY29tbWVudFRva2VuID0gdG9rZW4sIC8vL1xuICAgICAgICAgIGNvbW1lbnRUb2tlbkluQ29tbWVudFByZXNlcnZpbmcgPSBjb21tZW50VG9rZW4uaXNJbkNvbW1lbnRQcmVzZXJ2aW5nKCk7XG5cbiAgICBpbkNvbW1lbnQgPSBjb21tZW50VG9rZW5JbkNvbW1lbnRQcmVzZXJ2aW5nOyAgLy8vXG4gIH1cblxuICByZXR1cm4gaW5Db21tZW50O1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xyXG5cclxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcclxuXHJcbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcclxuaW1wb3J0IHsgaW5Db21tZW50RnJvbVRva2VuQW5kSW5Db21tZW50IH0gZnJvbSBcIi4uL3V0aWxpdGllcy90b2tlblwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29tbW9uTGV4ZXIge1xyXG4gIGNvbnN0cnVjdG9yKHJ1bGVzLCBJbkNvbW1lbnRDbGFzc2VzLCBOb3RJbkNvbW1lbnRDbGFzc2VzKSB7XHJcbiAgICB0aGlzLnJ1bGVzID0gcnVsZXM7XHJcbiAgICB0aGlzLkluQ29tbWVudENsYXNzZXMgPSBJbkNvbW1lbnRDbGFzc2VzO1xyXG4gICAgdGhpcy5Ob3RJbkNvbW1lbnRDbGFzc2VzID0gTm90SW5Db21tZW50Q2xhc3NlcztcclxuICB9XHJcbiAgXHJcbiAgZ2V0UnVsZXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5ydWxlcztcclxuICB9XHJcblxyXG4gIGdldEluQ29tbWVudENsYXNzZXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5JbkNvbW1lbnRDbGFzc2VzO1xyXG4gIH1cclxuXHJcbiAgZ2V0Tm90SW5Db21tZW50Q2xhc3NlcygpIHtcclxuICAgIHJldHVybiB0aGlzLk5vdEluQ29tbWVudENsYXNzZXM7XHJcbiAgfVxyXG5cclxuICB0b2tlbmlzZShjb250ZW50LCBpbkNvbW1lbnQgPSBmYWxzZSkge1xyXG4gICAgY29uc3QgdG9rZW5zID0gW107XHJcblxyXG4gICAgd2hpbGUgKGNvbnRlbnQgIT09IEVNUFRZX1NUUklORykge1xyXG4gICAgICBsZXQgdG9rZW4gPSBudWxsO1xyXG5cclxuICAgICAgY29uc3QgQ2xhc3NlcyA9IGluQ29tbWVudCA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuSW5Db21tZW50Q2xhc3NlcyA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5Ob3RJbkNvbW1lbnRDbGFzc2VzO1xyXG5cclxuICAgICAgQ2xhc3Nlcy5zb21lKChDbGFzcykgPT4ge1xyXG4gICAgICAgIGlmIChDbGFzcyAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgdG9rZW4gPSBDbGFzcy5tYXRjaChjb250ZW50KTtcclxuXHJcbiAgICAgICAgICBpZiAodG9rZW4gIT09IG51bGwpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGlmICh0b2tlbiA9PT0gbnVsbCkge1xyXG4gICAgICAgIGxldCBzaWduaWZpY2FudFRva2VuID0gbnVsbDtcclxuXHJcbiAgICAgICAgdGhpcy5ydWxlcy5zb21lKChydWxlKSA9PiB7XHJcbiAgICAgICAgICBzaWduaWZpY2FudFRva2VuID0gcnVsZS5tYXRjaChjb250ZW50KTtcclxuXHJcbiAgICAgICAgICBpZiAoc2lnbmlmaWNhbnRUb2tlbiAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0b2tlbiA9IHNpZ25pZmljYW50VG9rZW47IC8vL1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0b2tlbiA9PT0gbnVsbCkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIGNvbnRlbnQgJyR7Y29udGVudH0nIGNhbm5vdCBiZSB0b2tlbmlzZWQuYCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRva2Vucy5wdXNoKHRva2VuKTtcclxuXHJcbiAgICAgIGluQ29tbWVudCA9IGluQ29tbWVudEZyb21Ub2tlbkFuZEluQ29tbWVudCh0b2tlbiwgaW5Db21tZW50KTtcclxuXHJcbiAgICAgIGNvbnN0IHRva2VuQ29udGVudExlbmd0aCA9IHRva2VuLmdldENvbnRlbnRMZW5ndGgoKSxcclxuICAgICAgICAgICAgc3RhcnQgPSB0b2tlbkNvbnRlbnRMZW5ndGg7IC8vL1xyXG5cclxuICAgICAgY29udGVudCA9IGNvbnRlbnQuc3Vic3RyaW5nKHN0YXJ0KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdG9rZW5zO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGZyb21Ob3RoaW5nKENsYXNzKSB7XHJcbiAgICBjb25zdCB7IGVudHJpZXMgfSA9IENsYXNzLFxyXG4gICAgICAgICAgSW5Db21tZW50Q2xhc3NlcyA9IEluQ29tbWVudENsYXNzZXNGcm9tQ2xhc3MoQ2xhc3MpLFxyXG4gICAgICAgICAgTm90SW5Db21tZW50Q2xhc3NlcyA9IE5vdEluQ29tbWVudENsYXNzZXNGcm9tQ2xhc3MoQ2xhc3MpLFxyXG4gICAgICAgICAgcnVsZXMgPSBlbnRyaWVzLm1hcCgoZW50cnkpID0+IFJ1bGUuZnJvbUVudHJ5KGVudHJ5KSksXHJcbiAgICAgICAgICBsZXhlciA9IG5ldyBDbGFzcyhydWxlcywgSW5Db21tZW50Q2xhc3NlcywgTm90SW5Db21tZW50Q2xhc3Nlcyk7XHJcblxyXG4gICAgcmV0dXJuIGxleGVyO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGZyb21SdWxlcyhDbGFzcywgcnVsZXMpIHtcclxuICAgIGNvbnN0IEluQ29tbWVudENsYXNzZXMgPSBJbkNvbW1lbnRDbGFzc2VzRnJvbUNsYXNzKENsYXNzKSxcclxuICAgICAgICAgIE5vdEluQ29tbWVudENsYXNzZXMgPSBOb3RJbkNvbW1lbnRDbGFzc2VzRnJvbUNsYXNzKENsYXNzKSxcclxuICAgICAgICAgIGxleGVyID0gbmV3IENsYXNzKHJ1bGVzLCBJbkNvbW1lbnRDbGFzc2VzLCBOb3RJbkNvbW1lbnRDbGFzc2VzKTtcclxuXHJcbiAgICByZXR1cm4gbGV4ZXI7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZnJvbUVudHJpZXMoQ2xhc3MsIGVudHJpZXMpIHtcclxuICAgIGNvbnN0IHJ1bGVzID0gZW50cmllcy5tYXAoKGVudHJ5KSA9PiBSdWxlLmZyb21FbnRyeShlbnRyeSkpLFxyXG4gICAgICAgICAgSW5Db21tZW50Q2xhc3NlcyA9IEluQ29tbWVudENsYXNzZXNGcm9tQ2xhc3MoQ2xhc3MpLFxyXG4gICAgICAgICAgTm90SW5Db21tZW50Q2xhc3NlcyA9IE5vdEluQ29tbWVudENsYXNzZXNGcm9tQ2xhc3MoQ2xhc3MpLFxyXG4gICAgICAgICAgbGV4ZXIgPSBuZXcgQ2xhc3MocnVsZXMsIEluQ29tbWVudENsYXNzZXMsIE5vdEluQ29tbWVudENsYXNzZXMpO1xyXG5cclxuICAgIHJldHVybiBsZXhlcjtcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIEluQ29tbWVudENsYXNzZXNGcm9tQ2xhc3MoQ2xhc3MpIHtcclxuICBjb25zdCB7IEVuZE9mTGluZUNvbW1lbnRUb2tlbiwgRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sIE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuIH0gPSBDbGFzcyxcclxuICAgICAgICBJbkNvbW1lbnRDbGFzc2VzID0gW1xyXG4gICAgICAgICAgRW5kT2ZMaW5lQ29tbWVudFRva2VuLFxyXG4gICAgICAgICAgRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sXHJcbiAgICAgICAgICBNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlblxyXG4gICAgICAgIF07XHJcblxyXG4gIHJldHVybiBJbkNvbW1lbnRDbGFzc2VzO1xyXG59XHJcblxyXG5mdW5jdGlvbiBOb3RJbkNvbW1lbnRDbGFzc2VzRnJvbUNsYXNzKENsYXNzKSB7XHJcbiAgY29uc3QgeyBFbmRPZkxpbmVUb2tlbixcclxuICAgICAgICAgIFdoaXRlc3BhY2VUb2tlbixcclxuICAgICAgICAgIFNpbmdsZUxpbmVDb21tZW50VG9rZW4sXHJcbiAgICAgICAgICBSZWd1bGFyRXhwcmVzc2lvblRva2VuLFxyXG4gICAgICAgICAgU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbixcclxuICAgICAgICAgIFNpbmdseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbixcclxuICAgICAgICAgIERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiB9ID0gQ2xhc3MsXHJcbiAgICAgIE5vdEluQ29tbWVudENsYXNzZXMgPSBbXHJcbiAgICAgICAgRW5kT2ZMaW5lVG9rZW4sXHJcbiAgICAgICAgV2hpdGVzcGFjZVRva2VuLFxyXG4gICAgICAgIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sXHJcbiAgICAgICAgU2luZ2xlTGluZUNvbW1lbnRUb2tlbixcclxuICAgICAgICBSZWd1bGFyRXhwcmVzc2lvblRva2VuLFxyXG4gICAgICAgIFNpbmdseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbixcclxuICAgICAgICBEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW5cclxuICAgICAgXTtcclxuXHJcbiAgcmV0dXJuIE5vdEluQ29tbWVudENsYXNzZXM7XHJcbn0iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBUb2tlbiBmcm9tIFwiLi4vdG9rZW5cIjtcblxuY29uc3Qgc2lnbmlmaWNhbnQgPSBmYWxzZTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTm9uU2lnbmlmaWNhbnRUb2tlbiBleHRlbmRzIFRva2VuIHtcbiAgY2xvbmUoQ2xhc3MsIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSB7IHJldHVybiBzdXBlci5jbG9uZShDbGFzcywgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24sIHNpZ25pZmljYW50KTsgfVxuXG4gIHN0YXRpYyBtYXRjaChDbGFzcywgY29udGVudCkgeyByZXR1cm4gVG9rZW4ubWF0Y2goQ2xhc3MsIGNvbnRlbnQsIHNpZ25pZmljYW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChDbGFzcywgY29udGVudCkgeyByZXR1cm4gVG9rZW4uZnJvbUNvbnRlbnQoQ2xhc3MsIGNvbnRlbnQsIHNpZ25pZmljYW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudEFuZFR5cGUoQ2xhc3MsIGNvbnRlbnQsIHR5cGUpIHsgcmV0dXJuIFRva2VuLmZyb21Db250ZW50QW5kVHlwZShDbGFzcywgY29udGVudCwgdHlwZSwgc2lnbmlmaWNhbnQpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblNpZ25pZmljYW50VG9rZW4gZnJvbSBcIi4uLy4uL3Rva2VuL25vblNpZ25pZmljYW50XCI7XG5cbmltcG9ydCB7IHdoaXRlc3BhY2VUeXBlIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFdoaXRlc3BhY2VUb2tlbiBleHRlbmRzIE5vblNpZ25pZmljYW50VG9rZW4ge1xuICBhc0hUTUwoKSB7XG4gICAgY29uc3QgaHRtbCA9IHRoaXMuaW5uZXJIVE1MOyAgLy8vXG5cbiAgICByZXR1cm4gaHRtbDtcbiAgfVxuXG4gIGNsb25lKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSB7IHJldHVybiBzdXBlci5jbG9uZShXaGl0ZXNwYWNlVG9rZW4sIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsgfVxuXG4gIHN0YXRpYyB0eXBlID0gd2hpdGVzcGFjZVR5cGU7XG5cbiAgc3RhdGljIHJlZ3VsYXJFeHByZXNzaW9uID0gL15bXFx0IF0rLztcblxuICBzdGF0aWMgbWF0Y2goY29udGVudCkgeyByZXR1cm4gTm9uU2lnbmlmaWNhbnRUb2tlbi5tYXRjaChXaGl0ZXNwYWNlVG9rZW4sIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIE5vblNpZ25pZmljYW50VG9rZW4uZnJvbUNvbnRlbnQoV2hpdGVzcGFjZVRva2VuLCBjb250ZW50KTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBTaWduaWZpY2FudFRva2VuIGZyb20gXCIuLi8uLi90b2tlbi9zaWduaWZpY2FudFwiO1xuXG5pbXBvcnQgeyByZWd1bGFyRXhwcmVzc2lvblR5cGUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVndWxhckV4cHJlc3Npb25Ub2tlbiBleHRlbmRzIFNpZ25pZmljYW50VG9rZW4ge1xuICBjbG9uZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikgeyByZXR1cm4gc3VwZXIuY2xvbmUoUmVndWxhckV4cHJlc3Npb25Ub2tlbiwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOyB9XG5cbiAgc3RhdGljIHR5cGUgPSByZWd1bGFyRXhwcmVzc2lvblR5cGU7XG5cbiAgc3RhdGljIHJlZ3VsYXJFeHByZXNzaW9uID0gL15cXC8oPzpcXFxcW15cXHNdfFteXFwvXFxyXFxuXSkqXFwvLztcblxuICBzdGF0aWMgbWF0Y2goY29udGVudCkgeyByZXR1cm4gU2lnbmlmaWNhbnRUb2tlbi5tYXRjaChSZWd1bGFyRXhwcmVzc2lvblRva2VuLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChjb250ZW50KSB7IHJldHVybiBTaWduaWZpY2FudFRva2VuLmZyb21Db250ZW50KFJlZ3VsYXJFeHByZXNzaW9uVG9rZW4sIGNvbnRlbnQpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblNpZ25pZmljYW50VG9rZW4gZnJvbSBcIi4uLy4uL3Rva2VuL25vblNpZ25pZmljYW50XCI7XG5cbmltcG9ydCB7IGVuZE9mTGluZVR5cGUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW5kT2ZMaW5lTm9uU2lnbmlmaWNhbnRUb2tlbiBleHRlbmRzIE5vblNpZ25pZmljYW50VG9rZW4ge1xuICBjbG9uZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikgeyByZXR1cm4gc3VwZXIuY2xvbmUoRW5kT2ZMaW5lTm9uU2lnbmlmaWNhbnRUb2tlbiwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOyB9XG5cbiAgYXNIVE1MKCkge1xuICAgIGNvbnN0IGh0bWwgPSB0aGlzLmlubmVySFRNTDsgIC8vL1xuXG4gICAgcmV0dXJuIGh0bWw7XG4gIH1cblxuICBzdGF0aWMgdHlwZSA9IGVuZE9mTGluZVR5cGU7XG5cbiAgc3RhdGljIHJlZ3VsYXJFeHByZXNzaW9uID0gL14oPzpcXHJcXG58XFxyfFxcbikvO1xuXG4gIHN0YXRpYyBtYXRjaChjb250ZW50KSB7IHJldHVybiBOb25TaWduaWZpY2FudFRva2VuLm1hdGNoKEVuZE9mTGluZU5vblNpZ25pZmljYW50VG9rZW4sIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIE5vblNpZ25pZmljYW50VG9rZW4uZnJvbUNvbnRlbnQoRW5kT2ZMaW5lTm9uU2lnbmlmaWNhbnRUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgU2lnbmlmaWNhbnRUb2tlbiBmcm9tIFwiLi4vLi4vdG9rZW4vc2lnbmlmaWNhbnRcIjtcblxuaW1wb3J0IHsgc3RyaW5nTGl0ZXJhbFR5cGUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3RyaW5nTGl0ZXJhbFRva2VuIGV4dGVuZHMgU2lnbmlmaWNhbnRUb2tlbiB7XG4gIGNsb25lKENsYXNzLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikgeyByZXR1cm4gc3VwZXIuY2xvbmUoQ2xhc3MsIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsgfVxuXG4gIGdldFN0cmluZygpIHtcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5nZXRDb250ZW50KCksXG4gICAgICAgICAgY29udGVudExlbmd0aCA9IGNvbnRlbnQubGVuZ3RoLFxuICAgICAgICAgIHN0YXJ0ID0gMSxcbiAgICAgICAgICBlbmQgPSBjb250ZW50TGVuZ3RoIC0gMSxcbiAgICAgICAgICBzdHJpbmcgPSBjb250ZW50LnN1YnN0cmluZyhzdGFydCwgZW5kKTtcblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuICBzdGF0aWMgdHlwZSA9IHN0cmluZ0xpdGVyYWxUeXBlO1xuXG4gIHN0YXRpYyBtYXRjaChDbGFzcywgY29udGVudCkgeyByZXR1cm4gU2lnbmlmaWNhbnRUb2tlbi5tYXRjaChDbGFzcywgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoQ2xhc3MsIGNvbnRlbnQpIHsgcmV0dXJuIFNpZ25pZmljYW50VG9rZW4uZnJvbUNvbnRlbnQoQ2xhc3MsIGNvbnRlbnQpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFN0cmluZ0xpdGVyYWxUb2tlbiBmcm9tIFwiLi4vLi4vc2lnbmlmaWNhbnQvc3RyaW5nTGl0ZXJhbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gZXh0ZW5kcyBTdHJpbmdMaXRlcmFsVG9rZW4ge1xuICBjbG9uZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikgeyByZXR1cm4gc3VwZXIuY2xvbmUoRG91Ymx5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7IH1cblxuICBzdGF0aWMgcmVndWxhckV4cHJlc3Npb24gPSAvXlwiKD86XFxcXFteXFxzXXxbXlwiXFxcXFxcclxcbl0pKlwiLztcblxuICBzdGF0aWMgbWF0Y2goY29udGVudCkgeyByZXR1cm4gU3RyaW5nTGl0ZXJhbFRva2VuLm1hdGNoKERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiwgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoY29udGVudCkgeyByZXR1cm4gU3RyaW5nTGl0ZXJhbFRva2VuLmZyb21Db250ZW50KERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xyXG5cclxuaW1wb3J0IGVudHJpZXMgZnJvbSBcIi4vZW50cmllc1wiO1xyXG5pbXBvcnQgQ29tbW9uTGV4ZXIgZnJvbSBcIi4uL2NvbW1vbi9sZXhlclwiO1xyXG5pbXBvcnQgV2hpdGVzcGFjZVRva2VuIGZyb20gXCIuLi90b2tlbi9ub25TaWduaWZpY2FudC93aGl0ZXNwYWNlXCI7XHJcbmltcG9ydCBSZWd1bGFyRXhwcmVzc2lvblRva2VuIGZyb20gXCIuLi90b2tlbi9zaWduaWZpY2FudC9yZWd1bGFyRXhwcmVzc2lvblwiO1xyXG5pbXBvcnQgRW5kT2ZMaW5lTm9uU2lnbmlmaWNhbnRUb2tlbiBmcm9tIFwiLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvZW5kT2ZMaW5lXCI7XHJcbmltcG9ydCBEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gZnJvbSBcIi4uL3Rva2VuL3NpZ25pZmljYW50L3N0cmluZ0xpdGVyYWwvZG91Ymx5UXVvdGVkXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCTkZMZXhlciBleHRlbmRzIENvbW1vbkxleGVyIHtcclxuICB0b2tlbnNGcm9tQk5GKGJuZikge1xyXG4gICAgY29uc3QgY29udGVudCA9IGJuZiwgIC8vL1xyXG4gICAgICAgICAgdG9rZW5zID0gc3VwZXIudG9rZW5pc2UoY29udGVudCk7XHJcblxyXG4gICAgcmV0dXJuIHRva2VucztcclxuICB9XHJcblxyXG4gIHN0YXRpYyBlbnRyaWVzID0gZW50cmllcztcclxuXHJcbiAgc3RhdGljIEVuZE9mTGluZVRva2VuID0gRW5kT2ZMaW5lTm9uU2lnbmlmaWNhbnRUb2tlbjsgLy8vXHJcblxyXG4gIHN0YXRpYyBXaGl0ZXNwYWNlVG9rZW4gPSBXaGl0ZXNwYWNlVG9rZW47XHJcblxyXG4gIHN0YXRpYyBFbmRPZkxpbmVDb21tZW50VG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgUmVndWxhckV4cHJlc3Npb25Ub2tlbiA9IFJlZ3VsYXJFeHByZXNzaW9uVG9rZW47XHJcblxyXG4gIHN0YXRpYyBTaW5nbGVMaW5lQ29tbWVudFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgU2luZ2x5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiA9IERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbjtcclxuXHJcbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkgeyByZXR1cm4gQ29tbW9uTGV4ZXIuZnJvbU5vdGhpbmcoQk5GTGV4ZXIpOyB9XHJcblxyXG4gIHN0YXRpYyBmcm9tUnVsZXMocnVsZXMpIHsgcmV0dXJuIENvbW1vbkxleGVyLmZyb21SdWxlcyhCTkZMZXhlciwgcnVsZXMpOyB9XHJcblxyXG4gIHN0YXRpYyBmcm9tRW50cmllcyhlbnRyaWVzKSB7IHJldHVybiBDb21tb25MZXhlci5mcm9tRW50cmllcyhCTkZMZXhlciwgZW50cmllcyk7IH1cclxufVxyXG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmNvbnN0IGVudHJpZXMgPSBbXHJcbiAge1xyXG4gICAgXCJkaWdpdFwiOiBcIl5cXFxcZCtcIlxyXG4gIH0sXHJcbiAge1xyXG4gICAgXCJicmFja2V0XCI6IFwiXig/OlxcXFwofFxcXFwpKVwiXHJcbiAgfSxcclxuICB7XHJcbiAgICBcIm9wZXJhdG9yXCI6IFwiXig/OlxcXFwrfFxcXFwtfFxcXFwqfFxcXFwvKVwiXHJcbiAgfSxcclxuICB7XHJcbiAgICBcInVuYXNzaWduZWRcIjogXCJeW15cXFxcc10rXCJcclxuICB9XHJcbl07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBlbnRyaWVzO1xyXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBTdHJpbmdMaXRlcmFsVG9rZW4gZnJvbSBcIi4uLy4uL3NpZ25pZmljYW50L3N0cmluZ0xpdGVyYWxcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2luZ2x5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuIGV4dGVuZHMgU3RyaW5nTGl0ZXJhbFRva2VuIHtcbiAgY2xvbmUoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pIHsgcmV0dXJuIHN1cGVyLmNsb25lKFNpbmdseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOyB9XG5cbiAgc3RhdGljIHJlZ3VsYXJFeHByZXNzaW9uID0gL14nKD86XFxcXFteXFxzXXxbXidcXFxcXFxyXFxuXSkqJy87XG5cbiAgc3RhdGljIG1hdGNoKGNvbnRlbnQpIHsgcmV0dXJuIFN0cmluZ0xpdGVyYWxUb2tlbi5tYXRjaChTaW5nbHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4sIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIFN0cmluZ0xpdGVyYWxUb2tlbi5mcm9tQ29udGVudChTaW5nbHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4sIGNvbnRlbnQpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblNpZ25pZmljYW50VG9rZW4gZnJvbSBcIi4uLy4uLy4uL3Rva2VuL25vblNpZ25pZmljYW50XCI7XG5cbmltcG9ydCB7IHNpbmdsZUxpbmVDb21tZW50VHlwZSB9IGZyb20gXCIuLi8uLi8uLi90eXBlc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTaW5nbGVMaW5lQ29tbWVudFRva2VuIGV4dGVuZHMgTm9uU2lnbmlmaWNhbnRUb2tlbiB7XG4gIGNsb25lKENsYXNzLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikgeyByZXR1cm4gc3VwZXIuY2xvbmUoQ2xhc3MsIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsgfVxuXG4gIGlzSW5Db21tZW50UHJlc2VydmluZygpIHtcbiAgICBjb25zdCBpbkNvbW1lbnRQcmVzZXJ2aW5nID0gZmFsc2U7XG5cbiAgICByZXR1cm4gaW5Db21tZW50UHJlc2VydmluZztcbiAgfVxuXG4gIHN0YXRpYyB0eXBlID0gc2luZ2xlTGluZUNvbW1lbnRUeXBlO1xuXG4gIHN0YXRpYyBtYXRjaChDbGFzcywgY29udGVudCkgeyByZXR1cm4gTm9uU2lnbmlmaWNhbnRUb2tlbi5tYXRjaChDbGFzcywgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoQ2xhc3MsIGNvbnRlbnQpIHsgcmV0dXJuIE5vblNpZ25pZmljYW50VG9rZW4uZnJvbUNvbnRlbnQoQ2xhc3MsIGNvbnRlbnQpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFNpbmdsZUxpbmVDb21tZW50VG9rZW4gZnJvbSBcIi4uLy4uLy4uLy4uL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvc2luZ2xlTGluZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQeXRob25TdHlsZVNpbmdsZUxpbmVDb21tZW50VG9rZW4gZXh0ZW5kcyBTaW5nbGVMaW5lQ29tbWVudFRva2VuIHtcbiAgY2xvbmUoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pIHsgcmV0dXJuIHN1cGVyLmNsb25lKFB5dGhvblN0eWxlU2luZ2xlTGluZUNvbW1lbnRUb2tlbiwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOyB9XG5cbiAgc3RhdGljIHJlZ3VsYXJFeHByZXNzaW9uID0gL14jW15cXHJcXG5dKi87XG5cbiAgc3RhdGljIG1hdGNoKGNvbnRlbnQpIHsgcmV0dXJuIFNpbmdsZUxpbmVDb21tZW50VG9rZW4ubWF0Y2goUHl0aG9uU3R5bGVTaW5nbGVMaW5lQ29tbWVudFRva2VuLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChjb250ZW50KSB7IHJldHVybiBTaW5nbGVMaW5lQ29tbWVudFRva2VuLmZyb21Db250ZW50KFB5dGhvblN0eWxlU2luZ2xlTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uU2lnbmlmaWNhbnRUb2tlbiBmcm9tIFwiLi4vLi4vLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnRcIjtcblxuaW1wb3J0IHsgZW5kT2ZMaW5lQ29tbWVudFR5cGUgfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW5kT2ZMaW5lQ29tbWVudE5vblNpZ25pZmljYW50VG9rZW4gZXh0ZW5kcyBOb25TaWduaWZpY2FudFRva2VuIHtcbiAgY2xvbmUoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pIHsgcmV0dXJuIHN1cGVyLmNsb25lKEVuZE9mTGluZUNvbW1lbnROb25TaWduaWZpY2FudFRva2VuLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7IH1cblxuICBhc0hUTUwoKSB7XG4gICAgY29uc3QgaHRtbCA9IHRoaXMuaW5uZXJIVE1MOyAgLy8vXG5cbiAgICByZXR1cm4gaHRtbDtcbiAgfVxuXG4gIGlzSW5Db21tZW50UHJlc2VydmluZygpIHtcbiAgICBjb25zdCBpbkNvbW1lbnRQcmVzZXJ2aW5nID0gdHJ1ZTtcblxuICAgIHJldHVybiBpbkNvbW1lbnRQcmVzZXJ2aW5nO1xuICB9XG5cbiAgc3RhdGljIHR5cGUgPSBlbmRPZkxpbmVDb21tZW50VHlwZTtcblxuICBzdGF0aWMgcmVndWxhckV4cHJlc3Npb24gPSAvXig/OlxcclxcbnxcXHJ8XFxuKS87XG5cbiAgc3RhdGljIG1hdGNoKGNvbnRlbnQpIHsgcmV0dXJuIE5vblNpZ25pZmljYW50VG9rZW4ubWF0Y2goRW5kT2ZMaW5lQ29tbWVudE5vblNpZ25pZmljYW50VG9rZW4sIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIE5vblNpZ25pZmljYW50VG9rZW4uZnJvbUNvbnRlbnQoRW5kT2ZMaW5lQ29tbWVudE5vblNpZ25pZmljYW50VG9rZW4sIGNvbnRlbnQpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblNpZ25pZmljYW50VG9rZW4gZnJvbSBcIi4uLy4uLy4uLy4uL3Rva2VuL25vblNpZ25pZmljYW50XCI7XG5cbmltcG9ydCB7IGVuZE9mTXVsdGlMaW5lQ29tbWVudFR5cGUgfSBmcm9tIFwiLi4vLi4vLi4vLi4vdHlwZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gZXh0ZW5kcyBOb25TaWduaWZpY2FudFRva2VuIHtcbiAgY2xvbmUoQ2xhc3MsIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSB7IHJldHVybiBzdXBlci5jbG9uZShDbGFzcywgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOyB9XG5cbiAgaXNJbkNvbW1lbnRQcmVzZXJ2aW5nKCkge1xuICAgIGNvbnN0IGluQ29tbWVudFByZXNlcnZpbmcgPSBmYWxzZTtcblxuICAgIHJldHVybiBpbkNvbW1lbnRQcmVzZXJ2aW5nO1xuICB9XG5cbiAgc3RhdGljIHR5cGUgPSBlbmRPZk11bHRpTGluZUNvbW1lbnRUeXBlO1xuXG4gIHN0YXRpYyBtYXRjaChDbGFzcywgY29udGVudCkgeyByZXR1cm4gTm9uU2lnbmlmaWNhbnRUb2tlbi5tYXRjaChDbGFzcywgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoQ2xhc3MsIGNvbnRlbnQpIHsgcmV0dXJuIE5vblNpZ25pZmljYW50VG9rZW4uZnJvbUNvbnRlbnQoQ2xhc3MsIGNvbnRlbnQpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIGZyb20gXCIuLi8uLi8uLi8uLi8uLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9lbmRPZlwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQeXRob25TdHlsZUVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIGV4dGVuZHMgRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4ge1xuICBjbG9uZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikgeyByZXR1cm4gc3VwZXIuY2xvbmUoUHl0aG9uU3R5bGVFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOyB9XG5cbiAgc3RhdGljIHJlZ3VsYXJFeHByZXNzaW9uID0gL14jIyMvO1xuXG4gIHN0YXRpYyBtYXRjaChjb250ZW50KSB7IHJldHVybiBFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbi5tYXRjaChQeXRob25TdHlsZUVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChjb250ZW50KSB7IHJldHVybiBFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbi5mcm9tQ29udGVudChQeXRob25TdHlsZUVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLCBjb250ZW50KTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25TaWduaWZpY2FudFRva2VuIGZyb20gXCIuLi8uLi8uLi8uLi90b2tlbi9ub25TaWduaWZpY2FudFwiO1xuXG5pbXBvcnQgeyBzdGFydE9mTXVsdGlMaW5lQ29tbWVudFR5cGUgfSBmcm9tIFwiLi4vLi4vLi4vLi4vdHlwZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiBleHRlbmRzIE5vblNpZ25pZmljYW50VG9rZW4ge1xuICBjbG9uZShDbGFzcywgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pIHsgcmV0dXJuIHN1cGVyLmNsb25lKENsYXNzLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7IH1cblxuICBpc0luQ29tbWVudFByZXNlcnZpbmcoKSB7XG4gICAgY29uc3QgaW5Db21tZW50UHJlc2VydmluZyA9IHRydWU7XG5cbiAgICByZXR1cm4gaW5Db21tZW50UHJlc2VydmluZztcbiAgfVxuXG4gIHN0YXRpYyB0eXBlID0gc3RhcnRPZk11bHRpTGluZUNvbW1lbnRUeXBlO1xuXG4gIHN0YXRpYyBtYXRjaChDbGFzcywgY29udGVudCkgeyByZXR1cm4gTm9uU2lnbmlmaWNhbnRUb2tlbi5tYXRjaChDbGFzcywgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoQ2xhc3MsIGNvbnRlbnQpIHsgcmV0dXJuIE5vblNpZ25pZmljYW50VG9rZW4uZnJvbUNvbnRlbnQoQ2xhc3MsIGNvbnRlbnQpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL3N0YXJ0T2ZcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUHl0aG9uU3R5bGVTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIGV4dGVuZHMgU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiB7XG4gIGNsb25lKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSB7IHJldHVybiBzdXBlci5jbG9uZShQeXRob25TdHlsZVN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsgfVxuXG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eIyMjLztcblxuICBzdGF0aWMgbWF0Y2goY29udGVudCkgeyByZXR1cm4gU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbi5tYXRjaChQeXRob25TdHlsZVN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4uZnJvbUNvbnRlbnQoUHl0aG9uU3R5bGVTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLCBjb250ZW50KTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25TaWduaWZpY2FudFRva2VuIGZyb20gXCIuLi8uLi8uLi8uLi90b2tlbi9ub25TaWduaWZpY2FudFwiO1xuXG5pbXBvcnQgeyBtaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUeXBlIH0gZnJvbSBcIi4uLy4uLy4uLy4uL3R5cGVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuIGV4dGVuZHMgTm9uU2lnbmlmaWNhbnRUb2tlbiB7XG4gIGNsb25lKENsYXNzLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikgeyByZXR1cm4gc3VwZXIuY2xvbmUoQ2xhc3MsIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsgfVxuXG4gIGlzSW5Db21tZW50UHJlc2VydmluZygpIHtcbiAgICBjb25zdCBpbkNvbW1lbnRQcmVzZXJ2aW5nID0gdHJ1ZTtcblxuICAgIHJldHVybiBpbkNvbW1lbnRQcmVzZXJ2aW5nO1xuICB9XG5cbiAgc3RhdGljIHR5cGUgPSBtaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUeXBlO1xuXG4gIHN0YXRpYyBtYXRjaChDbGFzcywgY29udGVudCkgeyByZXR1cm4gTm9uU2lnbmlmaWNhbnRUb2tlbi5tYXRjaChDbGFzcywgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoQ2xhc3MsIGNvbnRlbnQpIHsgcmV0dXJuIE5vblNpZ25pZmljYW50VG9rZW4uZnJvbUNvbnRlbnQoQ2xhc3MsIGNvbnRlbnQpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuIGZyb20gXCIuLi8uLi8uLi8uLi8uLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9taWRkbGVPZlwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQeXRob25TdHlsZU1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuIGV4dGVuZHMgTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4ge1xuICBjbG9uZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikgeyByZXR1cm4gc3VwZXIuY2xvbmUoUHl0aG9uU3R5bGVNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOyB9XG5cbiAgc3RhdGljIHJlZ3VsYXJFeHByZXNzaW9uID0gL14oPzpbXlxcclxcbl0rPyg/PSMjIyl8W15cXHJcXG5dKykvO1xuXG4gIHN0YXRpYyBtYXRjaChjb250ZW50KSB7IHJldHVybiBNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbi5tYXRjaChQeXRob25TdHlsZU1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChjb250ZW50KSB7IHJldHVybiBNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbi5mcm9tQ29udGVudChQeXRob25TdHlsZU1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuLCBjb250ZW50KTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5pbXBvcnQgZW50cmllcyBmcm9tIFwiLi9lbnRyaWVzXCI7XHJcbmltcG9ydCBDb21tb25MZXhlciBmcm9tIFwiLi4vY29tbW9uL2xleGVyXCI7XHJcbmltcG9ydCBXaGl0ZXNwYWNlVG9rZW4gZnJvbSBcIi4uL3Rva2VuL25vblNpZ25pZmljYW50L3doaXRlc3BhY2VcIjtcclxuaW1wb3J0IFJlZ3VsYXJFeHByZXNzaW9uVG9rZW4gZnJvbSBcIi4uL3Rva2VuL3NpZ25pZmljYW50L3JlZ3VsYXJFeHByZXNzaW9uXCI7XHJcbmltcG9ydCBFbmRPZkxpbmVOb25TaWduaWZpY2FudFRva2VuIGZyb20gXCIuLi90b2tlbi9ub25TaWduaWZpY2FudC9lbmRPZkxpbmVcIjtcclxuaW1wb3J0IFNpbmdseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiBmcm9tIFwiLi4vdG9rZW4vc2lnbmlmaWNhbnQvc3RyaW5nTGl0ZXJhbC9zaW5nbHlRdW90ZWRcIjtcclxuaW1wb3J0IERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiBmcm9tIFwiLi4vdG9rZW4vc2lnbmlmaWNhbnQvc3RyaW5nTGl0ZXJhbC9kb3VibHlRdW90ZWRcIjtcclxuaW1wb3J0IFB5dGhvblN0eWxlU2luZ2xlTGluZUNvbW1lbnRUb2tlbiBmcm9tIFwiLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9zaW5nbGVMaW5lL3B5dGhvblN0eWxlXCI7XHJcbmltcG9ydCBFbmRPZkxpbmVDb21tZW50Tm9uU2lnbmlmaWNhbnRUb2tlbiBmcm9tIFwiLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9lbmRPZkxpbmVcIjtcclxuaW1wb3J0IFB5dGhvblN0eWxlRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gZnJvbSBcIi4uL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL2VuZE9mL3B5dGhvblN0eWxlXCI7XHJcbmltcG9ydCBQeXRob25TdHlsZVN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gZnJvbSBcIi4uL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL3N0YXJ0T2YvcHl0aG9uU3R5bGVcIjtcclxuaW1wb3J0IFB5dGhvblN0eWxlTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gZnJvbSBcIi4uL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL21pZGRsZU9mL3B5dGhvblN0eWxlXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCYXNpY0xleGVyIGV4dGVuZHMgQ29tbW9uTGV4ZXIge1xyXG4gIHN0YXRpYyBlbnRyaWVzID0gZW50cmllcztcclxuXHJcbiAgc3RhdGljIEVuZE9mTGluZVRva2VuID0gRW5kT2ZMaW5lTm9uU2lnbmlmaWNhbnRUb2tlbjsgLy8vXHJcblxyXG4gIHN0YXRpYyBXaGl0ZXNwYWNlVG9rZW4gPSBXaGl0ZXNwYWNlVG9rZW47XHJcblxyXG4gIHN0YXRpYyBFbmRPZkxpbmVDb21tZW50VG9rZW4gPSBFbmRPZkxpbmVDb21tZW50Tm9uU2lnbmlmaWNhbnRUb2tlbjsgLy8vXHJcblxyXG4gIHN0YXRpYyBSZWd1bGFyRXhwcmVzc2lvblRva2VuID0gUmVndWxhckV4cHJlc3Npb25Ub2tlbjtcclxuXHJcbiAgc3RhdGljIFNpbmdsZUxpbmVDb21tZW50VG9rZW4gPSBQeXRob25TdHlsZVNpbmdsZUxpbmVDb21tZW50VG9rZW47IC8vL1xyXG5cclxuICBzdGF0aWMgRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBQeXRob25TdHlsZUVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuOyAvLy9cclxuXHJcbiAgc3RhdGljIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBQeXRob25TdHlsZVN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW47IC8vL1xyXG5cclxuICBzdGF0aWMgTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBQeXRob25TdHlsZU1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuOyAvLy9cclxuXHJcbiAgc3RhdGljIFNpbmdseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiA9IFNpbmdseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbjtcclxuXHJcbiAgc3RhdGljIERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiA9IERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbjtcclxuXHJcbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkgeyByZXR1cm4gQ29tbW9uTGV4ZXIuZnJvbU5vdGhpbmcoQmFzaWNMZXhlcik7IH1cclxuXHJcbiAgc3RhdGljIGZyb21SdWxlcyhydWxlcykgeyByZXR1cm4gQ29tbW9uTGV4ZXIuZnJvbVJ1bGVzKEJhc2ljTGV4ZXIsIHJ1bGVzKTsgfVxyXG5cclxuICBzdGF0aWMgZnJvbUVudHJpZXMoZW50cmllcykgeyByZXR1cm4gQ29tbW9uTGV4ZXIuZnJvbUVudHJpZXMoQmFzaWNMZXhlciwgZW50cmllcyk7IH1cclxufVxyXG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFNpZ25pZmljYW50VG9rZW4gZnJvbSBcIi4uLy4uL3Rva2VuL3NpZ25pZmljYW50XCI7XG5cbmltcG9ydCB7IGVuZE9mTGluZVR5cGUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW5kT2ZMaW5lU2lnbmlmaWNhbnRUb2tlbiBleHRlbmRzIFNpZ25pZmljYW50VG9rZW4ge1xuICBjbG9uZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikgeyByZXR1cm4gc3VwZXIuY2xvbmUoRW5kT2ZMaW5lU2lnbmlmaWNhbnRUb2tlbiwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOyB9XG5cbiAgYXNIVE1MKCkge1xuICAgIGNvbnN0IGh0bWwgPSB0aGlzLmlubmVySFRNTDsgIC8vL1xuXG4gICAgcmV0dXJuIGh0bWw7XG4gIH1cblxuICBzdGF0aWMgdHlwZSA9IGVuZE9mTGluZVR5cGU7XG5cbiAgc3RhdGljIHJlZ3VsYXJFeHByZXNzaW9uID0gL14oPzpcXHJcXG58XFxyfFxcbikvO1xuXG4gIHN0YXRpYyBtYXRjaChjb250ZW50KSB7IHJldHVybiBTaWduaWZpY2FudFRva2VuLm1hdGNoKEVuZE9mTGluZVNpZ25pZmljYW50VG9rZW4sIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIFNpZ25pZmljYW50VG9rZW4uZnJvbUNvbnRlbnQoRW5kT2ZMaW5lU2lnbmlmaWNhbnRUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgU2lnbmlmaWNhbnRUb2tlbiBmcm9tIFwiLi4vLi4vLi4vdG9rZW4vc2lnbmlmaWNhbnRcIjtcblxuaW1wb3J0IHsgZW5kT2ZMaW5lQ29tbWVudFR5cGUgfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW5kT2ZMaW5lQ29tbWVudFNpZ25pZmljYW50VG9rZW4gZXh0ZW5kcyBTaWduaWZpY2FudFRva2VuIHtcbiAgY2xvbmUoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pIHsgcmV0dXJuIHN1cGVyLmNsb25lKEVuZE9mTGluZUNvbW1lbnRTaWduaWZpY2FudFRva2VuLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7IH1cblxuICBhc0hUTUwoKSB7XG4gICAgY29uc3QgaHRtbCA9IHRoaXMuaW5uZXJIVE1MOyAgLy8vXG5cbiAgICByZXR1cm4gaHRtbDtcbiAgfVxuXG4gIGlzSW5Db21tZW50UHJlc2VydmluZygpIHtcbiAgICBjb25zdCBpbkNvbW1lbnRQcmVzZXJ2aW5nID0gdHJ1ZTtcblxuICAgIHJldHVybiBpbkNvbW1lbnRQcmVzZXJ2aW5nO1xuICB9XG5cbiAgc3RhdGljIHR5cGUgPSBlbmRPZkxpbmVDb21tZW50VHlwZTtcblxuICBzdGF0aWMgcmVndWxhckV4cHJlc3Npb24gPSAvXig/OlxcclxcbnxcXHJ8XFxuKS87XG5cbiAgc3RhdGljIG1hdGNoKGNvbnRlbnQpIHsgcmV0dXJuIFNpZ25pZmljYW50VG9rZW4ubWF0Y2goRW5kT2ZMaW5lQ29tbWVudFNpZ25pZmljYW50VG9rZW4sIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIFNpZ25pZmljYW50VG9rZW4uZnJvbUNvbnRlbnQoRW5kT2ZMaW5lQ29tbWVudFNpZ25pZmljYW50VG9rZW4sIGNvbnRlbnQpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFNpbmdsZUxpbmVDb21tZW50VG9rZW4gZnJvbSBcIi4uLy4uLy4uLy4uL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvc2luZ2xlTGluZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDU3R5bGVTaW5nbGVMaW5lQ29tbWVudFRva2VuIGV4dGVuZHMgU2luZ2xlTGluZUNvbW1lbnRUb2tlbiB7XG4gIGNsb25lKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSB7IHJldHVybiBzdXBlci5jbG9uZShDU3R5bGVTaW5nbGVMaW5lQ29tbWVudFRva2VuLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7IH1cblxuICBzdGF0aWMgcmVndWxhckV4cHJlc3Npb24gPSAvXlxcL1xcL1teXFxyXFxuXSovO1xuXG4gIHN0YXRpYyBtYXRjaChjb250ZW50KSB7IHJldHVybiBTaW5nbGVMaW5lQ29tbWVudFRva2VuLm1hdGNoKENTdHlsZVNpbmdsZUxpbmVDb21tZW50VG9rZW4sIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIFNpbmdsZUxpbmVDb21tZW50VG9rZW4uZnJvbUNvbnRlbnQoQ1N0eWxlU2luZ2xlTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL2VuZE9mXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENTdHlsZUVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIGV4dGVuZHMgRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4ge1xuICBjbG9uZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikgeyByZXR1cm4gc3VwZXIuY2xvbmUoQ1N0eWxlRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsgfVxuXG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eXFwqXFwvLztcblxuICBzdGF0aWMgbWF0Y2goY29udGVudCkgeyByZXR1cm4gRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4ubWF0Y2goQ1N0eWxlRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLmZyb21Db250ZW50KENTdHlsZUVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLCBjb250ZW50KTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIGZyb20gXCIuLi8uLi8uLi8uLi8uLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9zdGFydE9mXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENTdHlsZVN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gZXh0ZW5kcyBTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIHtcbiAgY2xvbmUoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pIHsgcmV0dXJuIHN1cGVyLmNsb25lKENTdHlsZVN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsgfVxuXG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eXFwvXFwqLztcblxuICBzdGF0aWMgbWF0Y2goY29udGVudCkgeyByZXR1cm4gU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbi5tYXRjaChDU3R5bGVTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChjb250ZW50KSB7IHJldHVybiBTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLmZyb21Db250ZW50KENTdHlsZVN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sIGNvbnRlbnQpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuIGZyb20gXCIuLi8uLi8uLi8uLi8uLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9taWRkbGVPZlwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDU3R5bGVNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiBleHRlbmRzIE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuIHtcbiAgY2xvbmUoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pIHsgcmV0dXJuIHN1cGVyLmNsb25lKENTdHlsZU1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7IH1cblxuICBzdGF0aWMgcmVndWxhckV4cHJlc3Npb24gPSAvXig/OlteXFxyXFxuXSs/KD89XFwqXFwvKXxbXlxcclxcbl0rKS87XG5cbiAgc3RhdGljIG1hdGNoKGNvbnRlbnQpIHsgcmV0dXJuIE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuLm1hdGNoKENTdHlsZU1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChjb250ZW50KSB7IHJldHVybiBNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbi5mcm9tQ29udGVudChDU3R5bGVNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIFJ1bGUgfSBmcm9tIFwiLi9ydWxlXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHR5cGVzIH0gZnJvbSBcIi4vdHlwZXNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwiLi9zcGVjaWFsU3ltYm9sc1wiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIEJORkxleGVyIH0gZnJvbSBcIi4vYm5mL2xleGVyXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEJhc2ljTGV4ZXIgfSBmcm9tIFwiLi9iYXNpYy9sZXhlclwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDb21tb25MZXhlciB9IGZyb20gXCIuL2NvbW1vbi9sZXhlclwiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIFNpZ25pZmljYW50VG9rZW4gfSBmcm9tIFwiLi90b2tlbi9zaWduaWZpY2FudFwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBOb25TaWduaWZpY2FudFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vbm9uU2lnbmlmaWNhbnRcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRW5kT2ZMaW5lU2lnbmlmaWNhbnRUb2tlbiB9IGZyb20gXCIuL3Rva2VuL3NpZ25pZmljYW50L2VuZE9mTGluZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBFbmRPZkxpbmVOb25TaWduaWZpY2FudFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvZW5kT2ZMaW5lXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEVuZE9mTGluZUNvbW1lbnRTaWduaWZpY2FudFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vc2lnbmlmaWNhbnQvY29tbWVudC9lbmRPZkxpbmVcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRW5kT2ZMaW5lQ29tbWVudE5vblNpZ25pZmljYW50VG9rZW4gfSBmcm9tIFwiLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L2VuZE9mTGluZVwiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIFdoaXRlc3BhY2VUb2tlbiB9IGZyb20gXCIuL3Rva2VuL25vblNpZ25pZmljYW50L3doaXRlc3BhY2VcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBTdHJpbmdMaXRlcmFsVG9rZW4gfSBmcm9tIFwiLi90b2tlbi9zaWduaWZpY2FudC9zdHJpbmdMaXRlcmFsXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFJlZ3VsYXJFeHByZXNzaW9uVG9rZW4gfSBmcm9tIFwiLi90b2tlbi9zaWduaWZpY2FudC9yZWd1bGFyRXhwcmVzc2lvblwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBTaW5nbHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gfSBmcm9tIFwiLi90b2tlbi9zaWduaWZpY2FudC9zdHJpbmdMaXRlcmFsL3NpbmdseVF1b3RlZFwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gfSBmcm9tIFwiLi90b2tlbi9zaWduaWZpY2FudC9zdHJpbmdMaXRlcmFsL2RvdWJseVF1b3RlZFwiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIFNpbmdsZUxpbmVDb21tZW50VG9rZW4gfSBmcm9tIFwiLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L3NpbmdsZUxpbmVcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gfSBmcm9tIFwiLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9lbmRPZlwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvc3RhcnRPZlwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiB9IGZyb20gXCIuL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL21pZGRsZU9mXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENTdHlsZVNpbmdsZUxpbmVDb21tZW50VG9rZW4gfSBmcm9tIFwiLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L3NpbmdsZUxpbmUvY1N0eWxlXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENTdHlsZUVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvZW5kT2YvY1N0eWxlXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENTdHlsZVN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gfSBmcm9tIFwiLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9zdGFydE9mL2NTdHlsZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDU3R5bGVNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiB9IGZyb20gXCIuL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL21pZGRsZU9mL2NTdHlsZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBQeXRob25TdHlsZVNpbmdsZUxpbmVDb21tZW50VG9rZW4gfSBmcm9tIFwiLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L3NpbmdsZUxpbmUvcHl0aG9uU3R5bGVcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUHl0aG9uU3R5bGVFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiB9IGZyb20gXCIuL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL2VuZE9mL3B5dGhvblN0eWxlXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFB5dGhvblN0eWxlU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiB9IGZyb20gXCIuL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL3N0YXJ0T2YvcHl0aG9uU3R5bGVcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUHl0aG9uU3R5bGVNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiB9IGZyb20gXCIuL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL21pZGRsZU9mL3B5dGhvblN0eWxlXCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5jb25zdCBlbnRyaWVzID0gW1xyXG5cclxuICB7IFwiY29sb3VyXCI6IFwiXiMoPzpbMC05YS1mQS1GXXs2fXxbMC05YS1mQS1GXXszfSlcIiB9LFxyXG5cclxuICB7IFwia2V5d29yZFwiOiBcIl4oPzohaW1wb3J0YW50fEBtZWRpYSlcIiB9LFxyXG5cclxuICB7IFwicGVyY2VudGFnZVwiOiBcIl4oPzpbMC05XSt8WzAtOV0qXFxcXC5bMC05XSspXFxcXCVcIiB9LFxyXG5cclxuICB7IFwiZnJlcXVlbmN5XCI6IFwiXig/OlswLTldK3xbMC05XSpcXFxcLlswLTldKykoPzpoenxraHopXCIgfSxcclxuXHJcbiAgeyBcImZyYWN0aW9uXCI6IFwiXlsxLTldWzAtOV0qP2ZyXCIgfSxcclxuXHJcbiAgeyBcImxlbmd0aFwiOiBcIl4oPzpbMC05XSt8WzAtOV0qXFxcXC5bMC05XSspKD86cHh8Y218bW18aW58cHR8cGMpXCIgfSxcclxuXHJcbiAgeyBcImFuZ2xlXCI6IFwiXig/OlswLTldK3xbMC05XSpcXFxcLlswLTldKykoPzpkZWd8cmFkfGdyYWQpXCIgfSxcclxuXHJcbiAgeyBcInRpbWVcIjogXCJeKD86WzAtOV0rfFswLTldKlxcXFwuWzAtOV0rKSg/OnN8bXMpXCIgfSxcclxuXHJcbiAgeyBcInJlbXNcIjogXCJeKD86WzAtOV0rfFswLTldKlxcXFwuWzAtOV0rKXJlbVwiIH0sXHJcblxyXG4gIHsgXCJlbXNcIjogXCJeKD86WzAtOV0rfFswLTldKlxcXFwuWzAtOV0rKWVtXCIgfSxcclxuXHJcbiAgeyBcIm51bWJlclwiOiBcIl5bMC05XSt8WzAtOV0qXFxcXC5bMC05XStcIiB9LFxyXG5cclxuICB7IFwic3BlY2lhbFwiOiBcIl47fDo6fDp8XFxcXC58LHwvfFxcXFx8PXx+PXw9fD58XFxcXHt8XFxcXH18XFxcXCh8XFxcXCl8XFxcXFt8XFxcXF1cIiB9LFxyXG5cclxuICB7IFwib3BlcmF0b3JcIjogXCJeXig/OmFuZHxub3R8b25seSkkXCIgfSxcclxuXHJcbiAgeyBcImlkZW50aWZpZXJcIjogXCJeW19hLXpBLVowLTktXStcIiB9LFxyXG5cclxuICB7IFwidW5hcnktb3BlcmF0b3JcIjogXCJeXFxcXCt8XFxcXC1cIiB9LFxyXG5cclxuICB7IFwidW5hc3NpZ25lZFwiOiBcIl5bXlxcXFxzXStcIiB9XHJcblxyXG5dO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZW50cmllcztcclxuIiwgIlwidXNlIHN0cmljdFwiO1xyXG5cclxuaW1wb3J0IHsgQ29tbW9uTGV4ZXIsIFdoaXRlc3BhY2VUb2tlbiwgRW5kT2ZMaW5lTm9uU2lnbmlmaWNhbnRUb2tlbiwgRG91Ymx5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xyXG5cclxuaW1wb3J0IGVudHJpZXMgZnJvbSBcIi4vZW50cmllc1wiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ1NTTGV4ZXIgZXh0ZW5kcyBDb21tb25MZXhlciB7XHJcbiAgc3RhdGljIGVudHJpZXMgPSBlbnRyaWVzO1xyXG5cclxuICBzdGF0aWMgRW5kT2ZMaW5lVG9rZW4gPSBFbmRPZkxpbmVOb25TaWduaWZpY2FudFRva2VuOyAvLy9cclxuXHJcbiAgc3RhdGljIFdoaXRlc3BhY2VUb2tlbiA9IFdoaXRlc3BhY2VUb2tlbjtcclxuXHJcbiAgc3RhdGljIEVuZE9mTGluZUNvbW1lbnRUb2tlbiA9IG51bGw7IC8vL1xyXG5cclxuICBzdGF0aWMgUmVndWxhckV4cHJlc3Npb25Ub2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBTaW5nbGVMaW5lQ29tbWVudFRva2VuID0gbnVsbDsgLy8vXHJcblxyXG4gIHN0YXRpYyBFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiA9IG51bGw7IC8vL1xyXG5cclxuICBzdGF0aWMgU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiA9IG51bGw7IC8vL1xyXG5cclxuICBzdGF0aWMgTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBudWxsOyAvLy9cclxuXHJcbiAgc3RhdGljIFNpbmdseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gPSBEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW47XHJcblxyXG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHsgcmV0dXJuIENvbW1vbkxleGVyLmZyb21Ob3RoaW5nKENTU0xleGVyKTsgfVxyXG5cclxuICBzdGF0aWMgZnJvbVJ1bGVzKHJ1bGVzKSB7IHJldHVybiBDb21tb25MZXhlci5mcm9tUnVsZXMoQ1NTTGV4ZXIsIHJ1bGVzKTsgfVxyXG5cclxuICBzdGF0aWMgZnJvbUVudHJpZXMoZW50cmllcykgeyByZXR1cm4gQ29tbW9uTGV4ZXIuZnJvbUVudHJpZXMoQ1NTTGV4ZXIsIGVudHJpZXMpOyB9XHJcbn1cclxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBibmYgPSBgXG5cbiAgICAgIGRvY3VtZW50ICAgICAgICAgICAgICAgICA6Oj0gICggcnVsZSB8IGVycm9yICkrIDtcblxuICAgICAgcnVsZSAgICAgICAgICAgICAgICAgICAgIDo6PSAgbmFtZSBhbWJpZ3VvdXNNb2RpZmllcj8gXCI6Oj1cIiBkZWZpbml0aW9ucyBcIjtcIiA7XG5cbiAgICAgIG5hbWUgICAgICAgICAgICAgICAgICAgICA6Oj0gIFtuYW1lXSA7XG5cbiAgICAgIGRlZmluaXRpb25zICAgICAgICAgICAgICA6Oj0gIGRlZmluaXRpb24gKCBcInxcIiBkZWZpbml0aW9uICkqIDtcblxuICAgICAgZGVmaW5pdGlvbiAgICAgICAgICAgICAgIDo6PSAgcGFydCsgO1xuIFxuICAgICAgcGFydCAgICAgICAgICAgICAgICAgICAgIDo6PSAgbm9uVGVybWluYWxQYXJ0IHF1YW50aWZpZXIqXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIHRlcm1pbmFsUGFydCBxdWFudGlmaWVyKlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBub1doaXRlc3BhY2VQYXJ0XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDtcblxuICAgICAgbm9uVGVybWluYWxQYXJ0ICAgICAgICAgIDo6PSAgY2hvaWNlT2ZQYXJ0c1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBzZXF1ZW5jZU9mUGFydHNcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgcnVsZU5hbWUgbG9va0FoZWFkTW9kaWZpZXI/XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDtcblxuICAgICAgdGVybWluYWxQYXJ0ICAgICAgICAgICAgIDo6PSAgc2lnbmlmaWNhbnRUb2tlblR5cGVcbiAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICByZWd1bGFyRXhwcmVzc2lvblxuIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgdGVybWluYWxTeW1ib2xcbiAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBlbmRPZkxpbmVcbiAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICB3aWxkY2FyZFxuICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgbm9XaGl0ZXNwYWNlUGFydCAgICAgICAgIDo6PSAgXCI8Tk9fV0hJVEVTUEFDRT5cIiA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cbiAgICAgIGNob2ljZU9mUGFydHMgICAgICAgICAgICA6Oj0gIFwiKFwiIHBhcnQgKCBcInxcIiBwYXJ0ICkrIFwiKVwiIDtcblxuICAgICAgc2VxdWVuY2VPZlBhcnRzICAgICAgICAgIDo6PSAgXCIoXCIgcGFydCBwYXJ0KyBcIilcIiA7XG5cbiAgICAgIHJ1bGVOYW1lICAgICAgICAgICAgICAgICA6Oj0gIFtuYW1lXSA7XG5cbiAgICAgIHNpZ25pZmljYW50VG9rZW5UeXBlICAgICA6Oj0gIFt0eXBlXSA7XG5cbiAgICAgIHJlZ3VsYXJFeHByZXNzaW9uICAgICAgICA6Oj0gIFtyZWd1bGFyLWV4cHJlc3Npb25dIDtcblxuICAgICAgdGVybWluYWxTeW1ib2wgICAgICAgICAgIDo6PSAgW3N0cmluZy1saXRlcmFsXSA7XG5cbiAgICAgIGVuZE9mTGluZSAgICAgICAgICAgICAgICA6Oj0gIFwiPEVORF9PRl9MSU5FPlwiIDtcblxuICAgICAgd2lsZGNhcmQgICAgICAgICAgICAgICAgIDo6PSAgXCIuXCIgO1xuXG4gICAgICBxdWFudGlmaWVyICAgICAgICAgICAgICAgOjo9ICBvcHRpb25hbFF1YW50aWZpZXJcbiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIG9uZU9yTW9yZVF1YW50aWZpZXJcbiAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICB6ZXJvT3JNb3JlUXVhbnRpZmllclxuICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDtcblxuICAgICAgYW1iaWd1b3VzTW9kaWZpZXIgICAgICAgIDo6PSAgPE5PX1dISVRFU1BBQ0U+XCIhXCIgO1xuXG4gICAgICBsb29rQWhlYWRNb2RpZmllciAgICAgICAgOjo9ICA8Tk9fV0hJVEVTUEFDRT5cIi4uLlwiIDtcblxuICAgICAgb3B0aW9uYWxRdWFudGlmaWVyICAgICAgIDo6PSAgPE5PX1dISVRFU1BBQ0U+XCI/XCIgO1xuXG4gICAgICBvbmVPck1vcmVRdWFudGlmaWVyICAgICAgOjo9ICA8Tk9fV0hJVEVTUEFDRT5cIitcIiA7XG5cbiAgICAgIHplcm9Pck1vcmVRdWFudGlmaWVyICAgICA6Oj0gIDxOT19XSElURVNQQUNFPlwiKlwiIDtcblxuICAgICAgZXJyb3IgICAgICAgICAgICAgICAgICAgIDo6PSAgLiA7XG5cbmA7XG5cbmV4cG9ydCBkZWZhdWx0IGJuZjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IEVNUFRZX1NUUklORyA9IFwiXCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGNoYXJhY3RlcnMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcblxuY29uc3QgeyBTUEFDRV9DSEFSQUNURVIgfSA9IGNoYXJhY3RlcnM7XG5cbmV4cG9ydCBmdW5jdGlvbiBwYWRkaW5nRnJvbVBhZGRpbmdMZW5ndGgocGFkZGluZ0xlbmd0aCkge1xuICBsZXQgcGFkZGluZyA9IEVNUFRZX1NUUklORztcblxuICBmb3IgKGxldCBwb3NpdGlvbiA9IDA7IHBvc2l0aW9uIDwgcGFkZGluZ0xlbmd0aDsgcG9zaXRpb24rKykge1xuICAgIHBhZGRpbmcgKz0gU1BBQ0VfQ0hBUkFDVEVSO1xuICB9XG5cbiAgcmV0dXJuIHBhZGRpbmc7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IHBhZGRpbmdGcm9tUGFkZGluZ0xlbmd0aCB9IGZyb20gXCIuL3V0aWxpdGllcy9zdHJpbmdcIjtcblxuY29uc3QgeyBleGNsYW1hdGlvbk1hcmsgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSdWxlIHtcbiAgY29uc3RydWN0b3IobmFtZSwgYW1iaWd1b3VzLCBkZWZpbml0aW9ucywgTm9uVGVybWluYWxOb2RlKSB7XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICB0aGlzLmFtYmlndW91cyA9IGFtYmlndW91cztcbiAgICB0aGlzLmRlZmluaXRpb25zID0gZGVmaW5pdGlvbnM7XG4gICAgdGhpcy5Ob25UZXJtaW5hbE5vZGUgPSBOb25UZXJtaW5hbE5vZGU7XG4gIH1cblxuICBnZXROYW1lKCkge1xuICAgIHJldHVybiB0aGlzLm5hbWU7XG4gIH1cblxuICBpc0FtYmlndW91cygpIHtcbiAgICByZXR1cm4gdGhpcy5hbWJpZ3VvdXM7XG4gIH1cblxuICBnZXREZWZpbml0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5kZWZpbml0aW9ucztcbiAgfVxuXG4gIGdldE5vblRlcm1pbmFsTm9kZSgpIHtcbiAgICByZXR1cm4gdGhpcy5Ob25UZXJtaW5hbE5vZGU7XG4gIH1cblxuICBzZXROYW1lKG5hbWUpIHtcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICB9XG5cbiAgc2V0QW1iaWd1b3VzKGFtYmlndW91cykge1xuICAgIHRoaXMuYW1iaWd1b3VzID0gYW1iaWd1b3VzO1xuICB9XG5cbiAgc2V0RGVmaW5pdGlvbnMoZGVmaW5pdGlvbnMpIHtcbiAgICB0aGlzLmRlZmluaXRpb25zID0gZGVmaW5pdGlvbnM7XG4gIH1cblxuICBzZXROb25UZXJtaW5hbE5vZGUoTm9uVGVybWluYWxOb2RlKSB7XG4gICAgdGhpcy5Ob25UZXJtaW5hbE5vZGUgPSBOb25UZXJtaW5hbE5vZGU7XG4gIH1cblxuICBhZGREZWZpbml0aW9uKGRlZmluaXRpb24sIHBvc2l0aW9uKSB7XG4gICAgY29uc3QgZGVmaW5pdGlvbnNJbmNsdWRlc0RlZmluaXRpb24gPSB0aGlzLmRlZmluaXRpb25zLmluY2x1ZGVzKGRlZmluaXRpb24pO1xuXG4gICAgaWYgKCFkZWZpbml0aW9uc0luY2x1ZGVzRGVmaW5pdGlvbikge1xuICAgICAgaWYgKHBvc2l0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgZGVmaW5pdGlvbnNMZW5ndGggPSB0aGlzLmRlZmluaXRpb25zLmxlbmd0aDtcblxuICAgICAgICBwb3NpdGlvbiA9IGRlZmluaXRpb25zTGVuZ3RoOyAvLy9cbiAgICAgIH1cblxuICAgICAgY29uc3Qgc3RhcnQgPSBwb3NpdGlvbiwgLy8vXG4gICAgICAgICAgICBkZWxldGVDb3VudCA9IDA7XG5cbiAgICAgIHRoaXMuZGVmaW5pdGlvbnMuc3BsaWNlKHN0YXJ0LCBkZWxldGVDb3VudCwgZGVmaW5pdGlvbik7XG4gICAgfVxuICB9XG5cbiAgcmVtb3ZlRGVmaW5pdGlvbihkZWZpbml0aW9uKSB7XG4gICAgY29uc3QgZGVmaW5pdGlvbnNJbmNsdWRlc0RlZmluaXRpb24gPSB0aGlzLmRlZmluaXRpb25zLmluY2x1ZGVzKGRlZmluaXRpb24pO1xuXG4gICAgaWYgKGRlZmluaXRpb25zSW5jbHVkZXNEZWZpbml0aW9uKSB7XG4gICAgICBjb25zdCBkZWZpbml0aW9uSW5kZXggPSB0aGlzLmRlZmluaXRpb25zLmluZGV4T2YoZGVmaW5pdGlvbiksXG4gICAgICAgICAgICBzdGFydCA9IGRlZmluaXRpb25JbmRleCwgIC8vL1xuICAgICAgICAgICAgZGVsZXRlQ291bnQgPSAxO1xuXG4gICAgICB0aGlzLmRlZmluaXRpb25zLnNwbGljZShzdGFydCwgZGVsZXRlQ291bnQpO1xuICAgIH1cbiAgfVxuXG4gIHJlcGxhY2VEZWZpbml0aW9uKHJlcGxhY2VEZWZpbml0aW9uLCByZXBsYWNlbWVudERlZmluaXRpb24pIHtcbiAgICBjb25zdCByZXBsYWNlRGVmaW5pdGlvbkluZGV4ID0gdGhpcy5kZWZpbml0aW9ucy5pbmRleE9mKHJlcGxhY2VEZWZpbml0aW9uKTtcblxuICAgIGlmIChyZXBsYWNlRGVmaW5pdGlvbkluZGV4ID4gLTEpIHtcbiAgICAgIGNvbnN0IHN0YXJ0ID0gcmVwbGFjZURlZmluaXRpb25JbmRleCwgLy8vXG4gICAgICAgICAgICBkZWxldGVDb3VudCA9IDE7XG5cbiAgICAgIHRoaXMuZGVmaW5pdGlvbnMuc3BsaWNlKHN0YXJ0LCBkZWxldGVDb3VudCwgcmVwbGFjZW1lbnREZWZpbml0aW9uKVxuICAgIH1cbiAgfVxuXG4gIHBhcnNlKHN0YXRlLCBjYWxsYmFjaykge1xuICAgIGxldCBydWxlTm9kZSA9IG51bGw7XG5cbiAgICBzdGF0ZS5pbmNyZWFzZURlcHRoKCk7XG5cbiAgICBjb25zdCB0b29EZWVwID0gc3RhdGUuaXNUb29EZWVwKCk7XG5cbiAgICBpZiAodG9vRGVlcCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgcGFyc2UgdHJlZSBpcyB0b28gZGVlcCBhdCBydWxlIFwiJHt0aGlzLm5hbWV9XCIuYCk7XG4gICAgfVxuXG4gICAgbGV0IHBhcnNlZCxcbiAgICAgICAgZGVmaW5pdGlvbk5vZGVzO1xuXG4gICAgdGhpcy5kZWZpbml0aW9ucy5zb21lKChkZWZpbml0aW9uKSA9PiB7XG4gICAgICBkZWZpbml0aW9uTm9kZXMgPSBbXTtcblxuICAgICAgcGFyc2VkID0gdGhpcy5wYXJzZURlZmluaXRpb24oZGVmaW5pdGlvbiwgZGVmaW5pdGlvbk5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spO1xuXG4gICAgICBpZiAocGFyc2VkKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKHBhcnNlZCkge1xuICAgICAgY29uc3QgcnVsZU5hbWUgPSB0aGlzLm5hbWUsIC8vL1xuICAgICAgICAgICAgY2hpbGROb2RlcyA9IGRlZmluaXRpb25Ob2RlcywgIC8vL1xuICAgICAgICAgICAgbm9uVGVybWluYWxOb2RlID0gdGhpcy5Ob25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2Rlcyk7XG5cbiAgICAgIHJ1bGVOb2RlID0gbm9uVGVybWluYWxOb2RlOyAvLy9cbiAgICB9XG5cbiAgICBzdGF0ZS5kZWNyZWFzZURlcHRoKCk7XG5cbiAgICByZXR1cm4gcnVsZU5vZGU7XG4gIH1cblxuICBwYXJzZURlZmluaXRpb24oZGVmaW5pdGlvbiwgbm9kZXMsIHN0YXRlLCBjYWxsYmFjaykge1xuICAgIGxldCBwYXJzZWQ7XG5cbiAgICBjb25zdCBzYXZlZEluZGV4ID0gc3RhdGUuZ2V0U2F2ZWRJbmRleCgpO1xuXG4gICAgcGFyc2VkID0gZGVmaW5pdGlvbi5wYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrKTtcblxuICAgIGlmICghcGFyc2VkKSB7XG4gICAgICBzdGF0ZS5iYWNrdHJhY2soc2F2ZWRJbmRleCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfVxuXG4gIGFzU3RyaW5nKG1heGltdW1SdWxlTmFtZUxlbmd0aCwgbXVsdGlMaW5lID0gdHJ1ZSkge1xuICAgIGNvbnN0IGRlZmluaXRpb25zTGVuZ3RoID0gdGhpcy5kZWZpbml0aW9ucy5sZW5ndGg7XG5cbiAgICBtdWx0aUxpbmUgPSBtdWx0aUxpbmUgJiYgKGRlZmluaXRpb25zTGVuZ3RoID4gMSk7ICAvLy9cblxuICAgIGNvbnN0IG1heGltdW1QYWRkaW5nID0gcGFkZGluZ0Zyb21QYWRkaW5nTGVuZ3RoKG1heGltdW1SdWxlTmFtZUxlbmd0aCksXG4gICAgICAgICAgZGVmaW5pdGlvbnNTdHJpbmcgPSB0aGlzLmRlZmluaXRpb25zLnJlZHVjZSgoZGVmaW5pdGlvbnNTdHJpbmcsIGRlZmluaXRpb24pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRlZmluaXRpb25TdHJpbmcgPSBkZWZpbml0aW9uLmFzU3RyaW5nKCk7XG5cbiAgICAgICAgICAgIGlmIChkZWZpbml0aW9uc1N0cmluZyA9PT0gRU1QVFlfU1RSSU5HKSB7XG4gICAgICAgICAgICAgIGRlZmluaXRpb25zU3RyaW5nID0gZGVmaW5pdGlvblN0cmluZzsgLy8vXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBkZWZpbml0aW9uc1N0cmluZyA9IG11bHRpTGluZSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAke2RlZmluaXRpb25zU3RyaW5nfVxuXG4ke21heGltdW1QYWRkaW5nfSAgIHwgJHtkZWZpbml0aW9uU3RyaW5nfWAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAke2RlZmluaXRpb25zU3RyaW5nfSB8ICR7ZGVmaW5pdGlvblN0cmluZ31gO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gZGVmaW5pdGlvbnNTdHJpbmc7XG4gICAgICAgICAgfSwgRU1QVFlfU1RSSU5HKSxcbiAgICAgICAgICBydWxlTmFtZSA9IHRoaXMubmFtZSwgLy8vXG4gICAgICAgICAgcnVsZU5hbWVMZW5ndGggPSBydWxlTmFtZS5sZW5ndGgsXG4gICAgICAgICAgYW1iaWd1b3VzU3RyaW5nID0gdGhpcy5hbWJpZ3VvdXMgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjbGFtYXRpb25NYXJrIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRU1QVFlfU1RSSU5HLFxuICAgICAgICAgIGFtYmlndW91c1N0cmluZ0xlbmd0aCA9IGFtYmlndW91c1N0cmluZy5sZW5ndGgsXG4gICAgICAgICAgcGFkZGluZ0xlbmd0aCA9IG1heGltdW1SdWxlTmFtZUxlbmd0aCAtIHJ1bGVOYW1lTGVuZ3RoIC0gYW1iaWd1b3VzU3RyaW5nTGVuZ3RoLFxuICAgICAgICAgIHBhZGRpbmcgPSBwYWRkaW5nRnJvbVBhZGRpbmdMZW5ndGgocGFkZGluZ0xlbmd0aCk7XG5cbiAgICBjb25zdCBzZW1pY29sb25TdHJpbmcgPSBtdWx0aUxpbmUgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgXG5cbiR7bWF4aW11bVBhZGRpbmd9ICAgO2AgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiIDtcIixcbiAgICAgICAgICBzdHJpbmcgPSBgXG5cbiR7dGhpcy5uYW1lfSR7YW1iaWd1b3VzU3RyaW5nfSR7cGFkZGluZ30gOjo9ICR7ZGVmaW5pdGlvbnNTdHJpbmd9JHtzZW1pY29sb25TdHJpbmd9YDtcblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGUoQ2xhc3MsIHJ1bGUpIHtcbiAgICBpZiAocnVsZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBydWxlID0gQ2xhc3M7XG4gICAgICBDbGFzcyA9IFJ1bGU7XG4gICAgfVxuICAgIFxuICAgIGNvbnN0IG5hbWUgPSBydWxlLmdldE5hbWUoKSxcbiAgICAgICAgICBhbWJpZ3VvdXMgPSBydWxlLmlzQW1iaWd1b3VzKCksXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBydWxlLmdldERlZmluaXRpb25zKCksXG4gICAgICAgICAgTm9uVGVybWluYWxOb2RlID0gcnVsZS5nZXROb25UZXJtaW5hbE5vZGUoKTtcblxuICAgIHJ1bGUgPSBuZXcgQ2xhc3MobmFtZSwgYW1iaWd1b3VzLCBkZWZpbml0aW9ucywgTm9uVGVybWluYWxOb2RlKTtcblxuICAgIHJldHVybiBydWxlO1xuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfTUFYSU1VTV9ERVBUSCA9IDk5O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBERUZBVUxUX01BWElNVU1fREVQVEggfSBmcm9tIFwiLi9kZWZhdWx0c1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdGF0ZSB7XG4gIGNvbnN0cnVjdG9yKHJ1bGVNYXAsIHRva2VucywgaW5kZXgsIGRlcHRoLCBtYXhpbXVtRGVwdGgpIHtcbiAgICB0aGlzLnJ1bGVNYXAgPSBydWxlTWFwO1xuICAgIHRoaXMudG9rZW5zID0gdG9rZW5zO1xuXHRcdHRoaXMuaW5kZXggPSBpbmRleDtcblx0XHR0aGlzLmRlcHRoID0gZGVwdGg7XG4gICAgdGhpcy5tYXhpbXVtRGVwdGggPSBtYXhpbXVtRGVwdGg7XG4gIH1cblxuICBnZXRSdWxlTWFwKCkge1xuICAgIHJldHVybiB0aGlzLnJ1bGVNYXA7XG4gIH1cblxuICBnZXRUb2tlbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMudG9rZW5zO1xuICB9XG5cblx0Z2V0SW5kZXgoKSB7XG5cdFx0cmV0dXJuIHRoaXMuaW5kZXg7XG5cdH1cblxuICBnZXREZXB0aCgpIHtcbiAgICByZXR1cm4gdGhpcy5kZXB0aDtcbiAgfVxuXG5cdGdldE1heGltdW1EZXB0aCgpIHtcblx0XHRyZXR1cm4gdGhpcy5tYXhpbXVtRGVwdGg7XG5cdH1cblxuXHRnZXRTYXZlZEluZGV4KCkge1xuICAgIGNvbnN0IHNhdmVkSW5kZXggPSB0aGlzLmluZGV4OyAvLy9cbiAgXG4gICAgcmV0dXJuIHNhdmVkSW5kZXg7XG4gIH1cblxuICBnZXROZXh0VG9rZW4oKSB7XG4gICAgbGV0IG5leHRUb2tlbiA9IG51bGw7XG5cbiAgICBjb25zdCB0b2tlbnNMZW5ndGggPSB0aGlzLnRva2Vucy5sZW5ndGg7XG5cbiAgICBpZiAodGhpcy5pbmRleCA8IHRva2Vuc0xlbmd0aCkge1xuICAgICAgbmV4dFRva2VuID0gdGhpcy50b2tlbnNbdGhpcy5pbmRleCsrXTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV4dFRva2VuO1xuICB9XG5cbiAgZ2V0TmV4dFNpZ25pZmljYW50VG9rZW4oKSB7XG5cdFx0bGV0IG5leHRTaWduaWZpY2FudFRva2VuID0gbnVsbDtcblxuICBcdGNvbnN0IHRva2Vuc0xlbmd0aCA9IHRoaXMudG9rZW5zLmxlbmd0aDtcblxuICBcdHdoaWxlICh0aGlzLmluZGV4IDwgdG9rZW5zTGVuZ3RoKSB7XG4gIFx0XHRjb25zdCB0b2tlbiA9IHRoaXMudG9rZW5zW3RoaXMuaW5kZXgrK10sXG5cdFx0XHRcdFx0XHR0b2tlblNpZ25pZmljYW50ID0gdG9rZW4uaXNTaWduaWZpY2FudCgpO1xuXG4gIFx0XHRpZiAodG9rZW5TaWduaWZpY2FudCkge1xuICBcdFx0ICBjb25zdCBzaWduaWZpY2FudFRva2VuID0gdG9rZW47IC8vL1xuXG5cdFx0XHRcdG5leHRTaWduaWZpY2FudFRva2VuID0gc2lnbmlmaWNhbnRUb2tlbjtcdC8vL1xuXG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuICBcdH1cblxuXHRcdHJldHVybiBuZXh0U2lnbmlmaWNhbnRUb2tlbjtcbiAgfVxuXG4gIGlzTmV4dFRva2VuV2hpdGVzcGFjZVRva2VuKCkge1xuICAgIGxldCBuZXh0VG9rZW5XaGl0ZXNwYWNlVG9rZW4gPSBmYWxzZTtcblxuICAgIGNvbnN0IHRva2Vuc0xlbmd0aCA9IHRoaXMudG9rZW5zLmxlbmd0aDtcblxuICAgIGlmICh0aGlzLmluZGV4IDwgdG9rZW5zTGVuZ3RoKSB7XG4gICAgICBjb25zdCBuZXh0VG9rZW4gPSB0aGlzLnRva2Vuc1t0aGlzLmluZGV4XTtcblxuICAgICAgbmV4dFRva2VuV2hpdGVzcGFjZVRva2VuID0gbmV4dFRva2VuLmlzV2hpdGVzcGFjZVRva2VuKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5leHRUb2tlbldoaXRlc3BhY2VUb2tlbjtcbiAgfVxuXG4gIGlzVG9vRGVlcCgpIHtcbiAgICBjb25zdCB0b29EZWVwID0gKHRoaXMuZGVwdGggPiB0aGlzLm1heGltdW1EZXB0aCk7XG5cbiAgICByZXR1cm4gdG9vRGVlcDtcbiAgfVxuXG5cdGJhY2t0cmFjayhzYXZlZEluZGV4KSB7XG5cdFx0dGhpcy5pbmRleCA9IHNhdmVkSW5kZXg7ICAvLy9cblx0fVxuXG4gIHNldEluZGV4KGluZGV4KSB7XG4gICAgdGhpcy5pbmRleCA9IGluZGV4O1xuICB9XG5cbiAgaW5jcmVhc2VEZXB0aCgpIHtcbiAgICB0aGlzLmRlcHRoKys7XG4gIH1cblxuICBkZWNyZWFzZURlcHRoKCkge1xuICAgIHRoaXMuZGVwdGgtLTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tVG9rZW5zQW5kUnVsZU1hcCh0b2tlbnMsIHJ1bGVNYXApIHtcbiAgICBjb25zdCBpbmRleCA9IDAsXG5cdFx0XHRcdFx0ZGVwdGggPSAwLFxuXHRcdFx0XHRcdG1heGltdW1EZXB0aCA9IERFRkFVTFRfTUFYSU1VTV9ERVBUSCxcblx0XHRcdFx0XHRzdGF0ZSA9IG5ldyBTdGF0ZShydWxlTWFwLCB0b2tlbnMsIGluZGV4LCBkZXB0aCwgbWF4aW11bURlcHRoKTtcblxuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5leHBvcnQgY29uc3QgeyBmaXJzdCwgc2Vjb25kLCB0aGlyZCwgZm91cnRoLCBsYXN0LCBwdXNoLCBmaWx0ZXIsIGZvcndhcmRzU29tZSwgYmFja3dhcmRzU29tZSB9ID0gYXJyYXlVdGlsaXRpZXM7XG5cbmV4cG9ydCBmdW5jdGlvbiBldmVuKGFycmF5KSB7IHJldHVybiBhcnJheS5maWx0ZXIoKGVudHJ5LCBpbmRleCkgPT4gaXNFdmVuKGluZGV4KSk7IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGFsbEJ1dEZpcnN0QW5kTGFzdChhcnJheSkge1xuICBhcnJheSA9IGFycmF5LnNsaWNlKCk7ICAvLy9cblxuICBhcnJheS5zaGlmdCgpO1xuXG4gIGFycmF5LnBvcCgpO1xuXG4gIHJldHVybiBhcnJheTtcbn1cblxuZnVuY3Rpb24gaXNFdmVuKGluZGV4KSB7XG4gIGNvbnN0IGV2ZW4gPSAoTWF0aC5mbG9vcihpbmRleC8yKSA9PT0gaW5kZXgvMik7XG5cbiAgcmV0dXJuIGV2ZW47XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGNoYXJhY3RlcnMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCB7IGxhc3QgfSBmcm9tIFwiLi91dGlsaXRpZXMvYXJyYXlcIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5cbmNvbnN0IHsgTkVXX0xJTkVfQ0hBUkFDVEVSLCBTUEFDRV9DSEFSQUNURVIgfSA9IGNoYXJhY3RlcnM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBhcnNlVHJlZSB7XG4gIGNvbnN0cnVjdG9yKGxpbmVzKSB7XG4gICAgdGhpcy5saW5lcyA9IGxpbmVzO1xuICB9XG5cbiAgY2xvbmUoKSB7XG4gICAgY29uc3QgbGluZXMgPSB0aGlzLmxpbmVzLnNsaWNlKCksICAvLy9cbiAgICAgICAgICBwYXJzZVRyZWUgPSBuZXcgUGFyc2VUcmVlKGxpbmVzKTtcblxuICAgIHJldHVybiBwYXJzZVRyZWU7XG4gIH1cblxuICBnZXRXaWR0aCgpIHtcbiAgICBsZXQgd2lkdGg7XG5cbiAgICBsZXQgbGluZXNMZW5ndGggPSB0aGlzLmxpbmVzLmxlbmd0aDtcblxuICAgIGlmIChsaW5lc0xlbmd0aCA9PT0gMCkge1xuICAgICAgd2lkdGggPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBsYXN0TGluZSA9IGxhc3QodGhpcy5saW5lcyksXG4gICAgICAgICAgICBsYXN0TGluZUxlbmd0aCA9IGxhc3RMaW5lLmxlbmd0aDtcblxuICAgICAgd2lkdGggPSBsYXN0TGluZUxlbmd0aDsgLy8vXG4gICAgfVxuXG4gICAgcmV0dXJuIHdpZHRoO1xuICB9XG5cbiAgZ2V0RGVwdGgoKSB7XG4gICAgY29uc3QgbGluZXNMZW5ndGggPSB0aGlzLmxpbmVzLmxlbmd0aCxcbiAgICAgICAgICBkZXB0aCA9IGxpbmVzTGVuZ3RoOyAgLy8vXG5cbiAgICByZXR1cm4gZGVwdGg7XG4gIH1cblxuICBmb3JFYWNoTGluZShjYWxsYmFjaykge1xuICAgIHRoaXMubGluZXMuZm9yRWFjaChjYWxsYmFjayk7XG4gIH1cblxuICBhcHBlbmRUb1RvcChwYXJzZVRyZWUpIHtcbiAgICBwYXJzZVRyZWUuZm9yRWFjaExpbmUoKGxpbmUpID0+IHtcbiAgICAgIHRoaXMubGluZXMudW5zaGlmdChsaW5lKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFwcGVuZFRvTGVmdChwYXJzZVRyZWUpIHtcbiAgICBwYXJzZVRyZWUuZm9yRWFjaExpbmUoKGxpbmUsIGluZGV4KSA9PiB7XG4gICAgICB0aGlzLmxpbmVzW2luZGV4XSA9IGxpbmUgKyB0aGlzLmxpbmVzW2luZGV4XTtcbiAgICB9KTtcbiAgfVxuXG4gIGFwcGVuZFRvUmlnaHQocGFyc2VUcmVlKSB7XG4gICAgcGFyc2VUcmVlLmZvckVhY2hMaW5lKChsaW5lLCBpbmRleCkgPT4ge1xuICAgICAgdGhpcy5saW5lc1tpbmRleF0gPSB0aGlzLmxpbmVzW2luZGV4XSArIGxpbmU7XG4gICAgfSk7XG4gIH1cblxuICBhcHBlbmRUb0JvdHRvbShwYXJzZVRyZWUpIHtcbiAgICBwYXJzZVRyZWUuZm9yRWFjaExpbmUoKGxpbmUpID0+IHtcbiAgICAgIHRoaXMubGluZXMucHVzaChsaW5lKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFkZFRvcE1hcmdpbih0b3BNYXJnaW5EZXB0aCkge1xuICAgIGNvbnN0IHdpZHRoID0gdGhpcy5nZXRXaWR0aCgpLFxuICAgICAgICAgIHRvcE1hcmdpbldpZHRoID0gd2lkdGgsICAvLy9cbiAgICAgICAgICB0b3BNYXJnaW5TdHJpbmcgPSBtYXJnaW5TdHJpbmdGcm9tTWFyZ2luV2lkdGgodG9wTWFyZ2luV2lkdGgpO1xuXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRvcE1hcmdpbkRlcHRoOyBpbmRleCsrKSB7XG4gICAgICB0aGlzLmxpbmVzLnVuc2hpZnQodG9wTWFyZ2luU3RyaW5nKTtcbiAgICB9XG4gIH1cblxuICBhZGRMZWZ0TWFyZ2luKGxlZnRNYXJnaW5XaWR0aCkge1xuICAgIGNvbnN0IGxlZnRNYXJnaW5TdHJpbmcgPSBtYXJnaW5TdHJpbmdGcm9tTWFyZ2luV2lkdGgobGVmdE1hcmdpbldpZHRoKSxcbiAgICAgICAgICBsaW5lc0xlbmd0aCA9IHRoaXMubGluZXMubGVuZ3RoO1xuXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGxpbmVzTGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICB0aGlzLmxpbmVzW2luZGV4XSA9IGxlZnRNYXJnaW5TdHJpbmcgKyB0aGlzLmxpbmVzW2luZGV4XTtcbiAgICB9XG4gIH1cblxuICBhZGRSaWdodE1hcmdpbihyaWdodE1hcmdpbldpZHRoKSB7XG4gICAgY29uc3QgcmlnaHRNYXJnaW5TdHJpbmcgPSBtYXJnaW5TdHJpbmdGcm9tTWFyZ2luV2lkdGgocmlnaHRNYXJnaW5XaWR0aCksXG4gICAgICAgICAgbGluZXNMZW5ndGggPSB0aGlzLmxpbmVzLmxlbmd0aDtcblxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBsaW5lc0xlbmd0aDsgaW5kZXgrKykge1xuICAgICAgdGhpcy5saW5lc1tpbmRleF0gPSB0aGlzLmxpbmVzW2luZGV4XSArIHJpZ2h0TWFyZ2luU3RyaW5nO1xuICAgIH1cbiAgfVxuXG4gIGFkZEJvdHRvbU1hcmdpbihib3R0b21NYXJnaW5EZXB0aCkge1xuICAgIGNvbnN0IHdpZHRoID0gdGhpcy5nZXRXaWR0aCgpLFxuICAgICAgICAgIGJvdHRvbU1hcmdpbldpZHRoID0gd2lkdGgsICAvLy9cbiAgICAgICAgICBib3R0b21NYXJnaW5TdHJpbmcgPSBtYXJnaW5TdHJpbmdGcm9tTWFyZ2luV2lkdGgoYm90dG9tTWFyZ2luV2lkdGgpO1xuXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGJvdHRvbU1hcmdpbkRlcHRoOyBpbmRleCsrKSB7XG4gICAgICB0aGlzLmxpbmVzLnB1c2goYm90dG9tTWFyZ2luU3RyaW5nKTtcbiAgICB9XG4gIH1cbiAgXG4gIHBvcExpbmUoKSB7IHJldHVybiB0aGlzLmxpbmVzLnBvcCgpOyB9XG4gIFxuICBzaGlmdExpbmUoKSB7IHJldHVybiB0aGlzLmxpbmVzLnNoaWZ0KCk7IH1cbiAgXG4gIHB1c2hMaW5lKGxpbmUpIHsgdGhpcy5saW5lcy5wdXNoKGxpbmUpOyB9XG4gIFxuICB1bnNoaWZ0TGluZShsaW5lKSB7IHRoaXMubGluZXMudW5zaGlmdChsaW5lKTsgfVxuXG4gIGFzU3RyaW5nKCkge1xuICAgIGNvbnN0IHN0cmluZyA9IHRoaXMubGluZXMucmVkdWNlKChzdHJpbmcsIGxpbmUpID0+IHtcbiAgICAgIHN0cmluZyArPSBsaW5lICsgTkVXX0xJTkVfQ0hBUkFDVEVSO1xuXG4gICAgICByZXR1cm4gc3RyaW5nO1xuICAgIH0sIEVNUFRZX1NUUklORyk7XG5cbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1hcmdpblN0cmluZ0Zyb21NYXJnaW5XaWR0aChtYXJnaW5XaWR0aCwgc3BhY2VDaGFyYWN0ZXIpIHtcbiAgc3BhY2VDaGFyYWN0ZXIgPSBzcGFjZUNoYXJhY3RlciB8fCBTUEFDRV9DSEFSQUNURVI7XG5cbiAgbGV0IG1hcmdpblN0cmluZyA9IEVNUFRZX1NUUklORztcblxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgbWFyZ2luV2lkdGg7IGluZGV4KyspIHtcbiAgICBtYXJnaW5TdHJpbmcgKz0gc3BhY2VDaGFyYWN0ZXI7XG4gIH1cblxuICByZXR1cm4gbWFyZ2luU3RyaW5nO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBjaGFyYWN0ZXJzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5pbXBvcnQgUGFyc2VUcmVlIGZyb20gXCIuLi9wYXJzZVRyZWVcIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5jb25zdCB7IEJBUl9DSEFSQUNURVIgfSA9IGNoYXJhY3RlcnM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlIGV4dGVuZHMgUGFyc2VUcmVlIHtcbiAgY29uc3RydWN0b3IobGluZXMsIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24pIHtcbiAgICBzdXBlcihsaW5lcyk7XG4gICAgXG4gICAgdGhpcy52ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID0gdmVydGljYWxCcmFuY2hQb3NpdGlvbjtcbiAgfVxuICBcbiAgZ2V0VmVydGljYWxCcmFuY2hQb3NpdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy52ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uO1xuICB9XG5cbiAgYWRkTGVmdE1hcmdpbihsZWZ0TWFyZ2luV2lkdGgpIHtcbiAgICBzdXBlci5hZGRMZWZ0TWFyZ2luKGxlZnRNYXJnaW5XaWR0aCk7XG5cbiAgICB0aGlzLnZlcnRpY2FsQnJhbmNoUG9zaXRpb24gKz0gbGVmdE1hcmdpbldpZHRoOyAvLy9cbiAgfVxuXG4gIHN0YXRpYyBmcm9tV2lkdGgod2lkdGgpIHtcbiAgICBjb25zdCBzdHJpbmcgPSBCQVJfQ0hBUkFDVEVSLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSAwLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlID0gVmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZnJvbVN0cmluZ0FuZFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oVmVydGljYWxCcmFuY2hQYXJzZVRyZWUsIHN0cmluZywgdmVydGljYWxCcmFuY2hQb3NpdGlvbiksXG4gICAgICAgICAgbGVmdE1hcmdpbldpZHRoID0gTWF0aC5mbG9vcih3aWR0aC8yKSxcbiAgICAgICAgICByaWdodE1hcmdpbldpZHRoID0gd2lkdGggLSBsZWZ0TWFyZ2luV2lkdGggLSAxO1xuXG4gICAgdmVydGljYWxCcmFuY2hQYXJzZVRyZWUuYWRkTGVmdE1hcmdpbihsZWZ0TWFyZ2luV2lkdGgpO1xuICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmFkZFJpZ2h0TWFyZ2luKHJpZ2h0TWFyZ2luV2lkdGgpO1xuXG4gICAgcmV0dXJuIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlO1xuICB9XG5cbiAgc3RhdGljIGZyb21EZXB0aEFuZFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oQ2xhc3MsIGRlcHRoLCB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKSB7XG4gICAgY29uc3QgbGluZXMgPSBsaW5lc0Zyb21EZXB0aChkZXB0aCksXG4gICAgICAgICAgYXJncyA9IFsgbnVsbCwgbGluZXMsIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24gXSxcbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSA9IG5ldyAoRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQuYXBwbHkoQ2xhc3MsIGFyZ3MpKTsgIC8vL1xuXG4gICAgcmV0dXJuIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlO1xuICB9XG5cbiAgc3RhdGljIGZyb21TdHJpbmdBbmRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKENsYXNzLCBzdHJpbmcsIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24pIHtcbiAgICBpZiAodmVydGljYWxCcmFuY2hQb3NpdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID0gc3RyaW5nOyAgLy8vXG4gICAgICBzdHJpbmcgPSBDbGFzczsgLy8vXG4gICAgICBDbGFzcyA9IFBhcnNlVHJlZTsgIC8vL1xuICAgIH1cbiAgICBcbiAgICBjb25zdCBsaW5lID0gc3RyaW5nLCAvLy9cbiAgICAgICAgICBsaW5lcyA9IFtsaW5lXSxcbiAgICAgICAgICBhcmdzID0gWyBudWxsLCBsaW5lcywgdmVydGljYWxCcmFuY2hQb3NpdGlvbiBdLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlID0gbmV3IChGdW5jdGlvbi5wcm90b3R5cGUuYmluZC5hcHBseShDbGFzcywgYXJncykpOyAgLy8vXG5cbiAgICByZXR1cm4gdmVydGljYWxCcmFuY2hQYXJzZVRyZWU7XG4gIH1cbn1cblxuZnVuY3Rpb24gbGluZXNGcm9tRGVwdGgoZGVwdGgpIHtcbiAgY29uc3QgbGluZXMgPSBbXTtcblxuICBsZXQgaW5kZXggPSAwO1xuXG4gIHdoaWxlIChpbmRleCA8IGRlcHRoKSB7XG4gICAgbGluZXNbaW5kZXgrK10gPSBFTVBUWV9TVFJJTkc7XG4gIH1cblxuICByZXR1cm4gbGluZXM7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSBmcm9tIFwiLi92ZXJ0aWNhbEJyYW5jaFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSdWxlTmFtZVBhcnNlVHJlZSBleHRlbmRzIFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlIHtcbiAgc3RhdGljIGZyb21Ob25UZXJtaW5hbE5vZGVUb2tlbnNBbmRBYnJpZGdlZChub25UZXJtaW5hbE5vZGUsIHRva2VucywgYWJyaWRnZWQpIHtcbiAgICBjb25zdCBydWxlTmFtZSA9IG5vblRlcm1pbmFsTm9kZS5nZXRSdWxlTmFtZSgpLFxuICAgICAgICAgIGZpcnN0U2lnbmlmaWNhbnRUb2tlbiA9IG5vblRlcm1pbmFsTm9kZS5nZXRGaXJzdFNpZ25pZmljYW50VG9rZW4oKSxcbiAgICAgICAgICBsYXN0U2lnbmlmaWNhbnRUb2tlbiA9IG5vblRlcm1pbmFsTm9kZS5nZXRMYXN0U2lnbmlmaWNhbnRUb2tlbigpLFxuICAgICAgICAgIGZpcnN0U2lnbmlmaWNhbnRUb2tlbkluZGV4ID0gdG9rZW5zLmluZGV4T2YoZmlyc3RTaWduaWZpY2FudFRva2VuKSxcbiAgICAgICAgICBsYXN0U2lnbmlmaWNhbnRUb2tlbkluZGV4ID0gdG9rZW5zLmluZGV4T2YobGFzdFNpZ25pZmljYW50VG9rZW4pLFxuICAgICAgICAgIHRva2VuSW5kZXhlcyA9IChmaXJzdFNpZ25pZmljYW50VG9rZW5JbmRleCAhPT0gbGFzdFNpZ25pZmljYW50VG9rZW5JbmRleCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7Zmlyc3RTaWduaWZpY2FudFRva2VuSW5kZXh9LSR7bGFzdFNpZ25pZmljYW50VG9rZW5JbmRleH1gIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7Zmlyc3RTaWduaWZpY2FudFRva2VuSW5kZXh9YCxcbiAgICAgICAgICBzdHJpbmcgPSBhYnJpZGdlZCA/XG4gICAgICAgICAgICAgICAgICAgICBgJHtydWxlTmFtZX1gIDpcbiAgICAgICAgICAgICAgICAgICAgICAgYCR7cnVsZU5hbWV9KCR7dG9rZW5JbmRleGVzfSlgLFxuICAgICAgICAgIHN0cmluZ0xlbmd0aCA9IHN0cmluZy5sZW5ndGgsXG4gICAgICAgICAgdmVydGljYWxCcmFuY2hQYXJzZVRyZWVXaWR0aCA9IHN0cmluZ0xlbmd0aCwgLy8vXG4gICAgICAgICAgdmVydGljYWxCcmFuY2hQYXJzZVRyZWUgPSBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5mcm9tV2lkdGgodmVydGljYWxCcmFuY2hQYXJzZVRyZWVXaWR0aCksXG4gICAgICAgICAgdmVydGljYWxCcmFuY2hQb3NpdGlvbiA9IHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmdldFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oKSxcbiAgICAgICAgICBydWxlTmFtZVBhcnNlVHJlZSA9IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmZyb21TdHJpbmdBbmRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKFJ1bGVOYW1lUGFyc2VUcmVlLCBzdHJpbmcsIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24pO1xuXG4gICAgcnVsZU5hbWVQYXJzZVRyZWUuYXBwZW5kVG9Ub3AodmVydGljYWxCcmFuY2hQYXJzZVRyZWUpO1xuXG4gICAgcmV0dXJuIHJ1bGVOYW1lUGFyc2VUcmVlO1xuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgY2hhcmFjdGVycyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IFBhcnNlVHJlZSBmcm9tIFwiLi4vcGFyc2VUcmVlXCI7XG5cbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcblxuY29uc3QgeyBEQVNIX0NIQVJBQ1RFUiB9ID0gY2hhcmFjdGVycztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSG9yaXpvbnRhbEJyYW5jaFBhcnNlVHJlZSBleHRlbmRzIFBhcnNlVHJlZSB7XG4gIHN0YXRpYyBmcm9tV2lkdGgod2lkdGgpIHtcbiAgICBjb25zdCBzdHJpbmcgPSBzdHJpbmdGcm9tQ2hhcmFjdGVyc1dpZHRoKHdpZHRoLCBEQVNIX0NIQVJBQ1RFUiksXG4gICAgICAgICAgbGluZSA9IHN0cmluZywgLy8vXG4gICAgICAgICAgbGluZXMgPSBbbGluZV0sXG4gICAgICAgICAgaG9yaXpvbnRhbEJyYW5jaFBhcnNlVHJlZSA9IG5ldyBIb3Jpem9udGFsQnJhbmNoUGFyc2VUcmVlKGxpbmVzKTtcblxuICAgIHJldHVybiBob3Jpem9udGFsQnJhbmNoUGFyc2VUcmVlO1xuICB9XG59XG5cbmZ1bmN0aW9uIHN0cmluZ0Zyb21DaGFyYWN0ZXJzV2lkdGgoY2hhcmFjdGVyc1dpZHRoLCBjaGFyYWN0ZXIpIHtcbiAgbGV0IHN0cmluZyA9IEVNUFRZX1NUUklORztcblxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgY2hhcmFjdGVyc1dpZHRoOyBpbmRleCsrKSB7XG4gICAgc3RyaW5nICs9IGNoYXJhY3RlcjtcbiAgfVxuXG4gIHJldHVybiBzdHJpbmc7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSBmcm9tIFwiLi92ZXJ0aWNhbEJyYW5jaFwiO1xuaW1wb3J0IEhvcml6b250YWxCcmFuY2hQYXJzZVRyZWUgZnJvbSBcIi4vaG9yaXpvbnRhbEJyYW5jaFwiO1xuXG5pbXBvcnQgeyBmaXJzdCB9IGZyb20gXCIuLi91dGlsaXRpZXMvYXJyYXlcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2hpbGROb2Rlc1BhcnNlVHJlZSBleHRlbmRzIFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlIHtcbiAgc3RhdGljIGZyb21DaGlsZE5vZGVzVG9rZW5zQW5kQWJyaWRnZWQoY2hpbGROb2RlcywgdG9rZW5zLCBhYnJpZGdlZCkge1xuICAgIGxldCBjaGlsZE5vZGVzUGFyc2VUcmVlO1xuXG4gICAgY29uc3QgY2hpbGROb2RlUGFyc2VUcmVlcyA9IGNoaWxkTm9kZXMucmVkdWNlKChjaGlsZE5vZGVQYXJzZVRyZWVzLCBjaGlsZE5vZGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkTm9kZVBhcnNlVHJlZSA9IGNoaWxkTm9kZS5hc1BhcnNlVHJlZSh0b2tlbnMsIGFicmlkZ2VkKTtcblxuICAgICAgICAgICAgY2hpbGROb2RlUGFyc2VUcmVlcy5wdXNoKGNoaWxkTm9kZVBhcnNlVHJlZSk7XG5cbiAgICAgICAgICAgIHJldHVybiBjaGlsZE5vZGVQYXJzZVRyZWVzO1xuICAgICAgICAgIH0sIFtdKSxcbiAgICAgICAgICBjaGlsZE5vZGVQYXJzZVRyZWVzTGVuZ3RoID0gY2hpbGROb2RlUGFyc2VUcmVlcy5sZW5ndGg7XG5cbiAgICBpZiAoY2hpbGROb2RlUGFyc2VUcmVlc0xlbmd0aCA9PT0gMSkge1xuICAgICAgY29uc3QgZmlyc3RDaGlsZE5vZGVQYXJzZVRyZWUgPSBmaXJzdChjaGlsZE5vZGVQYXJzZVRyZWVzKTtcblxuICAgICAgY2hpbGROb2Rlc1BhcnNlVHJlZSA9IGZpcnN0Q2hpbGROb2RlUGFyc2VUcmVlOyAgLy8vXG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBmaXJzdFZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSB1bmRlZmluZWQsXG4gICAgICAgICAgbGFzdFZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSAwLFxuICAgICAgICAgIGNoaWxkTm9kZVBhcnNlVHJlZXNXaWR0aCA9IDAsXG4gICAgICAgICAgY2hpbGROb2RlUGFyc2VUcmVlc0RlcHRoID0gMDtcblxuICAgICAgY2hpbGROb2RlUGFyc2VUcmVlcy5mb3JFYWNoKChjaGlsZE5vZGVQYXJzZVRyZWUsIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IGNoaWxkTm9kZVBhcnNlVHJlZVdpZHRoID0gY2hpbGROb2RlUGFyc2VUcmVlLmdldFdpZHRoKCksXG4gICAgICAgICAgICAgIGNoaWxkTm9kZVBhcnNlVHJlZURlcHRoID0gY2hpbGROb2RlUGFyc2VUcmVlLmdldERlcHRoKCk7XG5cbiAgICAgICAgaWYgKGluZGV4ID09PSAwKSB7XG4gICAgICAgICAgY29uc3QgZmlyc3RDaGlsZE5vZGVQYXJzZVRyZWUgPSBjaGlsZE5vZGVQYXJzZVRyZWUsXG4gICAgICAgICAgICAgICAgZmlyc3RDaGlsZE5vZGVQYXJzZVRyZWVWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID0gZmlyc3RDaGlsZE5vZGVQYXJzZVRyZWUuZ2V0VmVydGljYWxCcmFuY2hQb3NpdGlvbigpO1xuXG4gICAgICAgICAgZmlyc3RWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID0gZmlyc3RDaGlsZE5vZGVQYXJzZVRyZWVWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGluZGV4ID09PSBjaGlsZE5vZGVQYXJzZVRyZWVzTGVuZ3RoIC0gMSkge1xuICAgICAgICAgIGNvbnN0IGxhc3RDaGlsZE5vZGVQYXJzZVRyZWUgPSBjaGlsZE5vZGVQYXJzZVRyZWUsXG4gICAgICAgICAgICAgICAgbGFzdENoaWxkTm9kZVBhcnNlVHJlZVZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSBsYXN0Q2hpbGROb2RlUGFyc2VUcmVlLmdldFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oKTtcblxuICAgICAgICAgIGxhc3RWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uICs9IGxhc3RDaGlsZE5vZGVQYXJzZVRyZWVWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGluZGV4IDwgY2hpbGROb2RlUGFyc2VUcmVlc0xlbmd0aCAtIDEpIHtcbiAgICAgICAgICBsYXN0VmVydGljYWxCcmFuY2hQb3NpdGlvbiArPSBjaGlsZE5vZGVQYXJzZVRyZWVXaWR0aDtcbiAgICAgICAgICBsYXN0VmVydGljYWxCcmFuY2hQb3NpdGlvbiArPSAxO1xuXG4gICAgICAgICAgY2hpbGROb2RlUGFyc2VUcmVlc1dpZHRoICs9IDE7XG4gICAgICAgIH1cblxuICAgICAgICBjaGlsZE5vZGVQYXJzZVRyZWVzV2lkdGggKz0gY2hpbGROb2RlUGFyc2VUcmVlV2lkdGg7XG4gICAgICAgIGNoaWxkTm9kZVBhcnNlVHJlZXNEZXB0aCA9IE1hdGgubWF4KGNoaWxkTm9kZVBhcnNlVHJlZXNEZXB0aCwgY2hpbGROb2RlUGFyc2VUcmVlRGVwdGgpO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHdpZHRoID0gbGFzdFZlcnRpY2FsQnJhbmNoUG9zaXRpb24gLSBmaXJzdFZlcnRpY2FsQnJhbmNoUG9zaXRpb24gKyAxLFxuICAgICAgICAgICAgdmVydGljYWxCcmFuY2hQYXJzZVRyZWUgPSBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5mcm9tV2lkdGgod2lkdGgpLFxuICAgICAgICAgICAgaG9yaXpvbnRhbEJyYW5jaFBhcnNlVHJlZSA9IEhvcml6b250YWxCcmFuY2hQYXJzZVRyZWUuZnJvbVdpZHRoKHdpZHRoKSxcbiAgICAgICAgICAgIGxlZnRNYXJnaW5XaWR0aCA9IGZpcnN0VmVydGljYWxCcmFuY2hQb3NpdGlvbixcbiAgICAgICAgICAgIHJpZ2h0TWFyZ2luV2lkdGggPSBjaGlsZE5vZGVQYXJzZVRyZWVzV2lkdGggLSB3aWR0aCAtIGxlZnRNYXJnaW5XaWR0aDtcblxuICAgICAgdmVydGljYWxCcmFuY2hQYXJzZVRyZWUuYWRkTGVmdE1hcmdpbihsZWZ0TWFyZ2luV2lkdGgpO1xuICAgICAgdmVydGljYWxCcmFuY2hQYXJzZVRyZWUuYWRkUmlnaHRNYXJnaW4ocmlnaHRNYXJnaW5XaWR0aCk7XG4gICAgICBob3Jpem9udGFsQnJhbmNoUGFyc2VUcmVlLmFkZExlZnRNYXJnaW4obGVmdE1hcmdpbldpZHRoKTtcbiAgICAgIGhvcml6b250YWxCcmFuY2hQYXJzZVRyZWUuYWRkUmlnaHRNYXJnaW4ocmlnaHRNYXJnaW5XaWR0aCk7XG5cbiAgICAgIGNvbnN0IHZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5nZXRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKCk7XG5cbiAgICAgIGNoaWxkTm9kZXNQYXJzZVRyZWUgPSBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5mcm9tRGVwdGhBbmRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKENoaWxkTm9kZXNQYXJzZVRyZWUsIGNoaWxkTm9kZVBhcnNlVHJlZXNEZXB0aCwgdmVydGljYWxCcmFuY2hQb3NpdGlvbik7XG5cbiAgICAgIGNoaWxkTm9kZVBhcnNlVHJlZXMuZm9yRWFjaCgoY2hpbGROb2RlUGFyc2VUcmVlLCBpbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBjaGlsZE5vZGVQYXJzZVRyZWVEZXB0aCA9IGNoaWxkTm9kZVBhcnNlVHJlZS5nZXREZXB0aCgpLFxuICAgICAgICAgICAgICBjbG9uZWRDaGlsZE5vZGVQYXJzZVRyZWUgPSBjaGlsZE5vZGVQYXJzZVRyZWUuY2xvbmUoKTtcblxuICAgICAgICBpZiAoaW5kZXggPCBjaGlsZE5vZGVQYXJzZVRyZWVzTGVuZ3RoIC0gMSkge1xuICAgICAgICAgIGNvbnN0IHJpZ2h0TWFyZ2luV2lkdGggPSAxO1xuXG4gICAgICAgICAgY2xvbmVkQ2hpbGROb2RlUGFyc2VUcmVlLmFkZFJpZ2h0TWFyZ2luKHJpZ2h0TWFyZ2luV2lkdGgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoaWxkTm9kZVBhcnNlVHJlZURlcHRoIDwgY2hpbGROb2RlUGFyc2VUcmVlc0RlcHRoKSB7XG4gICAgICAgICAgY29uc3QgYm90dG9tTWFyZ2luRGVwdGggPSBjaGlsZE5vZGVQYXJzZVRyZWVzRGVwdGggLSBjaGlsZE5vZGVQYXJzZVRyZWVEZXB0aDtcblxuICAgICAgICAgIGNsb25lZENoaWxkTm9kZVBhcnNlVHJlZS5hZGRCb3R0b21NYXJnaW4oYm90dG9tTWFyZ2luRGVwdGgpO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGROb2Rlc1BhcnNlVHJlZS5hcHBlbmRUb1JpZ2h0KGNsb25lZENoaWxkTm9kZVBhcnNlVHJlZSk7XG4gICAgICB9KTtcblxuICAgICAgY2hpbGROb2Rlc1BhcnNlVHJlZS5hcHBlbmRUb1RvcChob3Jpem9udGFsQnJhbmNoUGFyc2VUcmVlKTtcbiAgICAgIGNoaWxkTm9kZXNQYXJzZVRyZWUuYXBwZW5kVG9Ub3AodmVydGljYWxCcmFuY2hQYXJzZVRyZWUpO1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4gY2hpbGROb2Rlc1BhcnNlVHJlZTtcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlTmFtZVBhcnNlVHJlZSBmcm9tIFwiLi9ydWxlTmFtZVwiO1xuaW1wb3J0IENoaWxkTm9kZXNQYXJzZVRyZWUgZnJvbSBcIi4vY2hpbGROb2Rlc1wiO1xuaW1wb3J0IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlIGZyb20gXCIuL3ZlcnRpY2FsQnJhbmNoXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5vblRlcm1pbmFsTm9kZVBhcnNlVHJlZSBleHRlbmRzIFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlIHtcbiAgc3RhdGljIGZyb21Ob25UZXJtaW5hbE5vZGVUb2tlbnNBbmRBYnJpZGdlZChub25UZXJtaW5hbE5vZGUsIHRva2VucywgYWJyaWRnZWQpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gbm9uVGVybWluYWxOb2RlLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBydWxlTmFtZVBhcnNlVHJlZSA9IFJ1bGVOYW1lUGFyc2VUcmVlLmZyb21Ob25UZXJtaW5hbE5vZGVUb2tlbnNBbmRBYnJpZGdlZChub25UZXJtaW5hbE5vZGUsIHRva2VucywgYWJyaWRnZWQpLFxuICAgICAgICAgIGNoaWxkTm9kZXNQYXJzZVRyZWUgPSBDaGlsZE5vZGVzUGFyc2VUcmVlLmZyb21DaGlsZE5vZGVzVG9rZW5zQW5kQWJyaWRnZWQoY2hpbGROb2RlcywgdG9rZW5zLCBhYnJpZGdlZCk7XG4gICAgXG4gICAgbGV0IHJ1bGVOYW1lUGFyc2VUcmVlVmVydGljYWxCcmFuY2hQb3NpdGlvbiA9IHJ1bGVOYW1lUGFyc2VUcmVlLmdldFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oKTtcbiAgICBcbiAgICBjb25zdCBjaGlsZE5vZGVzUGFyc2VUcmVlVmVydGljYWxCcmFuY2hQb3NpdGlvbiA9IGNoaWxkTm9kZXNQYXJzZVRyZWUuZ2V0VmVydGljYWxCcmFuY2hQb3NpdGlvbigpLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUG9zaXRpb25zRGlmZmVyZW5jZSA9IHJ1bGVOYW1lUGFyc2VUcmVlVmVydGljYWxCcmFuY2hQb3NpdGlvbiAtIGNoaWxkTm9kZXNQYXJzZVRyZWVWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uO1xuICAgIFxuICAgIGxldCBsZWZ0TWFyZ2luV2lkdGggPSB1bmRlZmluZWQ7XG5cbiAgICBpZiAoZmFsc2UpIHtcbiAgICAgIC8vL1xuICAgIH0gZWxzZSBpZiAodmVydGljYWxCcmFuY2hQb3NpdGlvbnNEaWZmZXJlbmNlIDwgMCkge1xuICAgICAgbGVmdE1hcmdpbldpZHRoID0gLXZlcnRpY2FsQnJhbmNoUG9zaXRpb25zRGlmZmVyZW5jZTtcblxuICAgICAgcnVsZU5hbWVQYXJzZVRyZWUuYWRkTGVmdE1hcmdpbihsZWZ0TWFyZ2luV2lkdGgpO1xuICAgIH0gZWxzZSBpZiAodmVydGljYWxCcmFuY2hQb3NpdGlvbnNEaWZmZXJlbmNlID4gMCkge1xuICAgICAgbGVmdE1hcmdpbldpZHRoID0gK3ZlcnRpY2FsQnJhbmNoUG9zaXRpb25zRGlmZmVyZW5jZTtcblxuICAgICAgY2hpbGROb2Rlc1BhcnNlVHJlZS5hZGRMZWZ0TWFyZ2luKGxlZnRNYXJnaW5XaWR0aCk7XG4gICAgfVxuXG4gICAgY29uc3QgcnVsZU5hbWVQYXJzZVRyZWVXaWR0aCA9IHJ1bGVOYW1lUGFyc2VUcmVlLmdldFdpZHRoKCksXG4gICAgICAgICAgY2hpbGROb2Rlc1BhcnNlVHJlZVdpZHRoID0gY2hpbGROb2Rlc1BhcnNlVHJlZS5nZXRXaWR0aCgpLFxuICAgICAgICAgIHdpZHRoc0RpZmZlcmVuY2UgPSBydWxlTmFtZVBhcnNlVHJlZVdpZHRoIC0gY2hpbGROb2Rlc1BhcnNlVHJlZVdpZHRoO1xuICAgIFxuICAgIGxldCByaWdodE1hcmdpbldpZHRoID0gdW5kZWZpbmVkO1xuXG4gICAgaWYgKGZhbHNlKSB7XG4gICAgICAvLy9cbiAgICB9IGVsc2UgaWYgKHdpZHRoc0RpZmZlcmVuY2UgPCAwKSB7XG4gICAgICByaWdodE1hcmdpbldpZHRoID0gLXdpZHRoc0RpZmZlcmVuY2U7XG4gICAgICBcbiAgICAgIHJ1bGVOYW1lUGFyc2VUcmVlLmFkZFJpZ2h0TWFyZ2luKHJpZ2h0TWFyZ2luV2lkdGgpO1xuICAgIH0gZWxzZSBpZiAod2lkdGhzRGlmZmVyZW5jZSA+IDApIHtcbiAgICAgIHJpZ2h0TWFyZ2luV2lkdGggPSArd2lkdGhzRGlmZmVyZW5jZTtcblxuICAgICAgY2hpbGROb2Rlc1BhcnNlVHJlZS5hZGRSaWdodE1hcmdpbihyaWdodE1hcmdpbldpZHRoKTtcbiAgICB9XG5cbiAgICBydWxlTmFtZVBhcnNlVHJlZVZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSBydWxlTmFtZVBhcnNlVHJlZS5nZXRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKCk7XG5cbiAgICBjb25zdCBydWxlTmFtZVBhcnNlVHJlZURlcHRoID0gcnVsZU5hbWVQYXJzZVRyZWUuZ2V0RGVwdGgoKSxcbiAgICAgICAgICBub25UZXJtaW5hbE5vZGVQYXJzZVRyZWVEZXB0aCA9IHJ1bGVOYW1lUGFyc2VUcmVlRGVwdGgsIC8vL1xuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSBydWxlTmFtZVBhcnNlVHJlZVZlcnRpY2FsQnJhbmNoUG9zaXRpb24sIC8vL1xuICAgICAgICAgIG5vblRlcm1pbmFsTm9kZVBhcnNlVHJlZSA9IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmZyb21EZXB0aEFuZFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oTm9uVGVybWluYWxOb2RlUGFyc2VUcmVlLCBub25UZXJtaW5hbE5vZGVQYXJzZVRyZWVEZXB0aCwgdmVydGljYWxCcmFuY2hQb3NpdGlvbik7XG5cbiAgICBub25UZXJtaW5hbE5vZGVQYXJzZVRyZWUuYXBwZW5kVG9SaWdodChydWxlTmFtZVBhcnNlVHJlZSk7XG4gICAgbm9uVGVybWluYWxOb2RlUGFyc2VUcmVlLmFwcGVuZFRvQm90dG9tKGNoaWxkTm9kZXNQYXJzZVRyZWUpO1xuXG4gICAgcmV0dXJuIG5vblRlcm1pbmFsTm9kZVBhcnNlVHJlZTtcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbE5vZGVQYXJzZVRyZWUgZnJvbSBcIi4uL3BhcnNlVHJlZS9ub25UZXJtaW5hbE5vZGVcIjtcblxuaW1wb3J0IHsgZm9yd2FyZHNTb21lLCBiYWNrd2FyZHNTb21lIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9hcnJheVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOb25UZXJtaW5hbE5vZGUge1xuICBjb25zdHJ1Y3RvcihydWxlTmFtZSwgY2hpbGROb2Rlcykge1xuICAgIHRoaXMucnVsZU5hbWUgPSBydWxlTmFtZTtcbiAgICB0aGlzLmNoaWxkTm9kZXMgPSBjaGlsZE5vZGVzO1xuICB9XG5cbiAgaXNUZXJtaW5hbE5vZGUoKSB7XG4gICAgY29uc3QgdGVybWluYWxOb2RlID0gZmFsc2U7XG5cbiAgICByZXR1cm4gdGVybWluYWxOb2RlO1xuICB9XG5cbiAgaXNOb25UZXJtaW5hbE5vZGUoKSB7XG4gICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gdHJ1ZTtcblxuICAgIHJldHVybiBub25UZXJtaW5hbE5vZGU7XG4gIH1cblxuICBnZXRSdWxlTmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5ydWxlTmFtZTtcbiAgfVxuXG4gIGdldENoaWxkTm9kZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2hpbGROb2RlcztcbiAgfVxuXG4gIGdldEZpcnN0U2lnbmlmaWNhbnRUb2tlbigpIHtcbiAgICBsZXQgZmlyc3RTaWduaWZpY2FudFRva2VuID0gbnVsbDtcblxuICAgIGZvcndhcmRzU29tZSh0aGlzLmNoaWxkTm9kZXMsIChjaGlsZE5vZGUpID0+IHtcbiAgICAgIGZpcnN0U2lnbmlmaWNhbnRUb2tlbiA9IGNoaWxkTm9kZS5nZXRGaXJzdFNpZ25pZmljYW50VG9rZW4oKTtcblxuICAgICAgaWYgKGZpcnN0U2lnbmlmaWNhbnRUb2tlbiAhPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBmaXJzdFNpZ25pZmljYW50VG9rZW47XG4gIH1cblxuICBnZXRMYXN0U2lnbmlmaWNhbnRUb2tlbigpIHtcbiAgICBsZXQgbGFzdFNpZ25pZmljYW50VG9rZW4gPSBudWxsO1xuXG4gICAgYmFja3dhcmRzU29tZSh0aGlzLmNoaWxkTm9kZXMsIChjaGlsZE5vZGUpID0+IHtcbiAgICAgIGxhc3RTaWduaWZpY2FudFRva2VuID0gY2hpbGROb2RlLmdldExhc3RTaWduaWZpY2FudFRva2VuKCk7XG5cbiAgICAgIGlmIChsYXN0U2lnbmlmaWNhbnRUb2tlbiAhPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBsYXN0U2lnbmlmaWNhbnRUb2tlbjtcbiAgfVxuICBcbiAgc2V0UnVsZU5hbWUocnVsZU5hbWUpIHtcbiAgICB0aGlzLnJ1bGVOYW1lID0gcnVsZU5hbWU7XG4gIH1cblxuICBzZXRDaGlsZE5vZGVzKGNoaWxkTm9kZXMpIHtcbiAgICB0aGlzLmNoaWxkTm9kZXMgPSBjaGlsZE5vZGVzO1xuICB9XG4gIFxuICBhc1BhcnNlVHJlZSh0b2tlbnMsIGFicmlkZ2VkID0gZmFsc2UpIHtcbiAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSB0aGlzLCAgLy8vXG4gICAgICAgICAgbm9uVGVybWluYWxOb2RlUGFyc2VUcmVlID0gTm9uVGVybWluYWxOb2RlUGFyc2VUcmVlLmZyb21Ob25UZXJtaW5hbE5vZGVUb2tlbnNBbmRBYnJpZGdlZChub25UZXJtaW5hbE5vZGUsIHRva2VucywgYWJyaWRnZWQpLFxuICAgICAgICAgIHBhcnNlVHJlZSA9IG5vblRlcm1pbmFsTm9kZVBhcnNlVHJlZTsgIC8vL1xuXG4gICAgcmV0dXJuIHBhcnNlVHJlZTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKENsYXNzLCBydWxlTmFtZSwgY2hpbGROb2Rlcykge1xuICAgIGlmIChjaGlsZE5vZGVzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNoaWxkTm9kZXMgPSBydWxlTmFtZTsgIC8vL1xuICAgICAgcnVsZU5hbWUgPSBDbGFzczsgLy8vXG4gICAgICBDbGFzcyA9IE5vblRlcm1pbmFsTm9kZTsgIC8vL1xuICAgIH1cblxuICAgIGNvbnN0IGNoaWxkTm9kZXNMZW5ndGggPSBjaGlsZE5vZGVzLmxlbmd0aDtcblxuICAgIGlmIChjaGlsZE5vZGVzTGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZXJlIGFyZSBubyBjaGlsZCBub2RlcyBhdCBydWxlICcke3J1bGVOYW1lfScuYCk7XG4gICAgfVxuICAgIFxuICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IG5ldyBDbGFzcyhydWxlTmFtZSwgY2hpbGROb2Rlcyk7XG5cbiAgICByZXR1cm4gbm9uVGVybWluYWxOb2RlO1xuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS9ub25UZXJtaW5hbFwiO1xuXG5pbXBvcnQgeyBmaXJzdCB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvYXJyYXlcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTmFtZUJORk5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBnZXROYW1lKCkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBmaXJzdENoaWxkTm9kZSA9IGZpcnN0KGNoaWxkTm9kZXMpLFxuICAgICAgICAgIHRlcm1pbmFsTm9kZSA9IGZpcnN0Q2hpbGROb2RlLCAgLy8vXG4gICAgICAgICAgdGVybWluYWxOb2RlQ29udGVudCA9IHRlcm1pbmFsTm9kZS5nZXRDb250ZW50KCksXG4gICAgICAgICAgbmFtZSA9IHRlcm1pbmFsTm9kZUNvbnRlbnQ7IC8vL1xuICAgIFxuICAgIHJldHVybiBuYW1lO1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMocnVsZU5hbWUsIGNoaWxkTm9kZXMpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKE5hbWVCTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNQYXJ0UnVsZU5hbWVQYXJ0V2l0aExvb2tBaGVhZChwYXJ0KSB7XG4gIGxldCBwYXJ0UnVsZU5hbWVQYXJ0V2l0aExvb2tBaGVhZCA9IGZhbHNlO1xuXG4gIGNvbnN0IHBhcnRSdWxlTmFtZVBhcnQgPSBpc1BhcnRSdWxlTmFtZVBhcnQocGFydCk7XG5cbiAgaWYgKHBhcnRSdWxlTmFtZVBhcnQpIHtcbiAgICBjb25zdCBydWxlTmFtZVBhcnQgPSBwYXJ0LCAgLy8vXG4gICAgICAgICAgbG9va0FoZWFkID0gcnVsZU5hbWVQYXJ0LmlzTG9va0FoZWFkKCk7XG5cbiAgICBpZiAobG9va0FoZWFkKSB7XG4gICAgICBwYXJ0UnVsZU5hbWVQYXJ0V2l0aExvb2tBaGVhZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHBhcnRSdWxlTmFtZVBhcnRXaXRoTG9va0FoZWFkO1xufVxuXG5mdW5jdGlvbiBpc1BhcnRSdWxlTmFtZVBhcnQocGFydCkge1xuICBsZXQgcGFydFJ1bGVOYW1lUGFydCA9IGZhbHNlO1xuXG4gIGNvbnN0IHBhcnRUZXJtaW5hbFBhcnQgPSBwYXJ0LmlzVGVybWluYWxQYXJ0KCksXG4gICAgICAgIHBhcnROb25UZXJtaW5hbFBhcnQgPSAhcGFydFRlcm1pbmFsUGFydDtcblxuICBpZiAocGFydE5vblRlcm1pbmFsUGFydCkge1xuICAgIGNvbnN0IG5vblRlcm1pbmFsUGFydCA9IHBhcnQsXG4gICAgICAgICAgbm9uVGVybWluYWxQYXJ0UnVsZU5hbWVQYXJ0ID0gbm9uVGVybWluYWxQYXJ0LmlzUnVsZU5hbWVQYXJ0KCk7XG5cbiAgICBwYXJ0UnVsZU5hbWVQYXJ0ID0gbm9uVGVybWluYWxQYXJ0UnVsZU5hbWVQYXJ0OyAvLy9cbiAgfVxuXG4gIHJldHVybiBwYXJ0UnVsZU5hbWVQYXJ0O1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBwdXNoIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9hcnJheVwiO1xuaW1wb3J0IHsgaXNQYXJ0UnVsZU5hbWVQYXJ0V2l0aExvb2tBaGVhZCB9IGZyb20gXCIuL3BhcnRcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUGFydHMocGFydHMsIG5vZGVzLCBpbmRleCwgc3RhdGUsIGNhbGxiYWNrKSB7XG4gIGxldCBwYXJzZWQ7XG5cbiAgY29uc3QgcGFydHNMZW5ndGggPSBwYXJ0cy5sZW5ndGg7XG5cbiAgaWYgKGluZGV4ID09PSBwYXJ0c0xlbmd0aCkge1xuICAgIHBhcnNlZCA9IChjYWxsYmFjayAhPT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCkgOlxuICAgICAgICAgICAgICAgICAgdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBwYXJ0ID0gcGFydHNbaW5kZXhdO1xuXG4gICAgcGFyc2VkID0gcGFyc2VQYXJ0T2ZQYXJ0cyhwYXJ0LCBwYXJ0cywgbm9kZXMsIGluZGV4LCBzdGF0ZSwgY2FsbGJhY2spO1xuICB9XG5cbiAgcmV0dXJuIHBhcnNlZDtcbn1cblxuZnVuY3Rpb24gcGFyc2VQYXJ0T2ZQYXJ0cyhwYXJ0LCBwYXJ0cywgbm9kZXMsIGluZGV4LCBzdGF0ZSwgY2FsbGJhY2spIHtcbiAgbGV0IHBhcnNlZDtcblxuICBpZiAoY2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICBjb25zdCBwYXJ0c05vZGVzID0gW107XG5cbiAgICBpbmRleCsrO1xuXG4gICAgcGFyc2VkID0gcGFydC5wYXJzZShub2Rlcywgc3RhdGUsICgpID0+IHBhcnNlUGFydHMocGFydHMsIHBhcnRzTm9kZXMsIGluZGV4LCBzdGF0ZSwgY2FsbGJhY2spKTtcblxuICAgIGlmIChwYXJzZWQpIHtcbiAgICAgIHB1c2gobm9kZXMsIHBhcnRzTm9kZXMpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBjb25zdCBwYXJ0UnVsZU5hbWVQYXJ0V2l0aExvb2tBaGVhZCA9IGlzUGFydFJ1bGVOYW1lUGFydFdpdGhMb29rQWhlYWQocGFydCk7XG5cbiAgICBpZiAocGFydFJ1bGVOYW1lUGFydFdpdGhMb29rQWhlYWQpIHtcbiAgICAgIGNvbnN0IHJ1bGVOYW1lUGFydCA9IHBhcnQsIC8vL1xuICAgICAgICAgICAgcGFydHNOb2RlcyA9IFtdO1xuXG4gICAgICBpbmRleCsrO1xuXG4gICAgICBwYXJzZWQgPSBydWxlTmFtZVBhcnQucGFyc2Uobm9kZXMsIHN0YXRlLCAoKSA9PiBwYXJzZVBhcnRzKHBhcnRzLCBwYXJ0c05vZGVzLCBpbmRleCwgc3RhdGUsIGNhbGxiYWNrKSk7XG5cbiAgICAgIGlmIChwYXJzZWQpIHtcbiAgICAgICAgcHVzaChub2RlcywgcGFydHNOb2Rlcyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcnNlZCA9IHBhcnQucGFyc2Uobm9kZXMsIHN0YXRlLCBjYWxsYmFjayk7XG5cbiAgICAgIGlmIChwYXJzZWQpIHtcbiAgICAgICAgaW5kZXgrKztcblxuICAgICAgICBwYXJzZWQgPSBwYXJzZVBhcnRzKHBhcnRzLCBub2RlcywgaW5kZXgsIHN0YXRlLCBjYWxsYmFjayk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHBhcnNlZDtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgZmlyc3QgfSBmcm9tIFwiLi91dGlsaXRpZXMvYXJyYXlcIjtcbmltcG9ydCB7IHBhcnNlUGFydHMgfSBmcm9tIFwiLi91dGlsaXRpZXMvbG9va0FoZWFkXCI7XG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHBhcnRzKSB7XG4gICAgdGhpcy5wYXJ0cyA9IHBhcnRzO1xuICB9XG5cbiAgZ2V0UGFydHMoKSB7XG4gICAgcmV0dXJuIHRoaXMucGFydHM7XG4gIH1cblxuICBnZXRGaXJzdFBhcnQoKSB7XG4gICAgY29uc3QgZmlyc3RQYXJ0ID0gZmlyc3QodGhpcy5wYXJ0cyk7XG5cbiAgICByZXR1cm4gZmlyc3RQYXJ0O1xuICB9XG5cbiAgZ2V0UGFydHNMZW5ndGgoKSB7XG4gICAgY29uc3QgcGFydHNMZW5ndGggPSB0aGlzLnBhcnRzLmxlbmd0aDtcblxuICAgIHJldHVybiBwYXJ0c0xlbmd0aDtcbiAgfVxuXG4gIGFkZFBhcnQocGFydCkge1xuICAgIHRoaXMucGFydHMucHVzaChwYXJ0KTtcbiAgfVxuXG4gIHBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spIHtcbiAgICBsZXQgcGFyc2VkO1xuXG4gICAgY29uc3QgaW5kZXggPSAwO1xuXG4gICAgcGFyc2VkID0gcGFyc2VQYXJ0cyh0aGlzLnBhcnRzLCBub2RlcywgaW5kZXgsIHN0YXRlLCBjYWxsYmFjayk7XG5cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG5cbiAgYXNTdHJpbmcoKSB7XG4gICAgY29uc3QgcGFydHNTdHJpbmcgPSB0aGlzLnBhcnRzLnJlZHVjZSgocGFydHNTdHJpbmcsIHBhcnQpID0+IHtcbiAgICAgICAgICBjb25zdCBwYXJ0U3RyaW5nID0gcGFydC5hc1N0cmluZygpO1xuXG4gICAgICAgICAgaWYgKHBhcnRzU3RyaW5nID09PSBFTVBUWV9TVFJJTkcpIHtcbiAgICAgICAgICAgIHBhcnRzU3RyaW5nID0gcGFydFN0cmluZzsgLy8vXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBhcnRzU3RyaW5nID0gYCR7cGFydHNTdHJpbmd9ICR7cGFydFN0cmluZ31gO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBwYXJ0c1N0cmluZztcbiAgICAgICAgfSwgRU1QVFlfU1RSSU5HKSxcbiAgICAgICAgc3RyaW5nID0gcGFydHNTdHJpbmc7IC8vL1xuXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlcm1pbmFsUGFydCB7XG4gIGlzTm9uVGVybWluYWxQYXJ0KCkge1xuICAgIGNvbnN0IG5vblRlcm1pbmFsUGFydCA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIG5vblRlcm1pbmFsUGFydDtcbiAgfVxuXG4gIGlzVGVybWluYWxQYXJ0KCkge1xuICAgIGNvbnN0IHRlcm1pbmFsUGFydCA9IHRydWU7XG4gICAgXG4gICAgcmV0dXJuIHRlcm1pbmFsUGFydDtcbiAgfVxuXG4gIGlzTm9XaGl0ZXNwYWNlUGFydCgpIHtcbiAgICBjb25zdCBub1doaXRlc3BhY2VQYXJ0ID0gZmFsc2U7XG5cbiAgICByZXR1cm4gbm9XaGl0ZXNwYWNlUGFydDtcbiAgfVxuXG4gIGNsb25lKFBhcnQsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cykgeyByZXR1cm4gbmV3IFBhcnQoLi4ucmVtYWluaW5nQXJndW1lbnRzKTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSBmcm9tIFwiLi92ZXJ0aWNhbEJyYW5jaFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXJtaW5hbE5vZGVQYXJzZVRyZWUgZXh0ZW5kcyBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSB7XG4gIHN0YXRpYyBmcm9tVGVybWluYWxOb2RlVG9rZW5zQW5kQWJyaWRnZWQodGVybWluYWxOb2RlLCB0b2tlbnMsIGFicmlkZ2VkKSB7XG4gICAgY29uc3Qgc2lnbmlmaWNhbnRUb2tlbiA9IHRlcm1pbmFsTm9kZS5nZXRTaWduaWZpY2FudFRva2VuKCksXG4gICAgICAgICAgY29udGVudCA9IHRlcm1pbmFsTm9kZS5nZXRDb250ZW50KCksXG4gICAgICAgICAgdHlwZSA9IHNpZ25pZmljYW50VG9rZW4uZ2V0VHlwZSgpLFxuICAgICAgICAgIHRva2VuSW5kZXggPSB0b2tlbnMuaW5kZXhPZihzaWduaWZpY2FudFRva2VuKSxcbiAgICAgICAgICBzdHJpbmcgPSBhYnJpZGdlZCA/XG4gICAgICAgICAgICAgICAgICAgICBgJHtjb250ZW50fVske3R5cGV9XWAgOlxuICAgICAgICAgICAgICAgICAgICAgICBgJHtjb250ZW50fVske3R5cGV9XSgke3Rva2VuSW5kZXh9KWAsXG4gICAgICAgICAgc3RyaW5nTGVuZ3RoID0gc3RyaW5nLmxlbmd0aCxcbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZVdpZHRoID0gc3RyaW5nTGVuZ3RoLCAvLy9cbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSA9IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmZyb21XaWR0aCh2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZVdpZHRoKSxcbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID0gdmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZ2V0VmVydGljYWxCcmFuY2hQb3NpdGlvbigpLFxuICAgICAgICAgIHRlcm1pbmFsTm9kZVBhcnNlVHJlZSA9IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmZyb21TdHJpbmdBbmRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKFRlcm1pbmFsTm9kZVBhcnNlVHJlZSwgc3RyaW5nLCB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKTtcblxuICAgIHRlcm1pbmFsTm9kZVBhcnNlVHJlZS5hcHBlbmRUb1RvcCh2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSk7XG5cbiAgICByZXR1cm4gdGVybWluYWxOb2RlUGFyc2VUcmVlO1xuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFRlcm1pbmFsTm9kZVBhcnNlVHJlZSBmcm9tIFwiLi4vcGFyc2VUcmVlL3Rlcm1pbmFsTm9kZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXJtaW5hbE5vZGUge1xuICBjb25zdHJ1Y3RvcihzaWduaWZpY2FudFRva2VuKSB7XG4gICAgdGhpcy5zaWduaWZpY2FudFRva2VuID0gc2lnbmlmaWNhbnRUb2tlbjtcbiAgfVxuXG4gIGdldFNpZ25pZmljYW50VG9rZW4oKSB7XG4gICAgcmV0dXJuIHRoaXMuc2lnbmlmaWNhbnRUb2tlbjtcbiAgfVxuXG4gIGdldEZpcnN0U2lnbmlmaWNhbnRUb2tlbigpIHtcbiAgICBjb25zdCBmaXJzdFNpZ25pZmljYW50VG9rZW4gPSB0aGlzLnNpZ25pZmljYW50VG9rZW47ICAvLy9cblxuICAgIHJldHVybiBmaXJzdFNpZ25pZmljYW50VG9rZW47XG4gIH1cblxuICBnZXRMYXN0U2lnbmlmaWNhbnRUb2tlbigpIHtcbiAgICBjb25zdCBsYXN0U2lnbmlmaWNhbnRUb2tlbiA9IHRoaXMuc2lnbmlmaWNhbnRUb2tlbjsgIC8vL1xuXG4gICAgcmV0dXJuIGxhc3RTaWduaWZpY2FudFRva2VuO1xuICB9XG5cbiAgaXNOb1doaXRlc3BhY2VOb2RlKCkge1xuICAgIGNvbnN0IG5vV2hpdGVzcGFjZU5vZGUgPSBmYWxzZTtcblxuICAgIHJldHVybiBub1doaXRlc3BhY2VOb2RlO1xuICB9XG5cbiAgaXNUZXJtaW5hbE5vZGUoKSB7XG4gICAgY29uc3QgdGVybWluYWxOb2RlID0gdHJ1ZTtcbiAgICBcbiAgICByZXR1cm4gdGVybWluYWxOb2RlO1xuICB9XG5cbiAgaXNOb25UZXJtaW5hbE5vZGUoKSB7XG4gICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gZmFsc2U7XG5cbiAgICByZXR1cm4gbm9uVGVybWluYWxOb2RlO1xuICB9XG5cbiAgZ2V0VHlwZSgpIHsgcmV0dXJuIHRoaXMuc2lnbmlmaWNhbnRUb2tlbi5nZXRUeXBlKCk7IH1cblxuICBnZXRDb250ZW50KCkgeyByZXR1cm4gdGhpcy5zaWduaWZpY2FudFRva2VuLmdldENvbnRlbnQoKTsgfVxuXG4gIHNldFNpZ25pZmljYW50VG9rZW4oc2lnbmlmaWNhbnRUb2tlbikge1xuICAgIHRoaXMuc2lnbmlmaWNhbnRUb2tlbiA9IHNpZ25pZmljYW50VG9rZW47XG4gIH1cblxuICBhc1BhcnNlVHJlZSh0b2tlbnMsIGFicmlkZ2VkID0gZmFsc2UpIHtcbiAgICBjb25zdCB0ZXJtaW5hbE5vZGUgPSB0aGlzLCAgLy8vXG4gICAgICAgICAgdGVybWluYWxOb2RlUGFyc2VUcmVlID0gVGVybWluYWxOb2RlUGFyc2VUcmVlLmZyb21UZXJtaW5hbE5vZGVUb2tlbnNBbmRBYnJpZGdlZCh0ZXJtaW5hbE5vZGUsIHRva2VucywgYWJyaWRnZWQpLFxuICAgICAgICAgIHBhcnNlVHJlZSA9IHRlcm1pbmFsTm9kZVBhcnNlVHJlZTsgIC8vL1xuXG4gICAgcmV0dXJuIHBhcnNlVHJlZTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tU2lnbmlmaWNhbnRUb2tlbihDbGFzcywgc2lnbmlmaWNhbnRUb2tlbikge1xuICAgIGlmIChzaWduaWZpY2FudFRva2VuID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHNpZ25pZmljYW50VG9rZW4gPSBDbGFzczsgLy8vXG4gICAgICBDbGFzcyA9IFRlcm1pbmFsTm9kZTsgLy8vXG4gICAgfVxuXG4gICAgY29uc3QgdGVybWluYWxOb2RlID0gbmV3IENsYXNzKHNpZ25pZmljYW50VG9rZW4pO1xuICAgIFxuICAgIHJldHVybiB0ZXJtaW5hbE5vZGU7XG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVGVybWluYWxQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L3Rlcm1pbmFsXCI7XG5pbXBvcnQgVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9ub2RlL3Rlcm1pbmFsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNpZ25pZmljYW50VG9rZW5UeXBlUGFydCBleHRlbmRzIFRlcm1pbmFsUGFydCB7XG4gIGNvbnN0cnVjdG9yKHNpZ25pZmljYW50VG9rZW5UeXBlKSB7XG4gICAgc3VwZXIoKTtcbiAgICBcbiAgICB0aGlzLnNpZ25pZmljYW50VG9rZW5UeXBlID0gc2lnbmlmaWNhbnRUb2tlblR5cGU7XG4gIH1cblxuICBwYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrKSB7XG4gICAgbGV0IHBhcnNlZDtcblxuICAgIGxldCB0ZXJtaW5hbE5vZGUgPSBudWxsO1xuICAgIFxuICAgIGNvbnN0IHNhdmVkSW5kZXggPSBzdGF0ZS5nZXRTYXZlZEluZGV4KCksXG5cdFx0ICAgICAgbmV4dFNpZ25pZmljYW50VG9rZW4gPSBzdGF0ZS5nZXROZXh0U2lnbmlmaWNhbnRUb2tlbigpLFxuXHRcdFx0XHRcdHNpZ25pZmljYW50VG9rZW4gPSBuZXh0U2lnbmlmaWNhbnRUb2tlbjsgLy8vXG5cbiAgICBpZiAoc2lnbmlmaWNhbnRUb2tlbiAhPT0gbnVsbCkge1xuICAgICAgY29uc3Qgc2lnbmlmaWNhbnRUb2tlblR5cGUgPSBzaWduaWZpY2FudFRva2VuLmdldFR5cGUoKTtcblxuICAgICAgaWYgKHNpZ25pZmljYW50VG9rZW5UeXBlID09PSB0aGlzLnNpZ25pZmljYW50VG9rZW5UeXBlKSB7XG4gICAgICAgIHRlcm1pbmFsTm9kZSA9IFRlcm1pbmFsTm9kZS5mcm9tU2lnbmlmaWNhbnRUb2tlbihzaWduaWZpY2FudFRva2VuKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwYXJzZWQgPSAodGVybWluYWxOb2RlICE9PSBudWxsKTtcblxuICAgIGlmIChwYXJzZWQpIHtcbiAgICAgIG5vZGVzLnB1c2godGVybWluYWxOb2RlKTtcblxuICAgICAgaWYgKGNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICAgIHBhcnNlZCA9IGNhbGxiYWNrKCk7XG5cbiAgICAgICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgICAgICBub2Rlcy5wb3AoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghcGFyc2VkKSB7XG4gICAgICBzdGF0ZS5iYWNrdHJhY2soc2F2ZWRJbmRleCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfVxuXG4gIGFzU3RyaW5nKCkge1xuICAgIGNvbnN0IHN0cmluZyA9IGBbJHt0aGlzLnNpZ25pZmljYW50VG9rZW5UeXBlfV1gO1xuICAgIFxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuICBjbG9uZSgpIHsgcmV0dXJuIHN1cGVyLmNsb25lKFNpZ25pZmljYW50VG9rZW5UeXBlUGFydCwgdGhpcy5zaWduaWZpY2FudFRva2VuVHlwZSk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyB0eXBlcyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBTaWduaWZpY2FudFRva2VuVHlwZVBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvc2lnbmlmaWNhbnRUb2tlblR5cGVcIjtcblxuY29uc3QgeyBuYW1lVHlwZSB9ID0gdHlwZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5hbWVEZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IG5hbWVTaWduaWZpY2FudFRva2VuVHlwZSA9IG5hbWVUeXBlLCAgLy8vXG4gICAgICAgICAgbmFtZVNpZ25pZmljYW50VG9rZW5UeXBlUGFydCA9IG5ldyBTaWduaWZpY2FudFRva2VuVHlwZVBhcnQobmFtZVNpZ25pZmljYW50VG9rZW5UeXBlKSxcbiAgICAgICAgICBwYXJ0cyA9IFtcbiAgICAgICAgICAgIG5hbWVTaWduaWZpY2FudFRva2VuVHlwZVBhcnRcbiAgICAgICAgICBdO1xuXG4gICAgc3VwZXIocGFydHMpXG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgTmFtZVJ1bGVOYW1lID0gXCJuYW1lXCI7XG5leHBvcnQgY29uc3QgUGFydFJ1bGVOYW1lID0gXCJwYXJ0XCI7XG5leHBvcnQgY29uc3QgUnVsZVJ1bGVOYW1lID0gXCJydWxlXCI7XG5leHBvcnQgY29uc3QgRXJyb3JSdWxlTmFtZSA9IFwiZXJyb3JcIjtcbmV4cG9ydCBjb25zdCBSdWxlTmFtZVJ1bGVOYW1lID0gXCJydWxlTmFtZVwiO1xuZXhwb3J0IGNvbnN0IERvY3VtZW50UnVsZU5hbWUgPSBcImRvY3VtZW50XCI7XG5leHBvcnQgY29uc3QgV2lsZGNhcmRSdWxlTmFtZSA9IFwid2lsZGNhcmRcIjtcbmV4cG9ydCBjb25zdCBFbmRPZkxpbmVSdWxlTmFtZSA9IFwiZW5kT2ZMaW5lXCI7XG5leHBvcnQgY29uc3QgRGVmaW5pdGlvblJ1bGVOYW1lID0gXCJkZWZpbml0aW9uXCI7XG5leHBvcnQgY29uc3QgUXVhbnRpZmllclJ1bGVOYW1lID0gXCJxdWFudGlmaWVyXCI7XG5leHBvcnQgY29uc3QgRGVmaW5pdGlvbnNSdWxlTmFtZSA9IFwiZGVmaW5pdGlvbnNcIjtcbmV4cG9ydCBjb25zdCBUZXJtaW5hbFBhcnRSdWxlTmFtZSA9IFwidGVybWluYWxQYXJ0XCI7XG5leHBvcnQgY29uc3QgQ2hvaWNlT2ZQYXJ0c1J1bGVOYW1lID0gXCJjaG9pY2VPZlBhcnRzXCI7XG5leHBvcnQgY29uc3QgVGVybWluYWxTeW1ib2xSdWxlTmFtZSA9IFwidGVybWluYWxTeW1ib2xcIjtcbmV4cG9ydCBjb25zdCBOb25UZXJtaW5hbFBhcnRSdWxlTmFtZSA9IFwibm9uVGVybWluYWxQYXJ0XCI7XG5leHBvcnQgY29uc3QgU2VxdWVuY2VPZlBhcnRzUnVsZU5hbWUgPSBcInNlcXVlbmNlT2ZQYXJ0c1wiO1xuZXhwb3J0IGNvbnN0IE5vV2hpdGVzcGFjZVBhcnRSdWxlTmFtZSA9IFwibm9XaGl0ZXNwYWNlUGFydFwiO1xuZXhwb3J0IGNvbnN0IExvb2tBaGVhZE1vZGlmaWVyUnVsZU5hbWUgPSBcImxvb2tBaGVhZE1vZGlmaWVyXCI7XG5leHBvcnQgY29uc3QgQW1iaWd1b3VzTW9kaWZpZXJSdWxlTmFtZSA9IFwiQW1iaWd1b3VzTW9kaWZpZXJcIjtcbmV4cG9ydCBjb25zdCBSZWd1bGFyRXhwcmVzc2lvblJ1bGVOYW1lID0gXCJyZWd1bGFyRXhwcmVzc2lvblwiO1xuZXhwb3J0IGNvbnN0IE9wdGlvbmFsUXVhbnRpZmllclJ1bGVOYW1lID0gXCJvcHRpb25hbFF1YW50aWZpZXJcIjtcbmV4cG9ydCBjb25zdCBPbmVPck1vcmVRdWFudGlmaWVyUnVsZU5hbWUgPSBcIm9uZU9yTW9yZVF1YW50aWZpZXJcIjtcbmV4cG9ydCBjb25zdCBaZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lID0gXCJ6ZXJvT3JNb3JlUXVhbnRpZmllclwiO1xuZXhwb3J0IGNvbnN0IFNpZ25pZmljYW50VG9rZW5UeXBlUnVsZU5hbWUgPSBcInNpZ25pZmljYW50VG9rZW5UeXBlXCI7XG5cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBOYW1lQk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvbmFtZVwiO1xuaW1wb3J0IE5hbWVEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL25hbWVcIjtcblxuaW1wb3J0IHsgTmFtZVJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOYW1lUnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBuYW1lRGVmaW5pdGlvbiA9IG5ldyBOYW1lRGVmaW5pdGlvbigpLFxuICAgICAgICAgIG5hbWUgPSBOYW1lUnVsZU5hbWUsXG4gICAgICAgICAgYW1iaWd1b3VzID0gZmFsc2UsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBuYW1lRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IE5hbWVCTkZOb2RlO1xuICAgIFxuICAgIHN1cGVyKG5hbWUsIGFtYmlndW91cywgZGVmaW5pdGlvbnMsIE5vZGUpXG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOb25UZXJtaW5hbFBhcnQge1xuICBjb25zdHJ1Y3Rvcih0eXBlKSB7XG4gICAgdGhpcy50eXBlID0gdHlwZTsgIFxuICB9XG4gIFxuICBnZXRUeXBlKCkge1xuICAgIHJldHVybiB0aGlzLnR5cGU7XG4gIH1cblxuICBpc05vblRlcm1pbmFsUGFydCgpIHtcbiAgICBjb25zdCBub25UZXJtaW5hbFBhcnQgPSB0cnVlO1xuXG4gICAgcmV0dXJuIG5vblRlcm1pbmFsUGFydDtcbiAgfVxuXG4gIGlzVGVybWluYWxQYXJ0KCkge1xuICAgIGNvbnN0IHRlcm1pbmFsUGFydCA9IGZhbHNlO1xuICAgIFxuICAgIHJldHVybiB0ZXJtaW5hbFBhcnQ7XG4gIH1cblxuICBpc1J1bGVOYW1lUGFydCgpIHtcbiAgICBjb25zdCBydWxlTmFtZVBhcnQgPSBmYWxzZTtcblxuICAgIHJldHVybiBydWxlTmFtZVBhcnQ7XG4gIH1cblxuICBjbG9uZShQYXJ0LCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHsgcmV0dXJuIG5ldyBQYXJ0KC4uLnJlbWFpbmluZ0FyZ3VtZW50cyk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgUnVsZU5hbWVQYXJ0VHlwZSA9IFwicnVsZU5hbWVQYXJ0XCI7XG5leHBvcnQgY29uc3QgT3B0aW9uYWxQYXJ0UGFydFR5cGUgPSBcIm9wdGlvbmFsUGFydFwiO1xuZXhwb3J0IGNvbnN0IENob2ljZU9mUGFydHNQYXJ0VHlwZSA9IFwiY2hvaWNlT2ZQYXJ0c1wiO1xuZXhwb3J0IGNvbnN0IE9uZU9yTW9yZVBhcnRzUGFydFR5cGUgPSBcIm9uZU9yTW9yZVBhcnRzXCI7XG5leHBvcnQgY29uc3QgWmVyb09yTW9yZVBhcnRzUGFydFR5cGUgPSBcInplcm9Pck1vcmVQYXJ0c1wiO1xuZXhwb3J0IGNvbnN0IFNlcXVlbmNlT2ZQYXJ0c1BhcnRUeXBlID0gXCJzZXF1ZW5jZU9mUGFydHNcIjtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBSdWxlTmFtZVBhcnRUeXBlLFxuICBPcHRpb25hbFBhcnRQYXJ0VHlwZSxcbiAgQ2hvaWNlT2ZQYXJ0c1BhcnRUeXBlLFxuICBPbmVPck1vcmVQYXJ0c1BhcnRUeXBlLFxuICBaZXJvT3JNb3JlUGFydHNQYXJ0VHlwZSxcbiAgU2VxdWVuY2VPZlBhcnRzUGFydFR5cGVcbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L25vblRlcm1pbmFsXCI7XG5cbmltcG9ydCB7IHB1c2ggfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5pbXBvcnQgeyBPcHRpb25hbFBhcnRQYXJ0VHlwZSB9IGZyb20gXCIuLi8uLi9wYXJ0VHlwZXNcIjtcblxuY29uc3QgeyBxdWVzdGlvbk1hcmsgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBPcHRpb25hbFBhcnRQYXJ0IGV4dGVuZHMgTm9uVGVybWluYWxQYXJ0IHtcbiAgY29uc3RydWN0b3IocGFydCkge1xuICAgIGNvbnN0IHR5cGUgPSBPcHRpb25hbFBhcnRQYXJ0VHlwZTsgLy8vXG5cbiAgICBzdXBlcih0eXBlKTtcblxuICAgIHRoaXMucGFydCA9IHBhcnQ7XG4gIH1cblxuICBnZXRQYXJ0KCkge1xuICAgIHJldHVybiB0aGlzLnBhcnQ7XG4gIH1cblxuICBwYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrKSB7XG4gICAgbGV0IHBhcnNlZDtcblxuICAgIGNvbnN0IHBhcnQgPSB0aGlzLmdldFBhcnQoKSxcbiAgICAgICAgICBwYXJ0Tm9kZXMgPSBbXSxcbiAgICAgICAgICBzYXZlZEluZGV4ID0gc3RhdGUuZ2V0U2F2ZWRJbmRleCgpO1xuXG4gICAgcGFyc2VkID0gcGFyc2VQYXJ0KHBhcnQsIHBhcnROb2Rlcywgc3RhdGUsIGNhbGxiYWNrKTtcblxuICAgIGlmIChwYXJzZWQpIHtcbiAgICAgIHB1c2gobm9kZXMsIHBhcnROb2Rlcyk7XG4gICAgfVxuXG4gICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgIHN0YXRlLmJhY2t0cmFjayhzYXZlZEluZGV4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG5cbiAgYXNTdHJpbmcoKSB7XG4gICAgY29uc3Qgb3BlcmF0b3JTdHJpbmcgPSBxdWVzdGlvbk1hcmssICAvLy9cbiAgICAgICAgICBwYXJ0U3RyaW5nID0gdGhpcy5wYXJ0LmFzU3RyaW5nKCksXG4gICAgICAgICAgc3RyaW5nID0gYCR7cGFydFN0cmluZ30ke29wZXJhdG9yU3RyaW5nfWA7XG5cbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG5cbiAgY2xvbmUoKSB7IHJldHVybiBzdXBlci5jbG9uZShPcHRpb25hbFBhcnRQYXJ0LCB0aGlzLnBhcnQpOyB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlUGFydChwYXJ0LCBub2Rlcywgc3RhdGUsIGNhbGxiYWNrKSB7XG4gIGxldCBwYXJzZWQ7XG5cbiAgaWYgKGNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgcGFyc2VkID0gY2FsbGJhY2soKTtcblxuICAgIGlmICghcGFyc2VkKSB7XG4gICAgICBwYXJzZWQgPSBwYXJ0LnBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBwYXJ0LnBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spO1xuXG4gICAgcGFyc2VkID0gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBwYXJzZWQ7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbFBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvbm9uVGVybWluYWxcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29sbGVjdGlvbk9mUGFydHNQYXJ0IGV4dGVuZHMgTm9uVGVybWluYWxQYXJ0IHtcbiAgY29uc3RydWN0b3IodHlwZSwgcGFydCkge1xuICAgIHN1cGVyKHR5cGUpO1xuXG4gICAgdGhpcy5wYXJ0ID0gcGFydDtcbiAgfVxuXG4gIGdldFBhcnQoKSB7XG4gICAgcmV0dXJuIHRoaXMucGFydDtcbiAgfVxuICBcbiAgYXNTdHJpbmcob3BlcmF0b3JTdHJpbmcpIHtcbiAgICBjb25zdCBwYXJ0U3RyaW5nID0gdGhpcy5wYXJ0LmFzU3RyaW5nKCksXG4gICAgICAgICAgc3RyaW5nID0gYCR7cGFydFN0cmluZ30ke29wZXJhdG9yU3RyaW5nfWA7XG5cbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG5cbiAgY2xvbmUoUGFydCkgeyByZXR1cm4gc3VwZXIuY2xvbmUoUGFydCwgdGhpcy5wYXJ0KTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgQ29sbGVjdGlvbk9mUGFydHNQYXJ0IGZyb20gXCIuL2NvbGxlY3Rpb25PZlBhcnRzXCI7XG5cbmltcG9ydCB7IHB1c2ggfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5pbXBvcnQgeyBPbmVPck1vcmVQYXJ0c1BhcnRUeXBlIH0gZnJvbSBcIi4uLy4uL3BhcnRUeXBlc1wiO1xuXG5jb25zdCB7IHBsdXMgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBPbmVPck1vcmVQYXJ0c1BhcnQgZXh0ZW5kcyBDb2xsZWN0aW9uT2ZQYXJ0c1BhcnQge1xuICBjb25zdHJ1Y3RvcihwYXJ0KSB7XG4gICAgY29uc3QgdHlwZSA9IE9uZU9yTW9yZVBhcnRzUGFydFR5cGU7IC8vL1xuXG4gICAgc3VwZXIodHlwZSwgcGFydCk7XG4gIH1cblxuICBwYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrKSB7XG4gICAgbGV0IHBhcnNlZDtcblxuICAgIGNvbnN0IHBhcnQgPSB0aGlzLmdldFBhcnQoKSxcbiAgICAgICAgICBwYXJ0Tm9kZXMgPSBbXSxcbiAgICAgICAgICBzYXZlZEluZGV4ID0gc3RhdGUuZ2V0U2F2ZWRJbmRleCgpO1xuXG4gICAgcGFyc2VkID0gcGFyc2VQYXJ0KHBhcnQsIHBhcnROb2Rlcywgc3RhdGUsIGNhbGxiYWNrKTtcblxuICAgIGlmIChwYXJzZWQpIHtcbiAgICAgIHB1c2gobm9kZXMsIHBhcnROb2Rlcyk7XG4gICAgfVxuXG4gICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgIHN0YXRlLmJhY2t0cmFjayhzYXZlZEluZGV4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG5cbiAgYXNTdHJpbmcoKSB7XG4gICAgY29uc3Qgb3BlcmF0b3JTdHJpbmcgPSBwbHVzLCAgLy8vXG4gICAgICAgICAgc3RyaW5nID0gc3VwZXIuYXNTdHJpbmcob3BlcmF0b3JTdHJpbmcpO1xuXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxuXG4gIGNsb25lKCkgeyByZXR1cm4gc3VwZXIuY2xvbmUoT25lT3JNb3JlUGFydHNQYXJ0KTsgfVxufVxuXG5mdW5jdGlvbiBwYXJzZVBhcnQocGFydCwgbm9kZXMsIHN0YXRlLCBjYWxsYmFjaykge1xuICBsZXQgcGFyc2VkO1xuXG4gIGlmIChjYWxsYmFjayAhPT0gbnVsbCkge1xuICAgIHBhcnNlZCA9IHBhcnQucGFyc2Uobm9kZXMsIHN0YXRlLCAoKSA9PiB7XG4gICAgICBsZXQgcGFyc2VkID0gY2FsbGJhY2soKTtcblxuICAgICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgICAgcGFyc2VkID0gcGFyc2VQYXJ0KHBhcnQsIG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcGFyc2VkO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIHBhcnNlZCA9IHBhcnQucGFyc2Uobm9kZXMsIHN0YXRlLCBjYWxsYmFjayk7XG5cbiAgICBpZiAocGFyc2VkKSB7XG4gICAgICBwYXJzZVBhcnQocGFydCwgbm9kZXMsIHN0YXRlLCBjYWxsYmFjaylcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcGFyc2VkO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IENvbGxlY3Rpb25PZlBhcnRzUGFydCBmcm9tIFwiLi9jb2xsZWN0aW9uT2ZQYXJ0c1wiO1xuXG5pbXBvcnQgeyBwdXNoIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9hcnJheVwiO1xuaW1wb3J0IHsgWmVyb09yTW9yZVBhcnRzUGFydFR5cGUgfSBmcm9tIFwiLi4vLi4vcGFydFR5cGVzXCI7XG5cbmNvbnN0IHsgYXN0ZXJpc2sgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBaZXJvT3JNb3JlUGFydHNQYXJ0IGV4dGVuZHMgQ29sbGVjdGlvbk9mUGFydHNQYXJ0IHtcbiAgY29uc3RydWN0b3IocGFydCkge1xuICAgIGNvbnN0IHR5cGUgPSBaZXJvT3JNb3JlUGFydHNQYXJ0VHlwZTsgLy8vXG5cbiAgICBzdXBlcih0eXBlLCBwYXJ0KTtcbiAgfVxuXG4gIHBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spIHtcbiAgICBsZXQgcGFyc2VkO1xuXG4gICAgY29uc3QgcGFydCA9IHRoaXMuZ2V0UGFydCgpLFxuICAgICAgICAgIHBhcnROb2RlcyA9IFtdLFxuICAgICAgICAgIHNhdmVkSW5kZXggPSBzdGF0ZS5nZXRTYXZlZEluZGV4KCk7XG5cbiAgICBwYXJzZWQgPSBwYXJzZVBhcnQocGFydCwgcGFydE5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spO1xuXG4gICAgaWYgKHBhcnNlZCkge1xuICAgICAgcHVzaChub2RlcywgcGFydE5vZGVzKTtcbiAgICB9XG5cbiAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgc3RhdGUuYmFja3RyYWNrKHNhdmVkSW5kZXgpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZWQ7XG4gIH1cblxuICBhc1N0cmluZygpIHtcbiAgICBjb25zdCBvcGVyYXRvclN0cmluZyA9IGFzdGVyaXNrLCAgLy8vXG4gICAgICAgICAgc3RyaW5nID0gc3VwZXIuYXNTdHJpbmcob3BlcmF0b3JTdHJpbmcpO1xuXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxuXG4gIGNsb25lKCkgeyByZXR1cm4gc3VwZXIuY2xvbmUoWmVyb09yTW9yZVBhcnRzUGFydCk7IH1cbn1cblxuZnVuY3Rpb24gcGFyc2VQYXJ0KHBhcnQsIG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spIHtcbiAgbGV0IHBhcnNlZDtcblxuICBpZiAoY2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICBwYXJzZWQgPSBjYWxsYmFjaygpO1xuXG4gICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgIHBhcnNlZCA9IHBhcnQucGFyc2Uobm9kZXMsIHN0YXRlLCAoKSA9PiBwYXJzZVBhcnQocGFydCwgbm9kZXMsIHN0YXRlLCBjYWxsYmFjaykpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBwYXJzZWQgPSBwYXJ0LnBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spO1xuXG4gICAgaWYgKHBhcnNlZCkge1xuICAgICAgcGFyc2VQYXJ0KHBhcnQsIG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIHBhcnNlZCA9IHRydWU7XG4gIH1cblxuICByZXR1cm4gcGFyc2VkO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBmaXJzdCB9IGZyb20gXCIuLi91dGlsaXRpZXMvYXJyYXlcIjtcbmltcG9ydCB7IExvb2tBaGVhZE1vZGlmaWVyUnVsZU5hbWUsIFF1YW50aWZpZXJSdWxlTmFtZSwgUnVsZU5hbWVSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzTm9kZUNob2ljZU5vZGUobm9kZSkge1xuICBsZXQgbm9kZU5vQ2hvaWNlTm9kZSA9IGZhbHNlO1xuXG4gIGNvbnN0IG5vZGVUZXJtaW5hbE5vZGUgPSBub2RlLmlzVGVybWluYWxOb2RlKCk7XG5cbiAgaWYgKG5vZGVUZXJtaW5hbE5vZGUpIHtcbiAgICBjb25zdCB0ZXJtaW5hbE5vZGUgPSBub2RlLCAgLy8vXG4gICAgICAgICAgdGVybWluYWxOb2RlQ29udGVudCA9IHRlcm1pbmFsTm9kZS5nZXRDb250ZW50KCk7XG5cbiAgICBub2RlTm9DaG9pY2VOb2RlID0gKHRlcm1pbmFsTm9kZUNvbnRlbnQgPT09IFwifFwiKTtcbiAgfVxuXG4gIHJldHVybiBub2RlTm9DaG9pY2VOb2RlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNOb2RlUnVsZU5hbWVOb2RlKG5vZGUpIHtcbiAgbGV0IG5vZGVSdWxlTmFtZU5vZGUgPSBmYWxzZTtcblxuICBjb25zdCBub2RlVGVybWluYWxOb2RlID0gbm9kZS5pc1Rlcm1pbmFsTm9kZSgpLFxuICAgICAgICBub2RlTm9uVGVybWluYWxOb2RlID0gIW5vZGVUZXJtaW5hbE5vZGU7XG5cbiAgaWYgKG5vZGVOb25UZXJtaW5hbE5vZGUpIHtcbiAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBub2RlLCAvLy9cbiAgICAgICAgICBub25UZXJtaW5hbE5vZGVSdWxlTmFtZSA9IG5vblRlcm1pbmFsTm9kZS5nZXRSdWxlTmFtZSgpO1xuXG4gICAgbm9kZVJ1bGVOYW1lTm9kZSA9IChub25UZXJtaW5hbE5vZGVSdWxlTmFtZSA9PT0gUnVsZU5hbWVSdWxlTmFtZSk7XG4gIH1cblxuICByZXR1cm4gbm9kZVJ1bGVOYW1lTm9kZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTm9kZVF1YW50aWZpZXJOb2RlKG5vZGUpIHtcbiAgbGV0IG5vZGVRdWFudGlmaWVyTm9kZSA9IGZhbHNlO1xuXG4gIGNvbnN0IG5vZGVOb25UZXJtaW5hbE5vZGUgPSBub2RlLmlzTm9uVGVybWluYWxOb2RlKCk7XG5cbiAgaWYgKG5vZGVOb25UZXJtaW5hbE5vZGUpIHtcbiAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBub2RlLCAvLy9cbiAgICAgICAgICBydWxlTmFtZSA9IG5vblRlcm1pbmFsTm9kZS5nZXRSdWxlTmFtZSgpLFxuICAgICAgICAgIHJ1bGVOYW1lUXVhbnRpZmllclJ1bGVOYW1lID0gKHJ1bGVOYW1lID09PSBRdWFudGlmaWVyUnVsZU5hbWUpO1xuXG4gICAgbm9kZVF1YW50aWZpZXJOb2RlID0gcnVsZU5hbWVRdWFudGlmaWVyUnVsZU5hbWU7ICAvLy9cbiAgfVxuXG4gIHJldHVybiBub2RlUXVhbnRpZmllck5vZGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc05vZGVMb29rQWhlYWRNb2RpZmllck5vZGUobm9kZSkge1xuICBsZXQgbm9kZUxvb2tBaGVhZE1vZGlmaWVyTm9kZSA9IGZhbHNlO1xuXG4gIGNvbnN0IG5vZGVOb25UZXJtaW5hbE5vZGUgPSBub2RlLmlzTm9uVGVybWluYWxOb2RlKCk7XG5cbiAgaWYgKG5vZGVOb25UZXJtaW5hbE5vZGUpIHtcbiAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBub2RlLCAvLy9cbiAgICAgICAgICBydWxlTmFtZSA9IG5vblRlcm1pbmFsTm9kZS5nZXRSdWxlTmFtZSgpLFxuICAgICAgICAgIHJ1bGVOYW1lTG9va0FoZWFkTW9kaWZpZXJSdWxlTmFtZSA9IChydWxlTmFtZSA9PT0gTG9va0FoZWFkTW9kaWZpZXJSdWxlTmFtZSk7XG5cbiAgICBub2RlTG9va0FoZWFkTW9kaWZpZXJOb2RlID0gcnVsZU5hbWVMb29rQWhlYWRNb2RpZmllclJ1bGVOYW1lOyAgLy8vXG4gIH1cblxuICByZXR1cm4gbm9kZUxvb2tBaGVhZE1vZGlmaWVyTm9kZTtcblxufVxuXG5leHBvcnQgZnVuY3Rpb24gcnVsZU5hbWVGcm9tUXVhbnRpZmllck5vZGUocXVhbnRpZmllck5vZGUpIHtcbiAgbGV0IG5vblRlcm1pbmFsTm9kZTtcblxuICBub25UZXJtaW5hbE5vZGUgPSBxdWFudGlmaWVyTm9kZTsgLy8vXG5cbiAgY29uc3QgY2hpbGROb2RlcyA9IG5vblRlcm1pbmFsTm9kZS5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgIGZpcnN0Q2hpbGROb2RlID0gZmlyc3QoY2hpbGROb2Rlcyk7XG5cbiAgbm9uVGVybWluYWxOb2RlID0gZmlyc3RDaGlsZE5vZGU7ICAvLy9cblxuICBjb25zdCBydWxlTmFtZSA9IG5vblRlcm1pbmFsTm9kZS5nZXRSdWxlTmFtZSgpO1xuXG4gIHJldHVybiBydWxlTmFtZTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS9ub25UZXJtaW5hbFwiO1xuaW1wb3J0IE9wdGlvbmFsUGFydFBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvbm9uVGVybWluYWwvb3B0aW9uYWxQYXJ0XCI7XG5pbXBvcnQgT25lT3JNb3JlUGFydHNQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L25vblRlcm1pbmFsL29uZU9yTW9yZVBhcnRzXCI7XG5pbXBvcnQgWmVyb09yTW9yZVBhcnRzUGFydCBmcm9tIFwiLi4vLi4vcGFydC9ub25UZXJtaW5hbC96ZXJvT3JNb3JlUGFydHNcIjtcblxuaW1wb3J0IHsgbGFzdCB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvYXJyYXlcIjtcbmltcG9ydCB7IGlzTm9kZVF1YW50aWZpZXJOb2RlLCBydWxlTmFtZUZyb21RdWFudGlmaWVyTm9kZSB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvYm5mXCI7XG5pbXBvcnQgeyBPcHRpb25hbFF1YW50aWZpZXJSdWxlTmFtZSwgT25lT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lLCBaZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lIH0gZnJvbSBcIi4uLy4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQYXJ0Qk5GTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIGdlbmVyYXRlUGFydChsb29rQWhlYWQpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gdGhpcy5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgbm9kZXMgPSBjaGlsZE5vZGVzLnNsaWNlKCksXG4gICAgICAgICAgcGFydCA9IHBhcnRGcm9tTm9kZXMobm9kZXMpO1xuXG4gICAgcmV0dXJuIHBhcnQ7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2RlcykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoUGFydEJORk5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTsgfVxufVxuXG5mdW5jdGlvbiBwYXJ0RnJvbU5vZGVzKG5vZGVzKSB7XG4gIGxldCBwYXJ0ID0gbnVsbDtcblxuICBjb25zdCBub2Rlc0xlbmd0aCA9IG5vZGVzLmxlbmd0aDtcblxuICBpZiAobm9kZXNMZW5ndGggPT09IDEpIHtcbiAgICBjb25zdCBub2RlID0gbm9kZXMucG9wKCksXG4gICAgICAgICAgbG9va0FoZWFkID0gZmFsc2U7XG5cbiAgICBwYXJ0ID0gbm9kZS5nZW5lcmF0ZVBhcnQobG9va0FoZWFkKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBsYXN0Tm9kZVF1YW50aWZpZXJOb2RlID0gaXNMYXN0Tm9kZVF1YW50aWZpZXJOb2RlKG5vZGVzKTtcblxuICAgIGlmIChsYXN0Tm9kZVF1YW50aWZpZXJOb2RlKSB7XG4gICAgICBjb25zdCBub2RlID0gbm9kZXMucG9wKCksXG4gICAgICAgICAgICBxdWFudGlmaWVyTm9kZSA9IG5vZGU7ICAvLy9cblxuICAgICAgcGFydCA9IHBhcnRGcm9tTm9kZXMobm9kZXMpO1xuXG4gICAgICBjb25zdCBydWxlTmFtZSA9IHJ1bGVOYW1lRnJvbVF1YW50aWZpZXJOb2RlKHF1YW50aWZpZXJOb2RlKSxcbiAgICAgICAgICAgIGNvbGxlY3Rpb25PZlBhcnRzUGFydCA9IGNvbGxlY3Rpb25PZlBhcnRzUGFydEZyb21QYXJ0QW5kUnVsZU5hbWUocGFydCwgcnVsZU5hbWUpO1xuXG4gICAgICBwYXJ0ID0gY29sbGVjdGlvbk9mUGFydHNQYXJ0OyAvLy9cbiAgICB9IGVsc2Uge1xuICAgICAgbm9kZXMuc2hpZnQoKTtcblxuICAgICAgcGFydCA9IHBhcnRGcm9tTm9kZXMobm9kZXMpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYXJ0O1xufVxuXG5mdW5jdGlvbiBpc0xhc3ROb2RlUXVhbnRpZmllck5vZGUobm9kZXMpIHtcbiAgY29uc3QgbGFzdE5vZGUgPSBsYXN0KG5vZGVzKSxcbiAgICAgICAgbGFzdE5vZGVRdWFudGlmaWVyTm9kZSA9IGlzTm9kZVF1YW50aWZpZXJOb2RlKGxhc3ROb2RlKTtcblxuICByZXR1cm4gbGFzdE5vZGVRdWFudGlmaWVyTm9kZTtcbn1cblxuZnVuY3Rpb24gY29sbGVjdGlvbk9mUGFydHNQYXJ0RnJvbVBhcnRBbmRSdWxlTmFtZShwYXJ0LCBydWxlTmFtZSkge1xuICBsZXQgY29sbGVjdGlvbk9mUGFydHNQYXJ0O1xuXG4gIHN3aXRjaCAocnVsZU5hbWUpIHtcbiAgICBjYXNlIE9wdGlvbmFsUXVhbnRpZmllclJ1bGVOYW1lIDpcbiAgICAgIGNvbnN0IG9wdGlvbmFsUGFydFBhcnQgPSBuZXcgT3B0aW9uYWxQYXJ0UGFydChwYXJ0KTtcblxuICAgICAgY29sbGVjdGlvbk9mUGFydHNQYXJ0ID0gb3B0aW9uYWxQYXJ0UGFydDsgLy8vXG4gICAgICBicmVhaztcblxuICAgIGNhc2UgT25lT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lIDpcbiAgICAgIGNvbnN0IG9uZU9yTW9yZVBhcnRzUGFydCA9IG5ldyBPbmVPck1vcmVQYXJ0c1BhcnQocGFydCk7XG5cbiAgICAgIGNvbGxlY3Rpb25PZlBhcnRzUGFydCA9IG9uZU9yTW9yZVBhcnRzUGFydDsgLy8vXG4gICAgICBicmVhaztcblxuICAgIGNhc2UgWmVyb09yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSA6XG4gICAgICBjb25zdCB6ZXJvT3JNb3JlUGFydHNQYXJ0ID0gbmV3IFplcm9Pck1vcmVQYXJ0c1BhcnQocGFydCk7XG5cbiAgICAgIGNvbGxlY3Rpb25PZlBhcnRzUGFydCA9IHplcm9Pck1vcmVQYXJ0c1BhcnQ7ICAvLy9cbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgcmV0dXJuIGNvbGxlY3Rpb25PZlBhcnRzUGFydDtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbFBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvbm9uVGVybWluYWxcIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgUnVsZU5hbWVQYXJ0VHlwZSB9IGZyb20gXCIuLi8uLi9wYXJ0VHlwZXNcIjtcblxuY29uc3QgeyBlbGxpcHNpcyB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ1bGVOYW1lUGFydCBleHRlbmRzIE5vblRlcm1pbmFsUGFydCB7XG4gIGNvbnN0cnVjdG9yKHJ1bGVOYW1lLCBsb29rQWhlYWQgPSBmYWxzZSkge1xuICAgIGNvbnN0IHR5cGUgPSBSdWxlTmFtZVBhcnRUeXBlOyAvLy9cblxuICAgIHN1cGVyKHR5cGUpO1xuXG4gICAgdGhpcy5ydWxlTmFtZSA9IHJ1bGVOYW1lO1xuXG4gICAgdGhpcy5sb29rQWhlYWQgPSBsb29rQWhlYWQ7XG4gIH1cbiAgXG4gIGdldFJ1bGVOYW1lKCkge1xuICAgIHJldHVybiB0aGlzLnJ1bGVOYW1lO1xuICB9XG5cbiAgaXNMb29rQWhlYWQoKSB7XG4gICAgcmV0dXJuIHRoaXMubG9va0FoZWFkO1xuICB9XG5cbiAgaXNSdWxlTmFtZVBhcnQoKSB7XG4gICAgY29uc3QgcnVsZU5hbWVQYXJ0ID0gdHJ1ZTtcblxuICAgIHJldHVybiBydWxlTmFtZVBhcnQ7XG4gIH1cblxuICBzZXRMb29rQWhlYWQobG9va0FoZWFkKSB7XG4gICAgdGhpcy5sb29rQWhlYWQgPSBsb29rQWhlYWQ7XG4gIH1cblxuICBmaW5kUnVsZShzdGF0ZSkge1xuICAgIGNvbnN0IHJ1bGVNYXAgPSBzdGF0ZS5nZXRSdWxlTWFwKCksXG4gICAgICAgICAgcnVsZSA9IHJ1bGVNYXBbdGhpcy5ydWxlTmFtZV0gfHwgbnVsbDsgIC8vL1xuXG4gICAgcmV0dXJuIHJ1bGU7XG4gIH1cblxuICBwYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrKSB7XG4gICAgbGV0IHBhcnNlZDtcblxuICAgIGNvbnN0IHJ1bGUgPSB0aGlzLmZpbmRSdWxlKHN0YXRlKTtcblxuICAgIGlmIChydWxlID09PSBudWxsKSB7XG4gICAgICBwYXJzZWQgPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgcnVsZU5vZGUgPSBydWxlLnBhcnNlKHN0YXRlLCBjYWxsYmFjayk7XG5cbiAgICAgIHBhcnNlZCA9IChydWxlTm9kZSAhPT0gbnVsbCk7XG5cbiAgICAgIGlmIChwYXJzZWQpIHtcbiAgICAgICAgbm9kZXMucHVzaChydWxlTm9kZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfVxuXG4gIGFzU3RyaW5nKCkge1xuICAgIGNvbnN0IGxvb2tBaGVhZFN0cmluZyA9IHRoaXMubG9va0FoZWFkID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsbGlwc2lzIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRU1QVFlfU1RSSU5HLFxuICAgICAgICAgIHN0cmluZyA9IGAke3RoaXMucnVsZU5hbWV9JHtsb29rQWhlYWRTdHJpbmd9YDtcblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuICBjbG9uZSgpIHsgcmV0dXJuIHN1cGVyLmNsb25lKFJ1bGVOYW1lUGFydCwgdGhpcy5ydWxlTmFtZSwgdGhpcy5sb29rQWhlYWQpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBSdWxlTmFtZVBhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvcnVsZU5hbWVcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnVsZU5hbWVEZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHJ1bGVOYW1lKSB7XG4gICAgY29uc3QgcnVsZU5hbWVSdWxlTmFtZVBhcnQgPSBuZXcgUnVsZU5hbWVQYXJ0KHJ1bGVOYW1lKSxcbiAgICAgICAgICBwYXJ0cyA9IFtcbiAgICAgICAgICAgIHJ1bGVOYW1lUnVsZU5hbWVQYXJ0XG4gICAgICAgICAgXTtcbiAgICBcbiAgICBzdXBlcihwYXJ0cylcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi8uLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgUnVsZU5hbWVQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L25vblRlcm1pbmFsL3J1bGVOYW1lXCI7XG5pbXBvcnQgWmVyb09yTW9yZVBhcnRzUGFydCBmcm9tIFwiLi4vLi4vcGFydC9ub25UZXJtaW5hbC96ZXJvT3JNb3JlUGFydHNcIjtcblxuaW1wb3J0IHsgUXVhbnRpZmllclJ1bGVOYW1lLCBUZXJtaW5hbFBhcnRSdWxlTmFtZSB9IGZyb20gXCIuLi8uLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVybWluYWxQYXJ0UnVsZURlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgcXVhbnRpZmllclJ1bGVOYW1lID0gUXVhbnRpZmllclJ1bGVOYW1lLFxuICAgICAgICAgIHRlcm1pbmFsUGFydFJ1bGVOYW1lID0gVGVybWluYWxQYXJ0UnVsZU5hbWUsXG4gICAgICAgICAgcXVhbnRpZmllclJ1bGVOYW1lUGFydCA9IG5ldyBSdWxlTmFtZVBhcnQocXVhbnRpZmllclJ1bGVOYW1lKSxcbiAgICAgICAgICB0ZXJtaW5hbFBhcnRSdWxlTmFtZVBhcnQgPSBuZXcgUnVsZU5hbWVQYXJ0KHRlcm1pbmFsUGFydFJ1bGVOYW1lKSxcbiAgICAgICAgICB6ZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lUGFydHNQYXJ0ID0gbmV3IFplcm9Pck1vcmVQYXJ0c1BhcnQocXVhbnRpZmllclJ1bGVOYW1lUGFydCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICB0ZXJtaW5hbFBhcnRSdWxlTmFtZVBhcnQsXG4gICAgICAgICAgICB6ZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lUGFydHNQYXJ0XG4gICAgICAgICAgXTtcbiAgICBcbiAgICBzdXBlcihwYXJ0cylcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi8uLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgUnVsZU5hbWVQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L25vblRlcm1pbmFsL3J1bGVOYW1lXCI7XG5pbXBvcnQgWmVyb09yTW9yZVBhcnRzUGFydCBmcm9tIFwiLi4vLi4vcGFydC9ub25UZXJtaW5hbC96ZXJvT3JNb3JlUGFydHNcIjtcblxuaW1wb3J0IHsgUXVhbnRpZmllclJ1bGVOYW1lLCBOb25UZXJtaW5hbFBhcnRSdWxlTmFtZSB9IGZyb20gXCIuLi8uLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTm9uVGVybWluYWxQYXJ0UnVsZURlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgcXVhbnRpZmllclJ1bGVOYW1lID0gUXVhbnRpZmllclJ1bGVOYW1lLFxuICAgICAgICAgIG5vblRlcm1pbmFsUGFydFJ1bGVOYW1lID0gTm9uVGVybWluYWxQYXJ0UnVsZU5hbWUsXG4gICAgICAgICAgcXVhbnRpZmllclJ1bGVOYW1lUGFydCA9IG5ldyBSdWxlTmFtZVBhcnQocXVhbnRpZmllclJ1bGVOYW1lKSxcbiAgICAgICAgICBub25UZXJtaW5hbFBhcnRSdWxlTmFtZVBhcnQgPSBuZXcgUnVsZU5hbWVQYXJ0KG5vblRlcm1pbmFsUGFydFJ1bGVOYW1lKSxcbiAgICAgICAgICB6ZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lUGFydHNQYXJ0ID0gbmV3IFplcm9Pck1vcmVQYXJ0c1BhcnQocXVhbnRpZmllclJ1bGVOYW1lUGFydCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICBub25UZXJtaW5hbFBhcnRSdWxlTmFtZVBhcnQsXG4gICAgICAgICAgICB6ZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lUGFydHNQYXJ0XG4gICAgICAgICAgXTtcbiAgICBcbiAgICBzdXBlcihwYXJ0cylcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgUGFydEJORk5vZGUgZnJvbSBcIi4uL25vZGUvYm5mL3BhcnRcIjtcbmltcG9ydCBSdWxlTmFtZURlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vcnVsZU5hbWVcIjtcbmltcG9ydCBUZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9wYXJ0UnVsZS90ZXJtaW5hbFwiO1xuaW1wb3J0IE5vblRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3BhcnRSdWxlL25vblRlcm1pbmFsXCI7XG5cbmltcG9ydCB7IFBhcnRSdWxlTmFtZSwgTm9XaGl0ZXNwYWNlUGFydFJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQYXJ0UnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBuYW1lID0gUGFydFJ1bGVOYW1lLFxuICAgICAgICAgIHRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uID0gbmV3IFRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uKCksXG4gICAgICAgICAgbm9uVGVybWluYWxQYXJ0UnVsZURlZmluaXRpb24gPSBuZXcgTm9uVGVybWluYWxQYXJ0UnVsZURlZmluaXRpb24oKSxcbiAgICAgICAgICBub1doaXRlc3BhY2VQYXJ0UnVsZU5hbWVEZWZpbml0aW9uID0gbmV3IFJ1bGVOYW1lRGVmaW5pdGlvbihOb1doaXRlc3BhY2VQYXJ0UnVsZU5hbWUpLFxuICAgICAgICAgIGFtYmlndW91cyA9IGZhbHNlLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgbm9uVGVybWluYWxQYXJ0UnVsZURlZmluaXRpb24sXG4gICAgICAgICAgICB0ZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvbixcbiAgICAgICAgICAgIG5vV2hpdGVzcGFjZVBhcnRSdWxlTmFtZURlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBQYXJ0Qk5GTm9kZTtcbiAgICBcbiAgICBzdXBlcihuYW1lLCBhbWJpZ3VvdXMsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS9ub25UZXJtaW5hbFwiO1xuXG5pbXBvcnQgeyBmaXJzdCwgc2Vjb25kLCB0aGlyZCwgZm91cnRoIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9hcnJheVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSdWxlQk5GTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIGdlbmVyYXRlUnVsZShSdWxlKSB7XG4gICAgY29uc3QgbmFtZSA9IHRoaXMuZ2V0TmFtZSgpLFxuICAgICAgICAgIGFtYmlndW91cyA9IHRoaXMuaXNBbWJpZ3VvdXMoKSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IHRoaXMuZ2VuZXJhdGVEZWZpbml0aW9ucygpLFxuICAgICAgICAgIE5vZGUgPSBOb25UZXJtaW5hbE5vZGUsXG4gICAgICAgICAgcnVsZSA9IG5ldyBSdWxlKG5hbWUsIGFtYmlndW91cywgZGVmaW5pdGlvbnMsIE5vZGUpO1xuXG4gICAgcmV0dXJuIHJ1bGU7XG4gIH1cblxuICBpc0FtYmlndW91cygpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gdGhpcy5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgc2Vjb25kQ2hpbGROb2RlID0gc2Vjb25kKGNoaWxkTm9kZXMpLFxuICAgICAgICAgIHNlY29uZENoaWxkTm9kZVRlcm1pbmFsTm9kZSA9IHNlY29uZENoaWxkTm9kZS5pc1Rlcm1pbmFsTm9kZSgpLFxuICAgICAgICAgIGFtYmlndW91cyA9ICFzZWNvbmRDaGlsZE5vZGVUZXJtaW5hbE5vZGU7XG5cbiAgICByZXR1cm4gYW1iaWd1b3VzO1xuICB9XG5cbiAgZ2V0TmFtZSgpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gdGhpcy5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgZmlyc3RDaGlsZE5vZGUgPSBmaXJzdChjaGlsZE5vZGVzKSxcbiAgICAgICAgICBuYW1lQk5GTm9kZSA9IGZpcnN0Q2hpbGROb2RlLCAgLy8vXG4gICAgICAgICAgbmFtZSA9IG5hbWVCTkZOb2RlLmdldE5hbWUoKTtcbiAgICBcbiAgICByZXR1cm4gbmFtZTtcbiAgfVxuICBcbiAgZ2VuZXJhdGVEZWZpbml0aW9ucygpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gdGhpcy5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgY2hpbGROb2Rlc0xlbmd0aCA9IGNoaWxkTm9kZXMubGVuZ3RoLFxuICAgICAgICAgIHRoaXJkQ2hpbGROb2RlID0gdGhpcmQoY2hpbGROb2RlcyksXG4gICAgICAgICAgZm91cnRoQ2hpbGROb2RlID0gZm91cnRoKGNoaWxkTm9kZXMpLFxuICAgICAgICAgIGRlZmluaXRpb25zQk5GTm9kZSA9IChjaGlsZE5vZGVzTGVuZ3RoID09PSA0KSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlyZENoaWxkTm9kZSA6ICAvLy9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91cnRoQ2hpbGROb2RlLCAvLy9cbiAgICAgICAgICBkZWZpbml0aW9ucyA9IGRlZmluaXRpb25zQk5GTm9kZS5nZW5lcmF0ZURlZmluaXRpb25zKCk7XG4gICAgXG4gICAgcmV0dXJuIGRlZmluaXRpb25zO1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMocnVsZU5hbWUsIGNoaWxkTm9kZXMpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKFJ1bGVCTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVGVybWluYWxQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L3Rlcm1pbmFsXCI7XG5pbXBvcnQgVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9ub2RlL3Rlcm1pbmFsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlcm1pbmFsU3ltYm9sUGFydCBleHRlbmRzIFRlcm1pbmFsUGFydCB7XG4gIGNvbnN0cnVjdG9yKGNvbnRlbnQpIHtcbiAgICBzdXBlcigpO1xuICAgIFxuICAgIHRoaXMuY29udGVudCA9IGNvbnRlbnQ7XG4gIH1cblxuICBwYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrKSB7XG4gICAgbGV0IHBhcnNlZDtcblxuICAgIGxldCB0ZXJtaW5hbE5vZGUgPSBudWxsO1xuICAgIFxuICAgIGNvbnN0IHNhdmVkSW5kZXggPSBzdGF0ZS5nZXRTYXZlZEluZGV4KCksXG5cdFx0ICAgICAgbmV4dFNpZ25pZmljYW50VG9rZW4gPSBzdGF0ZS5nZXROZXh0U2lnbmlmaWNhbnRUb2tlbigpLFxuXHRcdFx0XHRcdHNpZ25pZmljYW50VG9rZW4gPSBuZXh0U2lnbmlmaWNhbnRUb2tlbjsgLy8vXG5cbiAgICBpZiAoc2lnbmlmaWNhbnRUb2tlbiAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgY29udGVudCA9IHNpZ25pZmljYW50VG9rZW4uZ2V0Q29udGVudCgpO1xuXG4gICAgICBpZiAoY29udGVudCA9PT0gdGhpcy5jb250ZW50KSB7XG4gICAgICAgIHRlcm1pbmFsTm9kZSA9IFRlcm1pbmFsTm9kZS5mcm9tU2lnbmlmaWNhbnRUb2tlbihzaWduaWZpY2FudFRva2VuKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwYXJzZWQgPSAodGVybWluYWxOb2RlICE9PSBudWxsKTtcblxuICAgIGlmIChwYXJzZWQpIHtcbiAgICAgIG5vZGVzLnB1c2godGVybWluYWxOb2RlKTtcblxuICAgICAgaWYgKGNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICAgIHBhcnNlZCA9IGNhbGxiYWNrKCk7XG5cbiAgICAgICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgICAgICBub2Rlcy5wb3AoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghcGFyc2VkKSB7XG4gICAgICBzdGF0ZS5iYWNrdHJhY2soc2F2ZWRJbmRleCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfVxuICBcbiAgYXNTdHJpbmcoKSB7XG4gICAgY29uc3QgY29udGVudCA9IHRoaXMuY29udGVudC5yZXBsYWNlKC9cXFxcLywgXCJcXFxcXFxcXFwiKSxcbiAgICAgICAgICBzdHJpbmcgPSBgXCIke2NvbnRlbnR9XCJgO1xuICAgIFxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuICBjbG9uZSgpIHsgcmV0dXJuIHN1cGVyLmNsb25lKFRlcm1pbmFsU3ltYm9sUGFydCwgdGhpcy5jb250ZW50KTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IFJ1bGVOYW1lUGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9ydWxlTmFtZVwiO1xuaW1wb3J0IE9wdGlvbmFsUGFydFBhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvb3B0aW9uYWxQYXJ0XCI7XG5pbXBvcnQgVGVybWluYWxTeW1ib2xQYXJ0IGZyb20gXCIuLi9wYXJ0L3Rlcm1pbmFsL3Rlcm1pbmFsU3ltYm9sXCI7XG5cbmltcG9ydCB7IE5hbWVSdWxlTmFtZSwgRGVmaW5pdGlvbnNSdWxlTmFtZSwgQW1iaWd1b3VzTW9kaWZpZXJSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuY29uc3QgeyBzZXBhcmF0b3IsIHRlcm1pbmF0b3IgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSdWxlRGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBzZXBhcmF0b3JUZXJtaW5hbFN5bWJvbENvbnRlbnQgPSBzZXBhcmF0b3IsXG4gICAgICAgICAgdGVybWluYXRvclRlcm1pbmFsU3ltYm9sQ29udGVudCA9IHRlcm1pbmF0b3IsXG4gICAgICAgICAgbmFtZVJ1bGVOYW1lID0gTmFtZVJ1bGVOYW1lLFxuICAgICAgICAgIGRlZmluaXRpb25zUnVsZU5hbWUgPSBEZWZpbml0aW9uc1J1bGVOYW1lLFxuICAgICAgICAgIGFtYmlndW91c01vZGlmaWVyUnVsZU5hbWUgPSBBbWJpZ3VvdXNNb2RpZmllclJ1bGVOYW1lLFxuICAgICAgICAgIGFtYmlndW91c01vZGlmaWVyUnVsZU5hbWVQYXJ0ID0gbmV3IFJ1bGVOYW1lUGFydChhbWJpZ3VvdXNNb2RpZmllclJ1bGVOYW1lKSxcbiAgICAgICAgICBuYW1lUnVsZU5hbWVQYXJ0ID0gbmV3IFJ1bGVOYW1lUGFydChuYW1lUnVsZU5hbWUpLFxuICAgICAgICAgIG9wdGlvbmFsQW1iaWd1b3VzUnVsZU5hbWVQYXJ0UGFydCA9IG5ldyBPcHRpb25hbFBhcnRQYXJ0KGFtYmlndW91c01vZGlmaWVyUnVsZU5hbWVQYXJ0KSxcbiAgICAgICAgICBzZXBhcmF0b3JUZXJtaW5hbFN5bWJvbFBhcnQgPSBuZXcgVGVybWluYWxTeW1ib2xQYXJ0KHNlcGFyYXRvclRlcm1pbmFsU3ltYm9sQ29udGVudCksXG4gICAgICAgICAgZGVmaW5pdGlvbnNSdWxlTmFtZVBhcnQgPSBuZXcgUnVsZU5hbWVQYXJ0KGRlZmluaXRpb25zUnVsZU5hbWUpLFxuICAgICAgICAgIHRlcm1pbmF0b3JUZXJtaW5hbFN5bWJvbFBhcnQgPSBuZXcgVGVybWluYWxTeW1ib2xQYXJ0KHRlcm1pbmF0b3JUZXJtaW5hbFN5bWJvbENvbnRlbnQpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgbmFtZVJ1bGVOYW1lUGFydCxcbiAgICAgICAgICAgIG9wdGlvbmFsQW1iaWd1b3VzUnVsZU5hbWVQYXJ0UGFydCxcbiAgICAgICAgICAgIHNlcGFyYXRvclRlcm1pbmFsU3ltYm9sUGFydCxcbiAgICAgICAgICAgIGRlZmluaXRpb25zUnVsZU5hbWVQYXJ0LFxuICAgICAgICAgICAgdGVybWluYXRvclRlcm1pbmFsU3ltYm9sUGFydFxuICAgICAgICAgIF07XG4gICAgXG4gICAgc3VwZXIocGFydHMpXG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IFJ1bGVCTkZOb2RlIGZyb20gXCIuLi9ub2RlL2JuZi9ydWxlXCI7XG5pbXBvcnQgUnVsZURlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vcnVsZVwiO1xuXG5pbXBvcnQgeyBSdWxlUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ1bGVSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IHJ1bGVEZWZpbml0aW9uID0gbmV3IFJ1bGVEZWZpbml0aW9uKCksXG4gICAgICAgICAgbmFtZSA9IFJ1bGVSdWxlTmFtZSxcbiAgICAgICAgICBhbWJpZ3VvdXMgPSBmYWxzZSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIHJ1bGVEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gUnVsZUJORk5vZGU7XG4gICAgXG4gICAgc3VwZXIobmFtZSwgYW1iaWd1b3VzLCBkZWZpbml0aW9ucywgTm9kZSk7XG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9ub2RlL25vblRlcm1pbmFsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVycm9yQk5GTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhFcnJvckJORk5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgVGVybWluYWxQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L3Rlcm1pbmFsXCI7XG5pbXBvcnQgVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9ub2RlL3Rlcm1pbmFsXCI7XG5cbmNvbnN0IHsgd2lsZGNhcmQgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBXaWxkY2FyZFBhcnQgZXh0ZW5kcyBUZXJtaW5hbFBhcnQge1xuICBwYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrKSB7XG4gICAgbGV0IHBhcnNlZDtcblxuICAgIGxldCB0ZXJtaW5hbE5vZGUgPSBudWxsO1xuICAgIFxuICAgIGNvbnN0IHNhdmVkSW5kZXggPSBzdGF0ZS5nZXRTYXZlZEluZGV4KCksXG5cdFx0ICAgICAgbmV4dFNpZ25pZmljYW50VG9rZW4gPSBzdGF0ZS5nZXROZXh0U2lnbmlmaWNhbnRUb2tlbigpLFxuXHRcdFx0XHRcdHNpZ25pZmljYW50VG9rZW4gPSBuZXh0U2lnbmlmaWNhbnRUb2tlbjsgLy8vXG5cbiAgICBpZiAoc2lnbmlmaWNhbnRUb2tlbiAhPT0gbnVsbCkge1xuICAgICAgdGVybWluYWxOb2RlID0gVGVybWluYWxOb2RlLmZyb21TaWduaWZpY2FudFRva2VuKHNpZ25pZmljYW50VG9rZW4pO1xuICAgIH1cblxuICAgIHBhcnNlZCA9ICh0ZXJtaW5hbE5vZGUgIT09IG51bGwpO1xuXG4gICAgaWYgKHBhcnNlZCkge1xuICAgICAgbm9kZXMucHVzaCh0ZXJtaW5hbE5vZGUpO1xuXG4gICAgICBpZiAoY2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICAgICAgcGFyc2VkID0gY2FsbGJhY2soKTtcblxuICAgICAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgICAgIG5vZGVzLnBvcCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgIHN0YXRlLmJhY2t0cmFjayhzYXZlZEluZGV4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG5cbiAgYXNTdHJpbmcoKSB7XG4gICAgY29uc3Qgc3RyaW5nID0gd2lsZGNhcmQ7ICAvLy9cblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuICBjbG9uZSgpIHsgcmV0dXJuIHN1cGVyLmNsb25lKFdpbGRjYXJkUGFydCk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IFdpbGRjYXJkUGFydCBmcm9tIFwiLi4vcGFydC90ZXJtaW5hbC93aWxkY2FyZFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFcnJvckRlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3Qgd2lsZGNhcmRQYXJ0ID0gbmV3IFdpbGRjYXJkUGFydCgpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgd2lsZGNhcmRQYXJ0XG4gICAgICAgICAgXTtcblxuICAgIHN1cGVyKHBhcnRzKVxuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBFcnJvckJORk5vZGUgZnJvbSBcIi4uL25vZGUvYm5mL2Vycm9yXCI7XG5pbXBvcnQgRXJyb3JEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL2Vycm9yXCI7XG5cbmltcG9ydCB7IEVycm9yUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVycm9yUnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBlcnJvckRlZmluaXRpb24gPSBuZXcgRXJyb3JEZWZpbml0aW9uKCksXG4gICAgICAgICAgbmFtZSA9IEVycm9yUnVsZU5hbWUsXG4gICAgICAgICAgYW1iaWd1b3VzID0gZmFsc2UsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBlcnJvckRlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBFcnJvckJORk5vZGU7XG4gICAgXG4gICAgc3VwZXIobmFtZSwgYW1iaWd1b3VzLCBkZWZpbml0aW9ucywgTm9kZSk7XG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb21cIi4uLy4uL25vZGUvbm9uVGVybWluYWxcIjtcblxuaW1wb3J0IHsgUnVsZVJ1bGVOYW1lIH0gZnJvbSBcIi4uLy4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEb2N1bWVudEJORk5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBnZW5lcmF0ZVJ1bGVzKFJ1bGUpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gdGhpcy5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgcnVsZU5vZGVzID0gY2hpbGROb2Rlcy5yZWR1Y2UoKHJ1bGVOb2RlcywgY2hpbGROb2RlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjaGlsZE5vZGVOb25UZXJtaW5hbE5vZGUgPSBjaGlsZE5vZGUuaXNOb25UZXJtaW5hbE5vZGUoKTtcblxuICAgICAgICAgICAgaWYgKGNoaWxkTm9kZU5vblRlcm1pbmFsTm9kZSkge1xuICAgICAgICAgICAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBjaGlsZE5vZGUsICAvLy9cbiAgICAgICAgICAgICAgICAgICAgcnVsZU5hbWUgPSBjaGlsZE5vZGUuZ2V0UnVsZU5hbWUoKSxcbiAgICAgICAgICAgICAgICAgICAgcnVsZU5hbWVSdWxlUnVsZU5hbWUgPSAocnVsZU5hbWUgPT09IFJ1bGVSdWxlTmFtZSksXG4gICAgICAgICAgICAgICAgICAgIG5vblRlcm1pbmFsTm9kZVJ1bGVOb2RlID0gcnVsZU5hbWVSdWxlUnVsZU5hbWU7ICAvLy9cblxuICAgICAgICAgICAgICBpZiAobm9uVGVybWluYWxOb2RlUnVsZU5vZGUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBydWxlTm9kZSA9IG5vblRlcm1pbmFsTm9kZTsgLy8vXG5cbiAgICAgICAgICAgICAgICBydWxlTm9kZXMucHVzaChydWxlTm9kZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHJ1bGVOb2RlcztcbiAgICAgICAgICB9LCBbXSksXG4gICAgICAgICAgcnVsZXMgPSBydWxlTm9kZXMubWFwKChydWxlTm9kZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcnVsZSA9IHJ1bGVOb2RlLmdlbmVyYXRlUnVsZShSdWxlKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgcmV0dXJuIHJ1bGU7XG4gICAgICAgICAgfSk7XG4gICAgXG4gICAgcmV0dXJuIHJ1bGVzO1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMocnVsZU5hbWUsIGNoaWxkTm9kZXMpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKERvY3VtZW50Qk5GTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsUGFydCBmcm9tIFwiLi4vLi4vcGFydC9ub25UZXJtaW5hbFwiO1xuXG5pbXBvcnQgeyBDaG9pY2VPZlBhcnRzUGFydFR5cGUgfSBmcm9tIFwiLi4vLi4vcGFydFR5cGVzXCI7XG5pbXBvcnQgeyBldmVuLCBhbGxCdXRGaXJzdEFuZExhc3QgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENob2ljZU9mUGFydHNQYXJ0IGV4dGVuZHMgTm9uVGVybWluYWxQYXJ0IHtcbiAgY29uc3RydWN0b3IocGFydHMpIHtcbiAgICBjb25zdCB0eXBlID0gQ2hvaWNlT2ZQYXJ0c1BhcnRUeXBlOyAvLy9cblxuICAgIHN1cGVyKHR5cGUpO1xuICAgIFxuICAgIHRoaXMucGFydHMgPSBwYXJ0cztcbiAgfVxuICBcbiAgZ2V0UGFydHMoKSB7XG4gICAgcmV0dXJuIHRoaXMucGFydHM7XG4gIH1cblxuICBwYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrKSB7XG4gICAgbGV0IHBhcnNlZDtcblxuICAgIHRoaXMucGFydHMuc29tZSgocGFydCkgPT4ge1xuICAgICAgcGFyc2VkID0gcGFydC5wYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrKTtcblxuICAgICAgaWYgKHBhcnNlZCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBwYXJzZWQ7XG4gIH1cblxuICBhc1N0cmluZygpIHtcbiAgICBjb25zdCBwYXJ0c1N0cmluZyA9IHRoaXMucGFydHMucmVkdWNlKChwYXJ0c1N0cmluZywgcGFydCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGFydFN0cmluZyA9IHBhcnQuYXNTdHJpbmcoKTtcbiAgICBcbiAgICAgICAgICAgIGlmIChwYXJ0c1N0cmluZyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICBwYXJ0c1N0cmluZyA9IHBhcnRTdHJpbmc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBwYXJ0c1N0cmluZyA9IGAke3BhcnRzU3RyaW5nfSB8ICR7cGFydFN0cmluZ31gO1xuICAgICAgICAgICAgfVxuICAgIFxuICAgICAgICAgICAgcmV0dXJuIHBhcnRzU3RyaW5nO1xuICAgICAgICAgIH0sIG51bGwpLFxuICAgICAgICAgIHN0cmluZyA9IGAoICR7cGFydHNTdHJpbmd9IClgO1xuICAgIFxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuICBjbG9uZSgpIHsgcmV0dXJuIHN1cGVyLmNsb25lKENob2ljZU9mUGFydHNQYXJ0LCB0aGlzLnBhcnRzKTsgfVxuXG4gIHN0YXRpYyBmcm9tTm9kZXMobm9kZXMpIHtcbiAgICBjb25zdCBhbGxCdXRGaXJzdEFuZExhc3ROb2RlcyA9IGFsbEJ1dEZpcnN0QW5kTGFzdChub2Rlcyk7XG5cbiAgICBub2RlcyA9IGFsbEJ1dEZpcnN0QW5kTGFzdE5vZGVzOyAgLy8vXG4gICAgXG4gICAgY29uc3QgZXZlbk5vZGVzID0gZXZlbihub2Rlcyk7XG5cbiAgICBub2RlcyA9IGV2ZW5Ob2RlczsgIC8vL1xuXG4gICAgY29uc3QgbG9va0FoZWFkID0gZmFsc2UsXG4gICAgICAgICAgcGFydHMgPSBub2Rlcy5tYXAoKG5vZGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnQgPSBub2RlLmdlbmVyYXRlUGFydChsb29rQWhlYWQpO1xuXG4gICAgICAgICAgICByZXR1cm4gcGFydDtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBjaG9pY2VPZlBhcnRzUGFydCA9IG5ldyBDaG9pY2VPZlBhcnRzUGFydChwYXJ0cyk7XG5cbiAgICByZXR1cm4gY2hvaWNlT2ZQYXJ0c1BhcnQ7XG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IFJ1bGVOYW1lUGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9ydWxlTmFtZVwiO1xuaW1wb3J0IENob2ljZU9mUGFydHNQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL2Nob2ljZU9mUGFydHNcIjtcbmltcG9ydCBPbmVPck1vcmVQYXJ0c1BhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvb25lT3JNb3JlUGFydHNcIjtcblxuaW1wb3J0IHsgUnVsZVJ1bGVOYW1lLCBFcnJvclJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEb2N1bWVudERlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgcnVsZVJ1bGVOYW1lID0gUnVsZVJ1bGVOYW1lLFxuICAgICAgICAgIGVycm9yUnVsZU5hbWUgPSBFcnJvclJ1bGVOYW1lLFxuICAgICAgICAgIHJ1bGVSdWxlTmFtZVBhcnQgPSBuZXcgUnVsZU5hbWVQYXJ0KHJ1bGVSdWxlTmFtZSksXG4gICAgICAgICAgZXJyb3JSdWxlTmFtZVBhcnQgPSBuZXcgUnVsZU5hbWVQYXJ0KGVycm9yUnVsZU5hbWUpLFxuICAgICAgICAgIHJ1bGVSdWxlTmFtZUFuZEVycm9yUnVsZU5hbWVQYXJ0cyA9IFtcbiAgICAgICAgICAgIHJ1bGVSdWxlTmFtZVBhcnQsXG4gICAgICAgICAgICBlcnJvclJ1bGVOYW1lUGFydFxuICAgICAgICAgIF0sXG4gICAgICAgICAgY2hvaWNlT2ZSdWxlUnVsZU5hbWVBbmRFcnJvclJ1bGVOYW1lUGFydHNQYXJ0ID0gbmV3IENob2ljZU9mUGFydHNQYXJ0KHJ1bGVSdWxlTmFtZUFuZEVycm9yUnVsZU5hbWVQYXJ0cyksXG4gICAgICAgICAgb25lT3JNb3JlQ2hvaWNlT2ZSdWxlUnVsZU5hbWVBbmRFcnJvclJ1bGVOYW1lUGFydHNQYXJ0c1BhcnQgPSBuZXcgT25lT3JNb3JlUGFydHNQYXJ0KGNob2ljZU9mUnVsZVJ1bGVOYW1lQW5kRXJyb3JSdWxlTmFtZVBhcnRzUGFydCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICBvbmVPck1vcmVDaG9pY2VPZlJ1bGVSdWxlTmFtZUFuZEVycm9yUnVsZU5hbWVQYXJ0c1BhcnRzUGFydFxuICAgICAgICAgIF07XG4gICAgXG4gICAgc3VwZXIocGFydHMpXG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IERvY3VtZW50Qk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvZG9jdW1lbnRcIjtcbmltcG9ydCBEb2N1bWVudERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vZG9jdW1lbnRcIjtcblxuaW1wb3J0IHsgRG9jdW1lbnRSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRG9jdW1lbnRSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IGRvY3VtZW50RGVmaW5pdGlvbiA9IG5ldyBEb2N1bWVudERlZmluaXRpb24oKSxcbiAgICAgICAgICBuYW1lID0gRG9jdW1lbnRSdWxlTmFtZSxcbiAgICAgICAgICBhbWJpZ3VvdXMgPSBmYWxzZSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIGRvY3VtZW50RGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IERvY3VtZW50Qk5GTm9kZTtcbiAgICBcbiAgICBzdXBlcihuYW1lLCBhbWJpZ3VvdXMsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGVOYW1lUGFydCBmcm9tIFwiLi4vLi4vcGFydC9ub25UZXJtaW5hbC9ydWxlTmFtZVwiO1xuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS9ub25UZXJtaW5hbFwiO1xuXG5pbXBvcnQgeyBmaXJzdCB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvYXJyYXlcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnVsZU5hbWVCTkZOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgZ2VuZXJhdGVQYXJ0KGxvb2tBaGVhZCkge1xuICAgIGNvbnN0IHJ1bGVOYW1lID0gdGhpcy5nZXRSdWxlTmFtZSgpLFxuICAgICAgICAgIHJ1bGVOYW1lUGFydCA9IG5ldyBSdWxlTmFtZVBhcnQocnVsZU5hbWUsIGxvb2tBaGVhZCk7XG5cbiAgICByZXR1cm4gcnVsZU5hbWVQYXJ0O1xuICB9XG5cbiAgZ2V0UnVsZU5hbWUoKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIGZpcnN0Q2hpbGROb2RlID0gZmlyc3QoY2hpbGROb2RlcyksXG4gICAgICAgICAgdGVybWluYWxOb2RlID0gZmlyc3RDaGlsZE5vZGUsICAvLy9cbiAgICAgICAgICB0ZXJtaW5hbE5vZGVDb250ZW50ID0gdGVybWluYWxOb2RlLmdldENvbnRlbnQoKSxcbiAgICAgICAgICBydWxlTmFtZSA9IHRlcm1pbmFsTm9kZUNvbnRlbnQ7IC8vL1xuICAgIFxuICAgIHJldHVybiBydWxlTmFtZTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhSdWxlTmFtZUJORk5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgTmFtZURlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vbmFtZVwiO1xuaW1wb3J0IFJ1bGVOYW1lQk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvcnVsZU5hbWVcIjtcblxuaW1wb3J0IHsgUnVsZU5hbWVSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnVsZU5hbWVSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IG5hbWVEZWZpbml0aW9uID0gbmV3IE5hbWVEZWZpbml0aW9uKCksXG4gICAgICAgICAgbmFtZSA9IFJ1bGVOYW1lUnVsZU5hbWUsXG4gICAgICAgICAgYW1iaWd1b3VzID0gZmFsc2UsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBuYW1lRGVmaW5pdGlvbiAgLy8vXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gUnVsZU5hbWVCTkZOb2RlO1xuICAgIFxuICAgIHN1cGVyKG5hbWUsIGFtYmlndW91cywgZGVmaW5pdGlvbnMsIE5vZGUpXG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgV2lsZGNhcmRQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L3Rlcm1pbmFsL3dpbGRjYXJkXCI7XG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9ub2RlL25vblRlcm1pbmFsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFdpbGRjYXJkQk5GTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIGdlbmVyYXRlUGFydChsb29rQWhlYWQpIHtcbiAgICBjb25zdCB3aWxkY2FyZFBhcnQgPSBuZXcgV2lsZGNhcmRQYXJ0KCk7XG5cbiAgICByZXR1cm4gd2lsZGNhcmRQYXJ0O1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMocnVsZU5hbWUsIGNoaWxkTm9kZXMpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKFdpbGRjYXJkQk5GTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBUZXJtaW5hbFN5bWJvbFBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvdGVybWluYWxTeW1ib2xcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVybWluYWxTeW1ib2xEZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKGNvbnRlbnQpIHtcbiAgICBjb25zdCB0ZXJtaW5hbFN5bWJvbFBhcnQgPSBuZXcgVGVybWluYWxTeW1ib2xQYXJ0KGNvbnRlbnQpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgdGVybWluYWxTeW1ib2xQYXJ0XG4gICAgICAgICAgXTtcbiAgICBcbiAgICBzdXBlcihwYXJ0cylcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IFdpbGRjYXJkQk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvd2lsZGNhcmRcIjtcbmltcG9ydCBUZXJtaW5hbFN5bWJvbERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vdGVybWluYWxTeW1ib2xcIjtcblxuaW1wb3J0IHsgV2lsZGNhcmRSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuY29uc3QgeyB3aWxkY2FyZCB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFdpbGRjYXJkUnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCB3aWxkY2FyZFRlcm1pbmFsU3ltYm9sQ29udGVudCA9IHdpbGRjYXJkLFxuICAgICAgICAgIHdpbGRjYXJkVGVybWluYWxTeW1ib2xEZWZpbml0aW9uID0gbmV3IFRlcm1pbmFsU3ltYm9sRGVmaW5pdGlvbih3aWxkY2FyZFRlcm1pbmFsU3ltYm9sQ29udGVudCksXG4gICAgICAgICAgbmFtZSA9IFdpbGRjYXJkUnVsZU5hbWUsXG4gICAgICAgICAgYW1iaWd1b3VzID0gZmFsc2UsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICB3aWxkY2FyZFRlcm1pbmFsU3ltYm9sRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IFdpbGRjYXJkQk5GTm9kZTtcblxuICAgIHN1cGVyKG5hbWUsIGFtYmlndW91cywgZGVmaW5pdGlvbnMsIE5vZGUpXG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlIGZyb20gXCIuL3ZlcnRpY2FsQnJhbmNoXCI7XG5cbmNvbnN0IHsgRU5EX09GX0xJTkUgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbmRPZkxpbmVOb2RlUGFyc2VUcmVlIGV4dGVuZHMgVmVydGljYWxCcmFuY2hQYXJzZVRyZWUge1xuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgY29uc3Qgc3RyaW5nID0gRU5EX09GX0xJTkUsIC8vL1xuICAgICAgICAgIHN0cmluZ0xlbmd0aCA9IHN0cmluZy5sZW5ndGgsXG4gICAgICAgICAgdmVydGljYWxCcmFuY2hQYXJzZVRyZWVXaWR0aCA9IHN0cmluZ0xlbmd0aCwgLy8vXG4gICAgICAgICAgdmVydGljYWxCcmFuY2hQYXJzZVRyZWUgPSBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5mcm9tV2lkdGgodmVydGljYWxCcmFuY2hQYXJzZVRyZWVXaWR0aCksXG4gICAgICAgICAgdmVydGljYWxCcmFuY2hQb3NpdGlvbiA9IHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmdldFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oKSxcbiAgICAgICAgICB0ZXJtaW5hbE5vZGVQYXJzZVRyZWUgPSBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5mcm9tU3RyaW5nQW5kVmVydGljYWxCcmFuY2hQb3NpdGlvbihFbmRPZkxpbmVOb2RlUGFyc2VUcmVlLCBzdHJpbmcsIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24pO1xuXG4gICAgdGVybWluYWxOb2RlUGFyc2VUcmVlLmFwcGVuZFRvVG9wKHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlKTtcblxuICAgIGNvbnN0IGVuZE9mTGluZU5vZGVQYXJzZVRyZWUgPSB0ZXJtaW5hbE5vZGVQYXJzZVRyZWU7IC8vL1xuXG4gICAgcmV0dXJuIGVuZE9mTGluZU5vZGVQYXJzZVRyZWU7XG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVGVybWluYWxOb2RlIGZyb20gXCIuLi90ZXJtaW5hbFwiO1xuaW1wb3J0IEVuZE9mTGluZU5vZGVQYXJzZVRyZWUgZnJvbSBcIi4uLy4uL3BhcnNlVHJlZS9lbmRPZkxpbmVOb2RlXCI7XG5cbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi8uLi9jb25zdGFudHNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW5kT2ZMaW5lQk5GTm9kZSBleHRlbmRzIFRlcm1pbmFsTm9kZSB7XG4gIGdldENvbnRlbnQoKSB7XG4gICAgY29uc3QgY29udGVudCA9IEVNUFRZX1NUUklORztcblxuICAgIHJldHVybiBjb250ZW50O1xuICB9XG5cbiAgYXNQYXJzZVRyZWUodG9rZW5zKSB7XG4gICAgY29uc3QgZW5kT2ZMaW5lTm9kZVBhcnNlVHJlZSA9IEVuZE9mTGluZU5vZGVQYXJzZVRyZWUuZnJvbU5vdGhpbmcoKSxcbiAgICAgICAgICBwYXJzZVRyZWUgPSBlbmRPZkxpbmVOb2RlUGFyc2VUcmVlOyAgLy8vXG5cbiAgICByZXR1cm4gcGFyc2VUcmVlO1xuICB9XG5cbiAgc3RhdGljIGZyb21TaWduaWZpY2FudFRva2VuKHNpZ25pZmljYW50VG9rZW4pIHsgcmV0dXJuIFRlcm1pbmFsTm9kZS5mcm9tU2lnbmlmaWNhbnRUb2tlbihFbmRPZkxpbmVCTkZOb2RlLCBzaWduaWZpY2FudFRva2VuKTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgVGVybWluYWxQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L3Rlcm1pbmFsXCI7XG5pbXBvcnQgRW5kT2ZMaW5lQk5GTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS90ZXJtaW5hbC9lbmRPZkxpbmVcIjtcblxuY29uc3QgeyBFTkRfT0ZfTElORSB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVuZE9mTGluZVBhcnQgZXh0ZW5kcyBUZXJtaW5hbFBhcnQge1xuICBwYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrKSB7XG4gICAgbGV0IHBhcnNlZDtcblxuICAgIGxldCBlbmRPZkxpbmVCTkZOb2RlID0gbnVsbDtcbiAgICBcbiAgICBjb25zdCBzYXZlZEluZGV4ID0gc3RhdGUuZ2V0U2F2ZWRJbmRleCgpLFxuXHRcdCAgICAgIG5leHRTaWduaWZpY2FudFRva2VuID0gc3RhdGUuZ2V0TmV4dFNpZ25pZmljYW50VG9rZW4oKSxcbiAgICAgICAgICBzaWduaWZpY2FudFRva2VuID0gbmV4dFNpZ25pZmljYW50VG9rZW47IC8vL1xuXG4gICAgaWYgKHNpZ25pZmljYW50VG9rZW4gIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHNpZ25pZmljYW50VG9rZW5FbmRPZkxpbmVUb2tlbiA9IHNpZ25pZmljYW50VG9rZW4uaXNFbmRPZkxpbmVUb2tlbigpO1xuXG4gICAgICBpZiAoc2lnbmlmaWNhbnRUb2tlbkVuZE9mTGluZVRva2VuKSB7XG4gICAgICAgIGVuZE9mTGluZUJORk5vZGUgPSBFbmRPZkxpbmVCTkZOb2RlLmZyb21TaWduaWZpY2FudFRva2VuKHNpZ25pZmljYW50VG9rZW4pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHBhcnNlZCA9IChlbmRPZkxpbmVCTkZOb2RlICE9PSBudWxsKTtcblxuICAgIGlmIChwYXJzZWQpIHtcbiAgICAgIG5vZGVzLnB1c2goZW5kT2ZMaW5lQk5GTm9kZSk7XG5cbiAgICAgIGlmIChjYWxsYmFjayAhPT0gbnVsbCkge1xuICAgICAgICBwYXJzZWQgPSBjYWxsYmFjaygpO1xuXG4gICAgICAgIGlmICghcGFyc2VkKSB7XG4gICAgICAgICAgbm9kZXMucG9wKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgc3RhdGUuYmFja3RyYWNrKHNhdmVkSW5kZXgpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZWQ7XG4gIH1cblxuICBhc1N0cmluZygpIHtcbiAgICBjb25zdCBzdHJpbmcgPSBFTkRfT0ZfTElORTsgLy8vXG5cbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG5cbiAgY2xvbmUoKSB7IHJldHVybiBzdXBlci5jbG9uZShFbmRPZkxpbmVQYXJ0KTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBFbmRPZkxpbmVQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L3Rlcm1pbmFsL2VuZE9mTGluZVwiO1xuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS9ub25UZXJtaW5hbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbmRPZkxpbmVCTkZOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgZ2VuZXJhdGVQYXJ0KGxvb2tBaGVhZCkge1xuICAgIGNvbnN0IGVuZE9mTGluZVBhcnQgPSBuZXcgRW5kT2ZMaW5lUGFydCgpO1xuXG4gICAgcmV0dXJuIGVuZE9mTGluZVBhcnQ7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2RlcykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoRW5kT2ZMaW5lQk5GTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgRW5kT2ZMaW5lQk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvZW5kT2ZMaW5lXCI7XG5pbXBvcnQgVGVybWluYWxTeW1ib2xEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3Rlcm1pbmFsU3ltYm9sXCI7XG5cbmltcG9ydCB7IEVuZE9mTGluZVJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5jb25zdCB7IEVORF9PRl9MSU5FIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW5kT2ZMaW5lUnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBlbmRPZkxpbmVUZXJtaW5hbFN5bWJvbENvbnRlbnQgPSBFTkRfT0ZfTElORSxcbiAgICAgICAgICBlbmRPZkxpbmVUZXJtaW5hbFN5bWJvbERlZmluaXRpb24gPSBuZXcgVGVybWluYWxTeW1ib2xEZWZpbml0aW9uKGVuZE9mTGluZVRlcm1pbmFsU3ltYm9sQ29udGVudCksXG4gICAgICAgICAgbmFtZSA9IEVuZE9mTGluZVJ1bGVOYW1lLFxuICAgICAgICAgIGFtYmlndW91cyA9IGZhbHNlLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgZW5kT2ZMaW5lVGVybWluYWxTeW1ib2xEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gRW5kT2ZMaW5lQk5GTm9kZTtcblxuICAgIHN1cGVyKG5hbWUsIGFtYmlndW91cywgZGVmaW5pdGlvbnMsIE5vZGUpXG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IFBhcnRCTkZOb2RlIGZyb20gXCIuLi9ub2RlL2JuZi9wYXJ0XCI7XG5pbXBvcnQgUnVsZU5hbWVEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3J1bGVOYW1lXCI7XG5cbmltcG9ydCB7IFF1YW50aWZpZXJSdWxlTmFtZSwgT3B0aW9uYWxRdWFudGlmaWVyUnVsZU5hbWUsIE9uZU9yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSwgWmVyb09yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUXVhbnRpZmllclJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgbmFtZSA9IFF1YW50aWZpZXJSdWxlTmFtZSxcbiAgICAgICAgICBvcHRpb25hbFF1YW50aWZpZXJSdWxlTmFtZSA9IE9wdGlvbmFsUXVhbnRpZmllclJ1bGVOYW1lLFxuICAgICAgICAgIG9uZU9yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSA9IE9uZU9yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSxcbiAgICAgICAgICB6ZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lID0gWmVyb09yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSxcbiAgICAgICAgICBvcHRpb25hbFF1YW50aWZpZXJSdWxlTmFtZURlZmluaXRpb24gPSBuZXcgUnVsZU5hbWVEZWZpbml0aW9uKG9wdGlvbmFsUXVhbnRpZmllclJ1bGVOYW1lKSxcbiAgICAgICAgICBvbmVPck1vcmVRdWFudGlmaWVyUnVsZU5hbWVEZWZpbml0aW9uID0gbmV3IFJ1bGVOYW1lRGVmaW5pdGlvbihvbmVPck1vcmVRdWFudGlmaWVyUnVsZU5hbWUpLFxuICAgICAgICAgIHplcm9Pck1vcmVRdWFudGlmaWVyUnVsZU5hbWVEZWZpbml0aW9uID0gbmV3IFJ1bGVOYW1lRGVmaW5pdGlvbih6ZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lKSxcbiAgICAgICAgICBhbWJpZ3VvdXMgPSBmYWxzZSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIG9wdGlvbmFsUXVhbnRpZmllclJ1bGVOYW1lRGVmaW5pdGlvbixcbiAgICAgICAgICAgIG9uZU9yTW9yZVF1YW50aWZpZXJSdWxlTmFtZURlZmluaXRpb24sXG4gICAgICAgICAgICB6ZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IFBhcnRCTkZOb2RlO1xuICAgIFxuICAgIHN1cGVyKG5hbWUsIGFtYmlndW91cywgZGVmaW5pdGlvbnMsIE5vZGUpXG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS9ub25UZXJtaW5hbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEZWZpbml0aW9uQk5GTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIGdlbmVyYXRlRGVmaW5pdGlvbigpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gdGhpcy5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgcGFydE5vZGVzID0gY2hpbGROb2RlcywgLy8vXG4gICAgICAgICAgbG9va0FoZWFkID0gZmFsc2UsICAvLy9cbiAgICAgICAgICBwYXJ0cyA9IHBhcnROb2Rlcy5tYXAoKHBhcnROb2RlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwYXJ0ID0gcGFydE5vZGUuZ2VuZXJhdGVQYXJ0KGxvb2tBaGVhZCk7XG4gIFxuICAgICAgICAgICAgcmV0dXJuIHBhcnQ7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgZGVmaW5pdGlvbiA9IG5ldyBEZWZpbml0aW9uKHBhcnRzKTtcblxuICAgIHJldHVybiBkZWZpbml0aW9uO1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMocnVsZU5hbWUsIGNoaWxkTm9kZXMpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKERlZmluaXRpb25CTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IFJ1bGVOYW1lUGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9ydWxlTmFtZVwiO1xuaW1wb3J0IE9uZU9yTW9yZVBhcnRzUGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9vbmVPck1vcmVQYXJ0c1wiO1xuXG5pbXBvcnQgeyBQYXJ0UnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERlZmluaXRpb25EZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IHBhcnRSdWxlTmFtZSA9IFBhcnRSdWxlTmFtZSxcbiAgICAgICAgICBwYXJ0UnVsZU5hbWVQYXJ0ID0gbmV3IFJ1bGVOYW1lUGFydChwYXJ0UnVsZU5hbWUpLFxuICAgICAgICAgIG9uZU9yTW9yZVJ1bGVOYW1lUGFydHNQYXJ0ID0gbmV3IE9uZU9yTW9yZVBhcnRzUGFydChwYXJ0UnVsZU5hbWVQYXJ0KSxcbiAgICAgICAgICBwYXJ0cyA9IFtcbiAgICAgICAgICAgIG9uZU9yTW9yZVJ1bGVOYW1lUGFydHNQYXJ0XG4gICAgICAgICAgXTtcblxuICAgIHN1cGVyKHBhcnRzKVxuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBEZWZpbml0aW9uQk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvZGVmaW5pdGlvblwiO1xuaW1wb3J0IERlZmluaXRpb25EZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL2RlZmluaXRpb25cIjtcblxuaW1wb3J0IHsgRGVmaW5pdGlvblJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEZWZpbml0aW9uUnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBuYW1lID0gRGVmaW5pdGlvblJ1bGVOYW1lLFxuICAgICAgICAgIGRlZmluaXRpb25EZWZpbml0aW9uID0gbmV3IERlZmluaXRpb25EZWZpbml0aW9uKCksXG4gICAgICAgICAgYW1iaWd1b3VzID0gZmFsc2UsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBkZWZpbml0aW9uRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IERlZmluaXRpb25CTkZOb2RlO1xuICAgIFxuICAgIHN1cGVyKG5hbWUsIGFtYmlndW91cywgZGVmaW5pdGlvbnMsIE5vZGUpXG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9ub2RlL25vblRlcm1pbmFsXCI7XG5cbmltcG9ydCB7IGV2ZW4gfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERlZmluaXRpb25zQk5GTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIGdlbmVyYXRlRGVmaW5pdGlvbnMoKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIGV2ZW5DaGlsZE5vZGVzID0gZXZlbihjaGlsZE5vZGVzKSwgIC8vL1xuICAgICAgICAgIGRlZmluaXRpb25CTkZOb2RlcyA9IGV2ZW5DaGlsZE5vZGVzLCAvLy9cbiAgICAgICAgICBkZWZpbml0aW9ucyA9IGRlZmluaXRpb25CTkZOb2Rlcy5tYXAoKGRlZmluaXRpb25CTkZOb2RlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkZWZpbml0aW9uID0gZGVmaW5pdGlvbkJORk5vZGUuZ2VuZXJhdGVEZWZpbml0aW9uKCk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHJldHVybiBkZWZpbml0aW9uO1xuICAgICAgICAgIH0pO1xuICAgIFxuICAgIHJldHVybiBkZWZpbml0aW9ucztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhEZWZpbml0aW9uc0JORk5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbFBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvbm9uVGVybWluYWxcIjtcblxuaW1wb3J0IHsgcHVzaCB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvYXJyYXlcIjtcbmltcG9ydCB7IHBhcnNlUGFydHMgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2xvb2tBaGVhZFwiO1xuaW1wb3J0IHsgYWxsQnV0Rmlyc3RBbmRMYXN0IH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9hcnJheVwiO1xuaW1wb3J0IHsgU2VxdWVuY2VPZlBhcnRzUGFydFR5cGUgfSBmcm9tIFwiLi4vLi4vcGFydFR5cGVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNlcXVlbmNlT2ZQYXJ0c1BhcnQgZXh0ZW5kcyBOb25UZXJtaW5hbFBhcnQge1xuICBjb25zdHJ1Y3RvcihwYXJ0cykge1xuICAgIGNvbnN0IHR5cGUgPSBTZXF1ZW5jZU9mUGFydHNQYXJ0VHlwZTsgLy8vXG5cbiAgICBzdXBlcih0eXBlKTtcblxuICAgIHRoaXMucGFydHMgPSBwYXJ0cztcbiAgfVxuXG4gIGdldFBhcnRzKCkge1xuICAgIHJldHVybiB0aGlzLnBhcnRzO1xuICB9XG5cbiAgcGFyc2Uobm9kZXMsIHN0YXRlLCBjYWxsYmFjaykge1xuICAgIGxldCBwYXJzZWQ7XG5cbiAgICBjb25zdCBzYXZlZEluZGV4ID0gc3RhdGUuZ2V0U2F2ZWRJbmRleCgpLFxuICAgICAgICAgIHBhcnRzTm9kZXMgPSBbXSxcbiAgICAgICAgICBpbmRleCA9IDA7XG5cbiAgICBwYXJzZWQgPSBwYXJzZVBhcnRzKHRoaXMucGFydHMsIHBhcnRzTm9kZXMsIGluZGV4LCBzdGF0ZSwgY2FsbGJhY2spO1xuXG4gICAgaWYgKHBhcnNlZCkge1xuICAgICAgcHVzaChub2RlcywgcGFydHNOb2Rlcyk7XG4gICAgfVxuXG4gICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgIHN0YXRlLmJhY2t0cmFjayhzYXZlZEluZGV4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG5cbiAgYXNTdHJpbmcoKSB7XG4gICAgY29uc3QgcGFydHNTdHJpbmcgPSB0aGlzLnBhcnRzLnJlZHVjZSgocGFydHNTdHJpbmcsIHBhcnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnRTdHJpbmcgPSBwYXJ0LmFzU3RyaW5nKCk7XG5cbiAgICAgICAgICAgIGlmIChwYXJ0c1N0cmluZyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICBwYXJ0c1N0cmluZyA9IHBhcnRTdHJpbmc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBwYXJ0c1N0cmluZyA9IGAke3BhcnRzU3RyaW5nfSAke3BhcnRTdHJpbmd9YDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHBhcnRzU3RyaW5nO1xuICAgICAgICAgIH0sIG51bGwpLFxuICAgICAgICAgIHN0cmluZyA9IGAoICR7cGFydHNTdHJpbmd9IClgO1xuXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxuXG4gIGNsb25lKCkgeyByZXR1cm4gc3VwZXIuY2xvbmUoU2VxdWVuY2VPZlBhcnRzUGFydCwgdGhpcy5wYXJ0cyk7IH1cblxuICBzdGF0aWMgZnJvbU5vZGVzKG5vZGVzKSB7XG4gICAgY29uc3QgYWxsQnV0Rmlyc3RBbmRMYXN0Tm9kZXMgPSBhbGxCdXRGaXJzdEFuZExhc3Qobm9kZXMpO1xuXG4gICAgbm9kZXMgPSBhbGxCdXRGaXJzdEFuZExhc3ROb2RlczsgIC8vL1xuXG4gICAgY29uc3QgbG9va0FoZWFkID0gZmFsc2UsXG4gICAgICAgICAgcGFydHMgPSBub2Rlcy5tYXAoKG5vZGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnQgPSBub2RlLmdlbmVyYXRlUGFydChsb29rQWhlYWQpO1xuXG4gICAgICAgICAgICByZXR1cm4gcGFydDtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBzZXF1ZW5jZU9mUGFydHNQYXJ0ID0gbmV3IFNlcXVlbmNlT2ZQYXJ0c1BhcnQocGFydHMpO1xuXG4gICAgcmV0dXJuIHNlcXVlbmNlT2ZQYXJ0c1BhcnQ7XG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBSdWxlTmFtZVBhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvcnVsZU5hbWVcIjtcbmltcG9ydCBUZXJtaW5hbFN5bWJvbFBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvdGVybWluYWxTeW1ib2xcIjtcbmltcG9ydCBaZXJvT3JNb3JlUGFydHNQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL3plcm9Pck1vcmVQYXJ0c1wiO1xuaW1wb3J0IFNlcXVlbmNlT2ZQYXJ0c1BhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvc2VxdWVuY2VPZlBhcnRzXCI7XG5cbmltcG9ydCB7IERlZmluaXRpb25SdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuY29uc3QgeyB2ZXJ0aWNhbEJhciB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERlZmluaXRpb25zRGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBkZWZpbml0aW9uUnVsZU5hbWUgPSBEZWZpbml0aW9uUnVsZU5hbWUsXG4gICAgICAgICAgdmVydGljYWxCYXJUZXJtaW5hbFN5bWJvbENvbnRlbnQgPSB2ZXJ0aWNhbEJhcixcbiAgICAgICAgICBkZWZpbml0aW9uUnVsZU5hbWVQYXJ0ID0gbmV3IFJ1bGVOYW1lUGFydChkZWZpbml0aW9uUnVsZU5hbWUpLFxuICAgICAgICAgIHZlcnRpY2FsQmFyVGVybWluYWxTeW1ib2xQYXJ0ID0gbmV3IFRlcm1pbmFsU3ltYm9sUGFydCh2ZXJ0aWNhbEJhclRlcm1pbmFsU3ltYm9sQ29udGVudCksXG4gICAgICAgICAgdmVydGljYWxCYXJUZXJtaW5hbFN5bWJvbFRoZW5EZWZpbml0aW9uUnVsZU5hbWVQYXJ0cyA9IFtcbiAgICAgICAgICAgIHZlcnRpY2FsQmFyVGVybWluYWxTeW1ib2xQYXJ0LFxuICAgICAgICAgICAgZGVmaW5pdGlvblJ1bGVOYW1lUGFydFxuICAgICAgICAgIF0sXG4gICAgICAgICAgc2VxdWVuY2VPZlBhcnRzUGFydCA9IG5ldyBTZXF1ZW5jZU9mUGFydHNQYXJ0KHZlcnRpY2FsQmFyVGVybWluYWxTeW1ib2xUaGVuRGVmaW5pdGlvblJ1bGVOYW1lUGFydHMpLFxuICAgICAgICAgIHplcm9Pck1vcmVTZXF1ZW5jZU9mUGFydHNQYXJ0ID0gbmV3IFplcm9Pck1vcmVQYXJ0c1BhcnQoc2VxdWVuY2VPZlBhcnRzUGFydCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICBkZWZpbml0aW9uUnVsZU5hbWVQYXJ0LFxuICAgICAgICAgICAgemVyb09yTW9yZVNlcXVlbmNlT2ZQYXJ0c1BhcnRcbiAgICAgICAgICBdO1xuICAgIFxuICAgIHN1cGVyKHBhcnRzKVxuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBEZWZpbml0aW9uc0JORk5vZGUgZnJvbSBcIi4uL25vZGUvYm5mL2RlZmluaXRpb25zXCI7XG5pbXBvcnQgRGVmaW5pdGlvbnNEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL2RlZmluaXRpb25zXCI7XG5cbmltcG9ydCB7IERlZmluaXRpb25zUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERlZmluaXRpb25zUnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBkZWZpbml0aW9uc0RlZmluaXRpb24gPSBuZXcgRGVmaW5pdGlvbnNEZWZpbml0aW9uKCksXG4gICAgICAgICAgbmFtZSA9IERlZmluaXRpb25zUnVsZU5hbWUsXG4gICAgICAgICAgYW1iaWd1b3VzID0gZmFsc2UsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBkZWZpbml0aW9uc0RlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBEZWZpbml0aW9uc0JORk5vZGU7XG4gICAgXG4gICAgc3VwZXIobmFtZSwgYW1iaWd1b3VzLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uLy4uL25vZGUvbm9uVGVybWluYWxcIjtcblxuaW1wb3J0IHsgZmlyc3QgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlcm1pbmFsUGFydEJORk5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBnZW5lcmF0ZVBhcnQobG9va0FoZWFkKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIGZpcnN0Q2hpbGROb2RlID0gZmlyc3QoY2hpbGROb2RlcyksXG4gICAgICAgICAgbm9kZSA9IGZpcnN0Q2hpbGROb2RlLCAgLy8vXG4gICAgICAgICAgcGFydCA9IG5vZGUuZ2VuZXJhdGVQYXJ0KGxvb2tBaGVhZCk7XG5cbiAgICByZXR1cm4gcGFydDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhUZXJtaW5hbFBhcnRCTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IFRlcm1pbmFsUGFydEJORk5vZGUgZnJvbSBcIi4uL25vZGUvYm5mL3BhcnQvdGVybWluYWxcIjtcbmltcG9ydCBSdWxlTmFtZURlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vcnVsZU5hbWVcIjtcblxuaW1wb3J0IHsgVGVybWluYWxQYXJ0UnVsZU5hbWUsIFJlZ3VsYXJFeHByZXNzaW9uUnVsZU5hbWUsIFNpZ25pZmljYW50VG9rZW5UeXBlUnVsZU5hbWUsIFRlcm1pbmFsU3ltYm9sUnVsZU5hbWUsIEVuZE9mTGluZVJ1bGVOYW1lLCBXaWxkY2FyZFJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXJtaW5hbFBhcnRSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IG5hbWUgPSBUZXJtaW5hbFBhcnRSdWxlTmFtZSxcbiAgICAgICAgICB3aWxkY2FyZFJ1bGVOYW1lID0gV2lsZGNhcmRSdWxlTmFtZSxcbiAgICAgICAgICBlbmRPZkxpbmVSdWxlTmFtZSA9IEVuZE9mTGluZVJ1bGVOYW1lLFxuICAgICAgICAgIHRlcm1pbmFsU3ltYm9sUnVsZU5hbWUgPSBUZXJtaW5hbFN5bWJvbFJ1bGVOYW1lLFxuICAgICAgICAgIHJlZ3VsYXJFeHByZXNzaW9uUnVsZU5hbWUgPSBSZWd1bGFyRXhwcmVzc2lvblJ1bGVOYW1lLFxuICAgICAgICAgIHNpZ25pZmljYW50VG9rZW5UeXBlUnVsZU5hbWUgPSBTaWduaWZpY2FudFRva2VuVHlwZVJ1bGVOYW1lLFxuICAgICAgICAgIHdpbGRjYXJkUnVsZU5hbWVEZWZpbml0aW9uID0gbmV3IFJ1bGVOYW1lRGVmaW5pdGlvbih3aWxkY2FyZFJ1bGVOYW1lKSxcbiAgICAgICAgICBlbmRPZkxpbmVSdWxlTmFtZURlZmluaXRpb24gPSBuZXcgUnVsZU5hbWVEZWZpbml0aW9uKGVuZE9mTGluZVJ1bGVOYW1lKSxcbiAgICAgICAgICB0ZXJtaW5hbFN5bWJvbFJ1bGVOYW1lRGVmaW5pdGlvbiA9IG5ldyBSdWxlTmFtZURlZmluaXRpb24odGVybWluYWxTeW1ib2xSdWxlTmFtZSksXG4gICAgICAgICAgcmVndWxhckV4cHJlc3Npb25SdWxlTmFtZURlZmluaXRpb24gPSBuZXcgUnVsZU5hbWVEZWZpbml0aW9uKHJlZ3VsYXJFeHByZXNzaW9uUnVsZU5hbWUpLFxuICAgICAgICAgIHNpZ25pZmljYW50VG9rZW5UeXBlUnVsZU5hbWVEZWZpbml0aW9uID0gbmV3IFJ1bGVOYW1lRGVmaW5pdGlvbihzaWduaWZpY2FudFRva2VuVHlwZVJ1bGVOYW1lKSxcbiAgICAgICAgICBhbWJpZ3VvdXMgPSBmYWxzZSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIHNpZ25pZmljYW50VG9rZW5UeXBlUnVsZU5hbWVEZWZpbml0aW9uLFxuICAgICAgICAgICAgcmVndWxhckV4cHJlc3Npb25SdWxlTmFtZURlZmluaXRpb24sXG4gICAgICAgICAgICB0ZXJtaW5hbFN5bWJvbFJ1bGVOYW1lRGVmaW5pdGlvbixcbiAgICAgICAgICAgIGVuZE9mTGluZVJ1bGVOYW1lRGVmaW5pdGlvbixcbiAgICAgICAgICAgIHdpbGRjYXJkUnVsZU5hbWVEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gVGVybWluYWxQYXJ0Qk5GTm9kZTtcbiAgICBcbiAgICBzdXBlcihuYW1lLCBhbWJpZ3VvdXMsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS9ub25UZXJtaW5hbFwiO1xuaW1wb3J0IENob2ljZU9mUGFydHNQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L25vblRlcm1pbmFsL2Nob2ljZU9mUGFydHNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2hvaWNlT2ZQYXJ0c0JORk5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBnZW5lcmF0ZVBhcnQobG9va0FoZWFkKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIG5vZGVzID0gY2hpbGROb2Rlcy5zbGljZSgpLFxuICAgICAgICAgIHBhcnQgPSBDaG9pY2VPZlBhcnRzUGFydC5mcm9tTm9kZXMobm9kZXMpO1xuXG4gICAgcmV0dXJuIHBhcnQ7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2RlcykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoQ2hvaWNlT2ZQYXJ0c0JORk5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IFJ1bGVOYW1lUGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9ydWxlTmFtZVwiO1xuaW1wb3J0IE9uZU9yTW9yZVBhcnRzUGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9vbmVPck1vcmVQYXJ0c1wiO1xuaW1wb3J0IFRlcm1pbmFsU3ltYm9sUGFydCBmcm9tIFwiLi4vcGFydC90ZXJtaW5hbC90ZXJtaW5hbFN5bWJvbFwiO1xuaW1wb3J0IFNlcXVlbmNlT2ZQYXJ0c1BhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvc2VxdWVuY2VPZlBhcnRzXCI7XG5cbmltcG9ydCB7IFBhcnRSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuY29uc3QgeyB2ZXJ0aWNhbEJhciwgb3BlbkJyYWNrZXQsIGNsb3NlQnJhY2tldCB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENob2ljZU9mUGFydHNEZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IHBhcnRSdWxlTmFtZSA9IFBhcnRSdWxlTmFtZSxcbiAgICAgICAgICB2ZXJ0aWNhbEJhclRlcm1pbmFsU3ltYm9sQ29udGVudCA9IHZlcnRpY2FsQmFyLCAvLy9cbiAgICAgICAgICBvcGVuQnJhY2tldFRlcm1pbmFsU3ltYm9sQ29udGVudCA9IG9wZW5CcmFja2V0LCAvLy9cbiAgICAgICAgICBjbG9zZUJyYWNrZXRUZXJtaW5hbFN5bWJvbENvbnRlbnQgPSBjbG9zZUJyYWNrZXQsIC8vL1xuICAgICAgICAgIHBhcnRSdWxlTmFtZVBhcnQgPSBuZXcgUnVsZU5hbWVQYXJ0KHBhcnRSdWxlTmFtZSksXG4gICAgICAgICAgdmVydGljYWxCYXJUZXJtaW5hbFN5bWJvbFBhcnQgPSBuZXcgVGVybWluYWxTeW1ib2xQYXJ0KHZlcnRpY2FsQmFyVGVybWluYWxTeW1ib2xDb250ZW50KSxcbiAgICAgICAgICBvcGVuQnJhY2tldFRlcm1pbmFsU3ltYm9sUGFydCA9IG5ldyBUZXJtaW5hbFN5bWJvbFBhcnQob3BlbkJyYWNrZXRUZXJtaW5hbFN5bWJvbENvbnRlbnQpLFxuICAgICAgICAgIGNsb3NlQnJhY2tldFRlcm1pbmFsU3ltYm9sUGFydCA9IG5ldyBUZXJtaW5hbFN5bWJvbFBhcnQoY2xvc2VCcmFja2V0VGVybWluYWxTeW1ib2xDb250ZW50KSxcbiAgICAgICAgICB2ZXJ0aWNhbEJhclRlcm1pbmFsU3ltYm9sVGhlblBhcnRSdWxlTmFtZVBhcnRzID0gW1xuICAgICAgICAgICAgdmVydGljYWxCYXJUZXJtaW5hbFN5bWJvbFBhcnQsXG4gICAgICAgICAgICBwYXJ0UnVsZU5hbWVQYXJ0XG4gICAgICAgICAgXSxcbiAgICAgICAgICBzZXF1ZW5jZU9mUGFydHNQYXJ0ID0gbmV3IFNlcXVlbmNlT2ZQYXJ0c1BhcnQodmVydGljYWxCYXJUZXJtaW5hbFN5bWJvbFRoZW5QYXJ0UnVsZU5hbWVQYXJ0cyksXG4gICAgICAgICAgb25lT3JNb3JlU2VxdWVuY2VPZlBhcnRzUGFydCA9IG5ldyBPbmVPck1vcmVQYXJ0c1BhcnQoc2VxdWVuY2VPZlBhcnRzUGFydCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICBvcGVuQnJhY2tldFRlcm1pbmFsU3ltYm9sUGFydCxcbiAgICAgICAgICAgIHBhcnRSdWxlTmFtZVBhcnQsXG4gICAgICAgICAgICBvbmVPck1vcmVTZXF1ZW5jZU9mUGFydHNQYXJ0LFxuICAgICAgICAgICAgY2xvc2VCcmFja2V0VGVybWluYWxTeW1ib2xQYXJ0XG4gICAgICAgICAgXTtcblxuICAgIHN1cGVyKHBhcnRzKVxuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBDaG9pY2VPZlBhcnRzQk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvY2hvaWNlT2ZQYXJ0c1wiO1xuaW1wb3J0IENob2ljZU9mUGFydHNEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL2Nob2ljZU9mUGFydHNcIjtcblxuaW1wb3J0IHsgQ2hvaWNlT2ZQYXJ0c1J1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDaG9pY2VPZlBhcnRzUnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBuYW1lID0gQ2hvaWNlT2ZQYXJ0c1J1bGVOYW1lLFxuICAgICAgICAgIGNob2ljZU9mUGFydHNEZWZpbml0aW9uID0gbmV3IENob2ljZU9mUGFydHNEZWZpbml0aW9uKCksXG4gICAgICAgICAgYW1iaWd1b3VzID0gZmFsc2UsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBjaG9pY2VPZlBhcnRzRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IENob2ljZU9mUGFydHNCTkZOb2RlO1xuICAgIFxuICAgIHN1cGVyKG5hbWUsIGFtYmlndW91cywgZGVmaW5pdGlvbnMsIE5vZGUpXG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9ub2RlL25vblRlcm1pbmFsXCI7XG5pbXBvcnQgVGVybWluYWxTeW1ib2xQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L3Rlcm1pbmFsL3Rlcm1pbmFsU3ltYm9sXCI7XG5cbmltcG9ydCB7IGZpcnN0LCBzZWNvbmQgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlcm1pbmFsU3ltYm9sQk5GTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIHJlZ3VsYXJFeHByZXNzaW9uID0gL15cIigoPzpcXFxcLnxbXlwiXFxcXF0pKilcIiQvO1xuXG4gIGdlbmVyYXRlUGFydChsb29rQWhlYWQpIHtcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5nZXRDb250ZW50KCksXG4gICAgICAgICAgdGVybWluYWxTeW1ib2xQYXJ0ID0gbmV3IFRlcm1pbmFsU3ltYm9sUGFydChjb250ZW50KTtcblxuICAgIHJldHVybiB0ZXJtaW5hbFN5bWJvbFBhcnQ7XG4gIH1cblxuICBnZXRDb250ZW50KCkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBmaXJzdENoaWxkTm9kZSA9IGZpcnN0KGNoaWxkTm9kZXMpLFxuICAgICAgICAgIHRlcm1pbmFsTm9kZSA9IGZpcnN0Q2hpbGROb2RlLCAgLy8vXG4gICAgICAgICAgdGVybWluYWxOb2RlQ29udGVudCA9IHRlcm1pbmFsTm9kZS5nZXRDb250ZW50KCksXG4gICAgICAgICAgbWF0Y2hlcyA9IHRlcm1pbmFsTm9kZUNvbnRlbnQubWF0Y2godGhpcy5yZWd1bGFyRXhwcmVzc2lvbiksXG4gICAgICAgICAgc2Vjb25kTWF0Y2ggPSBzZWNvbmQobWF0Y2hlcyksXG4gICAgICAgICAgY29udGVudCA9IHNlY29uZE1hdGNoLnJlcGxhY2UoL1xcXFxcXFxcL2csIFwiXFxcXFwiKS5yZXBsYWNlKC9cXFxcXCIvZywgXCJcXFwiXCIpO1xuXG4gICAgcmV0dXJuIGNvbnRlbnQ7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2RlcykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoVGVybWluYWxTeW1ib2xCTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7IH1cbn1cblxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgU2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0IGZyb20gXCIuLi9wYXJ0L3Rlcm1pbmFsL3NpZ25pZmljYW50VG9rZW5UeXBlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNpZ25pZmljYW50VG9rZW5UeXBlRGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBjb25zdHJ1Y3RvcihzaWduaWZpY2FudFRva2VuVHlwZSkge1xuICAgIGNvbnN0IHNpZ25pZmljYW50VG9rZW5UeXBlUGFydCA9IG5ldyBTaWduaWZpY2FudFRva2VuVHlwZVBhcnQoc2lnbmlmaWNhbnRUb2tlblR5cGUpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgc2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0XG4gICAgICAgICAgXTtcbiAgICBcbiAgICBzdXBlcihwYXJ0cylcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHR5cGVzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IFRlcm1pbmFsU3ltYm9sQk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvdGVybWluYWxTeW1ib2xcIjtcbmltcG9ydCBTaWduaWZpY2FudFRva2VuVHlwZURlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vc2lnbmlmaWNhbnRUb2tlblR5cGVcIjtcblxuaW1wb3J0IHsgVGVybWluYWxTeW1ib2xSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuY29uc3QgeyBzdHJpbmdMaXRlcmFsVHlwZSB9ID0gdHlwZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlcm1pbmFsU3ltYm9sUnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBzdHJpbmdMaXRlcmFsU2lnbmlmaWNhbnRUb2tlblR5cGUgPSBzdHJpbmdMaXRlcmFsVHlwZSwgIC8vL1xuICAgICAgICAgIHN0cmluZ0xpdGVyYWxTaWduaWZpY2FudFRva2VuVHlwZURlZmluaXRpb24gPSBuZXcgU2lnbmlmaWNhbnRUb2tlblR5cGVEZWZpbml0aW9uKHN0cmluZ0xpdGVyYWxTaWduaWZpY2FudFRva2VuVHlwZSksXG4gICAgICAgICAgbmFtZSA9IFRlcm1pbmFsU3ltYm9sUnVsZU5hbWUsXG4gICAgICAgICAgYW1iaWd1b3VzID0gZmFsc2UsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBzdHJpbmdMaXRlcmFsU2lnbmlmaWNhbnRUb2tlblR5cGVEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gVGVybWluYWxTeW1ib2xCTkZOb2RlO1xuXG4gICAgc3VwZXIobmFtZSwgYW1iaWd1b3VzLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uLy4uL25vZGUvbm9uVGVybWluYWxcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTm9uVGVybWluYWxQYXJ0Qk5GTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIGdlbmVyYXRlUGFydChsb29rQWhlYWQpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gdGhpcy5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgbm9kZXMgPSBjaGlsZE5vZGVzLnNsaWNlKCksXG4gICAgICAgICAgcGFydCA9IHBhcnRGcm9tTm9kZXMobm9kZXMsIGxvb2tBaGVhZCk7XG5cbiAgICByZXR1cm4gcGFydDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhOb25UZXJtaW5hbFBhcnRCTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7IH1cbn1cblxuZnVuY3Rpb24gcGFydEZyb21Ob2Rlcyhub2RlcywgbG9va0FoZWFkKSB7XG4gIGxldCBwYXJ0ID0gbnVsbDtcblxuICBjb25zdCBub2Rlc0xlbmd0aCA9IG5vZGVzLmxlbmd0aDtcblxuICBpZiAobm9kZXNMZW5ndGggPT09IDEpIHtcbiAgICBjb25zdCBub2RlID0gbm9kZXMucG9wKCk7XG5cbiAgICBwYXJ0ID0gbm9kZS5nZW5lcmF0ZVBhcnQobG9va0FoZWFkKTtcbiAgfSBlbHNlIHtcbiAgICBub2Rlcy5wb3AoKTtcblxuICAgIGxvb2tBaGVhZCA9IHRydWU7XG5cbiAgICBwYXJ0ID0gcGFydEZyb21Ob2Rlcyhub2RlcywgbG9va0FoZWFkKTtcbiAgfVxuXG4gIHJldHVybiBwYXJ0O1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vLi4vLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IFJ1bGVOYW1lUGFydCBmcm9tIFwiLi4vLi4vLi4vcGFydC9ub25UZXJtaW5hbC9ydWxlTmFtZVwiO1xuaW1wb3J0IE9wdGlvbmFsUGFydFBhcnQgZnJvbSBcIi4uLy4uLy4uL3BhcnQvbm9uVGVybWluYWwvb3B0aW9uYWxQYXJ0XCI7XG5cbmltcG9ydCB7IFJ1bGVOYW1lUnVsZU5hbWUsIExvb2tBaGVhZE1vZGlmaWVyUnVsZU5hbWUgfSBmcm9tIFwiLi4vLi4vLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ1bGVOYW1lTm9uVGVybWluYWxQYXJ0UnVsZURlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgcnVsZU5hbWVSdWxlTmFtZSA9IFJ1bGVOYW1lUnVsZU5hbWUsXG4gICAgICAgICAgbG9va0FoZWFkTW9kaWZpZXJSdWxlTmFtZSA9IExvb2tBaGVhZE1vZGlmaWVyUnVsZU5hbWUsXG4gICAgICAgICAgcnVsZU5hbWVSdWxlTmFtZVBhcnQgPSBuZXcgUnVsZU5hbWVQYXJ0KHJ1bGVOYW1lUnVsZU5hbWUpLFxuICAgICAgICAgIGxvb2tBaGVhZE1vZGlmaWVyUnVsZU5hbWVQYXJ0ID0gbmV3IFJ1bGVOYW1lUGFydChsb29rQWhlYWRNb2RpZmllclJ1bGVOYW1lKSxcbiAgICAgICAgICBvcHRpb25hbExvb2tBaGVhZFJ1bGVOYW1lUGFydFBhcnQgPSBuZXcgT3B0aW9uYWxQYXJ0UGFydChsb29rQWhlYWRNb2RpZmllclJ1bGVOYW1lUGFydCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICBydWxlTmFtZVJ1bGVOYW1lUGFydCxcbiAgICAgICAgICAgIG9wdGlvbmFsTG9va0FoZWFkUnVsZU5hbWVQYXJ0UGFydFxuICAgICAgICAgIF07XG4gICAgXG4gICAgc3VwZXIocGFydHMpXG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IFJ1bGVOYW1lRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9ydWxlTmFtZVwiO1xuaW1wb3J0IE5vblRlcm1pbmFsUGFydEJORk5vZGUgZnJvbSBcIi4uL25vZGUvYm5mL3BhcnQvbm9uVGVybWluYWxcIjtcbmltcG9ydCBSdWxlTmFtZU5vblRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3BhcnRSdWxlL25vblRlcm1pbmFsL3J1bGVOYW1lXCI7XG5cbmltcG9ydCB7IE5vblRlcm1pbmFsUGFydFJ1bGVOYW1lLCBDaG9pY2VPZlBhcnRzUnVsZU5hbWUsIFNlcXVlbmNlT2ZQYXJ0c1J1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOb25UZXJtaW5hbFBhcnRSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IG5hbWUgPSBOb25UZXJtaW5hbFBhcnRSdWxlTmFtZSxcbiAgICAgICAgICBjaG9pY2VPZlBhcnRzUnVsZU5hbWUgPSBDaG9pY2VPZlBhcnRzUnVsZU5hbWUsXG4gICAgICAgICAgc2VxdWVuY2VPZlBhcnRzUnVsZU5hbWUgPSBTZXF1ZW5jZU9mUGFydHNSdWxlTmFtZSxcbiAgICAgICAgICBjaG9pY2VPZlBhcnRzUnVsZU5hbWVEZWZpbml0aW9uID0gbmV3IFJ1bGVOYW1lRGVmaW5pdGlvbihjaG9pY2VPZlBhcnRzUnVsZU5hbWUpLFxuICAgICAgICAgIHNlcXVlbmNlT2ZQYXJ0c1J1bGVOYW1lRGVmaW5pdGlvbiA9IG5ldyBSdWxlTmFtZURlZmluaXRpb24oc2VxdWVuY2VPZlBhcnRzUnVsZU5hbWUpLFxuICAgICAgICAgIHJ1bGVOYW1lTm9uVGVybWluYWxQYXJ0UnVsZURlZmluaXRpb24gPSBuZXcgUnVsZU5hbWVOb25UZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvbigpLFxuICAgICAgICAgIGFtYmlndW91cyA9IGZhbHNlLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgY2hvaWNlT2ZQYXJ0c1J1bGVOYW1lRGVmaW5pdGlvbixcbiAgICAgICAgICAgIHNlcXVlbmNlT2ZQYXJ0c1J1bGVOYW1lRGVmaW5pdGlvbixcbiAgICAgICAgICAgIHJ1bGVOYW1lTm9uVGVybWluYWxQYXJ0UnVsZURlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBOb25UZXJtaW5hbFBhcnRCTkZOb2RlO1xuICAgIFxuICAgIHN1cGVyKG5hbWUsIGFtYmlndW91cywgZGVmaW5pdGlvbnMsIE5vZGUpXG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9ub2RlL25vblRlcm1pbmFsXCI7XG5pbXBvcnQgU2VxdWVuY2VPZlBhcnRzUGFydCBmcm9tIFwiLi4vLi4vcGFydC9ub25UZXJtaW5hbC9zZXF1ZW5jZU9mUGFydHNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2VxdWVuY2VPZlBhcnRzQk5GTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIGdlbmVyYXRlUGFydChsb29rQWhlYWQpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gdGhpcy5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgbm9kZXMgPSBjaGlsZE5vZGVzLnNsaWNlKCksXG4gICAgICAgICAgcGFydCA9IFNlcXVlbmNlT2ZQYXJ0c1BhcnQuZnJvbU5vZGVzKG5vZGVzKTtcblxuICAgIHJldHVybiBwYXJ0O1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMocnVsZU5hbWUsIGNoaWxkTm9kZXMpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKFNlcXVlbmNlT2ZQYXJ0c0JORk5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IFJ1bGVOYW1lUGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9ydWxlTmFtZVwiO1xuaW1wb3J0IFRlcm1pbmFsU3ltYm9sUGFydCBmcm9tIFwiLi4vcGFydC90ZXJtaW5hbC90ZXJtaW5hbFN5bWJvbFwiO1xuaW1wb3J0IE9uZU9yTW9yZVBhcnRzUGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9vbmVPck1vcmVQYXJ0c1wiO1xuXG5pbXBvcnQgeyBQYXJ0UnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmNvbnN0IHsgb3BlbkJyYWNrZXQsIGNsb3NlQnJhY2tldCB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNlcXVlbmNlT2ZQYXJ0c0RlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgcGFydFJ1bGVOYW1lID0gUGFydFJ1bGVOYW1lLFxuICAgICAgICAgIG9wZW5CcmFja2V0VGVybWluYWxTeW1ib2xDb250ZW50ID0gb3BlbkJyYWNrZXQsIC8vL1xuICAgICAgICAgIGNsb3NlQnJhY2tldFRlcm1pbmFsU3ltYm9sQ29udGVudCA9IGNsb3NlQnJhY2tldCwgLy8vXG4gICAgICAgICAgcGFydFJ1bGVOYW1lUGFydCA9IG5ldyBSdWxlTmFtZVBhcnQocGFydFJ1bGVOYW1lKSxcbiAgICAgICAgICBvcGVuQnJhY2tldFRlcm1pbmFsU3ltYm9sUGFydCA9IG5ldyBUZXJtaW5hbFN5bWJvbFBhcnQob3BlbkJyYWNrZXRUZXJtaW5hbFN5bWJvbENvbnRlbnQpLFxuICAgICAgICAgIGNsb3NlQnJhY2tldFRlcm1pbmFsU3ltYm9sUGFydCA9IG5ldyBUZXJtaW5hbFN5bWJvbFBhcnQoY2xvc2VCcmFja2V0VGVybWluYWxTeW1ib2xDb250ZW50KSxcbiAgICAgICAgICBvbmVPck1vcmVQYXJ0UnVsZU5hbWVQYXJ0c1BhcnQgPSBuZXcgT25lT3JNb3JlUGFydHNQYXJ0KHBhcnRSdWxlTmFtZVBhcnQpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgb3BlbkJyYWNrZXRUZXJtaW5hbFN5bWJvbFBhcnQsXG4gICAgICAgICAgICBwYXJ0UnVsZU5hbWVQYXJ0LFxuICAgICAgICAgICAgb25lT3JNb3JlUGFydFJ1bGVOYW1lUGFydHNQYXJ0LFxuICAgICAgICAgICAgY2xvc2VCcmFja2V0VGVybWluYWxTeW1ib2xQYXJ0XG4gICAgICAgICAgXTtcblxuICAgIHN1cGVyKHBhcnRzKVxuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBTZXF1ZW5jZU9mUGFydHNCTkZOb2RlIGZyb20gXCIuLi9ub2RlL2JuZi9zZXF1ZW5jZU9mUGFydHNcIjtcbmltcG9ydCBTZXF1ZW5jZU9mUGFydHNEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3NlcXVlbmNlT2ZQYXJ0c1wiO1xuXG5pbXBvcnQgeyBTZXF1ZW5jZU9mUGFydHNSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2VxdWVuY2VPZlBhcnRzUnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBuYW1lID0gU2VxdWVuY2VPZlBhcnRzUnVsZU5hbWUsXG4gICAgICAgICAgc2VxdWVuY2VPZlBhcnRzRGVmaW5pdGlvbiA9IG5ldyBTZXF1ZW5jZU9mUGFydHNEZWZpbml0aW9uKCksXG4gICAgICAgICAgYW1iaWd1b3VzID0gZmFsc2UsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBzZXF1ZW5jZU9mUGFydHNEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gU2VxdWVuY2VPZlBhcnRzQk5GTm9kZTtcblxuICAgIHN1cGVyKG5hbWUsIGFtYmlndW91cywgZGVmaW5pdGlvbnMsIE5vZGUpXG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlIGZyb20gXCIuL3ZlcnRpY2FsQnJhbmNoXCI7XG5cbmNvbnN0IHsgTk9fV0hJVEVTUEFDRSB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5vV2hpdGVzcGFjZU5vZGVQYXJzZVRyZWUgZXh0ZW5kcyBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSB7XG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBjb25zdCBzdHJpbmcgPSBOT19XSElURVNQQUNFLCAvLy9cbiAgICAgICAgICBzdHJpbmdMZW5ndGggPSBzdHJpbmcubGVuZ3RoLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlV2lkdGggPSBzdHJpbmdMZW5ndGgsIC8vL1xuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlID0gVmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZnJvbVdpZHRoKHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlV2lkdGgpLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5nZXRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKCksXG4gICAgICAgICAgdGVybWluYWxOb2RlUGFyc2VUcmVlID0gVmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZnJvbVN0cmluZ0FuZFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oTm9XaGl0ZXNwYWNlTm9kZVBhcnNlVHJlZSwgc3RyaW5nLCB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKTtcblxuICAgIHRlcm1pbmFsTm9kZVBhcnNlVHJlZS5hcHBlbmRUb1RvcCh2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSk7XG5cbiAgICBjb25zdCBub1doaXRlc3BhY2VOb2RlUGFyc2VUcmVlID0gdGVybWluYWxOb2RlUGFyc2VUcmVlOyAvLy9cblxuICAgIHJldHVybiBub1doaXRlc3BhY2VOb2RlUGFyc2VUcmVlO1xuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vdGVybWluYWxcIjtcbmltcG9ydCBOb1doaXRlc3BhY2VOb2RlUGFyc2VUcmVlIGZyb20gXCIuLi8uLi9wYXJzZVRyZWUvbm9XaGl0ZXNwYWNlTm9kZVwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5vV2hpdGVzcGFjZU5vZGUgZXh0ZW5kcyBUZXJtaW5hbE5vZGUge1xuICBnZXRUeXBlKCkge1xuICAgIGNvbnN0IHR5cGUgPSBudWxsOyAgLy8vXG5cbiAgICByZXR1cm4gdHlwZTtcbiAgfVxuXG4gIGdldENvbnRlbnQoKSB7XG4gICAgY29uc3QgY29udGVudCA9IEVNUFRZX1NUUklORztcblxuICAgIHJldHVybiBjb250ZW50O1xuICB9XG5cbiAgaXNOb1doaXRlc3BhY2VOb2RlKCkge1xuICAgIGNvbnN0IG5vV2hpdGVzcGFjZU5vZGUgPSB0cnVlO1xuXG4gICAgcmV0dXJuIG5vV2hpdGVzcGFjZU5vZGU7XG4gIH1cblxuICBhc1BhcnNlVHJlZSh0b2tlbnMpIHtcbiAgICBjb25zdCBub1doaXRlc3BhY2VOb2RlUGFyc2VUcmVlID0gTm9XaGl0ZXNwYWNlTm9kZVBhcnNlVHJlZS5mcm9tTm90aGluZygpLFxuICAgICAgICAgIHBhcnNlVHJlZSA9IG5vV2hpdGVzcGFjZU5vZGVQYXJzZVRyZWU7ICAvLy9cblxuICAgIHJldHVybiBwYXJzZVRyZWU7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgY29uc3Qgc2lnbmlmaWNhbnRUb2tlbiA9IG51bGwsXG4gICAgICAgICAgbm9XaGl0ZXNwYWNlTm9kZSA9IFRlcm1pbmFsTm9kZS5mcm9tU2lnbmlmaWNhbnRUb2tlbihOb1doaXRlc3BhY2VOb2RlLCBzaWduaWZpY2FudFRva2VuKTtcblxuICAgIHJldHVybiBub1doaXRlc3BhY2VOb2RlO1xuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBUZXJtaW5hbFBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvdGVybWluYWxcIjtcbmltcG9ydCBOb1doaXRlc3BhY2VOb2RlIGZyb20gXCIuLi8uLi9ub2RlL3Rlcm1pbmFsL25vV2hpdGVzcGFjZVwiO1xuXG5jb25zdCB7IE5PX1dISVRFU1BBQ0UgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOb1doaXRlc3BhY2VQYXJ0IGV4dGVuZHMgVGVybWluYWxQYXJ0IHtcbiAgaXNOb1doaXRlc3BhY2VQYXJ0KCkge1xuICAgIGNvbnN0IG5vV2hpdGVzcGFjZVBhcnQgPSB0cnVlO1xuXG4gICAgcmV0dXJuIG5vV2hpdGVzcGFjZVBhcnQ7XG4gIH1cblxuICBwYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrKSB7XG4gICAgbGV0IHBhcnNlZDtcblxuICAgIGxldCBub1doaXRlc3BhY2VOb2RlID0gbnVsbDtcblxuICAgIGNvbnN0IHNhdmVkSW5kZXggPSBzdGF0ZS5nZXRTYXZlZEluZGV4KCksXG4gICAgICAgICAgbmV4dFRva2VuV2hpdGVzcGFjZVRva2VuID0gc3RhdGUuaXNOZXh0VG9rZW5XaGl0ZXNwYWNlVG9rZW4oKTtcblxuICAgIGlmICghbmV4dFRva2VuV2hpdGVzcGFjZVRva2VuKSB7XG4gICAgICBub1doaXRlc3BhY2VOb2RlID0gTm9XaGl0ZXNwYWNlTm9kZS5mcm9tTm90aGluZygpO1xuICAgIH1cblxuICAgIHBhcnNlZCA9IChub1doaXRlc3BhY2VOb2RlICE9PSBudWxsKVxuXG4gICAgaWYgKHBhcnNlZCkge1xuICAgICAgbm9kZXMucHVzaChub1doaXRlc3BhY2VOb2RlKTtcblxuICAgICAgaWYgKGNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICAgIHBhcnNlZCA9IGNhbGxiYWNrKCk7XG5cbiAgICAgICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgICAgICBub2Rlcy5wb3AoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghcGFyc2VkKSB7XG4gICAgICBzdGF0ZS5iYWNrdHJhY2soc2F2ZWRJbmRleCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfVxuXG4gIGFzU3RyaW5nKCkge1xuICAgIGNvbnN0IHN0cmluZyA9IE5PX1dISVRFU1BBQ0U7IC8vL1xuXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxuXG4gIGNsb25lKCkgeyByZXR1cm4gc3VwZXIuY2xvbmUoTm9XaGl0ZXNwYWNlUGFydCk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9ub2RlL25vblRlcm1pbmFsXCI7XG5pbXBvcnQgTm9XaGl0ZXNwYWNlUGFydCBmcm9tIFwiLi4vLi4vcGFydC90ZXJtaW5hbC9ub1doaXRlc3BhY2VcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTm9XaGl0ZXNwYWNlUGFydEJORk5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBnZW5lcmF0ZVBhcnQobG9va0FoZWFkKSB7XG4gICAgY29uc3Qgbm9XaGl0ZXNwYWNlUGFydCA9IG5ldyBOb1doaXRlc3BhY2VQYXJ0KCk7XG5cbiAgICByZXR1cm4gbm9XaGl0ZXNwYWNlUGFydDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhOb1doaXRlc3BhY2VQYXJ0Qk5GTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgVGVybWluYWxTeW1ib2xQYXJ0IGZyb20gXCIuLi9wYXJ0L3Rlcm1pbmFsL3Rlcm1pbmFsU3ltYm9sXCI7XG5cbmNvbnN0IHsgTk9fV0hJVEVTUEFDRSB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5vV2hpdGVzcGFjZVBhcnREZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IGNvbnRlbnQgPSBOT19XSElURVNQQUNFLFxuICAgICAgICAgIHRlcm1pbmFsU3ltYm9sUGFydCA9IG5ldyBUZXJtaW5hbFN5bWJvbFBhcnQoY29udGVudCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICB0ZXJtaW5hbFN5bWJvbFBhcnRcbiAgICAgICAgICBdO1xuXG4gICAgc3VwZXIocGFydHMpXG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IE5vV2hpdGVzcGFjZVBhcnRCTkZOb2RlIGZyb20gXCIuLi9ub2RlL2JuZi9ub1doaXRlc3BhY2VQYXJ0XCI7XG5pbXBvcnQgTm9XaGl0ZXNwYWNlUGFydERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vbm9XaGl0ZXNwYWNlUGFydFwiO1xuXG5pbXBvcnQgeyBOb1doaXRlc3BhY2VQYXJ0UnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5vV2hpdGVzcGFjZVBhcnRSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IG5vV2hpdGVzcGFjZVBhcnREZWZpbml0aW9uID0gbmV3IE5vV2hpdGVzcGFjZVBhcnREZWZpbml0aW9uKCksXG4gICAgICAgICAgbmFtZSA9IE5vV2hpdGVzcGFjZVBhcnRSdWxlTmFtZSxcbiAgICAgICAgICBhbWJpZ3VvdXMgPSBmYWxzZSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIG5vV2hpdGVzcGFjZVBhcnREZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gTm9XaGl0ZXNwYWNlUGFydEJORk5vZGU7XG5cbiAgICBzdXBlcihuYW1lLCBhbWJpZ3VvdXMsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS9ub25UZXJtaW5hbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNb2RpZmllckJORk5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2RlcykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoTW9kaWZpZXJCTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBOb1doaXRlc3BhY2VQYXJ0IGZyb20gXCIuLi9wYXJ0L3Rlcm1pbmFsL25vV2hpdGVzcGFjZVwiO1xuaW1wb3J0IFRlcm1pbmFsU3ltYm9sUGFydCBmcm9tIFwiLi4vcGFydC90ZXJtaW5hbC90ZXJtaW5hbFN5bWJvbFwiO1xuXG5jb25zdCB7IGVsbGlwc2lzIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTG9va0FoZWFkTW9kaWZpZXJSdWxlRGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBjb250ZW50ID0gZWxsaXBzaXMsICAvLy9cbiAgICAgICAgICBub1doaXRlc3BhY2VQYXJ0ID0gbmV3IE5vV2hpdGVzcGFjZVBhcnQoKSxcbiAgICAgICAgICB0ZXJtaW5hbFN5bWJvbFBhcnQgPSBuZXcgVGVybWluYWxTeW1ib2xQYXJ0KGNvbnRlbnQpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgbm9XaGl0ZXNwYWNlUGFydCxcbiAgICAgICAgICAgIHRlcm1pbmFsU3ltYm9sUGFydFxuICAgICAgICAgIF07XG5cbiAgICBzdXBlcihwYXJ0cylcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgTW9kaWZpZXJCTkZOb2RlIGZyb20gXCIuLi9ub2RlL2JuZi9tb2RpZmllclwiO1xuaW1wb3J0IExvb2tBaGVhZE1vZGlmaWVyUnVsZURlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vbG9va0FoZWFkTW9kaWZpZXJSdWxlXCI7XG5cbmltcG9ydCB7IExvb2tBaGVhZE1vZGlmaWVyUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExvb2tBaGVhZE1vZGlmaWVyUnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBuYW1lID0gTG9va0FoZWFkTW9kaWZpZXJSdWxlTmFtZSxcbiAgICAgICAgICBsb29rQWhlYWRNb2RpZmllclJ1bGVEZWZpbml0aW9uID0gbmV3IExvb2tBaGVhZE1vZGlmaWVyUnVsZURlZmluaXRpb24oKSxcbiAgICAgICAgICBhbWJpZ3VvdXMgPSBmYWxzZSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIGxvb2tBaGVhZE1vZGlmaWVyUnVsZURlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBNb2RpZmllckJORk5vZGU7XG4gICAgXG4gICAgc3VwZXIobmFtZSwgYW1iaWd1b3VzLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IE5vV2hpdGVzcGFjZVBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvbm9XaGl0ZXNwYWNlXCI7XG5pbXBvcnQgVGVybWluYWxTeW1ib2xQYXJ0IGZyb20gXCIuLi9wYXJ0L3Rlcm1pbmFsL3Rlcm1pbmFsU3ltYm9sXCI7XG5cbmNvbnN0IHsgZXhjbGFtYXRpb25NYXJrIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQW1iaWd1b3VzTW9kaWZpZXJSdWxlRGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBjb250ZW50ID0gZXhjbGFtYXRpb25NYXJrLCAgLy8vXG4gICAgICAgICAgbm9XaGl0ZXNwYWNlUGFydCA9IG5ldyBOb1doaXRlc3BhY2VQYXJ0KCksXG4gICAgICAgICAgdGVybWluYWxTeW1ib2xQYXJ0ID0gbmV3IFRlcm1pbmFsU3ltYm9sUGFydChjb250ZW50KSxcbiAgICAgICAgICBwYXJ0cyA9IFtcbiAgICAgICAgICAgIG5vV2hpdGVzcGFjZVBhcnQsXG4gICAgICAgICAgICB0ZXJtaW5hbFN5bWJvbFBhcnRcbiAgICAgICAgICBdO1xuXG4gICAgc3VwZXIocGFydHMpXG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IE1vZGlmaWVyQk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvbW9kaWZpZXJcIjtcbmltcG9ydCBBbWJpZ3VvdXNNb2RpZmllclJ1bGVEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL2FtYmlndW91c01vZGlmaWVyUnVsZVwiO1xuXG5pbXBvcnQgeyBBbWJpZ3VvdXNNb2RpZmllclJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBbWJpZ3VvdXNNb2RpZmllclJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgbmFtZSA9IEFtYmlndW91c01vZGlmaWVyUnVsZU5hbWUsXG4gICAgICAgICAgYW1iaWd1b3VzTW9kaWZpZXJSdWxlRGVmaW5pdGlvbiA9IG5ldyBBbWJpZ3VvdXNNb2RpZmllclJ1bGVEZWZpbml0aW9uKCksXG4gICAgICAgICAgYW1iaWd1b3VzID0gZmFsc2UsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBhbWJpZ3VvdXNNb2RpZmllclJ1bGVEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gTW9kaWZpZXJCTkZOb2RlO1xuICAgIFxuICAgIHN1cGVyKG5hbWUsIGFtYmlndW91cywgZGVmaW5pdGlvbnMsIE5vZGUpXG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVGVybWluYWxQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L3Rlcm1pbmFsXCI7XG5pbXBvcnQgVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9ub2RlL3Rlcm1pbmFsXCI7XG5cbmltcG9ydCB7IGZpcnN0IH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9hcnJheVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZWd1bGFyRXhwcmVzc2lvblBhcnQgZXh0ZW5kcyBUZXJtaW5hbFBhcnQge1xuICBjb25zdHJ1Y3RvcihyZWd1bGFyRXhwcmVzc2lvbikge1xuICAgIHN1cGVyKCk7XG5cbiAgICB0aGlzLnJlZ3VsYXJFeHByZXNzaW9uID0gcmVndWxhckV4cHJlc3Npb247XG4gIH1cblxuICBwYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrKSB7XG4gICAgbGV0IHBhcnNlZDtcblxuICAgIGxldCB0ZXJtaW5hbE5vZGUgPSBudWxsO1xuICAgIFxuICAgIGNvbnN0IHNhdmVkSW5kZXggPSBzdGF0ZS5nZXRTYXZlZEluZGV4KCksXG5cdFx0ICAgICAgbmV4dFNpZ25pZmljYW50VG9rZW4gPSBzdGF0ZS5nZXROZXh0U2lnbmlmaWNhbnRUb2tlbigpLFxuXHRcdFx0XHRcdHNpZ25pZmljYW50VG9rZW4gPSBuZXh0U2lnbmlmaWNhbnRUb2tlbjsgLy8vXG5cbiAgICBpZiAoc2lnbmlmaWNhbnRUb2tlbiAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgY29udGVudCA9IHNpZ25pZmljYW50VG9rZW4uZ2V0Q29udGVudCgpLFxuICAgICAgICAgICAgbWF0Y2hlcyA9IGNvbnRlbnQubWF0Y2godGhpcy5yZWd1bGFyRXhwcmVzc2lvbik7XG5cbiAgICAgIGlmIChtYXRjaGVzICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IGZpcnN0TWF0Y2ggPSBmaXJzdChtYXRjaGVzKTtcblxuICAgICAgICBpZiAoZmlyc3RNYXRjaCA9PT0gY29udGVudCkge1xuICAgICAgICAgIHRlcm1pbmFsTm9kZSA9IFRlcm1pbmFsTm9kZS5mcm9tU2lnbmlmaWNhbnRUb2tlbihzaWduaWZpY2FudFRva2VuKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHBhcnNlZCA9ICh0ZXJtaW5hbE5vZGUgIT09IG51bGwpO1xuXG4gICAgaWYgKHBhcnNlZCkge1xuICAgICAgbm9kZXMucHVzaCh0ZXJtaW5hbE5vZGUpO1xuXG4gICAgICBpZiAoY2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICAgICAgcGFyc2VkID0gY2FsbGJhY2soKTtcblxuICAgICAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgICAgIG5vZGVzLnBvcCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgIHN0YXRlLmJhY2t0cmFjayhzYXZlZEluZGV4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG5cbiAgYXNTdHJpbmcoKSB7XG4gICAgY29uc3QgcmVndWxhckV4cHJlc3Npb25TdHJpbmcgPSB0aGlzLnJlZ3VsYXJFeHByZXNzaW9uLnRvU3RyaW5nKCksXG5cdFx0ICAgICAgc3RyaW5nID0gcmVndWxhckV4cHJlc3Npb25TdHJpbmc7IC8vL1xuXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxuXG4gIGNsb25lKCkgeyByZXR1cm4gc3VwZXIuY2xvbmUoUmVndWxhckV4cHJlc3Npb25QYXJ0LCB0aGlzLnJlZ3VsYXJFeHByZXNzaW9uKTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL25vZGUvbm9uVGVybWluYWxcIjtcbmltcG9ydCBSZWd1bGFyRXhwcmVzc2lvblBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvdGVybWluYWwvcmVndWxhckV4cHJlc3Npb25cIjtcblxuaW1wb3J0IHsgZmlyc3QsIHNlY29uZCB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvYXJyYXlcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVndWxhckV4cHJlc3Npb25CTkZOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgcmVndWxhckV4cHJlc3Npb24gPSAvXlxcLygoPzpcXFxcLnxbXlxcL10pKilcXC8kLztcblxuICBnZW5lcmF0ZVBhcnQobG9va0FoZWFkKSB7XG4gICAgY29uc3QgcmVndWxhckV4cHJlc3Npb24gPSB0aGlzLmdldFJlZ3VsYXJFeHByZXNzaW9uKCksXG4gICAgICAgICAgcmVndWxhckV4cHJlc3Npb25QYXJ0ID0gbmV3IFJlZ3VsYXJFeHByZXNzaW9uUGFydChyZWd1bGFyRXhwcmVzc2lvbik7XG5cbiAgICByZXR1cm4gcmVndWxhckV4cHJlc3Npb25QYXJ0O1xuICB9XG5cbiAgZ2V0UmVndWxhckV4cHJlc3Npb24oKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIGZpcnN0Q2hpbGROb2RlID0gZmlyc3QoY2hpbGROb2RlcyksXG4gICAgICAgICAgdGVybWluYWxOb2RlID0gZmlyc3RDaGlsZE5vZGUsICAvLy9cbiAgICAgICAgICB0ZXJtaW5hbE5vZGVDb250ZW50ID0gdGVybWluYWxOb2RlLmdldENvbnRlbnQoKSxcbiAgICAgICAgICBtYXRjaGVzID0gdGVybWluYWxOb2RlQ29udGVudC5tYXRjaCh0aGlzLnJlZ3VsYXJFeHByZXNzaW9uKSxcbiAgICAgICAgICBzZWNvbmRNYXRjaCA9IHNlY29uZChtYXRjaGVzKSxcbiAgICAgICAgICBwYXR0ZXJuID0gc2Vjb25kTWF0Y2gsIC8vL1xuICAgICAgICAgIHJlZ3VsYXJFeHByZXNzaW9uID0gbmV3IFJlZ0V4cChwYXR0ZXJuKTsgIC8vL1xuXG4gICAgcmV0dXJuIHJlZ3VsYXJFeHByZXNzaW9uO1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMocnVsZU5hbWUsIGNoaWxkTm9kZXMpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKFJlZ3VsYXJFeHByZXNzaW9uQk5GTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMpOyB9XG59XG5cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyB0eXBlcyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBSZWd1bGFyRXhwcmVzc2lvbkJORk5vZGUgZnJvbSBcIi4uL25vZGUvYm5mL3JlZ3VsYXJFeHByZXNzaW9uXCI7XG5pbXBvcnQgU2lnbmlmaWNhbnRUb2tlblR5cGVEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3NpZ25pZmljYW50VG9rZW5UeXBlXCI7XG5cbmltcG9ydCB7IFJlZ3VsYXJFeHByZXNzaW9uUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmNvbnN0IHsgcmVndWxhckV4cHJlc3Npb25UeXBlIH0gPSB0eXBlcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVndWxhckV4cHJlc3Npb25SdWxlIGV4dGVuZHMgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IHJlZ3VsYXJFeHByZXNzaW9uU2lnbmlmaWNhbnRUb2tlblR5cGUgPSByZWd1bGFyRXhwcmVzc2lvblR5cGUsICAvLy9cbiAgICAgICAgICByZWd1bGFyRXhwcmVzc2lvblNpZ25pZmljYW50VG9rZW5UeXBlRGVmaW5pdGlvbiA9IG5ldyBTaWduaWZpY2FudFRva2VuVHlwZURlZmluaXRpb24ocmVndWxhckV4cHJlc3Npb25TaWduaWZpY2FudFRva2VuVHlwZSksXG4gICAgICAgICAgbmFtZSA9IFJlZ3VsYXJFeHByZXNzaW9uUnVsZU5hbWUsXG4gICAgICAgICAgYW1iaWd1b3VzID0gZmFsc2UsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICByZWd1bGFyRXhwcmVzc2lvblNpZ25pZmljYW50VG9rZW5UeXBlRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IFJlZ3VsYXJFeHByZXNzaW9uQk5GTm9kZTtcbiAgICBcbiAgICBzdXBlcihuYW1lLCBhbWJpZ3VvdXMsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS9ub25UZXJtaW5hbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBRdWFudGlmaWVyQk5GTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhRdWFudGlmaWVyQk5GTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBOb1doaXRlc3BhY2VQYXJ0IGZyb20gXCIuLi9wYXJ0L3Rlcm1pbmFsL25vV2hpdGVzcGFjZVwiO1xuaW1wb3J0IFRlcm1pbmFsU3ltYm9sUGFydCBmcm9tIFwiLi4vcGFydC90ZXJtaW5hbC90ZXJtaW5hbFN5bWJvbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBRdWFudGlmaWVyUnVsZURlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3IodGVybWluYWxTeW1ib2xDb250ZW50KSB7XG4gICAgY29uc3QgY29udGVudCA9IHRlcm1pbmFsU3ltYm9sQ29udGVudCwgIC8vL1xuICAgICAgICAgIG5vV2hpdGVzcGFjZVBhcnQgPSBuZXcgTm9XaGl0ZXNwYWNlUGFydCgpLFxuICAgICAgICAgIHRlcm1pbmFsU3ltYm9sUGFydCA9IG5ldyBUZXJtaW5hbFN5bWJvbFBhcnQoY29udGVudCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICBub1doaXRlc3BhY2VQYXJ0LFxuICAgICAgICAgICAgdGVybWluYWxTeW1ib2xQYXJ0XG4gICAgICAgICAgXTtcblxuICAgIHN1cGVyKHBhcnRzKVxuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgUXVhbnRpZmllckJORk5vZGUgZnJvbSBcIi4uL25vZGUvYm5mL3F1YW50aWZpZXJcIjtcbmltcG9ydCBRdWFudGlmaWVyUnVsZURlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vcXVhbnRpZmllclJ1bGVcIjtcblxuaW1wb3J0IHsgT3B0aW9uYWxRdWFudGlmaWVyUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmNvbnN0IHsgcXVlc3Rpb25NYXJrIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgT3B0aW9uYWxRdWFudGlmaWVyUnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBuYW1lID0gT3B0aW9uYWxRdWFudGlmaWVyUnVsZU5hbWUsXG4gICAgICAgICAgb3B0aW9uYWxRdWFudGlmaWVyVGVybWluYWxTeW1ib2xDb250ZW50ID0gcXVlc3Rpb25NYXJrLCAvLy9cbiAgICAgICAgICBvcHRpb25hbFF1YW50aWZpZXJSdWxlRGVmaW5pdGlvbiA9IG5ldyBRdWFudGlmaWVyUnVsZURlZmluaXRpb24ob3B0aW9uYWxRdWFudGlmaWVyVGVybWluYWxTeW1ib2xDb250ZW50KSxcbiAgICAgICAgICBhbWJpZ3VvdXMgPSBmYWxzZSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIG9wdGlvbmFsUXVhbnRpZmllclJ1bGVEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gUXVhbnRpZmllckJORk5vZGU7XG4gICAgXG4gICAgc3VwZXIobmFtZSwgYW1iaWd1b3VzLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IFF1YW50aWZpZXJCTkZOb2RlIGZyb20gXCIuLi9ub2RlL2JuZi9xdWFudGlmaWVyXCI7XG5pbXBvcnQgUXVhbnRpZmllclJ1bGVEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3F1YW50aWZpZXJSdWxlXCI7XG5cbmltcG9ydCB7IE9uZU9yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuY29uc3QgeyBwbHVzIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgT25lT3JNb3JlUXVhbnRpZmllclJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgbmFtZSA9IE9uZU9yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSxcbiAgICAgICAgICBvbmVPck1vcmVRdWFudGlmaWVyVGVybWluYWxTeW1ib2xDb250ZW50ID0gcGx1cywgLy8vXG4gICAgICAgICAgb25lT3JNb3JlUXVhbnRpZmllclJ1bGVEZWZpbml0aW9uID0gbmV3IFF1YW50aWZpZXJSdWxlRGVmaW5pdGlvbihvbmVPck1vcmVRdWFudGlmaWVyVGVybWluYWxTeW1ib2xDb250ZW50KSxcbiAgICAgICAgICBhbWJpZ3VvdXMgPSBmYWxzZSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIG9uZU9yTW9yZVF1YW50aWZpZXJSdWxlRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IFF1YW50aWZpZXJCTkZOb2RlO1xuICAgIFxuICAgIHN1cGVyKG5hbWUsIGFtYmlndW91cywgZGVmaW5pdGlvbnMsIE5vZGUpXG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBRdWFudGlmaWVyQk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvcXVhbnRpZmllclwiO1xuaW1wb3J0IFF1YW50aWZpZXJSdWxlRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9xdWFudGlmaWVyUnVsZVwiO1xuXG5pbXBvcnQgeyBaZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5jb25zdCB7IGFzdGVyaXNrIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgWmVyb09yTW9yZVF1YW50aWZpZXJSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IG5hbWUgPSBaZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lLFxuICAgICAgICAgIHplcm9Pck1vcmVRdWFudGlmaWVyVGVybWluYWxTeW1ib2xDb250ZW50ID0gYXN0ZXJpc2ssIC8vL1xuICAgICAgICAgIHplcm9Pck1vcmVRdWFudGlmaWVyUnVsZURlZmluaXRpb24gPSBuZXcgUXVhbnRpZmllclJ1bGVEZWZpbml0aW9uKHplcm9Pck1vcmVRdWFudGlmaWVyVGVybWluYWxTeW1ib2xDb250ZW50KSxcbiAgICAgICAgICBhbWJpZ3VvdXMgPSBmYWxzZSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIHplcm9Pck1vcmVRdWFudGlmaWVyUnVsZURlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBRdWFudGlmaWVyQk5GTm9kZTtcbiAgICBcbiAgICBzdXBlcihuYW1lLCBhbWJpZ3VvdXMsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS9ub25UZXJtaW5hbFwiO1xuaW1wb3J0IFNpZ25pZmljYW50VG9rZW5UeXBlUGFydCBmcm9tIFwiLi4vLi4vcGFydC90ZXJtaW5hbC9zaWduaWZpY2FudFRva2VuVHlwZVwiO1xuXG5pbXBvcnQgeyBmaXJzdCwgc2Vjb25kIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9hcnJheVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTaWduaWZpY2FudFRva2VuVHlwZUJORk5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICByZWd1bGFyRXhwcmVzc2lvbiA9IC9eXFxbKFteXFxdXSspXSQvO1xuXG4gIGdlbmVyYXRlUGFydChsb29rQWhlYWQpIHtcbiAgICBjb25zdCBzaWduaWZpY2FudFRva2VuVHlwZSA9IHRoaXMuZ2V0U2lnbmlmaWNhbnRUb2tlblR5cGUoKSxcbiAgICAgICAgICBzaWduaWZpY2FudFRva2VuVHlwZVBhcnQgPSBuZXcgU2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0KHNpZ25pZmljYW50VG9rZW5UeXBlKTtcblxuICAgIHJldHVybiBzaWduaWZpY2FudFRva2VuVHlwZVBhcnQ7XG4gIH1cblxuICBnZXRTaWduaWZpY2FudFRva2VuVHlwZSgpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gdGhpcy5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgZmlyc3RDaGlsZE5vZGUgPSBmaXJzdChjaGlsZE5vZGVzKSxcbiAgICAgICAgICB0ZXJtaW5hbE5vZGUgPSBmaXJzdENoaWxkTm9kZSwgIC8vL1xuICAgICAgICAgIHRlcm1pbmFsTm9kZUNvbnRlbnQgPSB0ZXJtaW5hbE5vZGUuZ2V0Q29udGVudCgpLFxuICAgICAgICAgIG1hdGNoZXMgPSB0ZXJtaW5hbE5vZGVDb250ZW50Lm1hdGNoKHRoaXMucmVndWxhckV4cHJlc3Npb24pLFxuICAgICAgICAgIHNlY29uZE1hdGNoID0gc2Vjb25kKG1hdGNoZXMpLFxuICAgICAgICAgIHNpZ25pZmljYW50VG9rZW5UeXBlID0gc2Vjb25kTWF0Y2g7IC8vL1xuXG4gICAgcmV0dXJuIHNpZ25pZmljYW50VG9rZW5UeXBlO1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMocnVsZU5hbWUsIGNoaWxkTm9kZXMpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKFNpZ25pZmljYW50VG9rZW5UeXBlQk5GTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMpOyB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gU2lnbmlmaWNhbnRUb2tlblR5cGVCTkZOb2RlO1xuXG5cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgdHlwZXMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgU2lnbmlmaWNhbnRUb2tlblR5cGVCTkZOb2RlIGZyb20gXCIuLi9ub2RlL2JuZi9zaWduaWZpY2FudFRva2VuVHlwZVwiO1xuaW1wb3J0IFNpZ25pZmljYW50VG9rZW5UeXBlRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9zaWduaWZpY2FudFRva2VuVHlwZVwiO1xuXG5pbXBvcnQgeyBTaWduaWZpY2FudFRva2VuVHlwZVJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5jb25zdCB7IHR5cGVUeXBlIH0gPSB0eXBlcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2lnbmlmaWNhbnRUb2tlblR5cGVSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IHR5cGVTaWduaWZpY2FudFRva2VuVHlwZSA9IHR5cGVUeXBlLCAgLy8vXG4gICAgICAgICAgdHlwZVNpZ25pZmljYW50VG9rZW5UeXBlRGVmaW5pdGlvbiA9IG5ldyBTaWduaWZpY2FudFRva2VuVHlwZURlZmluaXRpb24odHlwZVNpZ25pZmljYW50VG9rZW5UeXBlKSxcbiAgICAgICAgICBuYW1lID0gU2lnbmlmaWNhbnRUb2tlblR5cGVSdWxlTmFtZSxcbiAgICAgICAgICBhbWJpZ3VvdXMgPSBmYWxzZSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIHR5cGVTaWduaWZpY2FudFRva2VuVHlwZURlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBTaWduaWZpY2FudFRva2VuVHlwZUJORk5vZGU7XG4gICAgXG4gICAgc3VwZXIobmFtZSwgYW1iaWd1b3VzLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGZpcnN0IH0gZnJvbSBcIi4uL3V0aWxpdGllcy9hcnJheVwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBydWxlc0FzU3RyaW5nKHJ1bGVzLCBtdWx0aUxpbmUpIHtcbiAgY29uc3QgbWF4aW11bVJ1bGVOYW1lTGVuZ3RoID0gcnVsZXMucmVkdWNlKChtYXhpbXVtUnVsZU5hbWVMZW5ndGgsIHJ1bGUpID0+IHtcbiAgICAgICAgY29uc3QgcnVsZU5hbWUgPSBydWxlLmdldE5hbWUoKSxcbiAgICAgICAgICAgICAgcnVsZU5hbWVMZW5ndGggPSBydWxlTmFtZS5sZW5ndGg7XG5cbiAgICAgICAgbWF4aW11bVJ1bGVOYW1lTGVuZ3RoID0gTWF0aC5tYXgobWF4aW11bVJ1bGVOYW1lTGVuZ3RoLCBydWxlTmFtZUxlbmd0aCk7XG5cbiAgICAgICAgcmV0dXJuIG1heGltdW1SdWxlTmFtZUxlbmd0aDtcbiAgICAgIH0sIDApLFxuICAgICAgcnVsZXNTdHJpbmcgPSBydWxlcy5yZWR1Y2UoKHJ1bGVzU3RyaW5nLCBydWxlKSA9PiB7XG4gICAgICAgIGNvbnN0IHJ1bGVTdHJpbmcgPSBydWxlLmFzU3RyaW5nKG1heGltdW1SdWxlTmFtZUxlbmd0aCwgbXVsdGlMaW5lKTtcblxuICAgICAgICBydWxlc1N0cmluZyArPSBydWxlU3RyaW5nO1xuXG4gICAgICAgIHJldHVybiBydWxlc1N0cmluZztcbiAgICAgIH0sIEVNUFRZX1NUUklORykucmVwbGFjZSgvXlxcblxcbi8sIEVNUFRZX1NUUklORyk7XG5cbiAgcmV0dXJuIHJ1bGVzU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcnVsZU1hcEZyb21SdWxlcyhydWxlcykge1xuICBjb25zdCBydWxlTWFwID0ge307XG5cbiAgcnVsZXMuZm9yRWFjaCgocnVsZSkgPT4ge1xuICAgIGNvbnN0IHJ1bGVOYW1lID0gcnVsZS5nZXROYW1lKCk7XG5cbiAgICBydWxlTWFwW3J1bGVOYW1lXSA9IHJ1bGU7XG4gIH0pO1xuXG4gIHJldHVybiBydWxlTWFwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhcnRSdWxlRnJvbVJ1bGVzKHJ1bGVzKSB7XG4gIGNvbnN0IGZpcnN0UnVsZSA9IGZpcnN0KHJ1bGVzKSxcbiAgICAgIHN0YXJ0UnVsZSA9IGZpcnN0UnVsZTsgIC8vL1xuXG4gIHJldHVybiBzdGFydFJ1bGU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgcnVsZXNBc1N0cmluZyxcbiAgcnVsZU1hcEZyb21SdWxlcyxcbiAgc3RhcnRSdWxlRnJvbVJ1bGVzXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgYm5mIGZyb20gXCIuL2JuZlwiO1xuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBTdGF0ZSBmcm9tIFwiLi4vc3RhdGVcIjtcbmltcG9ydCBOYW1lUnVsZSBmcm9tIFwiLi4vcnVsZS9uYW1lXCI7XG5pbXBvcnQgUGFydFJ1bGUgZnJvbSBcIi4uL3J1bGUvcGFydFwiO1xuaW1wb3J0IFJ1bGVSdWxlIGZyb20gXCIuLi9ydWxlL3J1bGVcIjtcbmltcG9ydCBFcnJvclJ1bGUgZnJvbSBcIi4uL3J1bGUvZXJyb3JcIjtcbmltcG9ydCBEb2N1bWVudFJ1bGUgZnJvbSBcIi4uL3J1bGUvZG9jdW1lbnRcIjtcbmltcG9ydCBSdWxlTmFtZVJ1bGUgZnJvbSBcIi4uL3J1bGUvcnVsZU5hbWVcIjtcbmltcG9ydCBXaWxkY2FyZFJ1bGUgZnJvbSBcIi4uL3J1bGUvd2lsZGNhcmRcIjtcbmltcG9ydCBFbmRPZkxpbmVSdWxlIGZyb20gXCIuLi9ydWxlL2VuZE9mTGluZVwiO1xuaW1wb3J0IFF1YW50aWZpZXJSdWxlIGZyb20gXCIuLi9ydWxlL3F1YW50aWZpZXJcIjtcbmltcG9ydCBEZWZpbml0aW9uUnVsZSBmcm9tIFwiLi4vcnVsZS9kZWZpbml0aW9uXCI7XG5pbXBvcnQgRGVmaW5pdGlvbnNSdWxlIGZyb20gXCIuLi9ydWxlL2RlZmluaXRpb25zXCI7XG5pbXBvcnQgVGVybWluYWxQYXJ0UnVsZSBmcm9tIFwiLi4vcnVsZS90ZXJtaW5hbFBhcnRcIjtcbmltcG9ydCBDaG9pY2VPZlBhcnRzUnVsZSBmcm9tIFwiLi4vcnVsZS9jaG9pY2VPZlBhcnRzXCI7XG5pbXBvcnQgVGVybWluYWxTeW1ib2xSdWxlIGZyb20gXCIuLi9ydWxlL3Rlcm1pbmFsU3ltYm9sXCI7XG5pbXBvcnQgTm9uVGVybWluYWxQYXJ0UnVsZSBmcm9tIFwiLi4vcnVsZS9ub25UZXJtaW5hbFBhcnRcIjtcbmltcG9ydCBTZXF1ZW5jZU9mUGFydHNSdWxlIGZyb20gXCIuLi9ydWxlL3NlcXVlbmNlT2ZQYXJ0c1wiO1xuaW1wb3J0IE5vV2hpdGVzcGFjZVBhcnRSdWxlIGZyb20gXCIuLi9ydWxlL25vV2hpdGVzcGFjZVBhcnRcIjtcbmltcG9ydCBMb29rQWhlYWRNb2RpZmllclJ1bGUgZnJvbSBcIi4uL3J1bGUvbG9va0FoZWFkTW9kaWZpZXJcIjtcbmltcG9ydCBBbWJpZ3VvdXNNb2RpZmllclJ1bGUgZnJvbSBcIi4uL3J1bGUvYW1iaWd1b3VzTW9kaWZpZXJcIjtcbmltcG9ydCBSZWd1bGFyRXhwcmVzc2lvblJ1bGUgZnJvbSBcIi4uL3J1bGUvcmVndWxhckV4cHJlc3Npb25cIjtcbmltcG9ydCBPcHRpb25hbFF1YW50aWZpZXJSdWxlIGZyb20gXCIuLi9ydWxlL29wdGlvbmFsUXVhbnRpZmllclwiO1xuaW1wb3J0IE9uZU9yTW9yZVF1YW50aWZpZXJSdWxlIGZyb20gXCIuLi9ydWxlL29uZU9yTW9yZVF1YW50aWZpZXJcIjtcbmltcG9ydCBaZXJvT3JNb3JlUXVhbnRpZmllclJ1bGUgZnJvbSBcIi4uL3J1bGUvemVyb09yTW9yZVF1YW50aWZpZXJcIjtcbmltcG9ydCBTaWduaWZpY2FudFRva2VuVHlwZVJ1bGUgZnJvbSBcIi4uL3J1bGUvc2lnbmlmaWNhbnRUb2tlblR5cGVcIjtcblxuaW1wb3J0IHsgc3RhcnRSdWxlRnJvbVJ1bGVzLCBydWxlTWFwRnJvbVJ1bGVzIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9ydWxlc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCTkZQYXJzZXIge1xuICBjb25zdHJ1Y3RvcihzdGFydFJ1bGUsIHJ1bGVNYXApIHtcbiAgICB0aGlzLnN0YXJ0UnVsZSA9IHN0YXJ0UnVsZTtcbiAgICB0aGlzLnJ1bGVNYXAgPSBydWxlTWFwO1xuICB9XG5cbiAgZ2V0U3RhcnRSdWxlKCkge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0UnVsZTtcbiAgfVxuXG4gIGdldFJ1bGVNYXAoKSB7XG4gICAgcmV0dXJuIHRoaXMucnVsZU1hcDtcbiAgfVxuXG4gIHBhcnNlKHRva2VucywgcnVsZSA9IHRoaXMuc3RhcnRSdWxlKSB7XG4gICAgY29uc3Qgc3RhdGUgPSBTdGF0ZS5mcm9tVG9rZW5zQW5kUnVsZU1hcCh0b2tlbnMsIHRoaXMucnVsZU1hcCksXG4gICAgICAgICAgY2FsbGJhY2sgPSBudWxsLFxuICAgICAgICAgIHJ1bGVOb2RlID0gcnVsZS5wYXJzZShzdGF0ZSwgY2FsbGJhY2spLFxuICAgICAgICAgIG5vZGUgPSBydWxlTm9kZTsgLy8vXG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuXG5cdHJ1bGVzRnJvbVRva2Vucyh0b2tlbnMpIHtcblx0ICBsZXQgcnVsZXM7XG5cbiAgICBjb25zdCBub2RlID0gdGhpcy5wYXJzZSh0b2tlbnMpO1xuXG4gICAgaWYgKG5vZGUgPT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlcmUgaXMgbm8gbm9kZS5gKTtcbiAgICB9XG5cbiAgICBydWxlcyA9IG5vZGUuZ2VuZXJhdGVSdWxlcyhSdWxlKTtcblxuICAgIGNvbnN0IHJ1bGVzTGVuZ3RoID0gcnVsZXMubGVuZ3RoO1xuXG4gICAgaWYgKHJ1bGVzTGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZXJlIGFyZSBubyBydWxlcy5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcnVsZXM7XG4gIH1cblxuICBzdGF0aWMgYm5mID0gYm5mO1xuXG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBjb25zdCBuYW1lUnVsZSA9IG5ldyBOYW1lUnVsZSgpLFxuICAgICAgICAgIHBhcnRSdWxlID0gbmV3IFBhcnRSdWxlKCksXG4gICAgICAgICAgcnVsZVJ1bGUgPSBuZXcgUnVsZVJ1bGUoKSxcbiAgICAgICAgICBlcnJvclJ1bGUgPSBuZXcgRXJyb3JSdWxlKCksXG4gICAgICAgICAgZG9jdW1lbnRSdWxlID0gbmV3IERvY3VtZW50UnVsZSgpLFxuICAgICAgICAgIHJ1bGVOYW1lUnVsZSA9IG5ldyBSdWxlTmFtZVJ1bGUoKSxcbiAgICAgICAgICB3aWxkY2FyZFJ1bGUgPSBuZXcgV2lsZGNhcmRSdWxlKCksXG4gICAgICAgICAgZW5kT2ZMaW5lUnVsZSA9IG5ldyBFbmRPZkxpbmVSdWxlKCksXG4gICAgICAgICAgcXVhbnRpZmllclJ1bGUgPSBuZXcgUXVhbnRpZmllclJ1bGUoKSxcbiAgICAgICAgICBkZWZpbml0aW9uUnVsZSA9IG5ldyBEZWZpbml0aW9uUnVsZSgpLFxuICAgICAgICAgIGRlZmluaXRpb25zUnVsZSA9IG5ldyBEZWZpbml0aW9uc1J1bGUoKSxcbiAgICAgICAgICB0ZXJtaW5hbFBhcnRSdWxlID0gbmV3IFRlcm1pbmFsUGFydFJ1bGUoKSxcbiAgICAgICAgICBjaG9pY2VPZlBhcnRzUnVsZSA9IG5ldyBDaG9pY2VPZlBhcnRzUnVsZSgpLFxuICAgICAgICAgIHRlcm1pbmFsU3ltYm9sUnVsZSA9IG5ldyBUZXJtaW5hbFN5bWJvbFJ1bGUoKSxcbiAgICAgICAgICBub25UZXJtaW5hbFBhcnRSdWxlID0gbmV3IE5vblRlcm1pbmFsUGFydFJ1bGUoKSxcbiAgICAgICAgICBzZXF1ZW5jZU9mUGFydHNSdWxlID0gbmV3IFNlcXVlbmNlT2ZQYXJ0c1J1bGUoKSxcbiAgICAgICAgICBub1doaXRlc3BhY2VQYXJ0UnVsZSA9IG5ldyBOb1doaXRlc3BhY2VQYXJ0UnVsZSgpLFxuICAgICAgICAgIHJlZ3VsYXJFeHByZXNzaW9uUnVsZSA9IG5ldyBSZWd1bGFyRXhwcmVzc2lvblJ1bGUoKSxcbiAgICAgICAgICBsb29rQWhlYWRNb2RpZmllclJ1bGUgPSBuZXcgTG9va0FoZWFkTW9kaWZpZXJSdWxlKCksXG4gICAgICAgICAgYW1iaWd1b3VzTW9kaWZpZXJSdWxlID0gbmV3IEFtYmlndW91c01vZGlmaWVyUnVsZSgpLFxuICAgICAgICAgIG9wdGlvbmFsUXVhbnRpZmllclJ1bGUgPSBuZXcgT3B0aW9uYWxRdWFudGlmaWVyUnVsZSgpLFxuICAgICAgICAgIG9uZU9yTW9yZVF1YW50aWZpZXJSdWxlID0gbmV3IE9uZU9yTW9yZVF1YW50aWZpZXJSdWxlKCksXG4gICAgICAgICAgemVyb09yTW9yZVF1YW50aWZpZXJSdWxlID0gbmV3IFplcm9Pck1vcmVRdWFudGlmaWVyUnVsZSgpLFxuICAgICAgICAgIHNpZ25pZmljYW50VG9rZW5UeXBlUnVsZSA9IG5ldyBTaWduaWZpY2FudFRva2VuVHlwZVJ1bGUoKTtcblxuICAgIGxldCBydWxlcyA9IFtcbiAgICAgIGRvY3VtZW50UnVsZSxcbiAgICAgIHJ1bGVSdWxlLFxuICAgICAgbmFtZVJ1bGUsXG4gICAgICBkZWZpbml0aW9uc1J1bGUsXG4gICAgICBkZWZpbml0aW9uUnVsZSxcbiAgICAgIHBhcnRSdWxlLFxuICAgICAgbm9uVGVybWluYWxQYXJ0UnVsZSxcbiAgICAgIHRlcm1pbmFsUGFydFJ1bGUsXG4gICAgICBub1doaXRlc3BhY2VQYXJ0UnVsZSxcbiAgICAgIHNlcXVlbmNlT2ZQYXJ0c1J1bGUsXG4gICAgICBjaG9pY2VPZlBhcnRzUnVsZSxcbiAgICAgIHJ1bGVOYW1lUnVsZSxcbiAgICAgIHNpZ25pZmljYW50VG9rZW5UeXBlUnVsZSxcbiAgICAgIHJlZ3VsYXJFeHByZXNzaW9uUnVsZSxcbiAgICAgIHRlcm1pbmFsU3ltYm9sUnVsZSxcbiAgICAgIGVuZE9mTGluZVJ1bGUsXG4gICAgICB3aWxkY2FyZFJ1bGUsXG4gICAgICBxdWFudGlmaWVyUnVsZSxcbiAgICAgIGFtYmlndW91c01vZGlmaWVyUnVsZSxcbiAgICAgIGxvb2tBaGVhZE1vZGlmaWVyUnVsZSxcbiAgICAgIG9wdGlvbmFsUXVhbnRpZmllclJ1bGUsXG4gICAgICBvbmVPck1vcmVRdWFudGlmaWVyUnVsZSxcbiAgICAgIHplcm9Pck1vcmVRdWFudGlmaWVyUnVsZSxcbiAgICAgIGVycm9yUnVsZVxuICAgIF07XG5cbiAgICBjb25zdCBzdGFydFJ1bGUgPSBzdGFydFJ1bGVGcm9tUnVsZXMocnVsZXMpLFxuICAgICAgICAgIHJ1bGVNYXAgPSBydWxlTWFwRnJvbVJ1bGVzKHJ1bGVzKSxcbiAgICAgICAgICBibmZQYXJzZXIgPSBuZXcgQk5GUGFyc2VyKHN0YXJ0UnVsZSwgcnVsZU1hcCk7XG4gICAgXG4gICAgcmV0dXJuIGJuZlBhcnNlcjtcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGJuZiA9IGBcblxuICBleHByZXNzaW9uICAgOjo9IGV4cHJlc3Npb25fIG9wZXJhdG9yIGV4cHJlc3Npb24gZXhwcmVzc2lvbn4qXG5cbiAgICAgICAgICAgICAgICAgfCBleHByZXNzaW9uX1xuXG4gICAgICAgICAgICAgICAgIDtcblxuICBvcGVyYXRvciAgICAgOjo9IFwiK1wiXG5cbiAgICAgICAgICAgICAgICAgfCBcIi1cIlxuXG4gICAgICAgICAgICAgICAgIHwgXCIvXCJcblxuICAgICAgICAgICAgICAgICB8IFwiKlwiXG5cbiAgICAgICAgICAgICAgICAgO1xuXG4gIHRlcm0gICAgICAgICA6Oj0gL1xcXFxkKy8gO1xuXG4gIGV4cHJlc3Npb25fICA6Oj0gXCIoXCIgZXhwcmVzc2lvbiBcIilcIlxuXG4gICAgICAgICAgICAgICAgIHwgdGVybVxuXG4gICAgICAgICAgICAgICAgIDtcblxuICBleHByZXNzaW9ufiAgOjo9IG9wZXJhdG9yIGV4cHJlc3Npb24gO1xuICBcbmA7XG5cbmV4cG9ydCBkZWZhdWx0IGJuZjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgQk5GTGV4ZXIgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBCTkZQYXJzZXIgZnJvbSBcIi4uL2JuZi9wYXJzZXJcIjtcblxuaW1wb3J0IHsgc3RhcnRSdWxlRnJvbVJ1bGVzLCBydWxlTWFwRnJvbVJ1bGVzIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9ydWxlc1wiO1xuXG5jb25zdCBibmZMZXhlciA9IEJORkxleGVyLmZyb21Ob3RoaW5nKCksXG4gICAgICBibmZQYXJzZXIgPSBCTkZQYXJzZXIuZnJvbU5vdGhpbmcoKTtcblxuZXhwb3J0IGZ1bmN0aW9uIHJ1bGVzRnJvbUJORihibmYpIHtcbiAgY29uc3QgdG9rZW5zID0gYm5mTGV4ZXIudG9rZW5zRnJvbUJORihibmYpLFxuICAgICAgICBydWxlcyA9IGJuZlBhcnNlci5ydWxlc0Zyb21Ub2tlbnModG9rZW5zKTtcblxuICByZXR1cm4gcnVsZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZXJGcm9tUnVsZXMoQ2xhc3MsIHJ1bGVzKSB7XG4gIGNvbnN0IHN0YXJ0UnVsZSA9IHN0YXJ0UnVsZUZyb21SdWxlcyhydWxlcyksXG4gICAgICAgIHJ1bGVNYXAgPSBydWxlTWFwRnJvbVJ1bGVzKHJ1bGVzKSxcbiAgICAgICAgcGFyc2VyID0gbmV3IENsYXNzKHN0YXJ0UnVsZSwgcnVsZU1hcCk7XG5cbiAgcmV0dXJuIHBhcnNlcjtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFN0YXRlIGZyb20gXCIuLi9zdGF0ZVwiO1xuXG5pbXBvcnQgeyBydWxlc0Zyb21CTkYsIHBhcnNlckZyb21SdWxlcyB9IGZyb20gXCIuLi91dGlsaXRpZXMvcGFyc2VyXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbW1vblBhcnNlciB7XG4gIGNvbnN0cnVjdG9yKHN0YXJ0UnVsZSwgcnVsZU1hcCkge1xuICAgIHRoaXMuc3RhcnRSdWxlID0gc3RhcnRSdWxlO1xuICAgIHRoaXMucnVsZU1hcCA9IHJ1bGVNYXA7XG4gIH1cblxuICBnZXRTdGFydFJ1bGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRSdWxlO1xuICB9XG5cbiAgZ2V0UnVsZU1hcCgpIHtcbiAgICByZXR1cm4gdGhpcy5ydWxlTWFwO1xuICB9XG5cbiAgcGFyc2UodG9rZW5zLCBydWxlID0gdGhpcy5zdGFydFJ1bGUpIHtcbiAgICBjb25zdCBzdGF0ZSA9IFN0YXRlLmZyb21Ub2tlbnNBbmRSdWxlTWFwKHRva2VucywgdGhpcy5ydWxlTWFwKSxcbiAgICAgICAgICBjYWxsYmFjayA9IG51bGwsXG4gICAgICAgICAgcnVsZU5vZGUgPSBydWxlLnBhcnNlKHN0YXRlLCBjYWxsYmFjayksXG4gICAgICAgICAgbm9kZSA9IHJ1bGVOb2RlOyAvLy9cblxuICAgIHJldHVybiBub2RlO1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKENsYXNzKSB7XG4gICAgY29uc3QgeyBibmYgfSA9IENsYXNzLFxuICAgICAgICAgIHJ1bGVzID0gcnVsZXNGcm9tQk5GKGJuZiksXG4gICAgICAgICAgcGFyc2VyID0gcGFyc2VyRnJvbVJ1bGVzKENsYXNzLCBydWxlcyk7XG5cbiAgICByZXR1cm4gcGFyc2VyO1xuICB9XG5cbiAgc3RhdGljIGZyb21CTkYoQ2xhc3MsIGJuZikge1xuICAgIGNvbnN0IHJ1bGVzID0gcnVsZXNGcm9tQk5GKGJuZiksXG4gICAgICAgICAgcGFyc2VyID0gcGFyc2VyRnJvbVJ1bGVzKENsYXNzLCBydWxlcyk7XG5cbiAgICByZXR1cm4gcGFyc2VyO1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlcyhDbGFzcywgcnVsZXMpIHtcbiAgICBjb25zdCBwYXJzZXIgPSBwYXJzZXJGcm9tUnVsZXMoQ2xhc3MsIHJ1bGVzKTtcblxuICAgIHJldHVybiBwYXJzZXI7XG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgYm5mIGZyb20gXCIuL2JuZlwiO1xuaW1wb3J0IENvbW1vblBhcnNlciBmcm9tIFwiLi4vY29tbW9uL3BhcnNlclwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCYXNpY1BhcnNlciBleHRlbmRzIENvbW1vblBhcnNlciB7XG4gIHN0YXRpYyBibmYgPSBibmY7XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkgeyByZXR1cm4gQ29tbW9uUGFyc2VyLmZyb21Ob3RoaW5nKEJhc2ljUGFyc2VyKTsgfVxuXG4gIHN0YXRpYyBmcm9tQk5GKGJuZikgeyByZXR1cm4gQ29tbW9uUGFyc2VyLmZyb21CTkYoQmFzaWNQYXJzZXIsIGJuZik7IH1cblxuICBzdGF0aWMgZnJvbVJ1bGVzKHJ1bGVzKSB7IHJldHVybiBDb21tb25QYXJzZXIuZnJvbVJ1bGVzKEJhc2ljUGFyc2VyLCBydWxlcyk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgV2lsZGNhcmRQYXJ0IGZyb20gXCIuL3BhcnQvdGVybWluYWwvd2lsZGNhcmRcIjtcbmltcG9ydCBFbmRPZkxpbmVQYXJ0IGZyb20gXCIuL3BhcnQvdGVybWluYWwvZW5kT2ZMaW5lXCI7XG5pbXBvcnQgVGVybWluYWxTeW1ib2xQYXJ0IGZyb20gXCIuL3BhcnQvdGVybWluYWwvdGVybWluYWxTeW1ib2xcIjtcbmltcG9ydCBSZWd1bGFyRXhwcmVzc2lvblBhcnQgZnJvbSBcIi4vcGFydC90ZXJtaW5hbC9yZWd1bGFyRXhwcmVzc2lvblwiO1xuaW1wb3J0IFNpZ25pZmljYW50VG9rZW5UeXBlUGFydCBmcm9tIFwiLi9wYXJ0L3Rlcm1pbmFsL3NpZ25pZmljYW50VG9rZW5UeXBlXCI7XG5pbXBvcnQgUnVsZU5hbWVQYXJ0IGZyb20gXCIuL3BhcnQvbm9uVGVybWluYWwvcnVsZU5hbWVcIjtcbmltcG9ydCBPcHRpb25hbFBhcnRQYXJ0IGZyb20gXCIuL3BhcnQvbm9uVGVybWluYWwvb3B0aW9uYWxQYXJ0XCI7XG5pbXBvcnQgWmVyb09yTW9yZVBhcnRzUGFydCBmcm9tIFwiLi9wYXJ0L25vblRlcm1pbmFsL3plcm9Pck1vcmVQYXJ0c1wiO1xuaW1wb3J0IE9uZU9yTW9yZVBhcnRzUGFydCBmcm9tIFwiLi9wYXJ0L25vblRlcm1pbmFsL29uZU9yTW9yZVBhcnRzXCI7XG5pbXBvcnQgU2VxdWVuY2VPZlBhcnRzUGFydCBmcm9tIFwiLi9wYXJ0L25vblRlcm1pbmFsL3NlcXVlbmNlT2ZQYXJ0c1wiO1xuaW1wb3J0IENob2ljZU9mUGFydHNQYXJ0IGZyb20gXCIuL3BhcnQvbm9uVGVybWluYWwvY2hvaWNlT2ZQYXJ0c1wiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIFdpbGRjYXJkUGFydCxcbiAgRW5kT2ZMaW5lUGFydCxcbiAgVGVybWluYWxTeW1ib2xQYXJ0LFxuICBSZWd1bGFyRXhwcmVzc2lvblBhcnQsXG4gIFNpZ25pZmljYW50VG9rZW5UeXBlUGFydCxcbiAgUnVsZU5hbWVQYXJ0LFxuICBPcHRpb25hbFBhcnRQYXJ0LFxuICBaZXJvT3JNb3JlUGFydHNQYXJ0LFxuICBPbmVPck1vcmVQYXJ0c1BhcnQsXG4gIFNlcXVlbmNlT2ZQYXJ0c1BhcnQsXG4gIENob2ljZU9mUGFydHNQYXJ0XG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIEJORlBhcnNlciB9IGZyb20gXCIuL2JuZi9wYXJzZXJcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQmFzaWNQYXJzZXIgfSBmcm9tIFwiLi9iYXNpYy9wYXJzZXJcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ29tbW9uUGFyc2VyIH0gZnJvbSBcIi4vY29tbW9uL3BhcnNlclwiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIHJ1bGVzVXRpbGl0aWVzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL3J1bGVzXCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgUnVsZSB9IGZyb20gXCIuL3J1bGVcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUGFydHMgfSBmcm9tIFwiLi9wYXJ0c1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBwYXJ0VHlwZXMgfSBmcm9tIFwiLi9wYXJ0VHlwZXNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRGVmaW5pdGlvbiB9IGZyb20gXCIuL2RlZmluaXRpb25cIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgVGVybWluYWxOb2RlIH0gZnJvbSBcIi4vbm9kZS90ZXJtaW5hbFwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBOb25UZXJtaW5hbE5vZGUgfSBmcm9tIFwiLi9ub2RlL25vblRlcm1pbmFsXCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGJuZiA9IGBcblxuXG5cbiAgICBzdHlsZXNoZWV0ICAgICAgICAgICAgICAgICA6Oj0gKCBtZWRpYSB8IHJ1bGVTZXQgfCBkZWNsYXJhdGlvbiB8IGVycm9yICkrIDtcblxuXG5cblxuXG4gICAgbWVkaWEgICAgICAgICAgICAgICAgICAgICAgOjo9IFwiQG1lZGlhXCIgbWVkaWFRdWVyaWVzIFwie1wiICggcnVsZVNldCB8IGRlY2xhcmF0aW9uICkqIFwifVwiIDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgIG1lZGlhUXVlcmllcyAgICAgICAgICAgICAgIDo6PSAgbWVkaWFRdWVyeSAoIFwiLFwiIG1lZGlhUXVlcnkgKSogO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgbWVkaWFRdWVyeSAgICAgICAgICAgICAgICAgOjo9ICBcIm5vdFwiPyAoIFwib25seVwiPyBtZWRpYVR5cGUgXCJhbmRcIiApPyBtZWRpYUV4cHJlc3Npb24gKCBcImFuZFwiIG1lZGlhRXhwcmVzc2lvbiApKiA7XG5cblxuICAgIG1lZGlhVHlwZSAgICAgICAgICAgICAgICAgIDo6PSAgXCJhbGxcIiB8IFwicHJpbnRcIiB8IFwic2NyZWVuXCIgfCBcInNwZWVjaFwiIDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgIG1lZGlhRXhwcmVzc2lvbiAgICAgICAgICAgIDo6PSAgXCIoXCIgW2lkZW50aWZpZXJdICggXCI6XCIgZXhwcmVzc2lvbiApPyBcIilcIiA7XG5cblxuXG5cblxuICAgIHJ1bGVTZXQgICAgICAgICAgICAgICAgICAgIDo6PSAgc2VsZWN0b3JzIFwie1wiIGRlY2xhcmF0aW9uKiBcIn1cIiA7XG4gICAgXG4gICAgXG4gICAgc2VsZWN0b3JzICAgICAgICAgICAgICAgICAgOjo9ICBzZWxlY3RvciAoIFwiLFwiIHNlbGVjdG9yICkqIDtcblxuXG4gICAgc2VsZWN0b3IgICAgICAgICAgICAgICAgICAgOjo9ICAoIGNsYXNzIHwgcHNldWRvQ2xhc3MgfCBwc2V1ZG9FbGVtZW50IHwgYXR0cmlidXRlICkrIDtcblxuXG5cblxuXG4gICAgZGVjbGFyYXRpb24gICAgICAgICAgICAgICAgOjo9ICBwcm9wZXJ0eSBcIjpcIiBleHByZXNzaW9uICggXCIsXCIgZXhwcmVzc2lvbiApKiBwcmlvcml0eT8gXCI7XCIgO1xuXG5cbiAgICBjbGFzcyAgICAgICAgICAgICAgICAgICAgICA6Oj0gIFwiLlwiPE5PX1dISVRFU1BBQ0U+W2lkZW50aWZpZXJdIHBhcmVudGhlc2lzZWRTZWxlY3Rvcj8gO1xuXG5cbiAgICBwc2V1ZG9DbGFzcyAgICAgICAgICAgICAgICA6Oj0gIFwiOlwiPE5PX1dISVRFU1BBQ0U+W2lkZW50aWZpZXJdIHBhcmVudGhlc2lzZWRTZWxlY3Rvcj8gO1xuXG5cbiAgICBwc2V1ZG9FbGVtZW50ICAgICAgICAgICAgICA6Oj0gIFwiOjpcIjxOT19XSElURVNQQUNFPltpZGVudGlmaWVyXSBwYXJlbnRoZXNpc2VkU2VsZWN0b3I/IDtcblxuXG4gICAgcGFyZW50aGVzaXNlZFNlbGVjdG9yICAgICAgOjo9ICA8Tk9fV0hJVEVTUEFDRT5cIihcIiBzZWxlY3RvciA8Tk9fV0hJVEVTUEFDRT5cIilcIiA7XG5cblxuICAgIGF0dHJpYnV0ZSAgICAgICAgICAgICAgICAgIDo6PSAgXCJbXCJcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkZW50aWZpZXJdXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIFwiPVwiIHwgXCJ+PVwiIHwgXCJ8PVwiIClcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIFtpZGVudGlmaWVyXSB8IFtzdHJpbmctbGl0ZXJhbF0gKVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApP1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIl1cIlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7XG5cblxuICAgIHByb3BlcnR5ICAgICAgICAgICAgICAgICAgIDo6PSAgW2lkZW50aWZpZXJdIDtcblxuXG4gICAgZXhwcmVzc2lvbiAgICAgICAgICAgICAgICAgOjo9ICB0ZXJtICggXCIsXCI/IHRlcm0gKSogO1xuXG5cbiAgICBwcmlvcml0eSAgICAgICAgICAgICAgICAgICA6Oj0gIFwiIWltcG9ydGFudFwiIDtcblxuXG5cblxuXG4gICAgdGVybSAgICAgICAgICAgICAgICAgICAgICAgOjo9ICBbdW5hcnktb3BlcmF0b3JdP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBbcGVyY2VudGFnZV0gfCBbZnJlcXVlbmN5XSB8IFtmcmFjdGlvbl0gfCBbbGVuZ3RoXSB8IFthbmdsZV0gfCBbcmVtc10gfCBbZW1zXSB8IFt0aW1lXSB8IFtudW1iZXJdIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHJpbmctbGl0ZXJhbF0rXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZGVudGlmaWVyXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29sb3VyXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDtcblxuXG4gICAgdXJpICAgICAgICAgICAgICAgICAgICAgICAgOjo9ICBcInVybFwiPE5PX1dISVRFU1BBQ0U+XCIoXCIgW3N0cmluZy1saXRlcmFsXSBcIilcIiA7XG5cblxuICAgIGZ1bmN0aW9uICAgICAgICAgICAgICAgICAgIDo6PSAgW2lkZW50aWZpZXJdPE5PX1dISVRFU1BBQ0U+XCIoXCIgZXhwcmVzc2lvbiBcIilcIiA7XG5cblxuXG5cblxuICAgIGVycm9yICAgICAgICAgICAgICAgICAgICAgIDo6PSAgLiA7XG5cblxuXG5gO1xuXG5leHBvcnQgZGVmYXVsdCBibmY7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IENvbW1vblBhcnNlciB9IGZyb20gXCJvY2NhbS1wYXJzZXJzXCI7XG5cbmltcG9ydCBibmYgZnJvbSBcIi4vYm5mXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENTU1BhcnNlciBleHRlbmRzIENvbW1vblBhcnNlciB7XG4gIHN0YXRpYyBibmYgPSBibmY7XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkgeyByZXR1cm4gQ29tbW9uUGFyc2VyLmZyb21Ob3RoaW5nKENTU1BhcnNlcik7IH1cblxuICBzdGF0aWMgZnJvbUJORihibmYpIHsgcmV0dXJuIENvbW1vblBhcnNlci5mcm9tQk5GKENTU1BhcnNlciwgYm5mKTsgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZXMocnVsZXMpIHsgcmV0dXJuIENvbW1vblBhcnNlci5mcm9tUnVsZXMoQ1NTUGFyc2VyLCBydWxlcyk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmV4cG9ydCBjb25zdCB7IGNsZWFyLCBwdXNoLCBzZWNvbmQsIHRoaXJkLCBmb3VydGgsIGZpZnRoIH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGZ1bmN0aW9uIHRyaW0oYXJyYXksIHN0YXJ0SW5kZXgsIGVuZEluZGV4KSB7XG4gIGxldCBzdGFydCxcbiAgICAgIGRlbGV0ZUNvdW50O1xuXG4gIGlmIChlbmRJbmRleCAhPT0gSW5maW5pdHkpIHtcbiAgICBzdGFydCA9IGVuZEluZGV4ICsgMTtcblxuICAgIGFycmF5LnNwbGljZShzdGFydCk7XG4gIH1cblxuICBzdGFydCA9IDA7XG4gIGRlbGV0ZUNvdW50ID0gc3RhcnRJbmRleDtcblxuICBhcnJheS5zcGxpY2Uoc3RhcnQsIGRlbGV0ZUNvdW50KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluY2x1ZGVzKGFycmF5LCAuLi5lbGVtZW50cykge1xuICByZXR1cm4gZWxlbWVudHMuc29tZSgoZWxlbWVudCkgPT4gYXJyYXkuaW5jbHVkZXMoZWxlbWVudCkpO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBjaGFyYWN0ZXJzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5pbXBvcnQgeyBjbGVhciwgdHJpbSwgc2Vjb25kLCB0aGlyZCwgZm91cnRoIH0gZnJvbSBcIi4vdXRpbGl0aWVzL2FycmF5XCI7XG5cbmNvbnN0IHsgRVhDTEFNQVRJT05fTUFSS19DSEFSQUNURVIgfSA9IGNoYXJhY3RlcnM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNwcmVhZCB7XG4gIGNvbnN0cnVjdG9yKHN0YXJ0SW5kZXgsIGVuZEluZGV4LCB1bmlxdWUpIHtcbiAgICB0aGlzLnN0YXJ0SW5kZXggPSBzdGFydEluZGV4O1xuICAgIHRoaXMuZW5kSW5kZXggPSBlbmRJbmRleDtcbiAgICB0aGlzLnVuaXF1ZSA9IHVuaXF1ZTtcbiAgfVxuXG4gIGFkanVzdE5vZGVzKG5vZGVzKSB7XG4gICAgaWYgKHRoaXMudW5pcXVlKSB7XG4gICAgICBjb25zdCBub2Rlc0xlbmd0aCA9IG5vZGVzLmxlbmd0aDtcblxuICAgICAgaWYgKG5vZGVzTGVuZ3RoID4gMSkge1xuICAgICAgICBjbGVhcihub2Rlcyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRyaW0obm9kZXMsIHRoaXMuc3RhcnRJbmRleCwgdGhpcy5lbmRJbmRleCk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGZyb21TcHJlYWRFeHByZXNzaW9uKHNwcmVhZEV4cHJlc3Npb24pIHtcbiAgICBsZXQgc3RhcnRJbmRleCA9IDAsXG4gICAgICAgIGVuZEluZGV4ID0gSW5maW5pdHksXG4gICAgICAgIHVuaXF1ZSA9IGZhbHNlO1xuXG4gICAgaWYgKHNwcmVhZEV4cHJlc3Npb24gIT09IG51bGwpIHtcbiAgICAgIGlmIChzcHJlYWRFeHByZXNzaW9uID09PSBFWENMQU1BVElPTl9NQVJLX0NIQVJBQ1RFUikge1xuICAgICAgICB1bmlxdWUgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcmVnRXhwID0gL1xcWyhcXGQrKT8oXFwuXFwuXFwuKT8oXFxkKyk/XS8sXG4gICAgICAgICAgICAgIG1hdGNoZXMgPSBzcHJlYWRFeHByZXNzaW9uLm1hdGNoKHJlZ0V4cCksXG4gICAgICAgICAgICAgIHNlY29uZE1hdGNoID0gc2Vjb25kKG1hdGNoZXMpLFxuICAgICAgICAgICAgICB0aGlyZE1hdGNoID0gdGhpcmQobWF0Y2hlcyksXG4gICAgICAgICAgICAgIGZvdXJ0aE1hdGNoID0gZm91cnRoKG1hdGNoZXMpO1xuXG4gICAgICAgIGlmIChzZWNvbmRNYXRjaCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgc3RhcnRJbmRleCA9IHBhcnNlSW50KHNlY29uZE1hdGNoKTtcblxuICAgICAgICAgIGlmICh0aGlyZE1hdGNoID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGVuZEluZGV4ID0gc3RhcnRJbmRleDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZm91cnRoTWF0Y2ggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGVuZEluZGV4ID0gcGFyc2VJbnQoZm91cnRoTWF0Y2gpO1xuXG4gICAgICAgICAgaWYgKHRoaXJkTWF0Y2ggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgc3RhcnRJbmRleCA9IGVuZEluZGV4O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHNwcmVhZCA9IG5ldyBTcHJlYWQoc3RhcnRJbmRleCwgZW5kSW5kZXgsIHVuaXF1ZSk7XG5cbiAgICByZXR1cm4gc3ByZWFkO1xuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgY2hhcmFjdGVycyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IFNwcmVhZCBmcm9tIFwiLi9zcHJlYWRcIjtcblxuaW1wb3J0IHsgaW5jbHVkZXMsIHB1c2gsIGNsZWFyLCBzZWNvbmQsIHRoaXJkLCBmb3VydGgsIGZpZnRoIH0gZnJvbSBcIi4vdXRpbGl0aWVzL2FycmF5XCI7XG5cbmNvbnN0IHsgV0lMRENBUkRfQ0hBUkFDVEVSIH0gPSBjaGFyYWN0ZXJzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBRdWVyeSB7XG4gIGNvbnN0cnVjdG9yKHJ1bGVOYW1lcywgdHlwZXMsIHNwcmVhZCwgc3ViUXVlcnksICBtYXhpbXVtRGVwdGgsIGluZmluaXRlRGVzY2VudCwgaW50ZXJtZWRpYXRlTm9kZXMpIHtcbiAgICB0aGlzLnJ1bGVOYW1lcyA9IHJ1bGVOYW1lcztcbiAgICB0aGlzLnR5cGVzID0gdHlwZXM7XG4gICAgdGhpcy5zcHJlYWQgPSBzcHJlYWQ7XG4gICAgdGhpcy5zdWJRdWVyeSA9IHN1YlF1ZXJ5O1xuICAgIHRoaXMubWF4aW11bURlcHRoID0gbWF4aW11bURlcHRoO1xuICAgIHRoaXMuaW5maW5pdGVEZXNjZW50ID0gaW5maW5pdGVEZXNjZW50O1xuICAgIHRoaXMuaW50ZXJtZWRpYXRlTm9kZXMgPSBpbnRlcm1lZGlhdGVOb2RlcztcbiAgfVxuXG4gIGV4ZWN1dGUobm9kZSwgZGVwdGggPSAwLCBtYXhpbXVtRGVwdGggPSB0aGlzLm1heGltdW1EZXB0aCkge1xuICAgIGNvbnN0IG5vZGVzID0gW107XG5cbiAgICB0aGlzLmNsZWFyKCk7XG5cbiAgICB0aGlzLmZpbmQobm9kZSwgZGVwdGgsIG1heGltdW1EZXB0aCk7XG5cbiAgICB0aGlzLmFwcGx5KG5vZGVzLCBkZXB0aCwgbWF4aW11bURlcHRoKTtcblxuICAgIHJldHVybiBub2RlcztcbiAgfVxuXG4gIGNsZWFyKCkge1xuICAgIGNsZWFyKHRoaXMuaW50ZXJtZWRpYXRlTm9kZXMpO1xuICB9XG5cbiAgZmluZChub2RlLCBkZXB0aCwgbWF4aW11bURlcHRoKSB7XG4gICAgaWYgKGRlcHRoID4gbWF4aW11bURlcHRoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgbm9kZVRlcm1pbmFsTm9kZSA9IG5vZGUuaXNUZXJtaW5hbE5vZGUoKSxcbiAgICAgICAgICBub2RlTm9uVGVybWluYWxOb2RlID0gIW5vZGVUZXJtaW5hbE5vZGU7XG5cbiAgICBsZXQgZm91bmQ7XG5cbiAgICBpZiAobm9kZVRlcm1pbmFsTm9kZSkge1xuICAgICAgY29uc3QgdGVybWluYWxOb2RlID0gbm9kZSwgIC8vL1xuICAgICAgICAgICAgdHlwZSA9IHRlcm1pbmFsTm9kZS5nZXRUeXBlKCk7XG5cbiAgICAgIGZvdW5kID0gaW5jbHVkZXModGhpcy50eXBlcywgdHlwZSwgV0lMRENBUkRfQ0hBUkFDVEVSKTtcbiAgICB9XG5cbiAgICBpZiAobm9kZU5vblRlcm1pbmFsTm9kZSkge1xuICAgICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gbm9kZSwgLy8vXG4gICAgICAgICAgICBydWxlTmFtZSA9IG5vblRlcm1pbmFsTm9kZS5nZXRSdWxlTmFtZSgpO1xuXG4gICAgICBmb3VuZCA9IGluY2x1ZGVzKHRoaXMucnVsZU5hbWVzLCBydWxlTmFtZSwgV0lMRENBUkRfQ0hBUkFDVEVSKTtcbiAgICB9XG5cbiAgICBpZiAoZm91bmQpIHtcbiAgICAgIGNvbnN0IGludGVybWVkaWF0ZU5vZGUgPSBub2RlOyAvLy9cblxuICAgICAgdGhpcy5pbnRlcm1lZGlhdGVOb2Rlcy5wdXNoKGludGVybWVkaWF0ZU5vZGUpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmluZmluaXRlRGVzY2VudCkge1xuICAgICAgaWYgKG5vZGVOb25UZXJtaW5hbE5vZGUpIHtcbiAgICAgICAgZGVwdGgrKztcblxuICAgICAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBub2RlLCAvLy9cbiAgICAgICAgICAgICAgY2hpbGROb2RlcyA9IG5vblRlcm1pbmFsTm9kZS5nZXRDaGlsZE5vZGVzKCk7XG5cbiAgICAgICAgY2hpbGROb2Rlcy5mb3JFYWNoKChjaGlsZE5vZGUpID0+IHRoaXMuZmluZChjaGlsZE5vZGUsIGRlcHRoLCBtYXhpbXVtRGVwdGgpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhcHBseShub2RlcywgZGVwdGgsIG1heGltdW1EZXB0aCkge1xuICAgIHRoaXMuc3ByZWFkLmFkanVzdE5vZGVzKHRoaXMuaW50ZXJtZWRpYXRlTm9kZXMpO1xuXG4gICAgaWYgKHRoaXMuc3ViUXVlcnkgPT09IG51bGwpIHtcbiAgICAgIHB1c2gobm9kZXMsIHRoaXMuaW50ZXJtZWRpYXRlTm9kZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmludGVybWVkaWF0ZU5vZGVzLmZvckVhY2goKGludGVybWVkaWF0ZU5vZGUpID0+IHtcbiAgICAgICAgY29uc3QgaW50ZXJtZWRpYXRlTm9kZU5vblRlcm1pbmFsTm9kZSA9IGludGVybWVkaWF0ZU5vZGUuaXNOb25UZXJtaW5hbE5vZGUoKTtcblxuICAgICAgICBpZiAoaW50ZXJtZWRpYXRlTm9kZU5vblRlcm1pbmFsTm9kZSkge1xuICAgICAgICAgIGRlcHRoKys7XG5cbiAgICAgICAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBpbnRlcm1lZGlhdGVOb2RlLCAvLy9cbiAgICAgICAgICAgICAgICBjaGlsZE5vZGVzID0gbm9uVGVybWluYWxOb2RlLmdldENoaWxkTm9kZXMoKTtcblxuICAgICAgICAgIHRoaXMuc3ViUXVlcnkuY2xlYXIoKTtcblxuICAgICAgICAgIGNoaWxkTm9kZXMuZm9yRWFjaCgoY2hpbGROb2RlKSA9PiB0aGlzLnN1YlF1ZXJ5LmZpbmQoY2hpbGROb2RlLCBkZXB0aCwgbWF4aW11bURlcHRoKSk7XG5cbiAgICAgICAgICB0aGlzLnN1YlF1ZXJ5LmFwcGx5KG5vZGVzLCBkZXB0aCwgbWF4aW11bURlcHRoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGZyb21TdWJFeHByZXNzaW9uQW5kVHlwZXMoc3ViRXhwcmVzc2lvbiwgdHlwZXMpIHtcbiAgICBsZXQgcXVlcnkgPSBudWxsO1xuXG4gICAgaWYgKHN1YkV4cHJlc3Npb24gIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHR5cGVzTGVuZ3RoID0gdHlwZXMubGVuZ3RoO1xuXG4gICAgICBpZiAodHlwZXNMZW5ndGggPT09IDApIHtcbiAgICAgICAgY29uc3QgZXhwcmVzc2lvbiA9IHN1YkV4cHJlc3Npb247ICAvLy9cblxuICAgICAgICBxdWVyeSA9IFF1ZXJ5LmZyb21FeHByZXNzaW9uKGV4cHJlc3Npb24pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBxdWVyeTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tRXhwcmVzc2lvbihleHByZXNzaW9uLCBtYXhpbXVtRGVwdGggPSBJbmZpbml0eSkge1xuICAgIGNvbnN0IHJlZ0V4cCA9IC9eXFwvKFxcLyk/KFteL1xcWyFdKykoXFxbW15cXF1dK118ISk/KFxcLy4qKT8kLyxcbiAgICAgICAgICBtYXRjaGVzID0gZXhwcmVzc2lvbi5tYXRjaChyZWdFeHApLFxuICAgICAgICAgIHNlY29uZE1hdGNoID0gc2Vjb25kKG1hdGNoZXMpLFxuICAgICAgICAgIHRoaXJkTWF0Y2ggPSB0aGlyZChtYXRjaGVzKSxcbiAgICAgICAgICBmb3VydGhNYXRjaCA9IGZvdXJ0aChtYXRjaGVzKSxcbiAgICAgICAgICBmaWZ0aE1hdGNoID0gZmlmdGgobWF0Y2hlcyksXG4gICAgICAgICAgc2VsZWN0b3JzID0gdGhpcmRNYXRjaC5zcGxpdChcInxcIiksXG4gICAgICAgICAgc3ViRXhwcmVzc2lvbiA9IGZpZnRoTWF0Y2ggfHwgbnVsbCxcbiAgICAgICAgICBzcHJlYWRFeHByZXNzaW9uID0gZm91cnRoTWF0Y2ggfHwgbnVsbCxcbiAgICAgICAgICB0eXBlcyA9IHR5cGVzRnJvbVNlbGVjdG9ycyhzZWxlY3RvcnMpLFxuICAgICAgICAgIHJ1bGVOYW1lcyA9IHJ1bGVOYW1lc0Zyb21TZWxlY3RvcnNBbmRUeXBlcyhzZWxlY3RvcnMsIHR5cGVzKSxcbiAgICAgICAgICBzcHJlYWQgPSBTcHJlYWQuZnJvbVNwcmVhZEV4cHJlc3Npb24oc3ByZWFkRXhwcmVzc2lvbiksXG4gICAgICAgICAgc3ViUXVlcnkgPSBRdWVyeS5mcm9tU3ViRXhwcmVzc2lvbkFuZFR5cGVzKHN1YkV4cHJlc3Npb24sIHR5cGVzKSxcbiAgICAgICAgICBpbmZpbml0ZURlc2NlbnQgPSAoc2Vjb25kTWF0Y2ggPT09IFwiL1wiKSwgIC8vL1xuICAgICAgICAgIGludGVybWVkaWF0ZU5vZGVzID0gW10sXG4gICAgICAgICAgcXVlcnkgPSBuZXcgUXVlcnkocnVsZU5hbWVzLCB0eXBlcywgc3ByZWFkLCBzdWJRdWVyeSwgbWF4aW11bURlcHRoLCBpbmZpbml0ZURlc2NlbnQsIGludGVybWVkaWF0ZU5vZGVzKTtcbiAgICBcbiAgICByZXR1cm4gcXVlcnk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdHlwZXNGcm9tU2VsZWN0b3JzKHNlbGVjdG9ycykge1xuICBjb25zdCB0eXBlcyA9IFtdO1xuXG4gIHNlbGVjdG9ycy5mb3JFYWNoKChzZWxlY3RvcikgPT4ge1xuICAgIGNvbnN0IHNlbGVjdG9yVHlwZVNlbGVjdG9yID0gaXNTZWxlY3RvclR5cGVTZWxlY3RvcihzZWxlY3Rvcik7XG5cbiAgICBpZiAoc2VsZWN0b3JUeXBlU2VsZWN0b3IpIHtcbiAgICAgIGNvbnN0IHR5cGUgPSBzZWxlY3Rvci5zdWJzdHJpbmcoMSk7XG5cbiAgICAgIHR5cGVzLnB1c2godHlwZSk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gdHlwZXM7XG59XG5cbmZ1bmN0aW9uIGlzU2VsZWN0b3JUeXBlU2VsZWN0b3Ioc2VsZWN0b3IpIHsgcmV0dXJuIC9eQC8udGVzdChzZWxlY3Rvcik7IH1cblxuZnVuY3Rpb24gcnVsZU5hbWVzRnJvbVNlbGVjdG9ycyhzZWxlY3RvcnMpIHsgcmV0dXJuIHNlbGVjdG9ycy5maWx0ZXIoaXNTZWxlY3RvclJ1bGVOYW1lU2VsZWN0b3IpOyB9XG5cbmZ1bmN0aW9uIGlzU2VsZWN0b3JSdWxlTmFtZVNlbGVjdG9yKHNlbGVjdG9yKSB7IHJldHVybiAvXlteQF0vLnRlc3Qoc2VsZWN0b3IpOyB9XG5cbmZ1bmN0aW9uIHJ1bGVOYW1lc0Zyb21TZWxlY3RvcnNBbmRUeXBlcyhzZWxlY3RvcnMsIHR5cGVzKSB7XG4gIGxldCBydWxlTmFtZXMgPSBbXTtcblxuICBjb25zdCB0eXBlc0xlbmd0aCA9IHR5cGVzLmxlbmd0aDtcblxuICBpZiAodHlwZXNMZW5ndGggPT09IDApIHtcbiAgICBydWxlTmFtZXMgPSBydWxlTmFtZXNGcm9tU2VsZWN0b3JzKHNlbGVjdG9ycyk7XG4gIH1cblxuICByZXR1cm4gcnVsZU5hbWVzO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUXVlcnkgZnJvbSBcIi4uL3F1ZXJ5XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBxdWVyeUJ5Q2xhc3Mobm9kZSwgQ2xhc3MsIG5vZGVzID0gW10pIHtcbiAgaWYgKG5vZGUgaW5zdGFuY2VvZiBDbGFzcykge1xuICAgIG5vZGVzLnB1c2gobm9kZSk7XG4gIH1cblxuICBjb25zdCBub2RlTm9uVGVybWluYWxOb2RlID0gbm9kZS5pc05vblRlcm1pbmFsTm9kZSgpO1xuXG4gIGlmIChub2RlTm9uVGVybWluYWxOb2RlKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IG5vZGUuZ2V0Q2hpbGROb2RlcygpO1xuXG4gICAgY2hpbGROb2Rlcy5mb3JFYWNoKChjaGlsZE5vZGUpID0+IHF1ZXJ5QnlDbGFzcyhjaGlsZE5vZGUsIENsYXNzLCBub2RlcykpO1xuICB9XG5cbiAgcmV0dXJuIG5vZGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcXVlcnlCeUNsYXNzZXMobm9kZSwgQ2xhc3Nlcywgbm9kZXMgPSBbXSkge1xuICBDbGFzc2VzLnNvbWUoKENsYXNzKSA9PiB7XG4gICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBDbGFzcykge1xuICAgICAgbm9kZXMucHVzaChub2RlKTtcblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBub2RlTm9uVGVybWluYWxOb2RlID0gbm9kZS5pc05vblRlcm1pbmFsTm9kZSgpO1xuXG4gIGlmIChub2RlTm9uVGVybWluYWxOb2RlKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IG5vZGUuZ2V0Q2hpbGROb2RlcygpO1xuXG4gICAgY2hpbGROb2Rlcy5mb3JFYWNoKChjaGlsZE5vZGUpID0+IHF1ZXJ5QnlDbGFzc2VzKGNoaWxkTm9kZSwgQ2xhc3Nlcywgbm9kZXMpKTtcbiAgfVxuXG4gIHJldHVybiBub2Rlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHF1ZXJ5QnlFeHByZXNzaW9uKG5vZGUsIGV4cHJlc3Npb24sIG1heGltdW1EZXB0aCkge1xuICBjb25zdCBxdWVyeSA9IFF1ZXJ5LmZyb21FeHByZXNzaW9uKGV4cHJlc3Npb24sIG1heGltdW1EZXB0aCksXG4gICAgICAgIG5vZGVzID0gcXVlcnkuZXhlY3V0ZShub2RlKTtcblxuICByZXR1cm4gbm9kZXM7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgcXVlcnlCeUNsYXNzLFxuICBxdWVyeUJ5Q2xhc3NlcyxcbiAgcXVlcnlCeUV4cHJlc3Npb25cbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgUXVlcnkgfSBmcm9tIFwiLi9xdWVyeVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBxdWVyeVV0aWxpdGllcyB9IGZyb20gXCIuL3V0aWxpdGllcy9xdWVyeVwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgSEVBRCA9IFwiaGVhZFwiO1xuZXhwb3J0IGNvbnN0IFNUWUxFID0gXCJzdHlsZVwiO1xuZXhwb3J0IGNvbnN0IENIQVJBQ1RFUlMgPSBcImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpcIjtcbmV4cG9ydCBjb25zdCBUV09fU1BBQ0VTID0gXCIgIFwiO1xuZXhwb3J0IGNvbnN0IEZPVVJfU1BBQ0VTID0gXCIgICAgXCI7XG5leHBvcnQgY29uc3QgRU1QVFlfU1RSSU5HID0gXCJcIjtcbmV4cG9ydCBjb25zdCBDTEFTU19OQU1FX0xFTkdUSCA9IDY7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmNvbnN0IHsgZmlyc3QgfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5leHBvcnQgZnVuY3Rpb24gY29udGVudEZyb21RdWVyeU5vZGVBbmRUb2tlbnMocXVlcnksIG5vZGUsIHRva2Vucykge1xuICBjb25zdCBub2RlcyA9IHF1ZXJ5LmV4ZWN1dGUobm9kZSksXG4gICAgICAgIGZpcnN0Tm9kZSA9IGZpcnN0KG5vZGVzKTtcblxuICBub2RlID0gZmlyc3ROb2RlOyAvLy9cblxuICBjb25zdCBjb250ZW50ID0gY29udGVudEZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2Vucyk7XG5cbiAgcmV0dXJuIGNvbnRlbnQ7XG59XG5cbmZ1bmN0aW9uIGNvbnRlbnRGcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpIHtcbiAgY29uc3QgZmlyc3RTaWduaWZpY2FudFRva2VuID0gbm9kZS5nZXRGaXJzdFNpZ25pZmljYW50VG9rZW4oKSxcbiAgICAgICAgbGFzdFNpZ25pZmljYW50VG9rZW4gPSBub2RlLmdldExhc3RTaWduaWZpY2FudFRva2VuKCksXG4gICAgICAgIGZpcnN0VG9rZW4gPSBmaXJzdFNpZ25pZmljYW50VG9rZW4sIC8vL1xuICAgICAgICBsYXN0VG9rZW4gPSBsYXN0U2lnbmlmaWNhbnRUb2tlbiwgLy8vXG4gICAgICAgIGZpcnN0VG9rZW5JbmRleCA9IHRva2Vucy5pbmRleE9mKGZpcnN0VG9rZW4pLFxuICAgICAgICBsYXN0VG9rZW5JbmRleCA9IHRva2Vucy5pbmRleE9mKGxhc3RUb2tlbik7XG5cbiAgbGV0IGNvbnRlbnQgPSBFTVBUWV9TVFJJTkc7XG5cbiAgZm9yIChsZXQgaW5kZXggPSBmaXJzdFRva2VuSW5kZXg7IGluZGV4IDw9IGxhc3RUb2tlbkluZGV4OyBpbmRleCsrKSB7XG4gICAgY29uc3QgdG9rZW4gPSB0b2tlbnNbaW5kZXhdLFxuICAgICAgICAgIHRva2VuQ29udGVudCA9IHRva2VuLmdldENvbnRlbnQoKTtcblxuICAgIGNvbnRlbnQgKz0gdG9rZW5Db250ZW50O1xuICB9XG5cbiAgcmV0dXJuIGNvbnRlbnQ7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IFF1ZXJ5IH0gZnJvbSBcIm9jY2FtLWRvbVwiO1xuXG5pbXBvcnQgeyBjb250ZW50RnJvbVF1ZXJ5Tm9kZUFuZFRva2VucyB9IGZyb20gXCIuLi91dGlsaXRpZXMvY29udGVudFwiO1xuXG5jb25zdCBwcm9wZXJ0eVF1ZXJ5ID0gUXVlcnkuZnJvbUV4cHJlc3Npb24oXCIvKi9wcm9wZXJ0eVwiKSxcbiAgICAgIGV4cHJlc3Npb25RdWVyeSA9IFF1ZXJ5LmZyb21FeHByZXNzaW9uKFwiLyovZXhwcmVzc2lvblwiKTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGVjbGFyYXRpb24ge1xuICBjb25zdHJ1Y3Rvcihwcm9wZXJ0eSwgZXhwcmVzc2lvbikge1xuICAgIHRoaXMucHJvcGVydHkgPSBwcm9wZXJ0eTtcbiAgICB0aGlzLmV4cHJlc3Npb24gPSBleHByZXNzaW9uO1xuICB9XG5cbiAgZ2V0UHJvcGVydHkoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydHk7XG4gIH1cblxuICBnZXRFeHByZXNzaW9uKCkge1xuICAgIHJldHVybiB0aGlzLmV4cHJlc3Npb247XG4gIH1cblxuICBjaGVja01hdGNoZXMoZGVjbGFyYXRpb25zKSB7XG4gICAgY29uc3QgbWF0Y2hlcyA9IGRlY2xhcmF0aW9ucy5zb21lKChkZWNsYXJhdGlvbikgPT4ge1xuICAgICAgY29uc3QgcHJvcGVydHkgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eSgpLFxuICAgICAgICAgICAgcHJvcGVydGllc01hdGNoID0gKHByb3BlcnR5ID09PSB0aGlzLnByb3BlcnR5KTtcblxuICAgICAgaWYgKHByb3BlcnRpZXNNYXRjaCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBtYXRjaGVzO1xuICB9XG5cbiAgYXNDU1MoaW5kZW50LCBsYXN0KSB7XG4gICAgY29uc3QgY3NzID0gbGFzdCA/XG4gICAgICAgICAgICAgICAgYCR7aW5kZW50fSR7dGhpcy5wcm9wZXJ0eX06ICR7dGhpcy5leHByZXNzaW9ufTtgIDpcbiAgICAgICAgICAgICAgICAgIGAke2luZGVudH0ke3RoaXMucHJvcGVydHl9OiAke3RoaXMuZXhwcmVzc2lvbn07XFxuYDtcblxuICAgIHJldHVybiBjc3M7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSB7XG4gICAgY29uc3QgcHJvcGVydHlDb250ZW50ID0gY29udGVudEZyb21RdWVyeU5vZGVBbmRUb2tlbnMocHJvcGVydHlRdWVyeSwgbm9kZSwgdG9rZW5zKSxcbiAgICAgICAgICBleHByZXNzaW9uQ29udGVudCA9IGNvbnRlbnRGcm9tUXVlcnlOb2RlQW5kVG9rZW5zKGV4cHJlc3Npb25RdWVyeSwgbm9kZSwgdG9rZW5zKSxcbiAgICAgICAgICBwcm9wZXJ0eSA9IHByb3BlcnR5Q29udGVudCwgLy8vXG4gICAgICAgICAgZXhwcmVzc2lvbiA9IGV4cHJlc3Npb25Db250ZW50LCAvLy9cbiAgICAgICAgICBkZWNsYXJhdGlvbiA9IG5ldyBEZWNsYXJhdGlvbihwcm9wZXJ0eSwgZXhwcmVzc2lvbik7XG5cbiAgICByZXR1cm4gZGVjbGFyYXRpb247XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgUXVlcnkgfSBmcm9tIFwib2NjYW0tZG9tXCI7XG5cbmltcG9ydCBEZWNsYXJhdGlvbiBmcm9tIFwiLi9kZWNsYXJhdGlvblwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmNvbnN0IGRlY2xhcmF0aW9uUXVlcnkgPSBRdWVyeS5mcm9tRXhwcmVzc2lvbihcIi8qL2RlY2xhcmF0aW9uXCIpO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEZWNsYXJhdGlvbnMge1xuICBjb25zdHJ1Y3RvcihhcnJheSkge1xuICAgIHRoaXMuYXJyYXkgPSBhcnJheTtcbiAgfVxuXG4gIGZvcndhcmRzRm9yRWFjaChjYWxsYmFjaykge1xuICAgIGNvbnN0IGxlbmd0aCA9IHRoaXMuYXJyYXkubGVuZ3RoLFxuICAgICAgICAgIGZpcnN0SW5kZXggPSAwLFxuICAgICAgICAgIGxhc3RJbmRleCA9IGxlbmd0aCAtIDE7XG5cbiAgICBmb3IgKGxldCBpbmRleCA9IGZpcnN0SW5kZXg7IGluZGV4IDw9IGxhc3RJbmRleDsgaW5kZXgrKykge1xuICAgICAgY29uc3QgZGVjbGFyYXRpb24gPSB0aGlzLmFycmF5W2luZGV4XTtcblxuICAgICAgY2FsbGJhY2soZGVjbGFyYXRpb24sIGluZGV4KTtcbiAgICB9XG4gIH1cblxuICBiYWNrd2FyZHNGb3JFYWNoKGNhbGxiYWNrKSB7XG4gICAgY29uc3QgbGVuZ3RoID0gdGhpcy5hcnJheS5sZW5ndGgsXG4gICAgICAgICAgZmlyc3RJbmRleCA9IDAsXG4gICAgICAgICAgbGFzdEluZGV4ID0gbGVuZ3RoIC0gMTtcblxuICAgIGZvciAobGV0IGluZGV4ID0gbGFzdEluZGV4OyBpbmRleCA+PSBmaXJzdEluZGV4OyBpbmRleC0tKSB7XG4gICAgICBjb25zdCBkZWNsYXJhdGlvbiA9IHRoaXMuYXJyYXlbaW5kZXhdO1xuXG4gICAgICBjYWxsYmFjayhkZWNsYXJhdGlvbiwgaW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gIHVuc2hpZnQoZGVjbGFyYXRpb25zKSB7XG4gICAgZGVjbGFyYXRpb25zLmJhY2t3YXJkc0ZvckVhY2goKGRlY2xhcmF0aW9uKSA9PiB7XG4gICAgICBjb25zdCBtYXRjaGVzID0gZGVjbGFyYXRpb24uY2hlY2tNYXRjaGVzKHRoaXMuYXJyYXkpOyAvLy9cblxuICAgICAgaWYgKCFtYXRjaGVzKSB7XG4gICAgICAgIHRoaXMuYXJyYXkudW5zaGlmdChkZWNsYXJhdGlvbik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBhc0NTUyhjbGFzc05hbWUsIGluZGVudCkge1xuICAgIGlmIChpbmRlbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgaW5kZW50ID0gY2xhc3NOYW1lOyAvLy9cblxuICAgICAgY2xhc3NOYW1lID0gbnVsbDsgLy8vXG4gICAgfVxuXG4gICAgbGV0IGNzcyA9IEVNUFRZX1NUUklORztcblxuICAgIGNvbnN0IGxlbmd0aCA9IHRoaXMuYXJyYXkubGVuZ3RoO1xuXG4gICAgaWYgKGxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGxhc3RJbmRleCA9IGxlbmd0aCAtIDEsXG4gICAgICAgICAgICBkZWNsYXJhdGlvbnNDU1MgPSB0aGlzLmFycmF5LnJlZHVjZSgoZGVjbGFyYXRpb25zQ1NTLCBkZWNsYXJhdGlvbiwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgbGFzdCA9IChpbmRleCA9PT0gbGFzdEluZGV4KSxcbiAgICAgICAgICAgICAgICAgICAgZGVjbGFyYXRpb25DU1MgPSBkZWNsYXJhdGlvbi5hc0NTUyhpbmRlbnQsIGxhc3QpO1xuXG4gICAgICAgICAgICAgIGRlY2xhcmF0aW9uc0NTUyArPSBkZWNsYXJhdGlvbkNTUztcblxuICAgICAgICAgICAgICByZXR1cm4gZGVjbGFyYXRpb25zQ1NTO1xuICAgICAgICAgICAgfSwgRU1QVFlfU1RSSU5HKTtcblxuICAgICAgaWYgKGNsYXNzTmFtZSA9PT0gbnVsbCkge1xuICAgICAgICBjc3MgPSBkZWNsYXJhdGlvbnNDU1M7ICAvLy9cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNzcyA9IGAuJHtjbGFzc05hbWV9IHtcbiR7ZGVjbGFyYXRpb25zQ1NTfVxufVxuXG5gO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjc3M7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSB7XG4gICAgY29uc3QgZGVjbGFyYXRpb25Ob2RlcyA9IGRlY2xhcmF0aW9uUXVlcnkuZXhlY3V0ZShub2RlKSxcbiAgICAgICAgICBhcnJheSA9IGRlY2xhcmF0aW9uTm9kZXMubWFwKChkZWNsYXJhdGlvbk5vZGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBkZWNsYXJhdGlvbk5vZGUsIC8vL1xuICAgICAgICAgICAgICAgICAgZGVjbGFyYXRpb24gPSBEZWNsYXJhdGlvbi5mcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpO1xuXG4gICAgICAgICAgICByZXR1cm4gZGVjbGFyYXRpb247XG4gICAgICAgICAgfSksXG4gICAgICAgICAgZGVjbGFyYXRpb25zID0gbmV3IERlY2xhcmF0aW9ucyhhcnJheSk7XG5cbiAgICByZXR1cm4gZGVjbGFyYXRpb25zO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IFF1ZXJ5IH0gZnJvbSBcIm9jY2FtLWRvbVwiO1xuXG5pbXBvcnQgRGVjbGFyYXRpb25zIGZyb20gXCIuL2RlY2xhcmF0aW9uc1wiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBjb250ZW50RnJvbVF1ZXJ5Tm9kZUFuZFRva2VucyB9IGZyb20gXCIuLi91dGlsaXRpZXMvY29udGVudFwiO1xuXG5jb25zdCBzZWxlY3RvcnNRdWVyeSA9IFF1ZXJ5LmZyb21FeHByZXNzaW9uKFwiLy9zZWxlY3RvcnNcIik7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ1bGVTZXQge1xuICBjb25zdHJ1Y3RvcihzZWxlY3RvcnMsIGRlY2xhcmF0aW9ucykge1xuICAgIHRoaXMuc2VsZWN0b3JzID0gc2VsZWN0b3JzO1xuICAgIHRoaXMuZGVjbGFyYXRpb25zID0gZGVjbGFyYXRpb25zO1xuICB9XG5cbiAgZ2V0U2VsZWN0b3JzKCkge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdG9ycztcbiAgfVxuXG4gIGdldERlY2xhcmF0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5kZWNsYXJhdGlvbnM7XG4gIH1cblxuICB1bnNoaWZ0KHJ1bGVTZXQpIHtcbiAgICBjb25zdCBkZWNsYXJhdGlvbnMgPSBydWxlU2V0LmdldERlY2xhcmF0aW9ucygpO1xuXG4gICAgdGhpcy5kZWNsYXJhdGlvbnMudW5zaGlmdChkZWNsYXJhdGlvbnMpO1xuICB9XG5cbiAgZmluZE1hdGNoaW5nUnVsZVNldChydWxlU2V0cykge1xuICAgIGNvbnN0IG1hdGNoaW5nUnVsZVNldCA9IHJ1bGVTZXRzLmZpbmQoKHJ1bGVTZXQpID0+IHtcbiAgICAgIGNvbnN0IHNlbGVjdG9ycyA9IHJ1bGVTZXQuZ2V0U2VsZWN0b3JzKCksXG4gICAgICAgICAgICBzZWxlY3RvcnNNYXRjaCA9IChzZWxlY3RvcnMgPT09IHRoaXMuc2VsZWN0b3JzKSxcbiAgICAgICAgICAgIHJ1bGVTZXRzTWF0Y2ggPSBzZWxlY3RvcnNNYXRjaDsgLy8vXG5cbiAgICAgIGlmIChydWxlU2V0c01hdGNoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pIHx8IG51bGw7IC8vL1xuXG4gICAgcmV0dXJuIG1hdGNoaW5nUnVsZVNldDtcbiAgfVxuXG4gIGFzQ1NTKGNsYXNzTmFtZSwgaW5kZW50KSB7XG4gICAgbGV0IGNzcyA9IEVNUFRZX1NUUklORztcblxuICAgIGNvbnN0IGRlY2xhcmF0aW9uc0NTUyA9IHRoaXMuZGVjbGFyYXRpb25zLmFzQ1NTKGAgICR7aW5kZW50fWApO1xuXG4gICAgaWYgKGRlY2xhcmF0aW9uc0NTUyAhPT0gRU1QVFlfU1RSSU5HKSB7XG4gICAgICAgY3NzID0gYCR7aW5kZW50fS4ke2NsYXNzTmFtZX0ke3RoaXMuc2VsZWN0b3JzfSB7XG4ke2RlY2xhcmF0aW9uc0NTU31cbiR7aW5kZW50fX1cblxuYDtcbiAgICB9XG5cbiAgICByZXR1cm4gY3NzO1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2Vucykge1xuICAgIGNvbnN0IHNlbGVjdG9ycyA9IHNlbGVjdG9yc0Zyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2VucyksXG4gICAgICAgICAgZGVjbGFyYXRpb25zID0gRGVjbGFyYXRpb25zLmZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2VucyksXG4gICAgICAgICAgbWVkaWEgPSBuZXcgUnVsZVNldChzZWxlY3RvcnMsIGRlY2xhcmF0aW9ucyk7XG5cbiAgICByZXR1cm4gbWVkaWE7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2VsZWN0b3JzRnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSB7XG4gIGNvbnN0IHNlbGVjdG9yc05vZGVDb250ZW50ID0gY29udGVudEZyb21RdWVyeU5vZGVBbmRUb2tlbnMoc2VsZWN0b3JzUXVlcnksIG5vZGUsIHRva2VucyksXG4gICAgICAgIHNlbGVjdG9ycyA9IGAke3NlbGVjdG9yc05vZGVDb250ZW50fWA7XG5cbiAgcmV0dXJuIHNlbGVjdG9ycztcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgUXVlcnkgfSBmcm9tIFwib2NjYW0tZG9tXCI7XG5cbmltcG9ydCBSdWxlU2V0IGZyb20gXCIuL3J1bGVTZXRcIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5jb25zdCBydWxlU2V0UXVlcnkgPSBRdWVyeS5mcm9tRXhwcmVzc2lvbihcIi8qL3J1bGVTZXRcIik7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ1bGVTZXRzIHtcbiAgY29uc3RydWN0b3IoYXJyYXkpIHtcbiAgICB0aGlzLmFycmF5ID0gYXJyYXk7XG4gIH1cblxuICB1bnNoaWZ0KHJ1bGVTZXRzKSB7XG4gICAgcnVsZVNldHMuZm9yRWFjaCgocnVsZVNldCkgPT4ge1xuICAgICAgY29uc3QgbWF0Y2hpbmdSdWxlU2V0ID0gcnVsZVNldC5maW5kTWF0Y2hpbmdSdWxlU2V0KHRoaXMuYXJyYXkpOyAvLy9cblxuICAgICAgKG1hdGNoaW5nUnVsZVNldCA9PT0gbnVsbCkgP1xuICAgICAgICB0aGlzLmFycmF5LnVuc2hpZnQocnVsZVNldCkgOlxuICAgICAgICAgIG1hdGNoaW5nUnVsZVNldC51bnNoaWZ0KHJ1bGVTZXQpO1xuICAgIH0pO1xuICB9XG5cbiAgZm9yRWFjaChjYWxsYmFjaykge1xuICAgIHRoaXMuYXJyYXkuZm9yRWFjaChjYWxsYmFjayk7XG4gIH1cblxuICBhc0NTUyhjbGFzc05hbWUsIGluZGVudCkge1xuICAgIGNvbnN0IGNzcyA9IHRoaXMuYXJyYXkucmVkdWNlKChjc3MsIHJ1bGVTZXQpID0+IHtcbiAgICAgIGNvbnN0IHJ1bGVTZXRDU1MgPSBydWxlU2V0LmFzQ1NTKGNsYXNzTmFtZSwgaW5kZW50KTtcblxuICAgICAgY3NzICs9IHJ1bGVTZXRDU1M7XG5cbiAgICAgIHJldHVybiBjc3M7XG4gICAgfSwgRU1QVFlfU1RSSU5HKTtcblxuICAgIHJldHVybiBjc3M7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSB7XG4gICAgY29uc3QgcnVsZVNldE5vZGVzID0gcnVsZVNldFF1ZXJ5LmV4ZWN1dGUobm9kZSksXG4gICAgICAgICAgYXJyYXkgPSBydWxlU2V0Tm9kZXMubWFwKChydWxlU2V0Tm9kZSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHJ1bGVTZXROb2RlLCAvLy9cbiAgICAgICAgICAgICAgICAgIHJ1bGVTZXQgPSBSdWxlU2V0LmZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2Vucyk7XG5cbiAgICAgICAgICAgIHJldHVybiBydWxlU2V0O1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIHJ1bGVTZXRzID0gbmV3IFJ1bGVTZXRzKGFycmF5KTtcblxuICAgIHJldHVybiBydWxlU2V0cztcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBRdWVyeSB9IGZyb20gXCJvY2NhbS1kb21cIjtcblxuaW1wb3J0IFJ1bGVTZXRzIGZyb20gXCIuL3J1bGVTZXRzXCI7XG5pbXBvcnQgRGVjbGFyYXRpb25zIGZyb20gXCIuL2RlY2xhcmF0aW9uc1wiO1xuXG5pbXBvcnQgeyBUV09fU1BBQ0VTLCBGT1VSX1NQQUNFUyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGNvbnRlbnRGcm9tUXVlcnlOb2RlQW5kVG9rZW5zIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250ZW50XCI7XG5cbmNvbnN0IG1lZGlhUXVlcmllc1F1ZXJ5ID0gUXVlcnkuZnJvbUV4cHJlc3Npb24oXCIvbWVkaWEvbWVkaWFRdWVyaWVzXCIpO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZWRpYSB7XG4gIGNvbnN0cnVjdG9yKG1lZGlhUXVlcmllcywgZGVjbGFyYXRpb25zLCBydWxlU2V0cykge1xuICAgIHRoaXMubWVkaWFRdWVyaWVzID0gbWVkaWFRdWVyaWVzO1xuICAgIHRoaXMuZGVjbGFyYXRpb25zID0gZGVjbGFyYXRpb25zO1xuICAgIHRoaXMucnVsZVNldHMgPSBydWxlU2V0cztcbiAgfVxuXG4gIGdldE1lZGlhUXVlcmllcygpIHtcbiAgICByZXR1cm4gdGhpcy5tZWRpYVF1ZXJpZXM7XG4gIH1cblxuICBnZXREZWNsYXJhdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGVjbGFyYXRpb25zO1xuICB9XG5cbiAgZ2V0UnVsZVNldHMoKSB7XG4gICAgcmV0dXJuIHRoaXMucnVsZVNldHM7XG4gIH1cblxuICBhc0NTUyhjbGFzc05hbWUpIHtcbiAgICBsZXQgY3NzID0gXCJcIjtcblxuICAgIGNvbnN0IHJ1bGVTZXRzQ1NTID0gdGhpcy5ydWxlU2V0cy5hc0NTUyhjbGFzc05hbWUsIFRXT19TUEFDRVMpLFxuICAgICAgICAgIGRlY2xhcmF0aW9uc0NTUyA9IHRoaXMuZGVjbGFyYXRpb25zLmFzQ1NTKGNsYXNzTmFtZSwgRk9VUl9TUEFDRVMpO1xuXG4gICAgaWYgKChydWxlU2V0c0NTUyAhPT0gbnVsbCkgfHwgKGRlY2xhcmF0aW9uc0NTUyAhPT0gbnVsbCkpIHtcbiAgICAgIGNzcyA9IGBAbWVkaWEgJHt0aGlzLm1lZGlhUXVlcmllc30ge1xuJHtkZWNsYXJhdGlvbnNDU1N9JHtydWxlU2V0c0NTU31cbn1cblxuYDtcbiAgICB9XG5cbiAgICByZXR1cm4gY3NzO1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2Vucykge1xuICAgIGNvbnN0IG1lZGlhUXVlcmllcyA9IG1lZGlhUXVlcmllc0Zyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2VucyksXG4gICAgICAgICAgZGVjbGFyYXRpb25zID0gRGVjbGFyYXRpb25zLmZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2VucyksXG4gICAgICAgICAgcnVsZVNldHMgPSBSdWxlU2V0cy5mcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpLFxuICAgICAgICAgIG1lZGlhID0gbmV3IE1lZGlhKG1lZGlhUXVlcmllcywgZGVjbGFyYXRpb25zLCBydWxlU2V0cyk7XG5cbiAgICByZXR1cm4gbWVkaWE7XG4gIH1cbn1cblxuZnVuY3Rpb24gbWVkaWFRdWVyaWVzRnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSB7XG4gIGNvbnN0IG1lZGlhUXVlcmllc05vZGVDb250ZW50ID0gY29udGVudEZyb21RdWVyeU5vZGVBbmRUb2tlbnMobWVkaWFRdWVyaWVzUXVlcnksIG5vZGUsIHRva2VucyksXG4gICAgICAgIG1lZGlhUXVlcmllcyA9IGAke21lZGlhUXVlcmllc05vZGVDb250ZW50fWA7XG5cbiAgcmV0dXJuIG1lZGlhUXVlcmllcztcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgUXVlcnkgfSBmcm9tIFwib2NjYW0tZG9tXCI7XG5cbmltcG9ydCBNZWRpYSBmcm9tIFwiLi9tZWRpYVwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmNvbnN0IG1lZGlhUXVlcnkgPSBRdWVyeS5mcm9tRXhwcmVzc2lvbihcIi9zdHlsZXNoZWV0L21lZGlhXCIpO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZWRpYXMge1xuICBjb25zdHJ1Y3RvcihhcnJheSkge1xuICAgIHRoaXMuYXJyYXkgPSBhcnJheTtcbiAgfVxuXG4gIHVuc2hpZnQobWVkaWFzKSB7XG4gICAgbWVkaWFzLmZvckVhY2goKG1lZGlhKSA9PiB7XG4gICAgICB0aGlzLmFycmF5LnVuc2hpZnQobWVkaWEpO1xuICAgIH0pO1xuICB9XG5cbiAgZm9yRWFjaChjYWxsYmFjaykge1xuICAgIHRoaXMuYXJyYXkuZm9yRWFjaChjYWxsYmFjayk7XG4gIH1cblxuICBhc0NTUyhjbGFzc05hbWUpIHtcbiAgICBjb25zdCBjc3MgPSB0aGlzLmFycmF5LnJlZHVjZSgoY3NzLCBtZWRpYSkgPT4ge1xuICAgICAgY29uc3QgbWVkaWFDU1MgPSBtZWRpYS5hc0NTUyhjbGFzc05hbWUpO1xuXG4gICAgICBjc3MgKz0gbWVkaWFDU1M7XG5cbiAgICAgIHJldHVybiBjc3M7XG4gICAgfSwgRU1QVFlfU1RSSU5HKTtcblxuICAgIHJldHVybiBjc3M7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSB7XG4gICAgY29uc3QgbWVkaWFOb2RlcyA9IG1lZGlhUXVlcnkuZXhlY3V0ZShub2RlKSxcbiAgICAgICAgICBhcnJheSA9IG1lZGlhTm9kZXMubWFwKChtZWRpYU5vZGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBtZWRpYU5vZGUsIC8vL1xuICAgICAgICAgICAgICAgICAgbWVkaWEgPSBNZWRpYS5mcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpO1xuXG4gICAgICAgICAgICByZXR1cm4gbWVkaWE7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgbWVkaWFzID0gbmV3IE1lZGlhcyhhcnJheSk7XG5cbiAgICByZXR1cm4gbWVkaWFzO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBNZWRpYXMgZnJvbSBcIi4vc3R5bGUvbWVkaWFzXCI7XG5pbXBvcnQgUnVsZVNldHMgZnJvbSBcIi4vc3R5bGUvcnVsZVNldHNcIjtcbmltcG9ydCBEZWNsYXJhdGlvbnMgZnJvbSBcIi4vc3R5bGUvZGVjbGFyYXRpb25zXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0eWxlIHtcbiAgY29uc3RydWN0b3IoZGVjbGFyYXRpb25zLCBydWxlU2V0cywgbWVkaWFzKSB7XG4gICAgdGhpcy5kZWNsYXJhdGlvbnMgPSBkZWNsYXJhdGlvbnM7XG4gICAgdGhpcy5ydWxlU2V0cyA9IHJ1bGVTZXRzO1xuICAgIHRoaXMubWVkaWFzID0gbWVkaWFzO1xuICB9XG5cbiAgZ2V0RGVjbGFyYXRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmRlY2xhcmF0aW9ucztcbiAgfVxuXG4gIGdldFJ1bGVTZXRzKCkge1xuICAgIHJldHVybiB0aGlzLnJ1bGVTZXRzO1xuICB9XG5cbiAgZ2V0TWVkaWFzKCkge1xuICAgIHJldHVybiB0aGlzLm1lZGlhcztcbiAgfVxuXG4gIGV4dGVuZHMoc3VwZXJTdHlsZSkge1xuICAgIGNvbnN0IGRlY2xhcmF0aW9ucyA9IHN1cGVyU3R5bGUuZ2V0RGVjbGFyYXRpb25zKCksXG4gICAgICAgICAgcnVsZVNldHMgPSBzdXBlclN0eWxlLmdldFJ1bGVTZXRzKCksXG4gICAgICAgICAgbWVkaWFzID0gc3VwZXJTdHlsZS5nZXRNZWRpYXMoKTtcblxuICAgIHRoaXMudW5zaGlmdChkZWNsYXJhdGlvbnMsIHJ1bGVTZXRzLCBtZWRpYXMpO1xuICB9XG5cbiAgdW5zaGlmdChkZWNsYXJhdGlvbnMsIHJ1bGVTZXRzLCBtZWRpYXMpIHtcbiAgICB0aGlzLmRlY2xhcmF0aW9ucy51bnNoaWZ0KGRlY2xhcmF0aW9ucyk7XG4gICAgdGhpcy5ydWxlU2V0cy51bnNoaWZ0KHJ1bGVTZXRzKTtcbiAgICB0aGlzLm1lZGlhcy51bnNoaWZ0KG1lZGlhcyk7XG4gIH1cblxuICBhc0NTUyhjbGFzc05hbWUpIHtcbiAgICBjb25zdCBkZWNsYXJhdGlvbnNDU1MgPSB0aGlzLmRlY2xhcmF0aW9ucy5hc0NTUyhjbGFzc05hbWUsIFwiICBcIiksXG4gICAgICAgICAgcnVsZVNldHNDU1MgPSB0aGlzLnJ1bGVTZXRzLmFzQ1NTKGNsYXNzTmFtZSwgXCJcIiksXG4gICAgICAgICAgbWVkaWFzQ1NTID0gdGhpcy5tZWRpYXMuYXNDU1MoY2xhc3NOYW1lKSxcbiAgICAgICAgICBjc3MgPSBgJHtkZWNsYXJhdGlvbnNDU1N9JHtydWxlU2V0c0NTU30ke21lZGlhc0NTU31gO1xuXG4gICAgcmV0dXJuIGNzcztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpIHtcbiAgICBjb25zdCBkZWNsYXJhdGlvbnMgPSBEZWNsYXJhdGlvbnMuZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSxcbiAgICAgICAgICBydWxlU2V0cyA9IFJ1bGVTZXRzLmZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2VucyksXG4gICAgICAgICAgbWVkaWFzID0gTWVkaWFzLmZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2VucyksXG4gICAgICAgICAgc3R5bGUgPSBuZXcgU3R5bGUoZGVjbGFyYXRpb25zLCBydWxlU2V0cywgbWVkaWFzKTtcblxuICAgIHJldHVybiBzdHlsZTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgU3R5bGUgZnJvbSBcIi4uL3N0eWxlXCI7XG5pbXBvcnQgQ1NTTGV4ZXIgZnJvbSBcIi4uL2Nzcy9sZXhlclwiO1xuaW1wb3J0IENTU1BhcnNlciBmcm9tIFwiLi4vY3NzL3BhcnNlclwiO1xuXG5pbXBvcnQgeyBIRUFELCBTVFlMRSwgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5jb25zdCBjc3NMZXhlciA9IENTU0xleGVyLmZyb21Ob3RoaW5nKCksXG4gICAgICBjc3NQYXJzZXIgPSBDU1NQYXJzZXIuZnJvbU5vdGhpbmcoKTtcblxuaWYgKCFnbG9iYWxUaGlzLnN0eWxlTWFwKSB7XG4gIGdsb2JhbFRoaXMuc3R5bGVNYXAgPSB7fTtcbn1cblxuY29uc3QgeyBzdHlsZU1hcCB9ID0gZ2xvYmFsVGhpcztcblxuZnVuY3Rpb24gcmVuZGVyU3R5bGUoc3R5bGUpIHtcbiAgY29uc3QgaGVhZERPTUVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKEhFQUQpLFxuICAgICAgICBzdHlsZURPTUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFNUWUxFKSxcbiAgICAgICAgaW5uZXJIVE1MID0gYFxuICAgICAgICBcbiR7c3R5bGV9YDtcblxuICBPYmplY3QuYXNzaWduKHN0eWxlRE9NRWxlbWVudCwge1xuICAgIGlubmVySFRNTFxuICB9KTtcblxuICBoZWFkRE9NRWxlbWVudC5hcHBlbmRDaGlsZChzdHlsZURPTUVsZW1lbnQpO1xufVxuXG5mdW5jdGlvbiByZW5kZXJTdHlsZXMoKSB7XG4gIGNvbnN0IHN0eWxlc0NTUyA9IHJldHJpZXZlU3R5bGVzQ1NTKCksXG4gICAgICAgIHN0eWxlID0gc3R5bGVzQ1NTOyAgLy8vXG5cbiAgcmVuZGVyU3R5bGUoc3R5bGUpO1xufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZVN0eWxlKGFyZ3MsIGNsYXNzTmFtZSwgc3VwZXJTdHlsZSA9IG51bGwpIHtcbiAgY29uc3Qgc3RyaW5ncyA9IGFyZ3Muc2hpZnQoKSxcdC8vL1xuICAgICAgICBjb250ZW50ID0gc3RyaW5ncy5yZWR1Y2UoKGNvbnRlbnQsIHN0cmluZywgaW5kZXgpID0+IHtcbiAgICAgICAgICBjb25zdCBhcmcgPSBhcmdzW2luZGV4XTtcblxuICAgICAgICAgIGNvbnRlbnQgPSAoYXJnICE9PSB1bmRlZmluZWQpID9cbiAgICAgICAgICAgICAgICAgICAgICBgJHtjb250ZW50fSR7c3RyaW5nfSR7YXJnfWAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgYCR7Y29udGVudH0ke3N0cmluZ31gO1xuXG4gICAgICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgICAgIH0sIEVNUFRZX1NUUklORyksXG4gICAgICAgIHRva2VucyA9IGNzc0xleGVyLnRva2VuaXNlKGNvbnRlbnQpLFxuICAgICAgICBub2RlID0gY3NzUGFyc2VyLnBhcnNlKHRva2VucyksXG4gICAgICAgIHN0eWxlID0gU3R5bGUuZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKTtcblxuICAgICAgICBpZiAoc3VwZXJTdHlsZSAhPT0gbnVsbCkge1xuICAgICAgICAgIHN0eWxlLmV4dGVuZHMoc3VwZXJTdHlsZSk7XG4gICAgICAgIH1cblxuICAgICAgICBzdHlsZU1hcFtjbGFzc05hbWVdID0gc3R5bGU7XG59XG5cbmZ1bmN0aW9uIHJldHJpZXZlU3R5bGUoY2xhc3NOYW1lKSB7XG4gIGNvbnN0IHN0eWxlID0gc3R5bGVNYXBbY2xhc3NOYW1lXSB8fCBudWxsO1xuXG4gIHJldHVybiBzdHlsZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICByZW5kZXJTdHlsZSxcbiAgcmVuZGVyU3R5bGVzLFxuICBnZW5lcmF0ZVN0eWxlLFxuICByZXRyaWV2ZVN0eWxlXG59O1xuXG5mdW5jdGlvbiByZXRyaWV2ZVN0eWxlc0NTUygpIHtcbiAgY29uc3QgY2xhc3NOYW1lcyA9IE9iamVjdC5rZXlzKHN0eWxlTWFwKSxcbiAgICAgICAgc3R5bGVzQ1NTID0gY2xhc3NOYW1lcy5yZWR1Y2UoKHN0eWxlc0NTUywgY2xhc3NOYW1lKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc3R5bGUgPSByZXRyaWV2ZVN0eWxlKGNsYXNzTmFtZSksXG4gICAgICAgICAgICAgICAgc3R5bGVDU1MgPSBzdHlsZS5hc0NTUyhjbGFzc05hbWUpO1xuXG4gICAgICAgICAgc3R5bGVzQ1NTICs9IHN0eWxlQ1NTO1xuXG4gICAgICAgICAgcmV0dXJuIHN0eWxlc0NTUztcbiAgICAgICAgfSwgRU1QVFlfU1RSSU5HKTtcblxuICByZXR1cm4gc3R5bGVzQ1NTO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBDSEFSQUNURVJTLCBFTVBUWV9TVFJJTkcsIENMQVNTX05BTUVfTEVOR1RIIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5jb25zdCBsZW5ndGggPSBDTEFTU19OQU1FX0xFTkdUSCxcbiAgICAgIGNoYXJhY3RlcnMgPSBDSEFSQUNURVJTLFxuICAgICAgY2hhcmFjdGVyc0xlbmd0aCA9IGNoYXJhY3RlcnMubGVuZ3RoO1xuXG5jb25zdCBjbGFzc05hbWVzID0gW107XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZUNsYXNzTmFtZSgpIHtcbiAgbGV0IGNsYXNzTmFtZSA9IEVNUFRZX1NUUklORztcblxuICBmb3IgKGxldCBjb3VudCA9IDA7IGNvdW50IDwgbGVuZ3RoOyBjb3VudCsrKSB7XG4gICAgY29uc3QgaW5kZXggPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBjaGFyYWN0ZXJzTGVuZ3RoKSxcbiAgICAgICAgICBjaGFyYWN0ZXIgPSBjaGFyYWN0ZXJzW2luZGV4XTtcblxuICAgIGNsYXNzTmFtZSArPSBjaGFyYWN0ZXI7XG4gIH1cblxuICBjb25zdCBjbGFzc05hbWVzSW5jbHVkZXNDbGFzc05hbWUgPSBjbGFzc05hbWVzLmluY2x1ZGVzKGNsYXNzTmFtZSk7XG5cbiAgaWYgKCFjbGFzc05hbWVzSW5jbHVkZXNDbGFzc05hbWUpIHtcbiAgICBjbGFzc05hbWVzLnB1c2goY2xhc3NOYW1lKTtcbiAgfSBlbHNlIHtcbiAgICBjbGFzc05hbWUgPSBnZW5lcmF0ZUNsYXNzTmFtZSgpO1xuICB9XG5cbiAgcmV0dXJuIGNsYXNzTmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJldHJpZXZlQ2xhc3NOYW1lKGVsZW1lbnQpIHtcbiAgY29uc3QgeyBjbGFzc05hbWUgfSA9IGVsZW1lbnQucmVhY3RGdW5jdGlvbiB8fCBlbGVtZW50LnJlYWN0Q29tcG9uZW50LmNvbnN0cnVjdG9yO1xuXG4gIHJldHVybiBjbGFzc05hbWU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZ2VuZXJhdGVDbGFzc05hbWUsXG4gIHJldHJpZXZlQ2xhc3NOYW1lXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIHRhZ05hbWVzIH0gZnJvbSBcIi4vdGFnTmFtZXNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ1NTTGV4ZXIgfSBmcm9tIFwiLi9jc3MvbGV4ZXJcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ1NTUGFyc2VyIH0gZnJvbSBcIi4vY3NzL3BhcnNlclwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBzdHlsZXNVdGlsaXRpZXMgfSBmcm9tIFwiLi91dGlsaXRpZXMvc3R5bGVzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGNsYXNzTmFtZVV0aWxpdGllcyB9IGZyb20gXCIuL3V0aWxpdGllcy9jbGFzc05hbWVcIjtcbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB7IEVsZW1lbnQgfSBmcm9tIFwiZWFzeVwiO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNDbGFzcyhhcmd1bWVudCkgeyByZXR1cm4gaXNTdWJjbGFzc09mKGFyZ3VtZW50LCBFbGVtZW50KTsgfSAgLy8vXG5cbmZ1bmN0aW9uIGlzU3ViY2xhc3NPZihhcmd1bWVudCwgQ2xhc3MpIHtcbiAgbGV0IHN1YmNsYXNzID0gZmFsc2U7XG5cbiAgaWYgKGFyZ3VtZW50Lm5hbWUgPT09IENsYXNzLm5hbWUpIHsgICAvLy9cbiAgICBzdWJjbGFzcyA9IHRydWU7XG4gIH0gZWxzZSB7XG4gICAgYXJndW1lbnQgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoYXJndW1lbnQpOyAvLy9cblxuICAgIGlmIChhcmd1bWVudCAhPT0gbnVsbCkge1xuICAgICAgc3ViY2xhc3MgPSBpc1N1YmNsYXNzT2YoYXJndW1lbnQsIENsYXNzKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3ViY2xhc3M7XG59IiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgQ0xBU1NfTkFNRSA9IFwiY2xhc3NOYW1lXCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IFJlYWN0IH0gZnJvbSBcImVhc3lcIjtcbmltcG9ydCB7IHRhZ05hbWVzLCBzdHlsZXNVdGlsaXRpZXMsIGNsYXNzTmFtZVV0aWxpdGllcyB9IGZyb20gXCJ3aXRoLXN0eWxlXCI7XG5cbmltcG9ydCB7IGlzQ2xhc3MgfSBmcm9tIFwiLi91dGlsaXRpZXMvY2xhc3NcIjtcbmltcG9ydCB7IENMQVNTX05BTUUgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcblxuY29uc3QgeyBnZW5lcmF0ZUNsYXNzTmFtZSB9ID0gY2xhc3NOYW1lVXRpbGl0aWVzLFxuICAgICAgeyByZW5kZXJTdHlsZSwgcmVuZGVyU3R5bGVzLCBnZW5lcmF0ZVN0eWxlLCByZXRyaWV2ZVN0eWxlIH0gPSBzdHlsZXNVdGlsaXRpZXM7XG5cbmZ1bmN0aW9uIHdpdGhTdHlsZShDbGFzc09yRnVuY3Rpb24pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIGNvbnN0IGFyZ3MgPSBbIC4uLmFyZ3VtZW50cyBdOyAgLy8vXG5cbiAgICBsZXQgeyBjbGFzc05hbWUgPSBudWxsIH0gPSBDbGFzc09yRnVuY3Rpb247XG5cbiAgICBjb25zdCBzdXBlclN0eWxlID0gcmV0cmlldmVTdHlsZShjbGFzc05hbWUpO1xuXG4gICAgY2xhc3NOYW1lID0gZ2VuZXJhdGVDbGFzc05hbWUoKTtcblxuICAgIGdlbmVyYXRlU3R5bGUoYXJncywgY2xhc3NOYW1lLCBzdXBlclN0eWxlKTtcblxuICAgIGNvbnN0IENsYXNzT3JGdW5jdGlvbkNsYXNzID0gaXNDbGFzcyhDbGFzc09yRnVuY3Rpb24pO1xuXG4gICAgaWYgKENsYXNzT3JGdW5jdGlvbkNsYXNzKSB7XG4gICAgICBjb25zdCBDbGFzcyA9IENsYXNzT3JGdW5jdGlvbjsgIC8vL1xuXG4gICAgICBDbGFzc09yRnVuY3Rpb24gPSBjbGFzcyBleHRlbmRzIENsYXNzIHtcbiAgICAgICAgc3RhdGljIGZyb21DbGFzcyhfQ2xhc3MsIHByb3BlcnRpZXMsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cykge1xuICAgICAgICAgIHByb3BlcnRpZXMgPSBhcHBlbmRDbGFzc05hbWVUb1Byb3BlcnRpZXMoY2xhc3NOYW1lLCBwcm9wZXJ0aWVzKTtcblxuICAgICAgICAgIHJldHVybiBDbGFzcy5mcm9tQ2xhc3MoX0NsYXNzLCBwcm9wZXJ0aWVzLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IEZ1bmN0aW9uID0gQ2xhc3NPckZ1bmN0aW9uOyAvLy9cblxuICAgICAgQ2xhc3NPckZ1bmN0aW9uID0gKHByb3BlcnRpZXMpID0+IHtcbiAgICAgICAgcHJvcGVydGllcyA9IGFwcGVuZENsYXNzTmFtZVRvUHJvcGVydGllcyhjbGFzc05hbWUsIHByb3BlcnRpZXMpO1xuXG4gICAgICAgIHJldHVybiBGdW5jdGlvbihwcm9wZXJ0aWVzKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgT2JqZWN0LmFzc2lnbihDbGFzc09yRnVuY3Rpb24sIHtcbiAgICAgIGNsYXNzTmFtZVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIENsYXNzT3JGdW5jdGlvbjtcbiAgfTtcbn1cblxuT2JqZWN0LmFzc2lnbih3aXRoU3R5bGUsIHtcbiAgcmVuZGVyU3R5bGUsXG4gIHJlbmRlclN0eWxlc1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhTdHlsZTtcblxudGFnTmFtZXMuZm9yRWFjaCgodGFnTmFtZSkgPT4ge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkod2l0aFN0eWxlLCB0YWdOYW1lLCB7XG4gICAgZ2V0OiAoKSA9PiBmdW5jdGlvbigpIHtcbiAgICAgIGNvbnN0IGFyZ3MgPSBbLi4uYXJndW1lbnRzXSwgIC8vL1xuICAgICAgICAgICAgY2xhc3NOYW1lID0gZ2VuZXJhdGVDbGFzc05hbWUoKTtcblxuICAgICAgZ2VuZXJhdGVTdHlsZShhcmdzLCBjbGFzc05hbWUpO1xuXG4gICAgICBjb25zdCBGdW5jdGlvbiA9IChwcm9wZXJ0aWVzKSA9PiB7XG4gICAgICAgIHByb3BlcnRpZXMgPSBhcHBlbmRDbGFzc05hbWVUb1Byb3BlcnRpZXMoY2xhc3NOYW1lLCBwcm9wZXJ0aWVzKTtcblxuICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudCh0YWdOYW1lLCBwcm9wZXJ0aWVzKTtcbiAgICAgIH07XG5cbiAgICAgIE9iamVjdC5hc3NpZ24oRnVuY3Rpb24sIHtcbiAgICAgICAgY2xhc3NOYW1lXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIEZ1bmN0aW9uO1xuICAgIH1cbiAgfSk7XG59KTtcblxuZnVuY3Rpb24gYXBwZW5kQ2xhc3NOYW1lVG9Qcm9wZXJ0aWVzKGNsYXNzTmFtZSwgcHJvcGVydGllcykge1xuICBwcm9wZXJ0aWVzID0gcHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShDTEFTU19OQU1FKSA/IHByb3BlcnRpZXMgOiB7IC4uLnByb3BlcnRpZXMsIGNsYXNzTmFtZSB9OyAvLy9cblxuICByZXR1cm4gcHJvcGVydGllcztcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IENMQVNTX05BTUUgPSBcImNsYXNzTmFtZVwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgd2l0aFN0eWxlIGZyb20gXCIuL3dpdGhTdHlsZVwiO1xuXG5leHBvcnQgZGVmYXVsdCB3aXRoU3R5bGU7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5jb25zdCB7IHNlY29uZCB9ID0gYXJyYXlVdGlsaXRpZXM7XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHJpcFBpeGVscyh2YWx1ZUluUGl4ZWxzKSB7XG4gIGxldCB2YWx1ZTtcblxuICBpZiAoIXZhbHVlSW5QaXhlbHMpIHtcbiAgICB2YWx1ZSA9IDA7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgbWF0Y2hlcyA9IHZhbHVlSW5QaXhlbHMubWF0Y2goL14oLispcHgkLyksXG4gICAgICAgICAgc2Vjb25kTWF0Y2ggPSBzZWNvbmQobWF0Y2hlcyk7XG5cbiAgICB2YWx1ZSA9IE51bWJlcihzZWNvbmRNYXRjaCk7IC8vL1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgVE9QID0gXCJ0b3BcIjtcbmV4cG9ydCBjb25zdCBMRUZUID0gXCJsZWZ0XCI7XG5leHBvcnQgY29uc3QgUklHSFQgPSBcInJpZ2h0XCI7XG5leHBvcnQgY29uc3QgQk9UVE9NID0gXCJib3R0b21cIjtcbmV4cG9ydCBjb25zdCBMSU5FX0hFSUdIVCA9IFwibGluZS1oZWlnaHRcIjtcbmV4cG9ydCBjb25zdCBFTVBUWV9TVFJJTkcgPSBcIlwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzdHJpcFBpeGVscyB9IGZyb20gXCIuLi91dGlsaXRpZXMvY3NzXCI7XG5pbXBvcnQgeyBUT1AsIExFRlQsIFJJR0hULCBCT1RUT00sIExJTkVfSEVJR0hUIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5mdW5jdGlvbiBnZXRMaW5lSGVpZ2h0KCkge1xuICBjb25zdCBsaW5lSGVpZ2h0SW5QaXhlbHMgPSB0aGlzLmNzcyhMSU5FX0hFSUdIVCksXG4gICAgICAgIGxpbmVIZWlnaHQgPSBzdHJpcFBpeGVscyhsaW5lSGVpZ2h0SW5QaXhlbHMpO1xuXG4gIHJldHVybiBsaW5lSGVpZ2h0O1xufVxuXG5mdW5jdGlvbiBnZXRQYWRkaW5nKHNpZGUpIHtcbiAgY29uc3QgcGFkZGluZ0luUGl4ZWxzID0gdGhpcy5jc3MoYHBhZGRpbmctJHtzaWRlfWApLFxuICAgICAgICBwYWRkaW5nID0gc3RyaXBQaXhlbHMocGFkZGluZ0luUGl4ZWxzKTtcblxuICByZXR1cm4gcGFkZGluZztcbn1cblxuZnVuY3Rpb24gZ2V0Qm9yZGVyV2lkdGgoc2lkZSkge1xuICBjb25zdCBib3JkZXJXaWR0aEluUGl4ZWxzID0gdGhpcy5jc3MoYGJvcmRlci0ke3NpZGV9LXdpZHRoYCksXG4gICAgICAgIGJvcmRlcldpZHRoID0gc3RyaXBQaXhlbHMoYm9yZGVyV2lkdGhJblBpeGVscyk7XG5cbiAgcmV0dXJuIGJvcmRlcldpZHRoO1xufVxuXG5mdW5jdGlvbiBnZXRQYWRkaW5nVG9wKCkge1xuICBjb25zdCBzaWRlID0gVE9QLFxuICAgICAgICBwYWRkaW5nVG9wID0gdGhpcy5nZXRQYWRkaW5nKHNpZGUpO1xuXG4gIHJldHVybiBwYWRkaW5nVG9wO1xufVxuXG5mdW5jdGlvbiBnZXRQYWRkaW5nTGVmdCgpIHtcbiAgY29uc3Qgc2lkZSA9IExFRlQsXG4gICAgICAgIHBhZGRpbmdMZWZ0ID0gdGhpcy5nZXRQYWRkaW5nKHNpZGUpO1xuXG4gIHJldHVybiBwYWRkaW5nTGVmdDtcbn1cblxuZnVuY3Rpb24gZ2V0UGFkZGluZ1JpZ2h0KCkge1xuICBjb25zdCBzaWRlID0gUklHSFQsXG4gICAgICAgIHBhZGRpbmdSaWdodCA9IHRoaXMuZ2V0UGFkZGluZyhzaWRlKTtcblxuICByZXR1cm4gcGFkZGluZ1JpZ2h0O1xufVxuXG5mdW5jdGlvbiBnZXRQYWRkaW5nQm90dG9tKCkge1xuICBjb25zdCBzaWRlID0gQk9UVE9NLFxuICAgICAgICBwYWRkaW5nQm90dG9tID0gdGhpcy5nZXRQYWRkaW5nKHNpZGUpO1xuXG4gIHJldHVybiBwYWRkaW5nQm90dG9tO1xufVxuXG5mdW5jdGlvbiBnZXRCb3JkZXJUb3BXaWR0aCgpIHtcbiAgY29uc3Qgc2lkZSA9IFRPUCxcbiAgICAgICAgYm9yZGVyVG9wV2lkdGggPSB0aGlzLmdldEJvcmRlcldpZHRoKHNpZGUpO1xuXG4gIHJldHVybiBib3JkZXJUb3BXaWR0aDtcbn1cblxuZnVuY3Rpb24gZ2V0Qm9yZGVyTGVmdFdpZHRoKCkge1xuICBjb25zdCBzaWRlID0gTEVGVCxcbiAgICAgICAgYm9yZGVyTGVmdFdpZHRoID0gdGhpcy5nZXRCb3JkZXJXaWR0aChzaWRlKTtcblxuICByZXR1cm4gYm9yZGVyTGVmdFdpZHRoO1xufVxuXG5mdW5jdGlvbiBnZXRCb3JkZXJSaWdodFdpZHRoKCkge1xuICBjb25zdCBzaWRlID0gUklHSFQsXG4gICAgICAgIGJvcmRlclJpZ2h0V2lkdGggPSB0aGlzLmdldEJvcmRlcldpZHRoKHNpZGUpO1xuXG4gIHJldHVybiBib3JkZXJSaWdodFdpZHRoO1xufVxuXG5mdW5jdGlvbiBnZXRCb3JkZXJCb3R0b21XaWR0aCgpIHtcbiAgY29uc3Qgc2lkZSA9IEJPVFRPTSxcbiAgICAgICAgYm9yZGVyQm90dG9tV2lkdGggPSB0aGlzLmdldEJvcmRlcldpZHRoKHNpZGUpO1xuXG4gIHJldHVybiBib3JkZXJCb3R0b21XaWR0aDtcbn1cblxuY29uc3Qgc3R5bGVNaXhpbnMgPSB7XG4gIGdldExpbmVIZWlnaHQsXG4gIGdldFBhZGRpbmcsXG4gIGdldFBhZGRpbmdUb3AsXG4gIGdldFBhZGRpbmdMZWZ0LFxuICBnZXRQYWRkaW5nUmlnaHQsXG4gIGdldFBhZGRpbmdCb3R0b20sXG4gIGdldEJvcmRlcldpZHRoLFxuICBnZXRCb3JkZXJUb3BXaWR0aCxcbiAgZ2V0Qm9yZGVyTGVmdFdpZHRoLFxuICBnZXRCb3JkZXJSaWdodFdpZHRoLFxuICBnZXRCb3JkZXJCb3R0b21XaWR0aFxufTtcblxuZXhwb3J0IGRlZmF1bHQgc3R5bGVNaXhpbnM7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNlbGVjdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSB7XG4gICAgdGhpcy5zdGFydFBvc2l0aW9uID0gc3RhcnRQb3NpdGlvbjtcbiAgICB0aGlzLmVuZFBvc2l0aW9uID0gZW5kUG9zaXRpb247XG4gIH1cblxuICBnZXRTdGFydFBvc2l0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0UG9zaXRpb247XG4gIH1cblxuICBnZXRFbmRQb3NpdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5lbmRQb3NpdGlvbjtcbiAgfVxuXG4gIHNldFN0YXJ0UG9zaXRpb24oc3RhcnRQb3NpdGlvbikge1xuICAgIHRoaXMuc3RhcnRQb3NpdGlvbiA9IHN0YXJ0UG9zaXRpb247XG4gIH1cblxuICBzZXRFbmRQb3NpdGlvbihlbmRQb3NpdGlvbikge1xuICAgIHRoaXMuZW5kUG9zaXRpb24gPSBlbmRQb3NpdGlvbjtcbiAgfVxuXG4gIGlzRXF1YWxUbyhzZWxlY3Rpb24pIHtcbiAgICBsZXQgZXF1YWxUbyA9IGZhbHNlO1xuXG4gICAgaWYgKHNlbGVjdGlvbiAhPT0gbnVsbCkge1xuICAgICAgY29uc3Qgc2VsZWN0aW9uU3RhcnRQb3NpdGlvbiA9IHNlbGVjdGlvbi5nZXRTdGFydFBvc2l0aW9uKCksXG4gICAgICAgICAgICBzZWxlY3Rpb25FbmRQb3NpdGlvbiA9IHNlbGVjdGlvbi5nZXRFbmRQb3NpdGlvbigpLFxuICAgICAgICAgICAgc3RhcnRQb3NpdGlvbnNFcXVhbCA9ICh0aGlzLnN0YXJ0UG9zaXRpb24gPT09IHNlbGVjdGlvblN0YXJ0UG9zaXRpb24pLFxuICAgICAgICAgICAgZW5kUG9zaXRpb25zRXF1YWwgPSAodGhpcy5lbmRQb3NpdGlvbiA9PT0gc2VsZWN0aW9uRW5kUG9zaXRpb24pO1xuXG4gICAgICBlcXVhbFRvID0gKHN0YXJ0UG9zaXRpb25zRXF1YWwgJiYgZW5kUG9zaXRpb25zRXF1YWwpO1xuICAgIH1cblxuICAgIHJldHVybiBlcXVhbFRvO1xuICB9XG5cbiAgaXNEaWZmZXJlbnRUbyhzZWxlY3Rpb24pIHtcbiAgICBjb25zdCBlcXVhbFRvID0gdGhpcy5pc0VxdWFsVG8oc2VsZWN0aW9uKSxcbiAgICAgICAgICBkaWZmZXJlbnRUbyA9ICFlcXVhbFRvO1xuXG4gICAgcmV0dXJuIGRpZmZlcmVudFRvO1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IHN0YXJ0UG9zaXRpb24gPSAwLFxuICAgICAgICAgIGVuZFBvc2l0aW9uID0gMCxcbiAgICAgICAgICBzZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9uKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTtcblxuICAgIHJldHVybiBzZWxlY3Rpb247XG4gIH1cblxuICBzdGF0aWMgZnJvbURPTUVsZW1lbnQoZG9tRWxlbWVudCkge1xuICAgIGNvbnN0IHsgc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZCB9ID0gZG9tRWxlbWVudCxcbiAgICAgICAgICBzdGFydFBvc2l0aW9uID0gc2VsZWN0aW9uU3RhcnQsIC8vL1xuICAgICAgICAgIGVuZFBvc2l0aW9uID0gc2VsZWN0aW9uRW5kLCAvLy9cbiAgICAgICAgICBzZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9uKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTtcblxuICAgIHJldHVybiBzZWxlY3Rpb247XG5cbiAgfVxuXG4gIHN0YXRpYyBmcm9tU3RhcnRQb3NpdGlvbkFuZEVuZFBvc2l0aW9uKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSB7XG4gICAgY29uc3Qgc2VsZWN0aW9uID0gbmV3IFNlbGVjdGlvbihzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7XG5cbiAgICByZXR1cm4gc2VsZWN0aW9uO1xuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmltcG9ydCB7IHdpbmRvdywgRWxlbWVudCwgZXZlbnRUeXBlcyB9IGZyb20gXCJlYXN5XCI7XHJcblxyXG5pbXBvcnQgU2VsZWN0aW9uIGZyb20gXCIuL3NlbGVjdGlvblwiXHJcblxyXG5jb25zdCB7IEJMVVJfRVZFTlRfVFlQRSxcclxuICAgICAgICAgSU5QVVRfRVZFTlRfVFlQRSxcclxuICAgICAgICAgRk9DVVNfRVZFTlRfVFlQRSxcclxuICAgICAgICAgQ0hBTkdFX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgIFNDUk9MTF9FVkVOVF9UWVBFLFxyXG4gICAgICAgICBLRVlET1dOX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgIE1PVVNFVVBfRVZFTlRfVFlQRSxcclxuICAgICAgICAgTU9VU0VET1dOX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgIE1PVVNFTU9WRV9FVkVOVF9UWVBFLFxyXG4gICAgICAgICBDT05URVhUTUVOVV9FVkVOVF9UWVBFIH0gPSBldmVudFR5cGVzO1xyXG5cclxuY29uc3QgZGVmZXIgPSAoZnVuYykgPT4gc2V0VGltZW91dChmdW5jLCAwKTsgLy8vXHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSaWNoVGV4dGFyZWEgZXh0ZW5kcyBFbGVtZW50IHtcclxuICBpc0FjdGl2ZSgpIHtcclxuICAgIGNvbnN0IGFjdGl2ZSA9IHRoaXMuaGFzQ2xhc3MoXCJhY3RpdmVcIik7XHJcblxyXG4gICAgcmV0dXJuIGFjdGl2ZTtcclxuICB9XHJcblxyXG4gIGlzUmVhZE9ubHkoKSB7XHJcbiAgICBjb25zdCBkb21FbGVtZW50ID0gdGhpcy5nZXRET01FbGVtZW50KCksXHJcbiAgICAgICAgICB7IHJlYWRPbmx5IH0gPSBkb21FbGVtZW50O1xyXG4gICAgXHJcbiAgICByZXR1cm4gcmVhZE9ubHk7IFxyXG4gIH1cclxuXHJcbiAgZ2V0Q29udGVudCgpIHtcclxuICAgIGNvbnN0IGRvbUVsZW1lbnQgPSB0aGlzLmdldERPTUVsZW1lbnQoKSxcclxuICAgICAgICAgIHsgdmFsdWUgfSA9IGRvbUVsZW1lbnQsXHJcbiAgICAgICAgICBjb250ZW50ID0gdmFsdWU7ICAvLy9cclxuXHJcbiAgICByZXR1cm4gY29udGVudDtcclxuICB9XHJcblxyXG4gIGdldFNlbGVjdGlvbigpIHtcclxuICAgIGNvbnN0IGRvbUVsZW1lbnQgPSB0aGlzLmdldERPTUVsZW1lbnQoKSxcclxuICAgICAgICAgIHNlbGVjdGlvbiA9IFNlbGVjdGlvbi5mcm9tRE9NRWxlbWVudChkb21FbGVtZW50KTtcclxuXHJcbiAgICByZXR1cm4gc2VsZWN0aW9uO1xyXG4gIH1cclxuXHJcbiAgc2V0UmVhZE9ubHkocmVhZE9ubHkpIHtcclxuICAgIGNvbnN0IGRvbUVsZW1lbnQgPSB0aGlzLmdldERPTUVsZW1lbnQoKTtcclxuXHJcbiAgICBPYmplY3QuYXNzaWduKGRvbUVsZW1lbnQsIHtcclxuICAgICAgcmVhZE9ubHlcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2V0Q29udGVudChjb250ZW50KSB7XHJcbiAgICBjb25zdCB2YWx1ZSA9IGNvbnRlbnQsICAvLy9cclxuICAgICAgICAgIHByZXZpb3VzQ29udGVudCA9IGNvbnRlbnQsICAvLy9cclxuICAgICAgICAgIGRvbUVsZW1lbnQgPSB0aGlzLmdldERPTUVsZW1lbnQoKTtcclxuXHJcbiAgICBPYmplY3QuYXNzaWduKGRvbUVsZW1lbnQsIHtcclxuICAgICAgdmFsdWVcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuc2V0UHJldmlvdXNDb250ZW50KHByZXZpb3VzQ29udGVudCk7XHJcbiAgfVxyXG5cclxuICBzZXRTZWxlY3Rpb24oc2VsZWN0aW9uKSB7XHJcbiAgICBjb25zdCBzZWxlY3Rpb25TdGFydFBvc2l0aW9uID0gc2VsZWN0aW9uLmdldFN0YXJ0UG9zaXRpb24oKSxcclxuICAgICAgICAgIHNlbGVjdGlvbkVuZFBvc2l0aW9uID0gc2VsZWN0aW9uLmdldEVuZFBvc2l0aW9uKCksXHJcbiAgICAgICAgICBzZWxlY3Rpb25TdGFydCA9IHNlbGVjdGlvblN0YXJ0UG9zaXRpb24sICAvLy9cclxuICAgICAgICAgIHNlbGVjdGlvbkVuZCA9IHNlbGVjdGlvbkVuZFBvc2l0aW9uLCAgLy8vXHJcbiAgICAgICAgICBwcmV2aW91c1NlbGVjdGlvbiA9IHNlbGVjdGlvbiwgIC8vL1xyXG4gICAgICAgICAgZG9tRWxlbWVudCA9IHRoaXMuZ2V0RE9NRWxlbWVudCgpO1xyXG5cclxuICAgIE9iamVjdC5hc3NpZ24oZG9tRWxlbWVudCwge1xyXG4gICAgICBzZWxlY3Rpb25TdGFydCxcclxuICAgICAgc2VsZWN0aW9uRW5kXHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnNldFByZXZpb3VzU2VsZWN0aW9uKHByZXZpb3VzU2VsZWN0aW9uKTtcclxuICB9XHJcblxyXG4gIGlzTW91c2VEb3duKCkge1xyXG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLmdldFN0YXRlKCksXHJcbiAgICAgICAgICB7IG1vdXNlRG93biB9ID0gc3RhdGU7XHJcblxyXG4gICAgcmV0dXJuIG1vdXNlRG93bjtcclxuICB9XHJcblxyXG4gIGhhc0NoYW5nZWQoKSB7XHJcbiAgICBjb25zdCBjb250ZW50Q2hhbmdlZCA9IHRoaXMuaGFzQ29udGVudENoYW5nZWQoKSxcclxuICAgICAgICAgIHNlbGVjdGlvbkNoYW5nZWQgPSB0aGlzLmhhc1NlbGVjdGlvbkNoYW5nZWQoKSxcclxuICAgICAgICAgIGNoYW5nZWQgPSAoY29udGVudENoYW5nZWQgfHwgc2VsZWN0aW9uQ2hhbmdlZCk7XHJcblxyXG4gICAgcmV0dXJuIGNoYW5nZWQ7XHJcbiAgfVxyXG5cclxuICBoYXNDb250ZW50Q2hhbmdlZCgpIHtcclxuICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLmdldENvbnRlbnQoKSxcclxuICAgICAgICAgIHByZXZpb3VzQ29udGVudCA9IHRoaXMuZ2V0UHJldmlvdXNDb250ZW50KCksXHJcbiAgICAgICAgICBjb250ZW50RGlmZmVyZW50VG9QcmV2aW91c0NvbnRlbnQgPSAoY29udGVudCAhPT0gcHJldmlvdXNDb250ZW50KSxcclxuICAgICAgICAgIGNvbnRlbnRDaGFuZ2VkID0gY29udGVudERpZmZlcmVudFRvUHJldmlvdXNDb250ZW50OyAvLy9cclxuXHJcbiAgICByZXR1cm4gY29udGVudENoYW5nZWQ7XHJcbiAgfVxyXG5cclxuICBoYXNTZWxlY3Rpb25DaGFuZ2VkKCkge1xyXG4gICAgY29uc3Qgc2VsZWN0aW9uID0gdGhpcy5nZXRTZWxlY3Rpb24oKSxcclxuICAgICAgICAgIHByZXZpb3VzU2VsZWN0aW9uID0gdGhpcy5nZXRQcmV2aW91c1NlbGVjdGlvbigpLFxyXG4gICAgICAgICAgc2VsZWN0aW9uRGlmZmVyZW50VG9QcmV2aW91c1NlbGVjdGlvbiA9IHNlbGVjdGlvbi5pc0RpZmZlcmVudFRvKHByZXZpb3VzU2VsZWN0aW9uKSxcclxuICAgICAgICAgIHNlbGVjdGlvbkNoYW5nZWQgPSBzZWxlY3Rpb25EaWZmZXJlbnRUb1ByZXZpb3VzU2VsZWN0aW9uOyAvLy9cclxuXHJcbiAgICByZXR1cm4gc2VsZWN0aW9uQ2hhbmdlZDtcclxuICB9XHJcblxyXG4gIGFjdGl2YXRlKCkge1xyXG4gICAgY29uc3QgbW91c2VEb3duID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy5zZXRNb3VzZURvd24obW91c2VEb3duKTtcclxuXHJcbiAgICB3aW5kb3cub24oYCR7QkxVUl9FVkVOVF9UWVBFfSAke01PVVNFVVBfRVZFTlRfVFlQRX0gJHtDT05URVhUTUVOVV9FVkVOVF9UWVBFfWAsIHRoaXMubW91c2VVcEhhbmRsZXIsIHRoaXMpOyAvLy9cclxuXHJcbiAgICB0aGlzLm9uKE1PVVNFRE9XTl9FVkVOVF9UWVBFLCB0aGlzLm1vdXNlRG93bkhhbmRsZXIsIHRoaXMpO1xyXG5cclxuICAgIHRoaXMub24oTU9VU0VNT1ZFX0VWRU5UX1RZUEUsIHRoaXMubW91c2VNb3ZlSGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgdGhpcy5vbihLRVlET1dOX0VWRU5UX1RZUEUsIHRoaXMua2V5RG93bkhhbmRsZXIsIHRoaXMpO1xyXG5cclxuICAgIHRoaXMub24oSU5QVVRfRVZFTlRfVFlQRSwgdGhpcy5pbnB1dEhhbmRsZXIsIHRoaXMpO1xyXG5cclxuICAgIHRoaXMub24oU0NST0xMX0VWRU5UX1RZUEUsIHRoaXMuc2Nyb2xsSGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgdGhpcy5vbihGT0NVU19FVkVOVF9UWVBFLCB0aGlzLmZvY3VzSGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgdGhpcy5vbihCTFVSX0VWRU5UX1RZUEUsIHRoaXMuYmx1ckhhbmRsZXIsIHRoaXMpO1xyXG5cclxuICAgIHRoaXMuYWRkQ2xhc3MoXCJhY3RpdmVcIik7XHJcbiAgfVxyXG5cclxuICBkZWFjdGl2YXRlKCkge1xyXG4gICAgY29uc3QgbW91c2VEb3duID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy5zZXRNb3VzZURvd24obW91c2VEb3duKTtcclxuXHJcbiAgICB3aW5kb3cub2ZmKGAke0JMVVJfRVZFTlRfVFlQRX0gJHtNT1VTRVVQX0VWRU5UX1RZUEV9ICR7Q09OVEVYVE1FTlVfRVZFTlRfVFlQRX1gLCB0aGlzLm1vdXNlVXBIYW5kbGVyLCB0aGlzKTsgLy8vXHJcblxyXG4gICAgdGhpcy5vZmYoTU9VU0VET1dOX0VWRU5UX1RZUEUsIHRoaXMubW91c2VEb3duSGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgdGhpcy5vZmYoTU9VU0VNT1ZFX0VWRU5UX1RZUEUsIHRoaXMubW91c2VNb3ZlSGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgdGhpcy5vZmYoS0VZRE9XTl9FVkVOVF9UWVBFLCB0aGlzLmtleURvd25IYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICB0aGlzLm9mZihJTlBVVF9FVkVOVF9UWVBFLCB0aGlzLmlucHV0SGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgdGhpcy5vZmYoU0NST0xMX0VWRU5UX1RZUEUsIHRoaXMuc2Nyb2xsSGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgdGhpcy5vZmYoRk9DVVNfRVZFTlRfVFlQRSwgdGhpcy5mb2N1c0hhbmRsZXIsIHRoaXMpO1xyXG5cclxuICAgIHRoaXMub2ZmKEJMVVJfRVZFTlRfVFlQRSwgdGhpcy5ibHVySGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgdGhpcy5yZW1vdmVDbGFzcyhcImFjdGl2ZVwiKTtcclxuICB9XHJcblxyXG4gIG9uQmx1cihibHVySGFuZGxlciwgZWxlbWVudCkge1xyXG4gICAgY29uc3QgZXZlbnRUeXBlID0gQkxVUl9FVkVOVF9UWVBFLFxyXG4gICAgICAgICAgaGFuZGxlciA9IGJsdXJIYW5kbGVyOyAgLy8vXHJcblxyXG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgZWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICBvZmZCbHVyKGJsdXJIYW5kbGVyLCBlbGVtZW50KSB7XHJcbiAgICBjb25zdCBldmVudFR5cGUgPSBCTFVSX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgICBoYW5kbGVyID0gYmx1ckhhbmRsZXI7ICAvLy9cclxuXHJcbiAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KTtcclxuICB9XHJcblxyXG4gIG9uRm9jdXMoYmx1ckhhbmRsZXIsIGVsZW1lbnQpIHtcclxuICAgIGNvbnN0IGV2ZW50VHlwZSA9IEZPQ1VTX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgICBoYW5kbGVyID0gYmx1ckhhbmRsZXI7ICAvLy9cclxuXHJcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KTtcclxuICB9XHJcblxyXG4gIG9mZkZvY3VzKGJsdXJIYW5kbGVyLCBlbGVtZW50KSB7XHJcbiAgICBjb25zdCBldmVudFR5cGUgPSBGT0NVU19FVkVOVF9UWVBFLFxyXG4gICAgICAgICAgaGFuZGxlciA9IGJsdXJIYW5kbGVyOyAgLy8vXHJcblxyXG4gICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgZWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICBvblNjcm9sbChzY3JvbGxIYW5kbGVyLCBlbGVtZW50KSB7XHJcbiAgICBjb25zdCBldmVudFR5cGUgPSBTQ1JPTExfRVZFTlRfVFlQRSxcclxuICAgICAgICAgIGhhbmRsZXIgPSBzY3JvbGxIYW5kbGVyOyAgLy8vXHJcblxyXG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgZWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICBvZmZTY3JvbGwoc2Nyb2xsSGFuZGxlciwgZWxlbWVudCkge1xyXG4gICAgY29uc3QgZXZlbnRUeXBlID0gU0NST0xMX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgICBoYW5kbGVyID0gc2Nyb2xsSGFuZGxlcjsgIC8vL1xyXG5cclxuICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpO1xyXG4gIH1cclxuXHJcbiAgb25DaGFuZ2UoY2hhbmdlSGFuZGxlciwgZWxlbWVudCkge1xyXG4gICAgY29uc3QgZXZlbnRUeXBlID0gQ0hBTkdFX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgICBoYW5kbGVyID0gY2hhbmdlSGFuZGxlcjsgIC8vL1xyXG5cclxuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpO1xyXG4gIH1cclxuXHJcbiAgb2ZmQ2hhbmdlKGNoYW5nZUhhbmRsZXIsIGVsZW1lbnQpIHtcclxuICAgIGNvbnN0IGV2ZW50VHlwZSA9IENIQU5HRV9FVkVOVF9UWVBFLFxyXG4gICAgICAgICAgaGFuZGxlciA9IGNoYW5nZUhhbmRsZXI7ICAvLy9cclxuXHJcbiAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KTtcclxuICB9XHJcblxyXG4gIG1vdXNlVXBIYW5kbGVyKGV2ZW50LCBlbGVtZW50KSB7XHJcbiAgICBjb25zdCBtb3VzZURvd24gPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLnNldE1vdXNlRG93bihtb3VzZURvd24pO1xyXG4gIH07XHJcblxyXG4gIG1vdXNlRG93bkhhbmRsZXIoZXZlbnQsIGVsZW1lbnQpIHtcclxuICAgIGNvbnN0IGZvcmNlZCA9IGZhbHNlLFxyXG4gICAgICAgICAgbW91c2VEb3duID0gdHJ1ZSxcclxuICAgICAgICAgIGV2ZW50VHlwZSA9IENIQU5HRV9FVkVOVF9UWVBFO1xyXG5cclxuICAgIHRoaXMuc2V0TW91c2VEb3duKG1vdXNlRG93bik7XHJcblxyXG4gICAgZGVmZXIoKCkgPT4gdGhpcy5pbnRlcm1lZGlhdGVIYW5kbGVyKGV2ZW50LCBlbGVtZW50LCBldmVudFR5cGUsIGZvcmNlZCkpO1xyXG4gIH1cclxuXHJcbiAgbW91c2VNb3ZlSGFuZGxlcihldmVudCwgZWxlbWVudCkge1xyXG4gICAgY29uc3QgZm9yY2VkID0gZmFsc2UsXHJcbiAgICAgICAgICBtb3VzZURvd24gPSB0aGlzLmlzTW91c2VEb3duKCksXHJcbiAgICAgICAgICBldmVudFRZcGUgPSBDSEFOR0VfRVZFTlRfVFlQRTtcclxuXHJcbiAgICBpZiAobW91c2VEb3duKSB7XHJcbiAgICAgIHRoaXMuaW50ZXJtZWRpYXRlSGFuZGxlcihldmVudCwgZWxlbWVudCwgZXZlbnRUWXBlLCBmb3JjZWQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAga2V5RG93bkhhbmRsZXIoZXZlbnQsIGVsZW1lbnQpIHtcclxuICAgIGNvbnN0IGZvcmNlZCA9IGZhbHNlLFxyXG4gICAgICAgICAgZXZlbnRUeXBlID0gQ0hBTkdFX0VWRU5UX1RZUEU7XHJcblxyXG4gICAgZGVmZXIoKCkgPT4gdGhpcy5pbnRlcm1lZGlhdGVIYW5kbGVyKGV2ZW50LCBlbGVtZW50LCBldmVudFR5cGUsIGZvcmNlZCkpO1xyXG4gIH1cclxuXHJcbiAgaW5wdXRIYW5kbGVyKGV2ZW50LCBlbGVtZW50KSB7XHJcbiAgICBjb25zdCBmb3JjZWQgPSBmYWxzZSxcclxuICAgICAgICAgIGV2ZW50VHlwZSA9IENIQU5HRV9FVkVOVF9UWVBFO1xyXG5cclxuICAgIHRoaXMuaW50ZXJtZWRpYXRlSGFuZGxlcihldmVudCwgZWxlbWVudCwgZXZlbnRUeXBlLCBmb3JjZWQpO1xyXG4gIH1cclxuXHJcbiAgc2Nyb2xsSGFuZGxlcihldmVudCwgZWxlbWVudCkge1xyXG4gICAgY29uc3QgZXZlbnRUeXBlID0gU0NST0xMX0VWRU5UX1RZUEU7XHJcblxyXG4gICAgdGhpcy5jYWxsSGFuZGxlcnMoZXZlbnRUeXBlLCBldmVudCwgZWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICBmb2N1c0hhbmRsZXIoZXZlbnQsIGVsZW1lbnQpIHtcclxuICAgIGNvbnN0IGZvcmNlZCA9IHRydWUsXHJcbiAgICAgICAgICBldmVudFR5cGUgPSBGT0NVU19FVkVOVF9UWVBFO1xyXG5cclxuICAgIGRlZmVyKCgpID0+IHRoaXMuaW50ZXJtZWRpYXRlSGFuZGxlcihldmVudCwgZWxlbWVudCwgZXZlbnRUeXBlLCBmb3JjZWQpKTtcclxuICB9XHJcblxyXG4gIGJsdXJIYW5kbGVyKGV2ZW50LCBlbGVtZW50KSB7XHJcbiAgICBjb25zdCBmb3JjZWQgPSB0cnVlLFxyXG4gICAgICAgICAgZXZlbnRUeXBlID0gQkxVUl9FVkVOVF9UWVBFO1xyXG5cclxuICAgIHRoaXMuaW50ZXJtZWRpYXRlSGFuZGxlcihldmVudCwgZWxlbWVudCwgZXZlbnRUeXBlLCBmb3JjZWQpO1xyXG4gIH1cclxuXHJcbiAgaW50ZXJtZWRpYXRlSGFuZGxlcihldmVudCwgZWxlbWVudCwgZXZlbnRUeXBlLCBmb3JjZWQpIHtcclxuICAgIGNvbnN0IGNoYW5nZWQgPSB0aGlzLmhhc0NoYW5nZWQoKTtcclxuXHJcbiAgICBpZiAoY2hhbmdlZCB8fCBmb3JjZWQpIHtcclxuICAgICAgdGhpcy5jYWxsSGFuZGxlcnMoZXZlbnRUeXBlLCBldmVudCwgZWxlbWVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY29udGVudCA9IHRoaXMuZ2V0Q29udGVudCgpLFxyXG4gICAgICAgICAgc2VsZWN0aW9uID0gdGhpcy5nZXRTZWxlY3Rpb24oKSxcclxuICAgICAgICAgIHByZXZpb3VzQ29udGVudCA9IGNvbnRlbnQsICAvLy9cclxuICAgICAgICAgIHByZXZpb3VzU2VsZWN0aW9uID0gc2VsZWN0aW9uOyAgLy8vXHJcblxyXG4gICAgdGhpcy5zZXRQcmV2aW91c0NvbnRlbnQocHJldmlvdXNDb250ZW50KTtcclxuICAgIHRoaXMuc2V0UHJldmlvdXNTZWxlY3Rpb24ocHJldmlvdXNTZWxlY3Rpb24pO1xyXG4gIH1cclxuXHJcbiAgY2FsbEhhbmRsZXJzKGV2ZW50VHlwZSwgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XHJcbiAgICBjb25zdCBldmVudExpc3RlbmVycyA9IHRoaXMuZmluZEV2ZW50TGlzdGVuZXJzKGV2ZW50VHlwZSk7XHJcblxyXG4gICAgZXZlbnRMaXN0ZW5lcnMuZm9yRWFjaCgoZXZlbnRMaXN0ZW5lcikgPT4ge1xyXG4gICAgICBjb25zdCB7IGhhbmRsZXIsIGVsZW1lbnQ6IGhhbmRsZXJFbGVtZW50IH0gPSBldmVudExpc3RlbmVyLFxyXG4gICAgICAgICAgICBlbGVtZW50ID0gdGhpczsgLy8vXHJcblxyXG4gICAgICBpZiAoKGhhbmRsZXIgIT09IHRoaXMuYmx1ckhhbmRsZXIpICYmIChoYW5kbGVyICE9PSB0aGlzLmZvY3VzSGFuZGxlcikgJiYgKGhhbmRsZXIgIT09IHRoaXMuc2Nyb2xsSGFuZGxlcikpIHtcclxuICAgICAgICBoYW5kbGVyLmNhbGwoaGFuZGxlckVsZW1lbnQsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cywgZWxlbWVudCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0UHJldmlvdXNDb250ZW50KCkge1xyXG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLmdldFN0YXRlKCksXHJcbiAgICAgICAgICB7IHByZXZpb3VzQ29udGVudCB9ID0gc3RhdGU7XHJcblxyXG4gICAgcmV0dXJuIHByZXZpb3VzQ29udGVudDtcclxuICB9XHJcblxyXG4gIGdldFByZXZpb3VzU2VsZWN0aW9uKCkge1xyXG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLmdldFN0YXRlKCksXHJcbiAgICAgICAgICB7IHByZXZpb3VzU2VsZWN0aW9uIH0gPSBzdGF0ZTtcclxuXHJcbiAgICByZXR1cm4gcHJldmlvdXNTZWxlY3Rpb247XHJcbiAgfVxyXG5cclxuICBzZXRNb3VzZURvd24obW91c2VEb3duKSB7XHJcbiAgICB0aGlzLnVwZGF0ZVN0YXRlKHtcclxuICAgICAgbW91c2VEb3duXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNldFByZXZpb3VzQ29udGVudChwcmV2aW91c0NvbnRlbnQpIHtcclxuICAgIHRoaXMudXBkYXRlU3RhdGUoe1xyXG4gICAgICBwcmV2aW91c0NvbnRlbnRcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2V0UHJldmlvdXNTZWxlY3Rpb24ocHJldmlvdXNTZWxlY3Rpb24pIHtcclxuICAgIHRoaXMudXBkYXRlU3RhdGUoe1xyXG4gICAgICBwcmV2aW91c1NlbGVjdGlvblxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXRJbml0aWFsU3RhdGUoKSB7XHJcbiAgICBjb25zdCBtb3VzZURvd24gPSBmYWxzZSxcclxuICAgICAgICAgIHByZXZpb3VzQ29udGVudCA9IG51bGwsXHJcbiAgICAgICAgICBwcmV2aW91c1NlbGVjdGlvbiA9IG51bGw7XHJcblxyXG4gICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgIG1vdXNlRG93bixcclxuICAgICAgcHJldmlvdXNDb250ZW50LFxyXG4gICAgICBwcmV2aW91c1NlbGVjdGlvblxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBkaWRNb3VudCgpIHtcclxuICAgIGNvbnN0IHsgYWN0aXZlLCBvbkNoYW5nZSwgb25TY3JvbGwsIG9uRm9jdXMsIG9uQmx1ciB9ID0gdGhpcy5wcm9wZXJ0aWVzLFxyXG4gICAgICAgICAgICBjaGFuZ2VIYW5kbGVyID0gb25DaGFuZ2UsIC8vL1xyXG4gICAgICAgICAgICBzY3JvbGxIYW5kbGVyID0gb25TY3JvbGwsIC8vL1xyXG4gICAgICAgICAgICBmb2N1c0hhbmRsZXIgPSBvbkZvY3VzLCAvLy9cclxuICAgICAgICAgICAgYmx1ckhhbmRsZXIgPSBvbkJsdXI7IC8vL1xyXG5cclxuICAgIGNoYW5nZUhhbmRsZXIgJiYgdGhpcy5vbkNoYW5nZShjaGFuZ2VIYW5kbGVyLCB0aGlzKTtcclxuICAgIHNjcm9sbEhhbmRsZXIgJiYgdGhpcy5vblNjcm9sbChzY3JvbGxIYW5kbGVyLCB0aGlzKTtcclxuICAgIGZvY3VzSGFuZGxlciAmJiB0aGlzLm9uRm9jdXMoZm9jdXNIYW5kbGVyLCB0aGlzKTtcclxuICAgIGJsdXJIYW5kbGVyICYmIHRoaXMub25CbHVyKGJsdXJIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICBpZiAoYWN0aXZlKSB7XHJcbiAgICAgIHRoaXMuYWN0aXZhdGUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHdpbGxVbm1vdW50KCkge1xyXG4gICAgY29uc3QgeyBvbkNoYW5nZSwgb25TY3JvbGwsIG9uRm9jdXMsIG9uQmx1ciB9ID0gdGhpcy5wcm9wZXJ0aWVzLFxyXG4gICAgICAgICAgY2hhbmdlSGFuZGxlciA9IG9uQ2hhbmdlLCAvLy9cclxuICAgICAgICAgIHNjcm9sbEhhbmRsZXIgPSBvblNjcm9sbCwgLy8vXHJcbiAgICAgICAgICBmb2N1c0hhbmRsZXIgPSBvbkZvY3VzLCAvLy9cclxuICAgICAgICAgIGJsdXJIYW5kbGVyID0gb25CbHVyOyAvLy9cclxuXHJcbiAgICBjaGFuZ2VIYW5kbGVyICYmIHRoaXMub2ZmQ2hhbmdlKGNoYW5nZUhhbmRsZXIsIHRoaXMpO1xyXG4gICAgc2Nyb2xsSGFuZGxlciAmJiB0aGlzLm9mZlNjcm9sbChzY3JvbGxIYW5kbGVyLCB0aGlzKTtcclxuICAgIGZvY3VzSGFuZGxlciAmJiB0aGlzLm9mZkZvY3VzKGZvY3VzSGFuZGxlciwgdGhpcyk7XHJcbiAgICBibHVySGFuZGxlciAmJiB0aGlzLm9mZkJsdXIoYmx1ckhhbmRsZXIsIHRoaXMpO1xyXG4gIH1cclxuXHJcbiAgaW5pdGlhbGlzZSgpIHtcclxuICAgIHRoaXMuc2V0SW5pdGlhbFN0YXRlKCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgdGFnTmFtZSA9IFwidGV4dGFyZWFcIjtcclxuXHJcbiAgc3RhdGljIGlnbm9yZWRQcm9wZXJ0aWVzID0gW1xyXG4gICAgXCJvbkNoYW5nZVwiLFxyXG4gICAgXCJvblNjcm9sbFwiLFxyXG4gICAgXCJvbkZvY3VzXCIsXHJcbiAgICBcIm9uQmx1clwiLFxyXG4gICAgXCJhY3RpdmVcIlxyXG4gIF07XHJcblxyXG4gIHN0YXRpYyBkZWZhdWx0UHJvcGVydGllcyA9IHtcclxuICAgIGNsYXNzTmFtZTogXCJyaWNoXCJcclxuICB9O1xyXG59XHJcbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIFNlbGVjdGlvbiB9IGZyb20gXCIuL3NlbGVjdGlvblwiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIFJpY2hUZXh0YXJlYSB9IGZyb20gXCIuL3JpY2hUZXh0YXJlYVwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIFNlbGVjdGlvbiB9IGZyb20gXCIuL3NlbGVjdGlvblwiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIFJpY2hUZXh0YXJlYSB9IGZyb20gXCIuL3JpY2hUZXh0YXJlYVwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgZ3V0dGVySGVpZ2h0ID0gXCIxMDAwMDBweFwiO1xuZXhwb3J0IGNvbnN0IHNjcm9sbGJhclRoaWNrbmVzcyA9IFwiMTJweFwiO1xuZXhwb3J0IGNvbnN0IHNjcm9sbGJhclRodW1iQm9yZGVyUmFkaXVzID0gXCI4cHhcIjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IHNwcmluZ1dvb2QgPSBcIiNmOGY2ZjFcIjtcbmV4cG9ydCBjb25zdCBib25qb3VyID0gXCIjZTVlMGUxXCI7XG5leHBvcnQgY29uc3QgZ2FpbnNib3JvdWdoID0gXCIjZDVkOGQyXCI7XG5leHBvcnQgY29uc3Qgc3RhcmR1c3QgPSBcIiM5ZjlmOWNcIjtcbmV4cG9ydCBjb25zdCBodXJyaWNhbmUgPSBcIiM5MDg5ODlcIjtcbmV4cG9ydCBjb25zdCBzdG9ybUR1c3QgPSBcIiM2NDY0NjNcIjtcbmV4cG9ydCBjb25zdCBlbXBlcm9yID0gXCIjNTE1MTUwXCI7XG5leHBvcnQgY29uc3QgdHVhdGFyYSA9IFwiIzM2MzUzNFwiO1xuZXhwb3J0IGNvbnN0IHdvb2RzbW9rZSA9IFwiIzBjMGQwZlwiO1xuXG5leHBvcnQgY29uc3QgY2l0cm9uID0gXCIjODZiOTIzXCI7XG5leHBvcnQgY29uc3Qgc3VzaGkgPSBcIiM3ZmE4MmZcIjtcbmV4cG9ydCBjb25zdCBvbGl2ZURyYWIgPSBcIiM2Mzg4MjlcIjtcbmV4cG9ydCBjb25zdCByaWZsZUdyZWVuID0gXCIjNDE0ODMzXCI7XG5leHBvcnQgY29uc3QgbG9nQ2FiaW4gPSBcIiMyNDMwMWRcIjtcbmV4cG9ydCBjb25zdCBibGFja09saXZlID0gXCIjMWMyNDEyXCI7XG5leHBvcnQgY29uc3QgaHVudGVyR3JlZW4gPSBcIiMxNjFkMTBcIjtcblxuZXhwb3J0IGNvbnN0IGNhZGV0Qmx1ZSA9IFwiIzVmOWVhMFwiO1xuZXhwb3J0IGNvbnN0IGhhdmVsb2NrQmx1ZSA9IFwiIzVCOERlMVwiO1xuXG5leHBvcnQgY29uc3QgcG9tZWdyYW5hdGUgPSBcIiNmNTI5MjlcIjtcbmV4cG9ydCBjb25zdCByYXp6bWF0YXp6ID0gXCIjZTMyNTZiXCI7XG5leHBvcnQgY29uc3QgZmxhbWluZ28gPSBcIiNmMzRiNDRcIjtcbmV4cG9ydCBjb25zdCB0YWhpdGkgPSBcIiNGNThBMEFcIjtcbmV4cG9ydCBjb25zdCBlcXVhdG9yID0gXCIjZTRhQzVlXCI7XG5cbmV4cG9ydCBjb25zdCBwb3J0aWNhID0gXCIjZjdlNzVmXCI7XG5leHBvcnQgY29uc3QgY2VsZXJ5ID0gXCIjYmNiODUyXCI7XG5leHBvcnQgY29uc3Qgc3ljYW1vcmUgPSBcIiM5MDhkMzlcIjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYm9uam91ciwgaHVycmljYW5lLCBodW50ZXJHcmVlbiwgaGF2ZWxvY2tCbHVlLCBzdG9ybUR1c3QgfSBmcm9tIFwiLi4vY29sb3Vyc1wiO1xuXG5leHBvcnQgY29uc3QgY29sb3VyID0gc3Rvcm1EdXN0O1xuXG5leHBvcnQgY29uc3QgY2FyZXRDb2xvdXIgPSBib25qb3VyO1xuXG5leHBvcnQgY29uc3QgYm9yZGVyQ29sb3VyID0gc3Rvcm1EdXN0O1xuXG5leHBvcnQgY29uc3Qgc2VsZWN0aW9uQ29sb3VyID0gYm9uam91cjtcblxuZXhwb3J0IGNvbnN0IGJhY2tncm91bmRDb2xvdXIgPSBodW50ZXJHcmVlbjtcblxuZXhwb3J0IGNvbnN0IHNlbGVjdGlvbkJhY2tncm91bmRDb2xvdXIgPSBoYXZlbG9ja0JsdWU7XG5cbmV4cG9ydCBjb25zdCBzY3JvbGxiYXJUaHVtYkJveFNoYWRvd0NvbG91ciA9IHN0b3JtRHVzdDtcblxuZXhwb3J0IGNvbnN0IHNjcm9sbGJhclRodW1iQmFja2dyb3VuZENvbG91ciA9IGh1cnJpY2FuZTtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBjb2xvdXIsXG4gIGNhcmV0Q29sb3VyLFxuICBib3JkZXJDb2xvdXIsXG4gIHNlbGVjdGlvbkNvbG91cixcbiAgYmFja2dyb3VuZENvbG91cixcbiAgc2VsZWN0aW9uQmFja2dyb3VuZENvbG91cixcbiAgc2Nyb2xsYmFyVGh1bWJCb3hTaGFkb3dDb2xvdXIsXG4gIHNjcm9sbGJhclRodW1iQmFja2dyb3VuZENvbG91clxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHdpdGhTdHlsZSBmcm9tIFwiZWFzeS13aXRoLXN0eWxlXCI7ICAvLy9cblxuaW1wb3J0IHsgUmljaFRleHRhcmVhIH0gZnJvbSBcImVhc3ktcmljaHRleHRhcmVhXCI7XG5pbXBvcnQgeyBzY3JvbGxiYXJUaGlja25lc3MsIHNjcm9sbGJhclRodW1iQm9yZGVyUmFkaXVzIH0gZnJvbSBcIi4vc3R5bGVzXCI7XG5pbXBvcnQgeyBzZWxlY3Rpb25Db2xvdXIsIGJhY2tncm91bmRDb2xvdXIsIHNlbGVjdGlvbkJhY2tncm91bmRDb2xvdXIsIHNjcm9sbGJhclRodW1iQm94U2hhZG93Q29sb3VyLCBzY3JvbGxiYXJUaHVtYkJhY2tncm91bmRDb2xvdXIgIH0gZnJvbSBcIi4vc2NoZW1lL2NvbG91clwiO1xuXG5leHBvcnQgZGVmYXVsdCB3aXRoU3R5bGUoY2xhc3MgZXh0ZW5kcyBSaWNoVGV4dGFyZWEge1xuICBwb3NpdGlvbih0b3AsIGxlZnQpIHtcbiAgICB0b3AgPSBgJHt0b3B9cHhgO1xuICAgIGxlZnQgPSBgJHtsZWZ0fXB4YDtcblxuICAgIGNvbnN0IGNzcyA9IHtcbiAgICAgIHRvcCxcbiAgICAgIGxlZnRcbiAgICB9O1xuXG4gICAgdGhpcy5jc3MoY3NzKTtcbiAgfVxuXG4gIHNldEJvdW5kcyhib3VuZHMpIHtcbiAgICBjb25zdCB0b3AgPSBib3VuZHMuZ2V0VG9wKCksXG4gICAgICAgICAgbGVmdCA9IGJvdW5kcy5nZXRMZWZ0KCksXG4gICAgICAgICAgd2lkdGggPSBib3VuZHMuZ2V0V2lkdGgoKSxcbiAgICAgICAgICBoZWlnaHQgPSBib3VuZHMuZ2V0SGVpZ2h0KCk7XG5cbiAgICB0aGlzLnBvc2l0aW9uKHRvcCwgbGVmdCk7XG4gICAgdGhpcy5zZXRXaWR0aCh3aWR0aCk7XG4gICAgdGhpcy5zZXRIZWlnaHQoaGVpZ2h0KTtcbiAgfVxuXG4gIGRpZE1vdW50KCkge1xuICAgIGNvbnN0IHsgZmFuY3lTY3JvbGxiYXJzLCBoaWRkZW5TY3JvbGxiYXJzIH0gPSB0aGlzLnByb3BlcnRpZXM7XG5cbiAgICBpZiAoZmFuY3lTY3JvbGxiYXJzKSB7XG4gICAgICB0aGlzLmFkZENsYXNzKFwiZmFuY3ktc2Nyb2xsYmFyc1wiKTtcbiAgICB9XG5cbiAgICBpZiAoaGlkZGVuU2Nyb2xsYmFycykge1xuICAgICAgdGhpcy5hZGRDbGFzcyhcImhpZGRlbi1zY3JvbGxiYXJzXCIpO1xuICAgIH1cblxuICAgIHN1cGVyLmRpZE1vdW50KCk7XG4gIH1cblxuICB3aWxsVW5tb3VudCgpIHtcbiAgICBjb25zdCB7IGZhbmN5U2Nyb2xsYmFycywgaGlkZGVuU2Nyb2xsYmFycyB9ID0gdGhpcy5wcm9wZXJ0aWVzO1xuXG4gICAgaWYgKGZhbmN5U2Nyb2xsYmFycykge1xuICAgICAgdGhpcy5yZW1vdmVDbGFzcyhcImZhbmN5LXNjcm9sbGJhcnNcIik7XG4gICAgfVxuXG4gICAgaWYgKGhpZGRlblNjcm9sbGJhcnMpIHtcbiAgICAgIHRoaXMucmVtb3ZlQ2xhc3MoXCJoaWRkZW4tc2Nyb2xsYmFyc1wiKTtcbiAgICB9XG5cbiAgICBzdXBlci53aWxsVW5tb3VudCgpO1xuICB9XG5cbiAgcGFyZW50Q29udGV4dCgpIHtcbiAgICBjb25zdCBnZXRDb250ZW50ID0gdGhpcy5nZXRDb250ZW50LmJpbmQodGhpcyksICAvLy9cbiAgICAgICAgICBzZXRSaWNoVGV4dGFyZWFCb3VuZHMgPSB0aGlzLnNldEJvdW5kcy5iaW5kKHRoaXMpLCAgLy8vXG4gICAgICAgICAgZ2V0UmljaFRleHRhcmVhQ29udGVudCA9IHRoaXMuZ2V0Q29udGVudC5iaW5kKHRoaXMpLCAgLy8vXG4gICAgICAgICAgc2V0UmljaFRleHRhcmVhQ29udGVudCA9IHRoaXMuc2V0Q29udGVudC5iaW5kKHRoaXMpLCAgLy8vXG4gICAgICAgICAgc2V0UmljaFRleHRhcmVhUmVhZE9ubHkgPSB0aGlzLnNldFJlYWRPbmx5LmJpbmQodGhpcyk7ICAvLy9cblxuICAgIHJldHVybiAoe1xuICAgICAgZ2V0Q29udGVudCxcbiAgICAgIHNldFJpY2hUZXh0YXJlYUJvdW5kcyxcbiAgICAgIGdldFJpY2hUZXh0YXJlYUNvbnRlbnQsXG4gICAgICBzZXRSaWNoVGV4dGFyZWFDb250ZW50LFxuICAgICAgc2V0UmljaFRleHRhcmVhUmVhZE9ubHlcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcGVydGllcyA9IHtcbiAgICBzcGVsbENoZWNrOiBcImZhbHNlXCJcbiAgfTtcblxuICBzdGF0aWMgaWdub3JlZFByb3BlcnRpZXMgPSBbXG4gICAgXCJmYW5jeVNjcm9sbGJhcnNcIlxuICBdO1xufSlgXG5cbiAgY29sb3I6IHRyYW5zcGFyZW50O1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBjdXJzb3I6IGF1dG87XG4gIHJlc2l6ZTogbm9uZTtcbiAgb3V0bGluZTogbm9uZTtcbiAgei1pbmRleDogMTtcbiAgdGFiLXNpemU6IDI7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgb3ZlcmZsb3c6IHNjcm9sbDtcbiAgYm9yZGVyLXRvcDogbm9uZTtcbiAgd2hpdGUtc3BhY2U6IHByZTtcbiAgb3ZlcmZsb3ctd3JhcDogbm9ybWFsO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgXG4gIDo6c2VsZWN0aW9uIHtcbiAgICBjb2xvcjogJHtzZWxlY3Rpb25Db2xvdXJ9O1xuICAgIGJhY2tncm91bmQtY29sb3I6ICR7c2VsZWN0aW9uQmFja2dyb3VuZENvbG91cn07XG4gIH1cbiAgXG4gIC5oaWRkZW4tc2Nyb2xsYmFycyB7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgfVxuICBcbiAgLmZhbmN5LXNjcm9sbGJhcnM6Oi13ZWJraXQtc2Nyb2xsYmFyIHtcbiAgICB3aWR0aDogJHtzY3JvbGxiYXJUaGlja25lc3N9O1xuICAgIGhlaWdodDogJHtzY3JvbGxiYXJUaGlja25lc3N9O1xuICB9XG5cbiAgLmZhbmN5LXNjcm9sbGJhcnM6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG5cbiAgLmZhbmN5LXNjcm9sbGJhcnM6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHtcbiAgICBib3JkZXI6IDJweCBzb2xpZCAke2JhY2tncm91bmRDb2xvdXJ9O1xuICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMCAxcHggJHtzY3JvbGxiYXJUaHVtYkJveFNoYWRvd0NvbG91cn07XG4gICAgYm9yZGVyLXJhZGl1czogJHtzY3JvbGxiYXJUaHVtYkJvcmRlclJhZGl1c307XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHtzY3JvbGxiYXJUaHVtYkJhY2tncm91bmRDb2xvdXJ9O1xuICB9XG5cbiAgLmZhbmN5LXNjcm9sbGJhcnM6Oi13ZWJraXQtc2Nyb2xsYmFyLWNvcm5lciB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxuXG4gIGNhcmV0LWNvbG9yOiBpbmhlcml0O1xuICBcbiAgZm9udC1zaXplOiBpbmhlcml0O1xuICBsaW5lLWhlaWdodDogaW5oZXJpdDtcbiAgZm9udC1mYW1pbHk6IGluaGVyaXQ7XG4gIHRleHQtcmVuZGVyaW5nOiBpbmhlcml0O1xuICBmb250LWZlYXR1cmUtc2V0dGluZ3M6IGluaGVyaXQ7XG5cbmA7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5pbXBvcnQgd2l0aFN0eWxlIGZyb20gXCJlYXN5LXdpdGgtc3R5bGVcIjsgIC8vL1xyXG5cclxuaW1wb3J0IHsgRWxlbWVudCB9IGZyb20gXCJlYXN5XCI7XHJcblxyXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcclxuXHJcbmNsYXNzIExpbmVOdW1iZXJzIGV4dGVuZHMgRWxlbWVudCB7XHJcbiAgdXBkYXRlKGxpbmVDb3VudCkge1xyXG4gICAgbGV0IGh0bWwgPSBFTVBUWV9TVFJJTkc7XHJcblxyXG4gICAgZm9yIChsZXQgbGluZU51bWJlciA9IDE7IGxpbmVOdW1iZXIgPD0gbGluZUNvdW50OyBsaW5lTnVtYmVyKyspIHtcclxuICAgICAgaHRtbCA9IGAke2h0bWx9JHtsaW5lTnVtYmVyfTxici8+YDtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmh0bWwoaHRtbCk7XHJcbiAgfVxyXG5cclxuICBwYXJlbnRDb250ZXh0KCkge1xyXG5cdCAgY29uc3QgdXBkYXRlTGluZU51bWJlcnMgPSB0aGlzLnVwZGF0ZS5iaW5kKHRoaXMpOyAgLy8vXHJcblxyXG4gICAgcmV0dXJuICh7XHJcbiAgICAgIHVwZGF0ZUxpbmVOdW1iZXJzXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyB0YWdOYW1lID0gXCJkaXZcIjtcclxuXHJcbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xyXG4gICAgY2xhc3NOYW1lOiBcImxpbmUtbnVtYmVyc1wiXHJcbiAgfTtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgd2l0aFN0eWxlKExpbmVOdW1iZXJzKWBcclxuXHJcbiAgZmxvYXQ6IGxlZnQ7XHJcbiAgbWFyZ2luOiAwIDZweCAwIDZweDtcclxuICBcclxuICBjb2xvcjogaW5oZXJpdDtcclxuXHJcbiAgZm9udC1zaXplOiBpbmhlcml0O1xyXG4gIGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xyXG4gIGZvbnQtZmFtaWx5OiAnRGVqYVZ1IFNhbnMgTW9ubycsIE1lbmxvLCAnTHVjaWRhIENvbnNvbGUnLCBNb25hY28sIG1vbm9zcGFjZTtcclxuICB0ZXh0LXJlbmRlcmluZzogaW5oZXJpdDtcclxuICBmb250LWZlYXR1cmUtc2V0dGluZ3M6IGluaGVyaXQ7XHJcblxyXG5gO1xyXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBsaW5lQ291bnRGcm9tVG9rZW5zKHRva2Vucykge1xuICBsZXQgbGluZUNvdW50ID0gMTsgIC8vL1xuXG4gIHRva2Vucy5mb3JFYWNoKCh0b2tlbikgPT4ge1xuICAgIGNvbnN0IHRva2VuRW5kT2ZMaW5lVG9rZW4gPSB0b2tlbi5pc0VuZE9mTGluZVRva2VuKCk7XG5cbiAgICBpZiAodG9rZW5FbmRPZkxpbmVUb2tlbikge1xuICAgICAgbGluZUNvdW50Kys7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gbGluZUNvdW50O1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xyXG5cclxuaW1wb3J0IHdpdGhTdHlsZSBmcm9tIFwiZWFzeS13aXRoLXN0eWxlXCI7ICAvLy9cclxuXHJcbmltcG9ydCB7IFJlYWN0LCBFbGVtZW50IH0gZnJvbSBcImVhc3lcIjtcclxuXHJcbmltcG9ydCBMaW5lTnVtYmVycyBmcm9tIFwiLi9saW5lTnVtYmVyc1wiO1xyXG5cclxuaW1wb3J0IHsgZ3V0dGVySGVpZ2h0IH0gZnJvbSBcIi4vc3R5bGVzXCI7XHJcbmltcG9ydCB7IGxpbmVDb3VudEZyb21Ub2tlbnMgfSBmcm9tIFwiLi91dGlsaXRpZXMvdG9rZW5zXCI7XHJcblxyXG5jbGFzcyBHdXR0ZXIgZXh0ZW5kcyBFbGVtZW50IHtcclxuICB1cGRhdGUodG9rZW5zKSB7XHJcbiAgICBjb25zdCBsaW5lQ291bnQgPSBsaW5lQ291bnRGcm9tVG9rZW5zKHRva2Vucyk7XHJcblxyXG4gICAgdGhpcy5zZXRMaW5lQ291bnQobGluZUNvdW50KTtcclxuXHJcbiAgICB0aGlzLnVwZGF0ZUxpbmVOdW1iZXJzKGxpbmVDb3VudCk7XHJcbiAgfVxyXG5cclxuICBzY3JvbGwoc2Nyb2xsVG9wLCBzY3JvbGxMZWZ0KSB7XHJcbiAgICB0aGlzLnNldFNjcm9sbFRvcChzY3JvbGxUb3ApO1xyXG5cclxuICAgIHRoaXMucG9zaXRpb24oKTtcclxuICB9XHJcblxyXG4gIHBvc2l0aW9uKCkge1xyXG4gICAgY29uc3Qgc2Nyb2xsVG9wID0gdGhpcy5nZXRTY3JvbGxUb3AoKTtcclxuXHJcbiAgICBjb25zdCB0b3AgPSBgJHstc2Nyb2xsVG9wfXB4YCxcclxuICAgICAgICAgIGNzcyA9IHtcclxuICAgICAgICAgICAgdG9wXHJcbiAgICAgICAgICB9O1xyXG5cclxuICAgIHRoaXMuY3NzKGNzcyk7XHJcbiAgfVxyXG5cclxuICBnZXRMaW5lQ291bnQoKSB7XHJcbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuZ2V0U3RhdGUoKSxcclxuICAgICAgICAgIHsgbGluZUNvdW50IH0gPSBzdGF0ZTtcclxuXHJcbiAgICByZXR1cm4gbGluZUNvdW50O1xyXG4gIH1cclxuXHJcbiAgZ2V0U2Nyb2xsVG9wKCkge1xyXG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLmdldFN0YXRlKCksXHJcbiAgICAgICAgICB7IHNjcm9sbFRvcCB9ID0gc3RhdGU7XHJcblxyXG4gICAgcmV0dXJuIHNjcm9sbFRvcDtcclxuICB9XHJcblxyXG4gIHNldExpbmVDb3VudChsaW5lQ291bnQpIHtcclxuICAgIHRoaXMudXBkYXRlU3RhdGUoe1xyXG4gICAgICBsaW5lQ291bnRcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2V0U2Nyb2xsVG9wKHNjcm9sbFRvcCkge1xyXG4gICAgdGhpcy51cGRhdGVTdGF0ZSh7XHJcbiAgICAgIHNjcm9sbFRvcFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBjaGlsZEVsZW1lbnRzKCkge1xyXG4gICAgcmV0dXJuIChbXHJcblxyXG4gICAgICA8TGluZU51bWJlcnMgLz4sXHJcblxyXG4gICAgXSk7XHJcbiAgfVxyXG5cclxuICBwYXJlbnRDb250ZXh0KCkge1xyXG5cdCAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxyXG4gICAgICAgICAgZ2V0TGluZUNvdW50ID0gdGhpcy5nZXRMaW5lQ291bnQuYmluZCh0aGlzKSxcclxuICAgICAgICAgIGdldEd1dHRlcldpZHRoID0gdGhpcy5nZXRXaWR0aC5iaW5kKHRoaXMpLCAgLy8vXHJcblx0XHRcdFx0ICBwb3NpdGlvbkd1dHRlciA9IHRoaXMucG9zaXRpb24uYmluZCh0aGlzKSwgIC8vL1xyXG5cdFx0XHRcdCAgdXBkYXRlR3V0dGVyID0gdGhpcy51cGRhdGUuYmluZCh0aGlzKSwgIC8vL1xyXG5cdFx0XHRcdCAgc2Nyb2xsR3V0dGVyID0gdGhpcy5zY3JvbGwuYmluZCh0aGlzKSwgIC8vL1xyXG4gICAgICAgICAgcGFyZW50Q29udGV4dCA9IE9iamVjdC5hc3NpZ24oe30sIGNvbnRleHQsIHtcclxuICAgICAgICAgICAgZ2V0TGluZUNvdW50LFxyXG4gICAgICAgICAgICBnZXRHdXR0ZXJXaWR0aCxcclxuICAgICAgICAgICAgcG9zaXRpb25HdXR0ZXIsXHJcbiAgICAgICAgICAgIHVwZGF0ZUd1dHRlcixcclxuICAgICAgICAgICAgc2Nyb2xsR3V0dGVyXHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gcGFyZW50Q29udGV4dDtcclxuICB9XHJcbiAgXHJcbiAgc2V0SW5pdGlhbFN0YXRlKCkge1xyXG4gICAgY29uc3Qgc2Nyb2xsVG9wID0gMCxcclxuICAgICAgICAgIGxpbmVDb3VudCA9IG51bGw7XHJcblxyXG4gICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgIHNjcm9sbFRvcCxcclxuICAgICAgbGluZUNvdW50XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGluaXRpYWxpc2UoKSB7XHJcbiAgICB0aGlzLmFzc2lnbkNvbnRleHQoKTtcclxuXHJcbiAgICB0aGlzLnNldEluaXRpYWxTdGF0ZSgpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIHRhZ05hbWUgPSBcImRpdlwiO1xyXG5cclxuICBzdGF0aWMgZGVmYXVsdFByb3BlcnRpZXMgPSB7XHJcbiAgICBjbGFzc05hbWU6IFwiZ3V0dGVyXCJcclxuICB9O1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCB3aXRoU3R5bGUoR3V0dGVyKWBcclxuXHJcbiAgaGVpZ2h0OiAke2d1dHRlckhlaWdodH07XHJcbiAgei1pbmRleDogMjtcclxuICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgdGV4dC1hbGlnbjogcmlnaHQ7XHJcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XHJcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XHJcbiAgYm9yZGVyLXJpZ2h0LXN0eWxlOiBkb3R0ZWQ7XHJcbiAgYm9yZGVyLXJpZ2h0LXdpZHRoOiAxcHg7XHJcblxyXG4gIGNvbG9yOiBpbmhlcml0O1xyXG4gIGJvcmRlci1jb2xvcjogaW5oZXJpdDtcclxuICBiYWNrZ3JvdW5kLWNvbG9yOiBpbmhlcml0O1xyXG5cclxuICBmb250LXNpemU6IGluaGVyaXQ7XHJcbiAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7XHJcbiAgZm9udC1mYW1pbHk6IGluaGVyaXQ7XHJcbiAgdGV4dC1yZW5kZXJpbmc6IGluaGVyaXQ7XHJcbiAgZm9udC1mZWF0dXJlLXNldHRpbmdzOiBpbmhlcml0O1xyXG5cclxuYDtcclxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBFbGVtZW50IH0gZnJvbSBcImVhc3lcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2Nyb2xsYWJsZUVsZW1lbnQgZXh0ZW5kcyBFbGVtZW50IHtcbiAgc2Nyb2xsKHNjcm9sbFRvcCwgc2Nyb2xsTGVmdCkge1xuICAgIHRoaXMuc2V0U2Nyb2xsVG9wKHNjcm9sbFRvcCk7XG4gICAgdGhpcy5zZXRTY3JvbGxMZWZ0KHNjcm9sbExlZnQpO1xuXG4gICAgY29uc3QgdG9wID0gdGhpcy5nZXRUb3AoKSxcbiAgICAgICAgICBsZWZ0ID0gdGhpcy5nZXRMZWZ0KCk7XG5cbiAgICB0aGlzLnBvc2l0aW9uKHRvcCwgbGVmdCk7XG4gIH1cblxuICByZXNpemUod2lkdGgsIGhlaWdodCkge1xuICAgIGNvbnN0IHsgc2Nyb2xsYmFyVGhpY2tuZXNzIH0gPSB0aGlzLnByb3BlcnRpZXM7XG5cbiAgICB3aWR0aCA9IHdpZHRoIC0gc2Nyb2xsYmFyVGhpY2tuZXNzO1xuICAgIGhlaWdodCA9IGhlaWdodCAtIHNjcm9sbGJhclRoaWNrbmVzcztcblxuICAgIHRoaXMuc2V0V2lkdGgod2lkdGgpO1xuICAgIHRoaXMuc2V0SGVpZ2h0KGhlaWdodCk7XG5cbiAgICBjb25zdCB0b3AgPSB0aGlzLmdldFRvcCgpLFxuICAgICAgICAgIGxlZnQgPSB0aGlzLmdldExlZnQoKTtcblxuICAgIHRoaXMucG9zaXRpb24odG9wLCBsZWZ0KTtcbiAgfVxuXG4gIHBvc2l0aW9uKHRvcCwgbGVmdCkge1xuICAgIHRoaXMuc2V0VG9wKHRvcCk7XG4gICAgdGhpcy5zZXRMZWZ0KGxlZnQpO1xuXG4gICAgbGV0IHdpZHRoID0gdGhpcy5nZXRXaWR0aCgpLFxuICAgICAgICBoZWlnaHQgPSB0aGlzLmdldEhlaWdodCgpO1xuXG4gICAgY29uc3Qgc2Nyb2xsVG9wID0gdGhpcy5nZXRTY3JvbGxUb3AoKSxcbiAgICAgICAgICBzY3JvbGxMZWZ0ID0gdGhpcy5nZXRTY3JvbGxMZWZ0KCk7XG5cbiAgICB0b3AgPSB0b3AgLSBzY3JvbGxUb3A7XG4gICAgbGVmdCA9IGxlZnQgLSBzY3JvbGxMZWZ0O1xuICAgIHdpZHRoID0gd2lkdGggKyBzY3JvbGxMZWZ0O1xuICAgIGhlaWdodCA9IGhlaWdodCArIHNjcm9sbFRvcDtcblxuICAgIHRvcCA9IGAke3RvcH1weGA7XG4gICAgbGVmdCA9IGAke2xlZnR9cHhgO1xuICAgIHdpZHRoID0gYCR7d2lkdGh9cHhgO1xuICAgIGhlaWdodCA9IGAke2hlaWdodH1weGA7XG5cbiAgICBjb25zdCBjc3MgPSB7XG4gICAgICB0b3AsXG4gICAgICBsZWZ0LFxuICAgICAgd2lkdGgsXG4gICAgICBoZWlnaHRcbiAgICB9O1xuXG4gICAgdGhpcy5jc3MoY3NzKTtcbiAgfVxuXG4gIGdldFRvcCgpIHtcbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuZ2V0U3RhdGUoKSxcbiAgICAgICAgICB7IHRvcCB9ID0gc3RhdGU7XG5cbiAgICByZXR1cm4gdG9wO1xuICB9XG5cbiAgZ2V0TGVmdCgpIHtcbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuZ2V0U3RhdGUoKSxcbiAgICAgICAgICB7IGxlZnQgfSA9IHN0YXRlO1xuXG4gICAgcmV0dXJuIGxlZnQ7XG4gIH1cblxuICBnZXRXaWR0aCgpIHtcbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuZ2V0U3RhdGUoKSxcbiAgICAgICAgICB7IHdpZHRoIH0gPSBzdGF0ZTtcblxuICAgIHJldHVybiB3aWR0aDtcbiAgfVxuXG4gIGdldEhlaWdodCgpIHtcbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuZ2V0U3RhdGUoKSxcbiAgICAgICAgICB7IGhlaWdodCB9ID0gc3RhdGU7XG5cbiAgICByZXR1cm4gaGVpZ2h0O1xuICB9XG5cbiAgZ2V0U2Nyb2xsVG9wKCkge1xuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5nZXRTdGF0ZSgpLFxuICAgICAgICAgIHsgc2Nyb2xsVG9wIH0gPSBzdGF0ZTtcblxuICAgIHJldHVybiBzY3JvbGxUb3A7XG4gIH1cblxuICBnZXRTY3JvbGxMZWZ0KCkge1xuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5nZXRTdGF0ZSgpLFxuICAgICAgICAgIHsgc2Nyb2xsTGVmdCB9ID0gc3RhdGU7XG5cbiAgICByZXR1cm4gc2Nyb2xsTGVmdDtcbiAgfVxuXG4gIHNldFRvcCh0b3ApIHtcbiAgICB0aGlzLnVwZGF0ZVN0YXRlKHtcbiAgICAgIHRvcFxuICAgIH0pO1xuICB9XG5cbiAgc2V0TGVmdChsZWZ0KSB7XG4gICAgdGhpcy51cGRhdGVTdGF0ZSh7XG4gICAgICBsZWZ0XG4gICAgfSk7XG4gIH1cblxuICBzZXRXaWR0aCh3aWR0aCkge1xuICAgIHRoaXMudXBkYXRlU3RhdGUoe1xuICAgICAgd2lkdGhcbiAgICB9KTtcbiAgfVxuXG4gIHNldEhlaWdodChoZWlnaHQpIHtcbiAgICB0aGlzLnVwZGF0ZVN0YXRlKHtcbiAgICAgIGhlaWdodFxuICAgIH0pO1xuICB9XG5cbiAgc2V0U2Nyb2xsVG9wKHNjcm9sbFRvcCkge1xuICAgIHRoaXMudXBkYXRlU3RhdGUoe1xuICAgICAgc2Nyb2xsVG9wXG4gICAgfSk7XG4gIH1cblxuICBzZXRTY3JvbGxMZWZ0KHNjcm9sbExlZnQpIHtcbiAgICB0aGlzLnVwZGF0ZVN0YXRlKHtcbiAgICAgIHNjcm9sbExlZnRcbiAgICB9KTtcbiAgfVxuXG4gIHNldEluaXRpYWxTdGF0ZSgpIHtcbiAgICBjb25zdCB0b3AgPSAwLFxuICAgICAgICAgIGxlZnQgPSAwLFxuICAgICAgICAgIHdpZHRoID0gMCxcbiAgICAgICAgICBoZWlnaHQgPSAwLFxuICAgICAgICAgIHNjcm9sbFRvcCA9IDAsXG4gICAgICAgICAgc2Nyb2xsTGVmdCA9IDA7XG5cbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIHRvcCxcbiAgICAgIGxlZnQsXG4gICAgICB3aWR0aCxcbiAgICAgIGhlaWdodCxcbiAgICAgIHNjcm9sbFRvcCxcbiAgICAgIHNjcm9sbExlZnRcbiAgICB9KTtcbiAgfVxuXG4gIGluaXRpYWxpc2UoKSB7XG4gICAgdGhpcy5hc3NpZ25Db250ZXh0KCk7XG5cbiAgICB0aGlzLnNldEluaXRpYWxTdGF0ZSgpO1xuICB9XG5cbiAgc3RhdGljIGlnbm9yZVByb3BlcnRpZXMgPSBbXG4gICAgXCJzY3JvbGxiYXJUaGlja25lc3NcIlxuICBdO1xufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5pbXBvcnQgd2l0aFN0eWxlIGZyb20gXCJlYXN5LXdpdGgtc3R5bGVcIjsgIC8vL1xyXG5cclxuaW1wb3J0IFNjcm9sbGFibGVFbGVtZW50IGZyb20gXCIuL2VsZW1lbnQvc2Nyb2xsYWJsZVwiO1xyXG5cclxuY2xhc3MgU3ludGF4IGV4dGVuZHMgU2Nyb2xsYWJsZUVsZW1lbnQge1xyXG4gIHNldEJvdW5kcyhib3VuZHMpIHtcclxuICAgIGNvbnN0IHRvcCA9IGJvdW5kcy5nZXRUb3AoKSxcclxuICAgICAgICAgIGxlZnQgPSBib3VuZHMuZ2V0TGVmdCgpLFxyXG4gICAgICAgICAgd2lkdGggPSBib3VuZHMuZ2V0V2lkdGgoKSxcclxuICAgICAgICAgIGhlaWdodCA9IGJvdW5kcy5nZXRIZWlnaHQoKTtcclxuXHJcbiAgICB0aGlzLnBvc2l0aW9uKHRvcCwgbGVmdCk7XHJcbiAgICB0aGlzLnNldFdpZHRoKHdpZHRoKTtcclxuICAgIHRoaXMuc2V0SGVpZ2h0KGhlaWdodCk7XHJcbiAgfVxyXG5cclxuICBzZXRMYW5ndWFnZShsYW5ndWFnZSkge1xyXG4gICAgY29uc3Qgc3RhdGUgPSB7XHJcbiAgICAgIGxhbmd1YWdlXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMucmVtb3ZlTGFuZ3VhZ2VDbGFzcygpO1xyXG5cclxuICAgIHRoaXMudXBkYXRlU3RhdGUoc3RhdGUpO1xyXG5cclxuICAgIHRoaXMuYWRkTGFuZ3VhZ2VDbGFzcygpO1xyXG4gIH1cclxuXHJcbiAgYWRkTGFuZ3VhZ2VDbGFzcygpIHtcclxuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5nZXRTdGF0ZSgpLFxyXG4gICAgICAgICAgeyBsYW5ndWFnZSB9ID0gc3RhdGU7XHJcblxyXG4gICAgaWYgKGxhbmd1YWdlICE9PSBudWxsKSB7XHJcbiAgICAgIGNvbnN0IGxhbmd1YWdlQ2xhc3MgPSBsYW5ndWFnZTsgLy8vXHJcblxyXG4gICAgICB0aGlzLmFkZENsYXNzKGxhbmd1YWdlQ2xhc3MpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVtb3ZlTGFuZ3VhZ2VDbGFzcygpIHtcclxuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5nZXRTdGF0ZSgpLFxyXG4gICAgICAgICAgeyBsYW5ndWFnZSB9ID0gc3RhdGU7XHJcblxyXG4gICAgaWYgKGxhbmd1YWdlICE9PSBudWxsKSB7XHJcbiAgICAgIGNvbnN0IGxhbmd1YWdlQ2xhc3MgPSBsYW5ndWFnZTsgLy8vXHJcblxyXG4gICAgICB0aGlzLnJlbW92ZUNsYXNzKGxhbmd1YWdlQ2xhc3MpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdXBkYXRlKHRva2Vucykge1xyXG4gICAgY29uc3QgaHRtbCA9IHRva2Vucy5yZWR1Y2UoKGh0bWwsIHRva2VuKSA9PiB7IC8vL1xyXG4gICAgICAgICAgICBjb25zdCB0b2tlbldpdGhTZWxlY3Rpb25IVE1MID0gdG9rZW4uYXNIVE1MKCk7XHJcblxyXG4gICAgICAgICAgICBodG1sICs9IHRva2VuV2l0aFNlbGVjdGlvbkhUTUw7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gaHRtbDtcclxuICAgICAgICAgIH0sIFwiXCIpO1xyXG5cclxuICAgIHRoaXMuaHRtbChodG1sKTtcclxuICB9XHJcblxyXG4gIHBhcmVudENvbnRleHQoKSB7XHJcblx0ICBjb25zdCBzZXRMYW5ndWFnZSA9IHRoaXMuc2V0TGFuZ3VhZ2UuYmluZCh0aGlzKSxcclxuICAgICAgICAgIHVwZGF0ZVN5bnRheCA9IHRoaXMudXBkYXRlLmJpbmQodGhpcyksIC8vL1xyXG5cdFx0XHRcdCAgc2Nyb2xsU3ludGF4ID0gdGhpcy5zY3JvbGwuYmluZCh0aGlzKSwgLy8vXHJcbiAgICAgICAgICBzZXRTeW50YXhCb3VuZHMgPSB0aGlzLnNldEJvdW5kcy5iaW5kKHRoaXMpOyAgLy9cclxuXHJcbiAgICByZXR1cm4gKHtcclxuICAgICAgc2V0TGFuZ3VhZ2UsXHJcbiAgICAgIHVwZGF0ZVN5bnRheCxcclxuICAgICAgc2Nyb2xsU3ludGF4LFxyXG4gICAgICBzZXRTeW50YXhCb3VuZHNcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2V0SW5pdGlhbFN0YXRlKCkge1xyXG4gICAgY29uc3QgbGFuZ3VhZ2UgPSBudWxsO1xyXG5cclxuICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICBsYW5ndWFnZVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBpbml0aWFsaXNlKCkge1xyXG4gICAgdGhpcy5zZXRJbml0aWFsU3RhdGUoKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyB0YWdOYW1lID0gXCJkaXZcIjtcclxuXHJcbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xyXG4gICAgY2xhc3NOYW1lOiBcInN5bnRheFwiXHJcbiAgfTtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgd2l0aFN0eWxlKFN5bnRheClgXHJcblxyXG4gIHotaW5kZXg6IDA7XHJcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcclxuICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgd2hpdGUtc3BhY2U6IHByZTtcclxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcclxuICBiYWNrZ3JvdW5kLWNvbG9yOiBpbmhlcml0O1xyXG5cclxuICBmb250LXNpemU6IGluaGVyaXQ7XHJcbiAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7XHJcbiAgZm9udC1mYW1pbHk6IGluaGVyaXQ7XHJcbiAgdGV4dC1yZW5kZXJpbmc6IGluaGVyaXQ7XHJcbiAgZm9udC1mZWF0dXJlLXNldHRpbmdzOiBpbmhlcml0O1xyXG5cclxuYDtcclxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgd2l0aFN0eWxlIGZyb20gXCJlYXN5LXdpdGgtc3R5bGVcIjsgIC8vL1xuXG5pbXBvcnQgeyBSZWFjdCwgQm91bmRzLCBFbGVtZW50IH0gZnJvbSBcImVhc3lcIjtcblxuaW1wb3J0IEd1dHRlciBmcm9tIFwiLi9ndXR0ZXJcIjtcbmltcG9ydCBTeW50YXggZnJvbSBcIi4vc3ludGF4XCI7XG5cbmNsYXNzIFByZXR0eVByaW50ZXIgZXh0ZW5kcyBFbGVtZW50IHtcbiAgZ2V0V2lkdGgoKSB7XG4gICAgY29uc3QgaGlkZGVuID0gdGhpcy5pc0hpZGRlbigpO1xuXG4gICAgaWYgKGhpZGRlbikge1xuICAgICAgdGhpcy5zaG93KCk7XG4gICAgfVxuXG4gICAgY29uc3Qgd2lkdGggPSBzdXBlci5nZXRXaWR0aCgpO1xuXG4gICAgaWYgKGhpZGRlbikge1xuICAgICAgdGhpcy5oaWRlKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHdpZHRoO1xuICB9XG5cbiAgZ2V0SGVpZ2h0KCkge1xuICAgIGNvbnN0IGhpZGRlbiA9IHRoaXMuaXNIaWRkZW4oKTtcblxuICAgIGlmIChoaWRkZW4pIHtcbiAgICAgIHRoaXMuc2hvdygpO1xuICAgIH1cblxuICAgIGNvbnN0IGhlaWdodCA9IHN1cGVyLmdldEhlaWdodCgpO1xuXG4gICAgaWYgKGhpZGRlbikge1xuICAgICAgdGhpcy5oaWRlKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGhlaWdodDtcbiAgfVxuXG4gIHNjcm9sbChzY3JvbGxUb3AsIHNjcm9sbExlZnQpIHtcbiAgICB0aGlzLnNjcm9sbEd1dHRlcihzY3JvbGxUb3AgLHNjcm9sbExlZnQpO1xuICAgIHRoaXMuc2Nyb2xsU3ludGF4KHNjcm9sbFRvcCwgc2Nyb2xsTGVmdCk7XG4gIH1cblxuICB1cGRhdGUodG9rZW5zKSB7XG4gICAgbGV0IGd1dHRlcldpZHRoID0gdGhpcy5nZXRHdXR0ZXJXaWR0aCgpLFxuICAgICAgICBwcmV2aW91c0d1dHRlcldpZHRoID0gdGhpcy5nZXRQcmV2aW91c0d1dHRlcldpZHRoKCk7XG5cbiAgICB0aGlzLnVwZGF0ZVN5bnRheCh0b2tlbnMpO1xuXG4gICAgdGhpcy51cGRhdGVHdXR0ZXIodG9rZW5zKTtcblxuICAgIGlmIChwcmV2aW91c0d1dHRlcldpZHRoICE9PSBndXR0ZXJXaWR0aCkge1xuICAgICAgcHJldmlvdXNHdXR0ZXJXaWR0aCA9IGd1dHRlcldpZHRoOyAgLy8vXG5cbiAgICAgIHRoaXMuc2V0UHJldmlvdXNHdXR0ZXJXaWR0aChwcmV2aW91c0d1dHRlcldpZHRoKTtcblxuICAgICAgdGhpcy5yZXNpemUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZ3V0dGVyV2lkdGggPSBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBndXR0ZXJXaWR0aDtcbiAgfVxuXG4gIGdldElubmVyQm91bmRzKGd1dHRlcldpZHRoKSB7XG4gICAgbGV0IHRvcCA9IDAsXG4gICAgICAgIGxlZnQgPSAwLFxuICAgICAgICB3aWR0aCA9IHRoaXMuZ2V0V2lkdGgoKSxcbiAgICAgICAgaGVpZ2h0ID0gdGhpcy5nZXRIZWlnaHQoKTtcblxuICAgIGxlZnQgKz0gZ3V0dGVyV2lkdGg7XG4gICAgd2lkdGggLT0gZ3V0dGVyV2lkdGg7XG5cbiAgICBjb25zdCBib3VuZHMgPSBCb3VuZHMuZnJvbVRvcExlZnRXaWR0aEFuZEhlaWdodCh0b3AsIGxlZnQsIHdpZHRoLCBoZWlnaHQpLFxuICAgICAgICAgIGlubmVyQm91bmRzID0gYm91bmRzOyAvLy9cblxuICAgIHJldHVybiBpbm5lckJvdW5kcztcbiAgfVxuXG4gIHJlc2l6ZSgpIHtcbiAgICBjb25zdCBndXR0ZXJXaWR0aCA9IHRoaXMuZ2V0R3V0dGVyV2lkdGgoKSxcbiAgICAgICAgICBpbm5lckJvdW5kcyA9IHRoaXMuZ2V0SW5uZXJCb3VuZHMoZ3V0dGVyV2lkdGgpLFxuICAgICAgICAgIHN5bnRheEJvdW5kcyA9IGlubmVyQm91bmRzOyAvLy9cblxuICAgIHRoaXMucG9zaXRpb25HdXR0ZXIoKTtcblxuICAgIHRoaXMuc2V0U3ludGF4Qm91bmRzKHN5bnRheEJvdW5kcyk7XG5cbiAgICByZXR1cm4gZ3V0dGVyV2lkdGg7XG4gIH1cblxuICBzZXRCb3VuZHMoYm91bmRzKSB7XG4gICAgY29uc3QgdG9wID0gYm91bmRzLmdldFRvcCgpLFxuICAgICAgICAgIGxlZnQgPSBib3VuZHMuZ2V0TGVmdCgpLFxuICAgICAgICAgIHdpZHRoID0gYm91bmRzLmdldFdpZHRoKCksXG4gICAgICAgICAgaGVpZ2h0ID0gYm91bmRzLmdldEhlaWdodCgpO1xuXG4gICAgdGhpcy5wb3NpdGlvbih0b3AsIGxlZnQpO1xuICAgIHRoaXMuc2V0V2lkdGgod2lkdGgpO1xuICAgIHRoaXMuc2V0SGVpZ2h0KGhlaWdodCk7XG4gIH1cblxuICBwb3NpdGlvbih0b3AsIGxlZnQpIHtcbiAgICB0b3AgPSBgJHt0b3B9cHhgO1xuICAgIGxlZnQgPSBgJHtsZWZ0fXB4YDtcblxuICAgIGNvbnN0IGNzcyA9IHtcbiAgICAgIHRvcCxcbiAgICAgIGxlZnRcbiAgICB9O1xuXG4gICAgdGhpcy5jc3MoY3NzKTtcbiAgfVxuXG4gIGdldFByZXZpb3VzR3V0dGVyV2lkdGgoKSB7XG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLmdldFN0YXRlKCksXG4gICAgICAgICAgeyBwcmV2aW91c0d1dHRlcldpZHRoIH0gPSBzdGF0ZTtcblxuICAgIHJldHVybiBwcmV2aW91c0d1dHRlcldpZHRoO1xuICB9XG5cbiAgc2V0UHJldmlvdXNHdXR0ZXJXaWR0aChwcmV2aW91c0d1dHRlcldpZHRoKSB7XG4gICAgdGhpcy51cGRhdGVTdGF0ZSh7XG4gICAgICBwcmV2aW91c0d1dHRlcldpZHRoXG4gICAgfSk7XG4gIH1cblxuICBjaGlsZEVsZW1lbnRzKCkge1xuICAgIGNvbnN0IHsgaGlkZGVuR3V0dGVyLCBzY3JvbGxiYXJUaGlja25lc3MgfSA9IHRoaXMucHJvcGVydGllcyxcbiAgICAgICAgICBoaWRkZW4gPSBoaWRkZW5HdXR0ZXI7ICAvLy9cblxuICAgIHJldHVybiAoW1xuXG4gICAgICA8R3V0dGVyIGhpZGRlbj17aGlkZGVufSAvPixcbiAgICAgIDxTeW50YXggc2Nyb2xsYmFyVGhpY2tlbnNzPXtzY3JvbGxiYXJUaGlja25lc3N9IC8+LFxuXG4gICAgXSk7XG4gIH1cbiAgXG4gIHBhcmVudENvbnRleHQoKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIHJlc2l6ZVByZXR0eVByaW50ZXIgPSB0aGlzLnJlc2l6ZS5iaW5kKHRoaXMpLCAvLy9cbiAgICAgICAgICB1cGRhdGVQcmV0dHlQcmludGVyID0gdGhpcy51cGRhdGUuYmluZCh0aGlzKSwgLy8vXG4gICAgICAgICAgc2Nyb2xsUHJldHR5UHJpbnRlciA9IHRoaXMuc2Nyb2xsLmJpbmQodGhpcyksIC8vL1xuICAgICAgICAgIHNldFByZXR0eVByaW50ZXJCb3VuZHMgPSB0aGlzLnNldEJvdW5kcy5iaW5kKHRoaXMpLCAvLy9cbiAgICAgICAgICBwYXJlbnRDb250ZXh0ID0gT2JqZWN0LmFzc2lnbih7fSwgY29udGV4dCwge1xuICAgICAgICAgICAgcmVzaXplUHJldHR5UHJpbnRlcixcbiAgICAgICAgICAgIHVwZGF0ZVByZXR0eVByaW50ZXIsXG4gICAgICAgICAgICBzY3JvbGxQcmV0dHlQcmludGVyLFxuICAgICAgICAgICAgc2V0UHJldHR5UHJpbnRlckJvdW5kc1xuICAgICAgICAgIH0pO1xuICAgIFxuICAgIHJldHVybiBwYXJlbnRDb250ZXh0O1xuICB9XG5cbiAgc2V0SW5pdGlhbFN0YXRlKCkge1xuICAgIGNvbnN0IHByZXZpb3VzR3V0dGVyV2lkdGggPSAwO1xuXG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBwcmV2aW91c0d1dHRlcldpZHRoXG4gICAgfSlcbiAgfVxuXG4gIGluaXRpYWxpc2UoKSB7XG4gICAgdGhpcy5hc3NpZ25Db250ZXh0KFtcbiAgICAgIFwidXBkYXRlR3V0dGVyXCIsXG4gICAgICBcInVwZGF0ZVN5bnRheFwiLFxuICAgICAgXCJzY3JvbGxHdXR0ZXJcIixcbiAgICAgIFwic2Nyb2xsU3ludGF4XCIsXG4gICAgICBcInBvc2l0aW9uR3V0dGVyXCIsXG4gICAgICBcImdldEd1dHRlcldpZHRoXCIsXG4gICAgICBcInNldFN5bnRheEJvdW5kc1wiXG4gICAgXSk7XG5cbiAgICB0aGlzLnNldEluaXRpYWxTdGF0ZSgpO1xuICB9XG5cbiAgc3RhdGljIHRhZ05hbWUgPSBcImRpdlwiO1xuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcGVydGllcyA9IHtcbiAgICBjbGFzc05hbWU6IFwicHJldHR5LXByaW50ZXJcIlxuICB9O1xuXG4gIHN0YXRpYyBpZ25vcmVkUHJvcGVydGllcyA9IFtcbiAgICBcImhpZGRlbkd1dHRlclwiLFxuICAgIFwic2Nyb2xsYmFyVGhpY2tuZXNzXCJcbiAgXTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgd2l0aFN0eWxlKFByZXR0eVByaW50ZXIpYFxuXG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgXG4gIGNvbG9yOiBpbmhlcml0O1xuICBib3JkZXItY29sb3I6IGluaGVyaXQ7XG4gIGJhY2tncm91bmQtY29sb3I6IGluaGVyaXQ7XG5cbiAgZm9udC1zaXplOiBpbmhlcml0O1xuICBsaW5lLWhlaWdodDogaW5oZXJpdDtcbiAgZm9udC1mYW1pbHk6IGluaGVyaXQ7XG4gIHRleHQtcmVuZGVyaW5nOiBpbmhlcml0O1xuICBmb250LWZlYXR1cmUtc2V0dGluZ3M6IGluaGVyaXQ7XG5cbmA7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IFJlYWN0LCBCb2R5IH0gZnJvbSBcImVhc3lcIjtcblxuaW1wb3J0IHsgc3RyaXBQaXhlbHMgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2Nzc1wiO1xuaW1wb3J0IHsgc2Nyb2xsYmFyVGhpY2tuZXNzIGFzIHN0eWxlc1Njcm9sbGJhclRoaWNrbmVzcyB9IGZyb20gXCIuLi9zdHlsZXNcIjtcblxuY29uc3QgYm9keSA9IG5ldyBCb2R5KCksXG4gICAgICBzdHlsZSA9IHtcbiAgICAgICAgd2lkdGg6IFwiNTBweFwiLFxuICAgICAgICBoZWlnaHQ6IFwiNTBweFwiLFxuICAgICAgICBvdmVyZmxvdzogXCJzY3JvbGxcIlxuICAgICAgfSxcbiAgICAgIG91dGVyRGl2ID1cblxuICAgICAgICA8ZGl2IHN0eWxlPXtzdHlsZX0gLz5cblxuICAgICAgLFxuICAgICAgaW5uZXJEaXYgPVxuXG4gICAgICAgIDxkaXYgLz5cblxuICAgICAgO1xuXG5vdXRlckRpdi5hcHBlbmQoaW5uZXJEaXYpO1xuXG5ib2R5LmFwcGVuZChvdXRlckRpdik7XG5cbmNvbnN0IG91dGVyRGl2V2lkdGggPSBvdXRlckRpdi5nZXRXaWR0aCgpLFxuICAgICAgaW5uZXJEaXZXaWR0aCA9IGlubmVyRGl2LmdldFdpZHRoKCk7XG5cbm91dGVyRGl2LnJlbW92ZSgpO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2Nyb2xsYmFyVGhpY2tuZXNzKGZhbmN5U2Nyb2xsYmFycykge1xuICBjb25zdCBzY3JvbGxiYXJUaGlja25lc3MgPSBmYW5jeVNjcm9sbGJhcnMgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmlwUGl4ZWxzKHN0eWxlc1Njcm9sbGJhclRoaWNrbmVzcykgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0ZXJEaXZXaWR0aCAtIGlubmVyRGl2V2lkdGg7IC8vL1xuXG4gIHJldHVybiBzY3JvbGxiYXJUaGlja25lc3M7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNsYXNzIFBsdWdpbiB7XG4gIGNvbnN0cnVjdG9yKGxleGVyLCBwYXJzZXIsIHByb2Nlc3NvciwgdG9rZW5zLCBub2RlKSB7XG4gICAgdGhpcy5sZXhlciA9IGxleGVyO1xuICAgIHRoaXMucGFyc2VyID0gcGFyc2VyO1xuICAgIHRoaXMucHJvY2Vzc29yID0gcHJvY2Vzc29yO1xuICAgIHRoaXMudG9rZW5zID0gdG9rZW5zO1xuICAgIHRoaXMubm9kZSA9IG5vZGU7XG4gIH1cblxuICBnZXRMZXhlcigpIHtcbiAgICByZXR1cm4gdGhpcy5sZXhlcjtcbiAgfVxuXG4gIGdldFBhcnNlcigpIHtcbiAgICByZXR1cm4gdGhpcy5wYXJzZXI7XG4gIH1cblxuICBnZXRQcm9jZXNzb3IoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvY2Vzc29yO1xuICB9XG5cbiAgZ2V0VG9rZW5zKCkge1xuICAgIHJldHVybiB0aGlzLnRva2VucztcbiAgfVxuXG4gIGdldE5vZGUoKSB7XG4gICAgcmV0dXJuIHRoaXMubm9kZTtcbiAgfVxuXG4gIGdldExhbmd1YWdlKCkgeyByZXR1cm4gdGhpcy5sYW5ndWFnZTsgfVxuXG4gIHNldExleGVyKGxleGVyKSB7XG4gICAgdGhpcy5sZXhlciA9IGxleGVyO1xuICB9XG5cbiAgc2V0UGFyc2VyKHBhcnNlcikge1xuICAgIHRoaXMucGFyc2VyID0gcGFyc2VyO1xuICB9XG5cbiAgc2V0UHJvY2Vzc29yKHByb2Nlc3Nvcikge1xuICAgIHRoaXMucHJvY2Vzc29yID0gcHJvY2Vzc29yO1xuICB9XG5cbiAgdXBkYXRlKGNvbnRlbnQpIHtcbiAgICB0aGlzLnRva2VucyA9IHRoaXMubGV4ZXIudG9rZW5pc2UoY29udGVudCk7XG5cbiAgICB0aGlzLm5vZGUgPSB0aGlzLnBhcnNlci5wYXJzZSh0aGlzLnRva2Vucyk7XG5cbiAgICB0aGlzLnByb2Nlc3Nvci5wcm9jZXNzKHRoaXMudG9rZW5zLCB0aGlzLm5vZGUpO1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKENsYXNzKSB7XG4gICAgY29uc3QgeyBMZXhlciwgUGFyc2VyLCBQcm9jZXNzb3IgfSA9IENsYXNzLFxuICAgICAgICAgIGxleGVyID0gTGV4ZXIuZnJvbU5vdGhpbmcoKSxcbiAgICAgICAgICBwYXJzZXIgPSBQYXJzZXIuZnJvbU5vdGhpbmcoKSxcbiAgICAgICAgICBwcm9jZXNzb3IgPSBQcm9jZXNzb3IuZnJvbU5vdGhpbmcoKSxcbiAgICAgICAgICB0b2tlbnMgPSBudWxsLFxuICAgICAgICAgIG5vZGUgPSBudWxsLFxuICAgICAgICAgIHBsdWdpbiA9IG5ldyBDbGFzcyhsZXhlciwgcGFyc2VyLCBwcm9jZXNzb3IsIHRva2Vucywgbm9kZSk7XG5cbiAgICByZXR1cm4gcGx1Z2luO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFBsdWdpbjtcbiIsICJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmltcG9ydCB7IENvbW1vbkxleGVyIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgWWFwcExleGVyIGV4dGVuZHMgQ29tbW9uTGV4ZXIge31cclxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5pbXBvcnQgWWFwcExleGVyIGZyb20gXCIuLi9sZXhlci95YXBwXCI7XHJcbmltcG9ydCB7IFdoaXRlc3BhY2VUb2tlbiwgRW5kT2ZMaW5lTm9uU2lnbmlmaWNhbnRUb2tlbiwgRG91Ymx5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xyXG5cclxuY29uc3QgZW50cmllcyA9IFtcclxuICB7XHJcbiAgICBcImRlbGltaXRlclwiOiBcIl4oPzo9fDxcXFxcP3xcXFxcPz58PFxcXFwvfFxcXFwvPnw8IS0tfC0tPnw8fD4pXCJcclxuICB9LFxyXG4gIHtcclxuICAgIFwiaWRlbnRpZmllclwiOiBcIl5bYS16QS1aXStcIlxyXG4gIH0sXHJcbiAge1xyXG4gICAgXCJ1bmFzc2lnbmVkXCI6IFwiXlteXFxcXHNdK1wiXHJcbiAgfVxyXG5dO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgWE1MTGV4ZXIgZXh0ZW5kcyBZYXBwTGV4ZXIge1xyXG4gIHN0YXRpYyBlbnRyaWVzID0gZW50cmllcztcclxuXHJcbiAgc3RhdGljIEVuZE9mTGluZVRva2VuID0gRW5kT2ZMaW5lTm9uU2lnbmlmaWNhbnRUb2tlbjsgLy8vXHJcblxyXG4gIHN0YXRpYyBXaGl0ZXNwYWNlVG9rZW4gPSBXaGl0ZXNwYWNlVG9rZW47XHJcblxyXG4gIHN0YXRpYyBFbmRPZkxpbmVDb21tZW50VG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgU2luZ2xlTGluZUNvbW1lbnRUb2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBSZWd1bGFyRXhwcmVzc2lvblRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgU2luZ2x5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiA9IERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbjtcclxuXHJcbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkgeyByZXR1cm4gWWFwcExleGVyLmZyb21FbnRyaWVzKFhNTExleGVyLCBlbnRyaWVzKTsgfVxyXG5cclxuICBzdGF0aWMgZnJvbVJ1bGVzKHJ1bGVzKSB7IHJldHVybiBZYXBwTGV4ZXIuZnJvbVJ1bGVzKFhNTExleGVyLCBydWxlcyk7IH1cclxuXHJcbiAgc3RhdGljIGZyb21FbnRyaWVzKGVudHJpZXMpIHsgcmV0dXJuIFlhcHBMZXhlci5mcm9tRW50cmllcyhYTUxMZXhlciwgZW50cmllcyk7IH1cclxufVxyXG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5pbXBvcnQgeyBydWxlc1V0aWxpdGxpZXMgfSBmcm9tIFwib2NjYW0tcGFyc2Vyc1wiO1xuXG5jb25zdCB7IGZpbHRlciB9ID0gYXJyYXlVdGlsaXRpZXMsXG4gICAgICB7IHN0YXJ0UnVsZUZyb21SdWxlcyB9ID0gcnVsZXNVdGlsaXRsaWVzO1xuXG5leHBvcnQgZnVuY3Rpb24gcnVsZXNGcm9tU3RhcnRSdWxlQW5kUnVsZU1hcChzdGFydFJ1bGUsIHJ1bGVNYXApIHtcbiAgY29uc3QgcnVsZXMgPSBPYmplY3QudmFsdWVzKHJ1bGVNYXApLFxuICAgICAgICBzdGFydFJ1bGVOYW1lID0gc3RhcnRSdWxlLmdldE5hbWUoKTtcblxuICBmaWx0ZXIocnVsZXMsIChydWxlKSA9PiB7XG4gICAgY29uc3QgcnVsZU5hbWUgPSBydWxlLmdldE5hbWUoKTtcblxuICAgIGlmIChydWxlTmFtZSAhPT0gc3RhcnRSdWxlTmFtZSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcblxuICBydWxlcy51bnNoaWZ0KHN0YXJ0UnVsZSk7XG5cbiAgcmV0dXJuIHJ1bGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhcnRSdWxlRnJvbVJ1bGVzQW5kU3RhcnRSdWxlTmFtZShydWxlcywgc3RhcnRSdWxlTmFtZSkge1xuICBsZXQgc3RhcnRSdWxlID0gcnVsZXMuZmluZCgocnVsZSkgPT4ge1xuICAgIGNvbnN0IHJ1bGVOYW1lID0gcnVsZS5nZXROYW1lKCk7XG5cbiAgICBpZiAocnVsZU5hbWUgPT09IHN0YXJ0UnVsZU5hbWUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSkgfHwgbnVsbDsgLy8vXG5cbiAgaWYgKHN0YXJ0UnVsZSA9PT0gbnVsbCkge1xuICAgIHN0YXJ0UnVsZSA9IHN0YXJ0UnVsZUZyb21SdWxlcyhydWxlcyk7XG4gIH1cblxuICByZXR1cm4gc3RhcnRSdWxlO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBwYXJ0VHlwZXMgfSBmcm9tIFwib2NjYW0tcGFyc2Vyc1wiO1xuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmNvbnN0IHsgZmlyc3QgfSA9IGFycmF5VXRpbGl0aWVzLFxuICAgICAgeyBSdWxlTmFtZVBhcnRUeXBlLFxuICAgICAgICBPcHRpb25hbFBhcnRQYXJ0VHlwZSxcbiAgICAgICAgU2VxdWVuY2VPZlBhcnRzUGFydFR5cGUsXG4gICAgICAgIENob2ljZU9mUGFydHNQYXJ0VHlwZSxcbiAgICAgICAgT25lT3JNb3JlUGFydHNQYXJ0VHlwZSxcbiAgICAgICAgWmVyb09yTW9yZVBhcnRzUGFydFR5cGUgfSA9IHBhcnRUeXBlcztcblxuZXhwb3J0IGZ1bmN0aW9uIHJlY3Vyc2l2ZVJ1bGVOYW1lc0Zyb21QYXJ0KHBhcnQsIHJlY3Vyc2l2ZVJ1bGVOYW1lcykge1xuICBjb25zdCBwYXJ0Tm9uVGVybWluYWxQYXJ0ID0gcGFydC5pc05vblRlcm1pbmFsUGFydCgpO1xuXG4gIGlmIChwYXJ0Tm9uVGVybWluYWxQYXJ0KSB7XG4gICAgY29uc3QgdHlwZSA9IHBhcnQuZ2V0VHlwZSgpO1xuXG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlIFJ1bGVOYW1lUGFydFR5cGUgOiB7XG4gICAgICAgICAgY29uc3QgcnVsZU5hbWVQYXJ0ID0gcGFydCwgIC8vL1xuICAgICAgICAgICAgICAgIHJ1bGVOYW1lID0gcnVsZU5hbWVQYXJ0LmdldFJ1bGVOYW1lKCksXG4gICAgICAgICAgICAgICAgcmVjdXJzaXZlUnVsZU5hbWVzSW5jbHVkZXNSdWxlTmFtZSA9IHJlY3Vyc2l2ZVJ1bGVOYW1lcy5pbmNsdWRlcyhydWxlTmFtZSk7XG5cbiAgICAgICAgICBpZiAoIXJlY3Vyc2l2ZVJ1bGVOYW1lc0luY2x1ZGVzUnVsZU5hbWUpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlY3Vyc2l2ZVJ1bGVOYW1lID0gcnVsZU5hbWU7IC8vL1xuXG4gICAgICAgICAgICByZWN1cnNpdmVSdWxlTmFtZXMucHVzaChyZWN1cnNpdmVSdWxlTmFtZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgT3B0aW9uYWxQYXJ0UGFydFR5cGUgOiB7XG4gICAgICAgICAgY29uc3Qgb3B0aW9uYWxQYXJ0UGFydCA9IHBhcnQ7ICAvLy9cblxuICAgICAgICAgIHBhcnQgPSBvcHRpb25hbFBhcnRQYXJ0LmdldFBhcnQoKTtcblxuICAgICAgICAgIHJlY3Vyc2l2ZVJ1bGVOYW1lc0Zyb21QYXJ0KHBhcnQsIHJlY3Vyc2l2ZVJ1bGVOYW1lcyk7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBPbmVPck1vcmVQYXJ0c1BhcnRUeXBlIDoge1xuICAgICAgICAgIGNvbnN0IG9uZU9yTW9yZVBhcnRzUGFydCA9IHBhcnQ7ICAvLy9cblxuICAgICAgICAgIHBhcnQgPSBvbmVPck1vcmVQYXJ0c1BhcnQuZ2V0UGFydCgpO1xuXG4gICAgICAgICAgcmVjdXJzaXZlUnVsZU5hbWVzRnJvbVBhcnQocGFydCwgcmVjdXJzaXZlUnVsZU5hbWVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFplcm9Pck1vcmVQYXJ0c1BhcnRUeXBlIDoge1xuICAgICAgICAgIGNvbnN0IHplcm9Pck1vcmVQYXJ0c1BhcnQgPSBwYXJ0OyAvLy9cblxuICAgICAgICAgIHBhcnQgPSB6ZXJvT3JNb3JlUGFydHNQYXJ0LmdldFBhcnQoKTsgIC8vL1xuXG4gICAgICAgICAgcmVjdXJzaXZlUnVsZU5hbWVzRnJvbVBhcnQocGFydCwgcmVjdXJzaXZlUnVsZU5hbWVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFNlcXVlbmNlT2ZQYXJ0c1BhcnRUeXBlIDoge1xuICAgICAgICBjb25zdCBzZXF1ZW5jZU9mUGFydHNQYXJ0ID0gcGFydCwgIC8vL1xuICAgICAgICAgICAgICBwYXJ0cyA9IHNlcXVlbmNlT2ZQYXJ0c1BhcnQuZ2V0UGFydHMoKTtcblxuICAgICAgICAgIHBhcnRzLmZvckVhY2goKHBhcnQpID0+IHJlY3Vyc2l2ZVJ1bGVOYW1lc0Zyb21QYXJ0KHBhcnQsIHJlY3Vyc2l2ZVJ1bGVOYW1lcykpO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgQ2hvaWNlT2ZQYXJ0c1BhcnRUeXBlIDoge1xuICAgICAgICBjb25zdCBjaG9pY2VPZlBhcnRzUGFydCA9IHBhcnQsIC8vL1xuICAgICAgICAgICAgICBwYXJ0cyA9IGNob2ljZU9mUGFydHNQYXJ0LmdldFBhcnRzKCk7XG5cbiAgICAgICAgICBwYXJ0cy5mb3JFYWNoKChwYXJ0KSA9PiByZWN1cnNpdmVSdWxlTmFtZXNGcm9tUGFydChwYXJ0LCByZWN1cnNpdmVSdWxlTmFtZXMpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lc0Zyb21QYXJ0KHBhcnQsIGxlZnRSZWN1cnNpdmVSdWxlTmFtZXMpIHtcbiAgY29uc3QgcGFydE5vblRlcm1pbmFsUGFydCA9IHBhcnQuaXNOb25UZXJtaW5hbFBhcnQoKTtcblxuICBpZiAocGFydE5vblRlcm1pbmFsUGFydCkge1xuICAgIGNvbnN0IHR5cGUgPSBwYXJ0LmdldFR5cGUoKTtcblxuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSBSdWxlTmFtZVBhcnRUeXBlIDoge1xuICAgICAgICAgIGNvbnN0IHJ1bGVOYW1lUGFydCA9IHBhcnQsICAvLy9cbiAgICAgICAgICAgICAgICBydWxlTmFtZSA9IHJ1bGVOYW1lUGFydC5nZXRSdWxlTmFtZSgpLFxuICAgICAgICAgICAgICAgIGxlZnRSZWN1cnNpdmVSdWxlTmFtZXNJbmNsdWRlc1J1bGVOYW1lID0gbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lcy5pbmNsdWRlcyhydWxlTmFtZSk7XG5cbiAgICAgICAgICBpZiAoIWxlZnRSZWN1cnNpdmVSdWxlTmFtZXNJbmNsdWRlc1J1bGVOYW1lKSB7XG4gICAgICAgICAgICBjb25zdCBsZWZ0UmVjdXJzaXZlUnVsZU5hbWUgPSBydWxlTmFtZTsgLy8vXG5cbiAgICAgICAgICAgIGxlZnRSZWN1cnNpdmVSdWxlTmFtZXMucHVzaChsZWZ0UmVjdXJzaXZlUnVsZU5hbWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIE9wdGlvbmFsUGFydFBhcnRUeXBlIDoge1xuICAgICAgICAgIGNvbnN0IG9wdGlvbmFsUGFydFBhcnQgPSBwYXJ0OyAvLy9cblxuICAgICAgICAgIHBhcnQgPSBvcHRpb25hbFBhcnRQYXJ0LmdldFBhcnQoKTtcblxuICAgICAgICAgIGxlZnRSZWN1cnNpdmVSdWxlTmFtZXNGcm9tUGFydChwYXJ0LCBsZWZ0UmVjdXJzaXZlUnVsZU5hbWVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIE9uZU9yTW9yZVBhcnRzUGFydFR5cGUgOiB7XG4gICAgICAgICAgY29uc3Qgb25lT3JNb3JlUGFydHNQYXJ0ID0gcGFydDsgIC8vL1xuXG4gICAgICAgICAgcGFydCA9IG9uZU9yTW9yZVBhcnRzUGFydC5nZXRQYXJ0KCk7XG5cbiAgICAgICAgICBsZWZ0UmVjdXJzaXZlUnVsZU5hbWVzRnJvbVBhcnQocGFydCwgbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lcyk7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBaZXJvT3JNb3JlUGFydHNQYXJ0VHlwZSA6IHtcbiAgICAgICAgICBjb25zdCB6ZXJvT3JNb3JlUGFydHNQYXJ0ID0gcGFydDsgLy8vXG5cbiAgICAgICAgICBwYXJ0ID0gemVyb09yTW9yZVBhcnRzUGFydC5nZXRQYXJ0KCk7XG5cbiAgICAgICAgICBsZWZ0UmVjdXJzaXZlUnVsZU5hbWVzRnJvbVBhcnQocGFydCwgbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lcyk7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBTZXF1ZW5jZU9mUGFydHNQYXJ0VHlwZSA6IHtcbiAgICAgICAgICBjb25zdCBzZXF1ZW5jZU9mUGFydHNQYXJ0ID0gcGFydCwgIC8vL1xuICAgICAgICAgICAgICAgIHBhcnRzID0gc2VxdWVuY2VPZlBhcnRzUGFydC5nZXRQYXJ0cygpLFxuICAgICAgICAgICAgICAgIGZpcnN0UGFydCA9IGZpcnN0KHBhcnRzKTtcblxuICAgICAgICAgIHBhcnQgPSBmaXJzdFBhcnQ7IC8vL1xuXG4gICAgICAgICAgbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lc0Zyb21QYXJ0KHBhcnQsIGxlZnRSZWN1cnNpdmVSdWxlTmFtZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgQ2hvaWNlT2ZQYXJ0c1BhcnRUeXBlIDoge1xuICAgICAgICAgIGNvbnN0IGNob2ljZU9mUGFydHNQYXJ0ID0gcGFydCwgLy8vXG4gICAgICAgICAgICAgICAgcGFydHMgPSBjaG9pY2VPZlBhcnRzUGFydC5nZXRQYXJ0cygpO1xuXG4gICAgICAgICAgcGFydHMuZm9yRWFjaCgocGFydCkgPT4gbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lc0Zyb21QYXJ0KHBhcnQsIGxlZnRSZWN1cnNpdmVSdWxlTmFtZXMpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBwYXJ0VHlwZXMgfSBmcm9tIFwib2NjYW0tcGFyc2Vyc1wiO1xuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCB7IHJlY3Vyc2l2ZVJ1bGVOYW1lc0Zyb21QYXJ0LCBsZWZ0UmVjdXJzaXZlUnVsZU5hbWVzRnJvbVBhcnQgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3JlY3Vyc2l2ZVBhcnRcIjtcblxuY29uc3QgeyBmaXJzdCB9ID0gYXJyYXlVdGlsaXRpZXMsXG4gICAgICB7IFJ1bGVOYW1lUGFydFR5cGUgfSA9IHBhcnRUeXBlcztcblxuZXhwb3J0IGZ1bmN0aW9uIGlzRGVmaW5pdGlvblVuYXJ5KGRlZmluaXRpb24pIHtcbiAgY29uc3QgcGFydHMgPSBkZWZpbml0aW9uLmdldFBhcnRzKCksXG4gICAgICAgIHBhcnRzTGVuZ3RoID0gcGFydHMubGVuZ3RoLFxuICAgICAgICBkZWZpbml0aW9uVW5hcnkgPSAocGFydHNMZW5ndGggPT09IDEpO1xuXG4gIHJldHVybiBkZWZpbml0aW9uVW5hcnk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0RlZmluaXRpb25Db21wbGV4KGRlZmluaXRpb24pIHtcbiAgY29uc3QgcGFydHMgPSBkZWZpbml0aW9uLmdldFBhcnRzKCksXG4gICAgICAgIGZpcnN0UGFydCA9IGZpcnN0KHBhcnRzKSxcbiAgICAgICAgZmlyc3RQYXJ0VHlwZSA9IGZpcnN0UGFydC5nZXRUeXBlKCksXG4gICAgICAgIGZpcnN0UGFydFR5cGVSdWxlTmFtZVBhcnRUeXBlID0gKGZpcnN0UGFydFR5cGUgPT09IFJ1bGVOYW1lUGFydFR5cGUpLFxuICAgICAgICBmaXJzdFBhcnRSdWxlTmFtZVBhcnQgPSBmaXJzdFBhcnRUeXBlUnVsZU5hbWVQYXJ0VHlwZSxcbiAgICAgICAgZGVmaW5pdGlvbkNvbXBsZXggPSAhZmlyc3RQYXJ0UnVsZU5hbWVQYXJ0O1xuXG4gIHJldHVybiBkZWZpbml0aW9uQ29tcGxleDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRGVmaW5pdGlvbkxvb2tBaGVhZChkZWZpbml0aW9uKSB7XG4gIGxldCBsb29rQWhlYWQgPSBmYWxzZTtcblxuICBjb25zdCBwYXJ0cyA9IGRlZmluaXRpb24uZ2V0UGFydHMoKSxcbiAgICAgICAgZmlyc3RQYXJ0ID0gZmlyc3QocGFydHMpLFxuICAgICAgICBmaXJzdFBhcnRUeXBlID0gZmlyc3RQYXJ0LmdldFR5cGUoKSxcbiAgICAgICAgZmlyc3RQYXJ0VHlwZVJ1bGVOYW1lUGFydFR5cGUgPSAoZmlyc3RQYXJ0VHlwZSA9PT0gUnVsZU5hbWVQYXJ0VHlwZSksXG4gICAgICAgIGZpcnN0UGFydFJ1bGVOYW1lUGFydCA9IGZpcnN0UGFydFR5cGVSdWxlTmFtZVBhcnRUeXBlOyAgLy8vXG5cbiAgaWYgKGZpcnN0UGFydFJ1bGVOYW1lUGFydCkge1xuICAgIGNvbnN0IHJ1bGVOYW1lUGFydCA9IGZpcnN0UGFydDsgLy8vXG5cbiAgICBsb29rQWhlYWQgPSBydWxlTmFtZVBhcnQuaXNMb29rQWhlYWQoKTtcbiAgfVxuXG4gIHJldHVybiBsb29rQWhlYWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0RlZmluaXRpb25MZWZ0UmVjdXJzaXZlKGRlZmluaXRpb24pIHtcbiAgY29uc3QgbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lcyA9IGxlZnRSZWN1cnNpdmVSdWxlTmFtZXNGcm9tRGVmaW5pdGlvbihkZWZpbml0aW9uKSxcbiAgICAgICAgbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lc0xlbmd0aCA9IGxlZnRSZWN1cnNpdmVSdWxlTmFtZXMubGVuZ3RoLFxuICAgICAgICBkZWZpbml0aW9uTGVmdFJlY3Vyc2l2ZSA9IChsZWZ0UmVjdXJzaXZlUnVsZU5hbWVzTGVuZ3RoID4gMCk7XG5cbiAgcmV0dXJuIGRlZmluaXRpb25MZWZ0UmVjdXJzaXZlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVjdXJzaXZlUnVsZU5hbWVzRnJvbURlZmluaXRpb24oZGVmaW5pdGlvbikge1xuICBjb25zdCByZWN1cnNpdmVSdWxlTmFtZXMgPSBbXSxcbiAgICAgICAgcGFydHMgPSBkZWZpbml0aW9uLmdldFBhcnRzKCk7XG5cbiAgcGFydHMuZm9yRWFjaCgocGFydCkgPT4gcmVjdXJzaXZlUnVsZU5hbWVzRnJvbVBhcnQocGFydCwgcmVjdXJzaXZlUnVsZU5hbWVzKSk7XG5cbiAgcmV0dXJuIHJlY3Vyc2l2ZVJ1bGVOYW1lcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxlZnRSZWN1cnNpdmVSdWxlTmFtZXNGcm9tRGVmaW5pdGlvbihkZWZpbml0aW9uKSB7XG4gIGNvbnN0IGxlZnRSZWN1cnNpdmVSdWxlTmFtZXMgPSBbXSxcbiAgICAgICAgcGFydHMgPSBkZWZpbml0aW9uLmdldFBhcnRzKCksXG4gICAgICAgIGZpcnN0UGFydCA9IGZpcnN0KHBhcnRzKSxcbiAgICAgICAgcGFydCA9IGZpcnN0UGFydDsgLy8vXG5cbiAgbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lc0Zyb21QYXJ0KHBhcnQsIGxlZnRSZWN1cnNpdmVSdWxlTmFtZXMpO1xuXG4gIHJldHVybiBsZWZ0UmVjdXJzaXZlUnVsZU5hbWVzO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgUkVDVVJTSVZFX1RZUEUgPSBcInJlY3Vyc2l2ZVwiO1xuZXhwb3J0IGNvbnN0IExFRlRfUkVDVVJTSVZFX1RZUEUgPSBcImxlZnQtcmVjdXJzaXZlXCI7XG5leHBvcnQgY29uc3QgRElSRUNUTFlfTEVGVF9SRUNVUlNJVkVfVFlQRSA9IFwiZGlyZWN0bHktbGVmdC1yZWN1cnNpdmVcIjtcbmV4cG9ydCBjb25zdCBJTkRJUkVDVExZX0xFRlRfUkVDVVJTSVZFX1RZUEUgPSBcImluZGlyZWN0bHktbGVmdC1yZWN1cnNpdmVcIjtcbmV4cG9ydCBjb25zdCBJTVBMSUNJVExZX0xFRlRfUkVDVVJTSVZFX1RZUEUgPSBcImltcGxpY2l0bHktbGVmdC1yZWN1cnNpdmVcIjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgRGVmaW5pdGlvbiB9IGZyb20gXCJvY2NhbS1wYXJzZXJzXCI7XG5cbmltcG9ydCB7IHJlY3Vyc2l2ZVJ1bGVOYW1lc0Zyb21EZWZpbml0aW9uIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9kZWZpbml0aW9uXCI7XG5pbXBvcnQgeyBSRUNVUlNJVkVfVFlQRSwgRElSRUNUTFlfTEVGVF9SRUNVUlNJVkVfVFlQRSwgSU1QTElDSVRMWV9MRUZUX1JFQ1VSU0lWRV9UWVBFLCAgSU5ESVJFQ1RMWV9MRUZUX1JFQ1VSU0lWRV9UWVBFIH0gZnJvbSBcIi4uL3R5cGVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlY3Vyc2l2ZURlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3IodHlwZSwgcGFydHMsIHJ1bGVOYW1lLCBkZWZpbml0aW9uLCByZWN1cnNpdmVSdWxlTmFtZXMpIHtcbiAgICBzdXBlcihwYXJ0cyk7XG5cbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgIHRoaXMucnVsZU5hbWUgPSBydWxlTmFtZTtcbiAgICB0aGlzLmRlZmluaXRpb24gPSBkZWZpbml0aW9uO1xuICAgIHRoaXMucmVjdXJzaXZlUnVsZU5hbWVzID0gcmVjdXJzaXZlUnVsZU5hbWVzO1xuICB9XG5cbiAgZ2V0VHlwZSgpIHtcbiAgICByZXR1cm4gdGhpcy50eXBlO1xuICB9XG5cbiAgZ2V0UnVsZU5hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMucnVsZU5hbWU7XG4gIH1cblxuICBnZXREZWZpbml0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmRlZmluaXRpb247XG4gIH1cblxuICBnZXRSZWN1cnNpdmVSdWxlTmFtZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVjdXJzaXZlUnVsZU5hbWVzO1xuICB9XG5cbiAgaXNMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbigpIHtcbiAgICBjb25zdCBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiA9ICgodGhpcy50eXBlID09PSBESVJFQ1RMWV9MRUZUX1JFQ1VSU0lWRV9UWVBFKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0aGlzLnR5cGUgPT09IElORElSRUNUTFlfTEVGVF9SRUNVUlNJVkVfVFlQRSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodGhpcy50eXBlID09PSBJTVBMSUNJVExZX0xFRlRfUkVDVVJTSVZFX1RZUEUpKTtcblxuICAgIHJldHVybiBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbjtcbiAgfVxuXG4gIHJlcGxhY2UocnVsZU1hcCkge1xuICAgIGNvbnN0IHJ1bGUgPSBydWxlTWFwW3RoaXMucnVsZU5hbWVdIHx8IG51bGwsXG4gICAgICAgICAgcmVwbGFjZWREZWZpbml0aW9uID0gdGhpcy5kZWZpbml0aW9uLCAvLy9cbiAgICAgICAgICByZXBsYWNlbWVudERlZmluaXRpb24gPSB0aGlzOyAvLy9cblxuICAgIHJ1bGUucmVwbGFjZURlZmluaXRpb24ocmVwbGFjZWREZWZpbml0aW9uLCByZXBsYWNlbWVudERlZmluaXRpb24pO1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUFuZERlZmluaXRpb24ocnVsZU5hbWUsIGRlZmluaXRpb24pIHtcbiAgICBsZXQgcmVjdXJzaXZlRGVmaW5pdGlvbiA9IG51bGw7XG5cbiAgICBjb25zdCB0eXBlID0gUkVDVVJTSVZFX1RZUEUsXG4gICAgICAgICAgcGFydHMgPSBkZWZpbml0aW9uLmdldFBhcnRzKCksXG4gICAgICAgICAgcmVjdXJzaXZlUnVsZU5hbWVzID0gcmVjdXJzaXZlUnVsZU5hbWVzRnJvbURlZmluaXRpb24oZGVmaW5pdGlvbiksXG4gICAgICAgICAgcmVjdXJzaXZlUnVsZU5hbWVzTGVuZ3RoID0gcmVjdXJzaXZlUnVsZU5hbWVzLmxlbmd0aCxcbiAgICAgICAgICBkZWZpbml0aW9uUmVjdXJzaXZlRGVmaW5pdGlvbiA9IChyZWN1cnNpdmVSdWxlTmFtZXNMZW5ndGggPiAwKTtcblxuICAgIGlmIChkZWZpbml0aW9uUmVjdXJzaXZlRGVmaW5pdGlvbikge1xuICAgICAgcmVjdXJzaXZlRGVmaW5pdGlvbiA9IG5ldyBSZWN1cnNpdmVEZWZpbml0aW9uKHR5cGUsIHBhcnRzLCBydWxlTmFtZSwgZGVmaW5pdGlvbiwgcmVjdXJzaXZlUnVsZU5hbWVzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVjdXJzaXZlRGVmaW5pdGlvbjtcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSZWN1cnNpdmVEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3JlY3Vyc2l2ZVwiO1xuXG5pbXBvcnQgeyBMRUZUX1JFQ1VSU0lWRV9UWVBFIH0gZnJvbSBcIi4uL3R5cGVzXCI7XG5pbXBvcnQgeyBpc0RlZmluaXRpb25MZWZ0UmVjdXJzaXZlLCByZWN1cnNpdmVSdWxlTmFtZXNGcm9tRGVmaW5pdGlvbiwgbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lc0Zyb21EZWZpbml0aW9uIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9kZWZpbml0aW9uXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExlZnRSZWN1cnNpdmVEZWZpbml0aW9uIGV4dGVuZHMgUmVjdXJzaXZlRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHR5cGUsIHBhcnRzLCBydWxlTmFtZSwgZGVmaW5pdGlvbiwgcmVjdXJzaXZlUnVsZU5hbWVzLCBsZWZ0UmVjdXJzaXZlUnVsZU5hbWVzKSB7XG4gICAgc3VwZXIodHlwZSwgcGFydHMsIHJ1bGVOYW1lLCBkZWZpbml0aW9uLCByZWN1cnNpdmVSdWxlTmFtZXMpO1xuXG4gICAgdGhpcy5sZWZ0UmVjdXJzaXZlUnVsZU5hbWVzID0gbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lcztcbiAgfVxuXG4gIGdldExlZnRSZWN1cnNpdmVSdWxlTmFtZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMubGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lcztcbiAgfVxuXG4gIHJld3JpdGUocnVsZU1hcCkge1xuICAgIC8vL1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUFuZERlZmluaXRpb24ocnVsZU5hbWUsIGRlZmluaXRpb24pIHtcbiAgICBsZXQgbGVmdFJlY3Vyc2l2ZURlZmluaXRpb24gPSBudWxsO1xuXG4gICAgY29uc3QgZGVmaW5pdGlvbkxlZnRSZWN1cnNpdmUgPSBpc0RlZmluaXRpb25MZWZ0UmVjdXJzaXZlKGRlZmluaXRpb24pO1xuXG4gICAgaWYgKGRlZmluaXRpb25MZWZ0UmVjdXJzaXZlKSB7XG4gICAgICBjb25zdCB0eXBlID0gTEVGVF9SRUNVUlNJVkVfVFlQRSxcbiAgICAgICAgICAgIHBhcnRzID0gZGVmaW5pdGlvbi5nZXRQYXJ0cygpLFxuICAgICAgICAgICAgcmVjdXJzaXZlUnVsZU5hbWVzID0gcmVjdXJzaXZlUnVsZU5hbWVzRnJvbURlZmluaXRpb24oZGVmaW5pdGlvbiksXG4gICAgICAgICAgICBsZWZ0UmVjdXJzaXZlUnVsZU5hbWVzID0gbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lc0Zyb21EZWZpbml0aW9uKGRlZmluaXRpb24pO1xuXG4gICAgICBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiA9IG5ldyBMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbih0eXBlLCBwYXJ0cywgcnVsZU5hbWUsIGRlZmluaXRpb24sIHJlY3Vyc2l2ZVJ1bGVOYW1lcywgbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxlZnRSZWN1cnNpdmVEZWZpbml0aW9uO1xuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgTm9uVGVybWluYWxOb2RlIH0gZnJvbSBcIm9jY2FtLXBhcnNlcnNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVkdWNlZE5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2RlcykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoUmVkdWNlZE5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0luc3RhbmNlT2YoaW5zdGFuY2UsIENsYXNzKSB7XG4gIGNvbnN0IGNvbnN0cnVjdG9yID0gaW5zdGFuY2UuY29uc3RydWN0b3I7XG5cbiAgaWYgKGNvbnN0cnVjdG9yKSB7XG4gICAgaWYgKGNvbnN0cnVjdG9yLm5hbWUgPT09IENsYXNzLm5hbWUpIHsgIC8vL1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHByb3RvdHlwZSA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihjb25zdHJ1Y3Rvcik7XG5cbiAgICAgIHJldHVybiBpc1Byb3RvdHlwZUluc3RhbmNlT2YocHJvdG90eXBlLCBDbGFzcyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBpc1Byb3RvdHlwZUluc3RhbmNlT2YocHJvdG90eXBlLCBDbGFzcykge1xuICBpZiAocHJvdG90eXBlKSB7XG4gICAgaWYgKHByb3RvdHlwZS5uYW1lID09PSBDbGFzcy5uYW1lKSB7ICAvLy9cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcm90b3R5cGUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YocHJvdG90eXBlKTtcblxuICAgICAgcmV0dXJuIGlzUHJvdG90eXBlSW5zdGFuY2VPZihwcm90b3R5cGUsIENsYXNzKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiByZWR1Y2VkUnVsZU5hbWVGcm9tUnVsZU5hbWUocnVsZU5hbWUpIHtcbiAgY29uc3QgcmVkdWNlZFJ1bGVOYW1lID0gYCR7cnVsZU5hbWV9X2A7XG5cbiAgcmV0dXJuIHJlZHVjZWRSdWxlTmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcGVhdGVkUnVsZU5hbWVGcm9tUnVsZU5hbWUocnVsZU5hbWUpIHtcbiAgY29uc3QgcmVwZWF0ZWRSdWxlTmFtZSA9IGAke3J1bGVOYW1lfX5gO1xuXG4gIHJldHVybiByZXBlYXRlZFJ1bGVOYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcnVsZU5hbWVGcm9tUmVkdWNlZFJ1bGVOYW1lKHJlZHVjZWRSdWxlTmFtZSkge1xuICBjb25zdCBydWxlTmFtZSA9IHJlZHVjZWRSdWxlTmFtZS5yZXBsYWNlKC9fJC8sIFwiXCIpO1xuXG4gIHJldHVybiBydWxlTmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrUmVkdWNlZFJ1bGVOYW1lTWF0Y2hlc1J1bGVOYW1lKHJlZHVjZWRSdWxlTmFtZSwgcnVsZU5hbWUpIHtcbiAgY29uc3QgcnVsZU5hbWVBID0gcnVsZU5hbWU7IC8vL1xuXG4gIHJ1bGVOYW1lID0gcnVsZU5hbWVGcm9tUmVkdWNlZFJ1bGVOYW1lKHJlZHVjZWRSdWxlTmFtZSk7XG5cbiAgY29uc3QgcnVsZU5hbWVCID0gcnVsZU5hbWU7IC8vL1xuXG4gIGNvbnN0IHJlZHVjZWRSdWxlTmFtZU1hdGNoZXNSdWxlTmFtZSA9IChydWxlTmFtZUEgPT09IHJ1bGVOYW1lQik7ICAvLy9cblxuICByZXR1cm4gcmVkdWNlZFJ1bGVOYW1lTWF0Y2hlc1J1bGVOYW1lO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBSdWxlIH0gZnJvbSBcIm9jY2FtLXBhcnNlcnNcIjtcblxuaW1wb3J0IFJlZHVjZWROb2RlIGZyb20gXCIuLi9ub2RlL3JlZHVjZWRcIjtcbmltcG9ydCBSZWN1cnNpdmVEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3JlY3Vyc2l2ZVwiO1xuXG5pbXBvcnQgeyBpc0luc3RhbmNlT2YgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NsYXNzXCI7XG5pbXBvcnQgeyByZWR1Y2VkUnVsZU5hbWVGcm9tUnVsZU5hbWUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3J1bGVOYW1lXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlZHVjZWRSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIGlzRW1wdHkoKSB7XG4gICAgY29uc3QgZGVmaW5pdGlvbnNMZW5ndGggPSB0aGlzLmRlZmluaXRpb25zLmxlbmd0aCxcbiAgICAgICAgICBlbXB0eSA9IChkZWZpbml0aW9uc0xlbmd0aCA9PT0gMCk7XG5cbiAgICByZXR1cm4gZW1wdHk7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGUocnVsZSkge1xuICAgIGxldCBkZWZpbml0aW9ucyA9IHJ1bGUuZ2V0RGVmaW5pdGlvbnMoKTtcblxuICAgIGNvbnN0IHJ1bGVOYW1lID0gcnVsZS5nZXROYW1lKCksXG4gICAgICAgICAgcmVkdWNlZFJ1bGVOYW1lID0gcmVkdWNlZFJ1bGVOYW1lRnJvbVJ1bGVOYW1lKHJ1bGVOYW1lKTtcblxuICAgIGRlZmluaXRpb25zID0gZGVmaW5pdGlvbnMuZmlsdGVyKChkZWZpbml0aW9uKSA9PiB7XG4gICAgICBsZXQgcmVjdXJzaXZlRGVmaW5pdGlvbkxlZnRSZWN1cnNpdmVEZWZpbml0aW9uID0gZmFsc2U7XG5cbiAgICAgIGNvbnN0IGRlZmluaXRpb25SZWN1cnNpdmVEZWZpbml0aW9uID0gaXNJbnN0YW5jZU9mKGRlZmluaXRpb24sIFJlY3Vyc2l2ZURlZmluaXRpb24pO1xuXG4gICAgICBpZiAoZGVmaW5pdGlvblJlY3Vyc2l2ZURlZmluaXRpb24pIHtcbiAgICAgICAgY29uc3QgcmVjdXJzaXZlRGVmaW5pdGlvbiA9IGRlZmluaXRpb247IC8vL1xuXG4gICAgICAgIHJlY3Vyc2l2ZURlZmluaXRpb25MZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiA9IHJlY3Vyc2l2ZURlZmluaXRpb24uaXNMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbigpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXJlY3Vyc2l2ZURlZmluaXRpb25MZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IG5hbWUgPSByZWR1Y2VkUnVsZU5hbWUsXG4gICAgICAgICAgYW1iaWd1b3VzID0gZmFsc2UsXG4gICAgICAgICAgTm9uVGVybWluYWxOb2RlID0gUmVkdWNlZE5vZGUsICAvLy9cbiAgICAgICAgICByZWR1Y2VkUnVsZSA9IG5ldyBSZWR1Y2VkUnVsZShuYW1lLCBhbWJpZ3VvdXMsIGRlZmluaXRpb25zLCBOb25UZXJtaW5hbE5vZGUpO1xuXG4gICAgcmV0dXJuIHJlZHVjZWRSdWxlO1xuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgTm9uVGVybWluYWxOb2RlIH0gZnJvbSBcIm9jY2FtLXBhcnNlcnNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVwZWF0ZWROb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgc3RhdGljIGZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMocnVsZU5hbWUsIGNoaWxkTm9kZXMpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKFJlcGVhdGVkTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgUnVsZSB9IGZyb20gXCJvY2NhbS1wYXJzZXJzXCI7XG5cbmltcG9ydCBSZXBlYXRlZE5vZGUgZnJvbSBcIi4uL25vZGUvcmVwZWF0ZWRcIjtcblxuaW1wb3J0IHsgcmVwZWF0ZWRSdWxlTmFtZUZyb21SdWxlTmFtZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvcnVsZU5hbWVcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVwZWF0ZWRSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIHN0YXRpYyBmcm9tUnVsZShydWxlKSB7XG4gICAgY29uc3QgcnVsZU5hbWUgPSBydWxlLmdldE5hbWUoKSxcbiAgICAgICAgICByZXBlYXRlZFJ1bGVOYW1lID0gcmVwZWF0ZWRSdWxlTmFtZUZyb21SdWxlTmFtZShydWxlTmFtZSksXG4gICAgICAgICAgbmFtZSA9IHJlcGVhdGVkUnVsZU5hbWUsICAvLy9cbiAgICAgICAgICBhbWJpZ3VvdXMgPSBmYWxzZSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtdLFxuICAgICAgICAgIE5vblRlcm1pbmFsTm9kZSA9IFJlcGVhdGVkTm9kZSwgLy8vXG4gICAgICAgICAgcmVwZWF0ZWRSdWxlID0gbmV3IFJlcGVhdGVkUnVsZShuYW1lLCBhbWJpZ3VvdXMsIGRlZmluaXRpb25zLCBOb25UZXJtaW5hbE5vZGUpO1xuXG4gICAgcmV0dXJuIHJlcGVhdGVkUnVsZTtcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IFBhcnRzIH0gZnJvbSBcIm9jY2FtLXBhcnNlcnNcIjtcblxuY29uc3QgeyBSdWxlTmFtZVBhcnQsIFplcm9Pck1vcmVQYXJ0c1BhcnQgfSA9IFBhcnRzO1xuXG5leHBvcnQgZnVuY3Rpb24gcnVsZU5hbWVQYXJ0RnJvbVJ1bGVOYW1lKHJ1bGVOYW1lLCBsb29rQWhlYWQgPSBmYWxzZSkge1xuICBjb25zdCBydWxlTmFtZVBhcnQgPSBuZXcgUnVsZU5hbWVQYXJ0KHJ1bGVOYW1lLCBsb29rQWhlYWQpO1xuXG4gIHJldHVybiBydWxlTmFtZVBhcnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB6ZXJvT3JNb3JlUnVsZU5hbWVQYXJ0UGFydEZyb21SdWxlTmFtZShydWxlTmFtZSkge1xuICBjb25zdCBydWxlTmFtZVBhcnQgPSBydWxlTmFtZVBhcnRGcm9tUnVsZU5hbWUocnVsZU5hbWUpLFxuICAgICAgICB6ZXJvT3JNb3JlUnVsZU5hbWVQYXJ0UGFydCA9IG5ldyBaZXJvT3JNb3JlUGFydHNQYXJ0KHJ1bGVOYW1lUGFydCk7XG5cbiAgcmV0dXJuIHplcm9Pck1vcmVSdWxlTmFtZVBhcnRQYXJ0O1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBEZWZpbml0aW9uIH0gZnJvbSBcIm9jY2FtLXBhcnNlcnNcIjtcblxuaW1wb3J0IHsgcnVsZU5hbWVQYXJ0RnJvbVJ1bGVOYW1lIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9wYXJ0XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ1bGVOYW1lRGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBzdGF0aWMgZnJvbVJ1bGVOYW1lKHJ1bGVOYW1lKSB7XG4gICAgY29uc3QgcnVsZU5hbWVQYXJ0ID0gcnVsZU5hbWVQYXJ0RnJvbVJ1bGVOYW1lKHJ1bGVOYW1lKSxcbiAgICAgICAgICBwYXJ0cyA9IFtcbiAgICAgICAgICAgIHJ1bGVOYW1lUGFydFxuICAgICAgICAgIF0sXG4gICAgICAgICAgcnVsZU5hbWVEZWZpbml0aW9uID0gbmV3IFJ1bGVOYW1lRGVmaW5pdGlvbihwYXJ0cyk7XG5cbiAgICByZXR1cm4gcnVsZU5hbWVEZWZpbml0aW9uO1xuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgUnVsZSB9IGZyb20gXCJvY2NhbS1wYXJzZXJzXCI7XG5cbmltcG9ydCBSdWxlTmFtZURlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vcnVsZU5hbWVcIjtcbmltcG9ydCBSZWN1cnNpdmVEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3JlY3Vyc2l2ZVwiO1xuXG5pbXBvcnQgeyBpc0luc3RhbmNlT2YgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NsYXNzXCI7XG5pbXBvcnQgeyByZWR1Y2VkUnVsZU5hbWVGcm9tUnVsZU5hbWUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3J1bGVOYW1lXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJld3JpdHRlblJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgc3RhdGljIGZyb21SdWxlKHJ1bGUpIHtcbiAgICBsZXQgZGVmaW5pdGlvbnMgPSBydWxlLmdldERlZmluaXRpb25zKCk7XG5cbiAgICBjb25zdCBydWxlTmFtZSA9IHJ1bGUuZ2V0TmFtZSgpLFxuICAgICAgICAgIHJlZHVjZWRSdWxlTmFtZSA9IHJlZHVjZWRSdWxlTmFtZUZyb21SdWxlTmFtZShydWxlTmFtZSksXG4gICAgICAgICAgcmVkdWNlZFJ1bGVOYW1lRGVmaW5pdGlvbiA9IFJ1bGVOYW1lRGVmaW5pdGlvbi5mcm9tUnVsZU5hbWUocmVkdWNlZFJ1bGVOYW1lKTtcblxuICAgIGRlZmluaXRpb25zID0gZGVmaW5pdGlvbnMuZmlsdGVyKChkZWZpbml0aW9uKSA9PiB7XG4gICAgICBsZXQgcmVjdXJzaXZlRGVmaW5pdGlvbkxlZnRSZWN1cnNpdmVEZWZpbml0aW9uID0gZmFsc2U7XG5cbiAgICAgIGNvbnN0IGRlZmluaXRpb25SZWN1cnNpdmVEZWZpbml0aW9uID0gaXNJbnN0YW5jZU9mKGRlZmluaXRpb24sIFJlY3Vyc2l2ZURlZmluaXRpb24pO1xuXG4gICAgICBpZiAoZGVmaW5pdGlvblJlY3Vyc2l2ZURlZmluaXRpb24pIHtcbiAgICAgICAgY29uc3QgcmVjdXJzaXZlRGVmaW5pdGlvbiA9IGRlZmluaXRpb247IC8vL1xuXG4gICAgICAgIHJlY3Vyc2l2ZURlZmluaXRpb25MZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiA9IHJlY3Vyc2l2ZURlZmluaXRpb24uaXNMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbigpO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVjdXJzaXZlRGVmaW5pdGlvbkxlZnRSZWN1cnNpdmVEZWZpbml0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAuLi5kZWZpbml0aW9ucyxcbiAgICAgIHJlZHVjZWRSdWxlTmFtZURlZmluaXRpb25cbiAgICBdO1xuXG4gICAgY29uc3QgbmFtZSA9IHJ1bGVOYW1lLCAgLy8vXG4gICAgICAgICAgYW1iaWd1b3VzID0gcnVsZS5pc0FtYmlndW91cygpLFxuICAgICAgICAgIE5vblRlcm1pbmFsTm9kZSA9IHJ1bGUuZ2V0Tm9uVGVybWluYWxOb2RlKCksXG4gICAgICAgICAgcmV3cml0dGVuUnVsZSA9IG5ldyBSZXdyaXR0ZW5SdWxlKG5hbWUsIGFtYmlndW91cywgZGVmaW5pdGlvbnMsIE5vblRlcm1pbmFsTm9kZSk7XG5cbiAgICByZXR1cm4gcmV3cml0dGVuUnVsZTtcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBjbG9uZVBhcnRzKHBhcnRzKSB7XG4gIHBhcnRzID0gcGFydHMubWFwKChwYXJ0KSA9PiBwYXJ0LmNsb25lKCkpO1xuXG4gIHJldHVybiBwYXJ0cztcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgRGVmaW5pdGlvbiB9IGZyb20gXCJvY2NhbS1wYXJzZXJzXCI7XG5cbmltcG9ydCB7IGNsb25lUGFydHMgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3BhcnRzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlcGVhdGVkRGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBzdGF0aWMgZnJvbURlZmluaXRpb24oZGVmaW5pdGlvbikge1xuICAgIGNvbnN0IHBhcnRzID0gZGVmaW5pdGlvbi5nZXRQYXJ0cygpLFxuICAgICAgICAgIHJlcGVhdGVkRGVmaW5pdGlvbiA9IHJlcGVhdGVkRGVmaW5pdGlvbkZyb21QYXJ0cyhwYXJ0cyk7XG5cbiAgICByZXR1cm4gcmVwZWF0ZWREZWZpbml0aW9uO1xuICB9XG5cbiAgc3RhdGljIGZyb21JbXBsaWNpdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24oaW1wbGljaXRseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uKSB7XG4gICAgY29uc3QgcGFydHMgPSBpbXBsaWNpdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24uZ2V0UGFydHMoKSxcbiAgICAgICAgICByZXBlYXRlZERlZmluaXRpb24gPSByZXBlYXRlZERlZmluaXRpb25Gcm9tUGFydHMocGFydHMpO1xuXG4gICAgcmV0dXJuIHJlcGVhdGVkRGVmaW5pdGlvbjtcbiAgfVxufVxuXG5mdW5jdGlvbiByZXBlYXRlZERlZmluaXRpb25Gcm9tUGFydHMocGFydHMpIHtcbiAgcGFydHMgPSBjbG9uZVBhcnRzKHBhcnRzKTsgIC8vL1xuXG4gIHBhcnRzLnNoaWZ0KCk7ICAvLy9cblxuICBjb25zdCByZXBlYXRlZERlZmluaXRpb24gPSBuZXcgUmVwZWF0ZWREZWZpbml0aW9uKHBhcnRzKTtcblxuICByZXR1cm4gcmVwZWF0ZWREZWZpbml0aW9uO1xufSIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgRGVmaW5pdGlvbiB9IGZyb20gXCJvY2NhbS1wYXJzZXJzXCI7XG5cbmltcG9ydCB7IGNsb25lUGFydHMgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3BhcnRzXCI7XG5pbXBvcnQgeyBpc0RlZmluaXRpb25VbmFyeSwgaXNEZWZpbml0aW9uTG9va0FoZWFkIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9kZWZpbml0aW9uXCI7XG5pbXBvcnQgeyByZXBlYXRlZFJ1bGVOYW1lRnJvbVJ1bGVOYW1lLCByZWR1Y2VkUnVsZU5hbWVGcm9tUnVsZU5hbWUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3J1bGVOYW1lXCI7XG5pbXBvcnQgeyBydWxlTmFtZVBhcnRGcm9tUnVsZU5hbWUsIHplcm9Pck1vcmVSdWxlTmFtZVBhcnRQYXJ0RnJvbVJ1bGVOYW1lIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9wYXJ0XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJld3JpdHRlbkRlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgc3RhdGljIGZyb21EZWZpbml0aW9uQW5kTGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lKGRlZmluaXRpb24sIGxlZnRSZWN1cnNpdmVSdWxlTmFtZSkge1xuICAgIGNvbnN0IGRlZmluaXRpb25Mb29rQWhlYWQgPSBpc0RlZmluaXRpb25Mb29rQWhlYWQoZGVmaW5pdGlvbiksXG4gICAgICAgICAgcGFydHMgPSBkZWZpbml0aW9uLmdldFBhcnRzKCksXG4gICAgICAgICAgbG9va0FoZWFkID0gZGVmaW5pdGlvbkxvb2tBaGVhZCwgIC8vL1xuICAgICAgICAgIHJld3JpdHRlbkRlZmluaXRpb24gPSByZXBlYXRlZERlZmluaXRpb25Gcm9tUGFydHNMb29rQWhlYWRBbmRMZWZ0UmVjdXJzaXZlUnVsZU5hbWUocGFydHMsIGxvb2tBaGVhZCwgbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lKTtcblxuICAgIHJldHVybiByZXdyaXR0ZW5EZWZpbml0aW9uO1xuICB9XG5cbiAgc3RhdGljIGZyb21EZWZpbml0aW9uTGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lQW5kSW1wbGljaXRseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uKGRlZmluaXRpb24sIGxlZnRSZWN1cnNpdmVSdWxlTmFtZSwgaW1wbGljaXRseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uKSB7XG4gICAgY29uc3QgZGVmaW5pdGlvbkxvb2tBaGVhZCA9IGlzRGVmaW5pdGlvbkxvb2tBaGVhZChkZWZpbml0aW9uKSxcbiAgICAgICAgICBwYXJ0cyA9IGltcGxpY2l0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbi5nZXRQYXJ0cygpLFxuICAgICAgICAgIGxvb2tBaGVhZCA9IGRlZmluaXRpb25Mb29rQWhlYWQsICAvLy9cbiAgICAgICAgICByZXdyaXR0ZW5EZWZpbml0aW9uID0gcmVwZWF0ZWREZWZpbml0aW9uRnJvbVBhcnRzTG9va0FoZWFkQW5kTGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lKHBhcnRzLCBsb29rQWhlYWQsIGxlZnRSZWN1cnNpdmVSdWxlTmFtZSk7XG5cbiAgICByZXR1cm4gcmV3cml0dGVuRGVmaW5pdGlvbjtcbiAgfVxufVxuXG5mdW5jdGlvbiByZXBlYXRlZERlZmluaXRpb25Gcm9tUGFydHNMb29rQWhlYWRBbmRMZWZ0UmVjdXJzaXZlUnVsZU5hbWUocGFydHMsIGxvb2tBaGVhZCwgbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lKSB7XG4gIHBhcnRzID0gY2xvbmVQYXJ0cyhwYXJ0cyk7ICAvLy9cblxuICBwYXJ0cy5zaGlmdCgpOyAgLy8vXG5cbiAgY29uc3QgcmVwZWF0ZWRSdWxlTmFtZSA9IHJlcGVhdGVkUnVsZU5hbWVGcm9tUnVsZU5hbWUobGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lKSxcbiAgICAgICAgcmVkdWNlZExlZnRSZWN1cnNpdmVSdWxlTmFtZSA9IHJlZHVjZWRSdWxlTmFtZUZyb21SdWxlTmFtZShsZWZ0UmVjdXJzaXZlUnVsZU5hbWUpLFxuICAgICAgICB6ZXJvT3JNb3JlUmVwZWF0ZWRSdWxlTmFtZVBhcnQgPSB6ZXJvT3JNb3JlUnVsZU5hbWVQYXJ0UGFydEZyb21SdWxlTmFtZShyZXBlYXRlZFJ1bGVOYW1lKSxcbiAgICAgICAgcmVkdWNlZExlZnRSZWN1cnNpdmVSdWxlTmFtZVBhcnQgPSBydWxlTmFtZVBhcnRGcm9tUnVsZU5hbWUocmVkdWNlZExlZnRSZWN1cnNpdmVSdWxlTmFtZSwgbG9va0FoZWFkKSxcbiAgICAgICAgcmV3cml0dGVuRGVmaW5pdGlvbiA9IG5ldyBSZXdyaXR0ZW5EZWZpbml0aW9uKHBhcnRzKTtcblxuICBwYXJ0cy51bnNoaWZ0KHJlZHVjZWRMZWZ0UmVjdXJzaXZlUnVsZU5hbWVQYXJ0KTtcblxuICBwYXJ0cy5wdXNoKHplcm9Pck1vcmVSZXBlYXRlZFJ1bGVOYW1lUGFydCk7XG5cbiAgcmV0dXJuIHJld3JpdHRlbkRlZmluaXRpb247XG59IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBpc0luc3RhbmNlT2YgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NsYXNzXCI7XG5pbXBvcnQgeyByZXBlYXRlZFJ1bGVOYW1lRnJvbVJ1bGVOYW1lLCByZWR1Y2VkUnVsZU5hbWVGcm9tUnVsZU5hbWUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3J1bGVOYW1lXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiByZWR1Y2VkUnVsZUZyb21SdWxlKHJ1bGUsIHJ1bGVNYXAsIFJlZHVjZWRSdWxlKSB7XG5cdGNvbnN0IHJ1bGVOYW1lID0gcnVsZS5nZXROYW1lKCksXG5cdFx0XHRcdHJlZHVjZWRSdWxlTmFtZSA9IHJlZHVjZWRSdWxlTmFtZUZyb21SdWxlTmFtZShydWxlTmFtZSk7XG5cblx0bGV0IHJlZHVjZWRSdWxlID0gcnVsZU1hcFtyZWR1Y2VkUnVsZU5hbWVdIHx8IG51bGw7XG5cblx0aWYgKHJlZHVjZWRSdWxlID09PSBudWxsKSB7XG4gICAgcmVkdWNlZFJ1bGUgPSBSZWR1Y2VkUnVsZS5mcm9tUnVsZShydWxlKTtcblxuICAgIHJ1bGVNYXBbcmVkdWNlZFJ1bGVOYW1lXSA9IHJlZHVjZWRSdWxlO1xuXHR9XG5cblx0cmV0dXJuIHJlZHVjZWRSdWxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVwZWF0ZWRSdWxlRnJvbVJ1bGUocnVsZSwgcnVsZU1hcCwgUmVwZWF0ZWRSdWxlKSB7XG4gIGNvbnN0IHJ1bGVOYW1lID0gcnVsZS5nZXROYW1lKCksXG4gICAgICAgIHJlcGVhdGVkUnVsZU5hbWUgPSByZXBlYXRlZFJ1bGVOYW1lRnJvbVJ1bGVOYW1lKHJ1bGVOYW1lKTtcblxuICBsZXQgcmVwZWF0ZWRSdWxlID0gcnVsZU1hcFtyZXBlYXRlZFJ1bGVOYW1lXSB8fCBudWxsO1xuXG4gIGlmIChyZXBlYXRlZFJ1bGUgPT09IG51bGwpIHtcbiAgICByZXBlYXRlZFJ1bGUgPSBSZXBlYXRlZFJ1bGUuZnJvbVJ1bGUocnVsZSk7XG5cbiAgICBydWxlTWFwW3JlcGVhdGVkUnVsZU5hbWVdID0gcmVwZWF0ZWRSdWxlO1xuICB9XG5cbiAgcmV0dXJuIHJlcGVhdGVkUnVsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJld3JpdHRlblJ1bGVGcm9tUnVsZShydWxlLCBydWxlTWFwLCBSZXdyaXR0ZW5SdWxlKSB7XG4gIGxldCByZXdyaXR0ZW5SdWxlO1xuXG4gIGNvbnN0IHJ1bGVSZXdyaXR0ZW5SdWxlID0gaXNJbnN0YW5jZU9mKHJ1bGUsIFJld3JpdHRlblJ1bGUpO1xuXG4gIGlmIChydWxlUmV3cml0dGVuUnVsZSkge1xuICAgIHJld3JpdHRlblJ1bGUgPSBydWxlOyAvLy9cbiAgfSBlbHNlIHtcbiAgICByZXdyaXR0ZW5SdWxlID0gUmV3cml0dGVuUnVsZS5mcm9tUnVsZShydWxlKTtcblxuICAgIGNvbnN0IHJlcGxhY2VkUnVsZSA9IHJ1bGUsICAvLy9cbiAgICAgICAgICByZXBsYWNlbWVudFJ1bGUgPSByZXdyaXR0ZW5SdWxlOyAgLy8vXG5cbiAgICByZXBsYWNlUnVsZShyZXBsYWNlZFJ1bGUsIHJlcGxhY2VtZW50UnVsZSwgcnVsZU1hcCk7XG4gIH1cblxuICByZXR1cm4gcmV3cml0dGVuUnVsZTtcbn1cblxuZnVuY3Rpb24gcmVwbGFjZVJ1bGUocmVwbGFjZWRSdWxlLCByZXBsYWNlbWVudFJ1bGUsIHJ1bGVNYXApIHtcbiAgY29uc3QgcmVwbGFjZWRSdWxlTmFtZSA9IHJlcGxhY2VkUnVsZS5nZXROYW1lKCksXG4gICAgICAgIHJlcGxhY2VtZW50UnVsZU5hbWUgPSByZXBsYWNlbWVudFJ1bGUuZ2V0TmFtZSgpO1xuXG4gIGRlbGV0ZSBydWxlTWFwW3JlcGxhY2VkUnVsZU5hbWVdO1xuXG4gIHJ1bGVNYXBbcmVwbGFjZW1lbnRSdWxlTmFtZV0gPSByZXBsYWNlbWVudFJ1bGU7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSZWR1Y2VkUnVsZSBmcm9tIFwiLi4vLi4vcnVsZS9yZWR1Y2VkXCI7XG5pbXBvcnQgUmVwZWF0ZWRSdWxlIGZyb20gXCIuLi8uLi9ydWxlL3JlcGVhdGVkXCI7XG5pbXBvcnQgUmV3cml0dGVuUnVsZSBmcm9tIFwiLi4vLi4vcnVsZS9yZXdyaXR0ZW5cIjtcbmltcG9ydCBSZXBlYXRlZERlZmluaXRpb24gZnJvbSBcIi4uLy4uL2RlZmluaXRpb24vcmVwZWF0ZWRcIjtcbmltcG9ydCBSZXdyaXR0ZW5EZWZpbml0aW9uIGZyb20gXCIuLi8uLi9kZWZpbml0aW9uL3Jld3JpdHRlblwiO1xuaW1wb3J0IExlZnRSZWN1cnNpdmVEZWZpbml0aW9uIGZyb20gXCIuLi8uLi9kZWZpbml0aW9uL2xlZnRSZWN1cnNpdmVcIjtcblxuaW1wb3J0IHsgRElSRUNUTFlfTEVGVF9SRUNVUlNJVkVfVFlQRSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuaW1wb3J0IHsgcmVkdWNlZFJ1bGVGcm9tUnVsZSwgcmVwZWF0ZWRSdWxlRnJvbVJ1bGUsIHJld3JpdHRlblJ1bGVGcm9tUnVsZSB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvcnVsZVwiO1xuaW1wb3J0IHsgaXNEZWZpbml0aW9uVW5hcnksIGlzRGVmaW5pdGlvbkNvbXBsZXgsIGlzRGVmaW5pdGlvbkxlZnRSZWN1cnNpdmUsIHJlY3Vyc2l2ZVJ1bGVOYW1lc0Zyb21EZWZpbml0aW9uLCBsZWZ0UmVjdXJzaXZlUnVsZU5hbWVzRnJvbURlZmluaXRpb24gfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2RlZmluaXRpb25cIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiBleHRlbmRzIExlZnRSZWN1cnNpdmVEZWZpbml0aW9uIHtcbiAgcmV3cml0ZShydWxlTWFwKSB7XG4gICAgY29uc3QgZGVmaW5pdGlvbiA9IHRoaXMuZ2V0RGVmaW5pdGlvbigpLFxuICAgICAgICAgIHJ1bGVOYW1lID0gdGhpcy5nZXRSdWxlTmFtZSgpLFxuICAgICAgICAgIHJ1bGUgPSBydWxlTWFwW3J1bGVOYW1lXTtcblxuICAgIGNvbnN0IHJlZHVjZWRSdWxlID0gcmVkdWNlZFJ1bGVGcm9tUnVsZShydWxlLCBydWxlTWFwLCBSZWR1Y2VkUnVsZSksXG4gICAgICAgICAgcmVkdWNlZFJ1bGVFbXB0eSA9IHJlZHVjZWRSdWxlLmlzRW1wdHkoKTtcblxuICAgIGlmIChyZWR1Y2VkUnVsZUVtcHR5KSB7XG4gICAgICBjb25zdCBkZWZpbml0aW9uU3RyaW5nID0gZGVmaW5pdGlvbi5hc1N0cmluZygpO1xuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSAnJHtkZWZpbml0aW9uU3RyaW5nfScgZGlyZWN0bHkgbGVmdCByZWN1cnNpdmUgZGVmaW5pdGlvbiBvZiB0aGUgJyR7cnVsZU5hbWV9JyBydWxlIGhhcyBubyBzaWJsaW5nIG5vbi1sZWZ0IHJlY3Vyc2l2ZSBkZWZpbml0aW9ucyBhbmQgdGhlcmVmb3JlIGNhbm5vdCBiZSByZXdyaXR0ZW4uYCk7XG4gICAgfVxuXG4gICAgY29uc3QgbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lID0gcnVsZU5hbWU7IC8vL1xuXG4gICAgY29uc3QgcmVwZWF0ZWRSdWxlID0gcmVwZWF0ZWRSdWxlRnJvbVJ1bGUocnVsZSwgcnVsZU1hcCwgUmVwZWF0ZWRSdWxlKSxcbiAgICAgICAgICByZXBlYXRlZERlZmluaXRpb24gPSBSZXBlYXRlZERlZmluaXRpb24uZnJvbURlZmluaXRpb24oZGVmaW5pdGlvbik7XG5cbiAgICByZXBlYXRlZFJ1bGUuYWRkRGVmaW5pdGlvbihyZXBlYXRlZERlZmluaXRpb24pO1xuXG4gICAgY29uc3QgcmV3cml0dGVuUnVsZSA9IHJld3JpdHRlblJ1bGVGcm9tUnVsZShydWxlLCBydWxlTWFwLCBSZXdyaXR0ZW5SdWxlKSxcbiAgICAgICAgICByZXBsYWNlZERlZmluaXRpb24gPSB0aGlzLCAvLy9cbiAgICAgICAgICByZXdyaXR0ZW5EZWZpbml0aW9uID0gUmV3cml0dGVuRGVmaW5pdGlvbi5mcm9tRGVmaW5pdGlvbkFuZExlZnRSZWN1cnNpdmVSdWxlTmFtZShkZWZpbml0aW9uLCBsZWZ0UmVjdXJzaXZlUnVsZU5hbWUpLFxuICAgICAgICAgIHJlcGxhY2VtZW50RGVmaW5pdGlvbiA9IHJld3JpdHRlbkRlZmluaXRpb247ICAvLy9cblxuICAgIHJld3JpdHRlblJ1bGUucmVwbGFjZURlZmluaXRpb24ocmVwbGFjZWREZWZpbml0aW9uLCByZXBsYWNlbWVudERlZmluaXRpb24pO1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUFuZERlZmluaXRpb24ocnVsZU5hbWUsIGRlZmluaXRpb24pIHtcbiAgICBsZXQgZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiA9IG51bGw7XG5cbiAgICBjb25zdCBkZWZpbml0aW9uTGVmdFJlY3Vyc2l2ZSA9IGlzRGVmaW5pdGlvbkxlZnRSZWN1cnNpdmUoZGVmaW5pdGlvbik7XG5cbiAgICBpZiAoZGVmaW5pdGlvbkxlZnRSZWN1cnNpdmUpIHtcbiAgICAgIGNvbnN0IGxlZnRSZWN1cnNpdmVSdWxlTmFtZXMgPSBsZWZ0UmVjdXJzaXZlUnVsZU5hbWVzRnJvbURlZmluaXRpb24oZGVmaW5pdGlvbik7XG5cbiAgICAgIGxlZnRSZWN1cnNpdmVSdWxlTmFtZXMuc29tZSgobGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lKSA9PiB7XG4gICAgICAgIGNvbnN0IHJ1bGVOYW1lTGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lID0gKHJ1bGVOYW1lID09PSBsZWZ0UmVjdXJzaXZlUnVsZU5hbWUpO1xuXG4gICAgICAgIGlmIChydWxlTmFtZUxlZnRSZWN1cnNpdmVSdWxlTmFtZSkge1xuICAgICAgICAgIGNvbnN0IGRlZmluaXRpb25VbmFyeSA9IGlzRGVmaW5pdGlvblVuYXJ5KGRlZmluaXRpb24pO1xuXG4gICAgICAgICAgaWYgKGRlZmluaXRpb25VbmFyeSkge1xuICAgICAgICAgICAgY29uc3QgZGVmaW5pdGlvblN0cmluZyA9IGRlZmluaXRpb24uYXNTdHJpbmcoKTtcblxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgJyR7ZGVmaW5pdGlvblN0cmluZ30nIGRpcmVjdGx5IGxlZnQgcmVjdXJzaXZlIGRlZmluaXRpb24gb2YgdGhlICcke3J1bGVOYW1lfScgcnVsZSBpcyB1bmFyeSBhbmQgdGhlcmVmb3JlIGNhbm5vdCBiZSByZXdyaXR0ZW4uYCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgZGVmaW5pdGlvbkNvbXBsZXggPSBpc0RlZmluaXRpb25Db21wbGV4KGRlZmluaXRpb24pO1xuXG4gICAgICAgICAgaWYgKGRlZmluaXRpb25Db21wbGV4KSB7XG4gICAgICAgICAgICBjb25zdCBkZWZpbml0aW9uU3RyaW5nID0gZGVmaW5pdGlvbi5hc1N0cmluZygpO1xuXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSAnJHtkZWZpbml0aW9uU3RyaW5nfScgZGlyZWN0bHkgbGVmdCByZWN1cnNpdmUgZGVmaW5pdGlvbiBvZiB0aGUgJyR7cnVsZU5hbWV9JyBydWxlIGlzIGNvbXBsZXggYW5kIHRoZXJlZm9yZSBjYW5ub3QgYmUgcmV3cml0dGVuLmApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHR5cGUgPSBESVJFQ1RMWV9MRUZUX1JFQ1VSU0lWRV9UWVBFLFxuICAgICAgICAgICAgICAgIHBhcnRzID0gW10sXG4gICAgICAgICAgICAgICAgcmVjdXJzaXZlUnVsZU5hbWVzID0gcmVjdXJzaXZlUnVsZU5hbWVzRnJvbURlZmluaXRpb24oZGVmaW5pdGlvbik7XG5cbiAgICAgICAgICBkaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uID0gbmV3IERpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24odHlwZSwgcGFydHMsIHJ1bGVOYW1lLCBkZWZpbml0aW9uLCByZWN1cnNpdmVSdWxlTmFtZXMsIGxlZnRSZWN1cnNpdmVSdWxlTmFtZXMpO1xuXG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBkaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uO1xuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCBMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiBmcm9tIFwiLi4vLi4vZGVmaW5pdGlvbi9sZWZ0UmVjdXJzaXZlXCI7XG5cbmltcG9ydCB7IExFRlRfUkVDVVJTSVZFX1RZUEUsIElNUExJQ0lUTFlfTEVGVF9SRUNVUlNJVkVfVFlQRSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuXG5jb25zdCB7IGZpcnN0IH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSW1wbGljaXRseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uIGV4dGVuZHMgTGVmdFJlY3Vyc2l2ZURlZmluaXRpb24ge1xuICBjb25zdHJ1Y3Rvcih0eXBlLCBwYXJ0cywgcnVsZU5hbWUsIGRlZmluaXRpb24sIHJlY3Vyc2l2ZVJ1bGVOYW1lcywgbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lcywgbGVmdFJlY3Vyc2l2ZURlZmluaXRpb24pIHtcbiAgICBzdXBlcih0eXBlLCBwYXJ0cywgcnVsZU5hbWUsIGRlZmluaXRpb24sIHJlY3Vyc2l2ZVJ1bGVOYW1lcywgbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lcyk7XG5cbiAgICB0aGlzLmxlZnRSZWN1cnNpdmVEZWZpbml0aW9uID0gbGVmdFJlY3Vyc2l2ZURlZmluaXRpb247XG4gIH1cblxuICBnZXRMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbigpIHtcbiAgICB0aGlzLmxlZnRSZWN1cnNpdmVEZWZpbml0aW9uID0gbGVmdFJlY3Vyc2l2ZURlZmluaXRpb247XG4gIH1cblxuICByZXBsYWNlKHJ1bGVNYXApIHtcbiAgICBjb25zdCBydWxlID0gcnVsZU1hcFt0aGlzLnJ1bGVOYW1lXSxcbiAgICAgICAgICByZXBsYWNlZERlZmluaXRpb24gPSB0aGlzLmxlZnRSZWN1cnNpdmVEZWZpbml0aW9uLCAgLy8vXG4gICAgICAgICAgcmVwbGFjZW1lbnREZWZpbml0aW9uID0gdGhpczsgLy8vXG5cbiAgICBydWxlLnJlcGxhY2VEZWZpbml0aW9uKHJlcGxhY2VkRGVmaW5pdGlvbiwgcmVwbGFjZW1lbnREZWZpbml0aW9uKTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVMZWZ0UmVjdXJzaXZlUnVsZU5hbWVBbmRSZWN1cnNpdmVEZWZpbml0aW9ucyhydWxlTmFtZSwgbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lLCByZWN1cnNpdmVEZWZpbml0aW9ucykge1xuICAgIGxldCBpbXBsaWNpdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24gPSBudWxsO1xuXG4gICAgY29uc3QgbGVmdFJlY3Vyc2l2ZURlZmluaXRpb24gPSBmaW5kTGVmdFJlY3Vyc2l2ZURlZmluaXRpb24ocnVsZU5hbWUsIGxlZnRSZWN1cnNpdmVSdWxlTmFtZSwgcmVjdXJzaXZlRGVmaW5pdGlvbnMpO1xuXG4gICAgaWYgKGxlZnRSZWN1cnNpdmVEZWZpbml0aW9uICE9PSBudWxsKSB7XG4gICAgICBjb25zdCB0eXBlID0gSU1QTElDSVRMWV9MRUZUX1JFQ1VSU0lWRV9UWVBFLFxuICAgICAgICAgICAgcGFydHMgPSBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbi5nZXRQYXJ0cygpLFxuICAgICAgICAgICAgcnVsZU5hbWUgPSBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbi5nZXRSdWxlTmFtZSgpLFxuICAgICAgICAgICAgZGVmaW5pdGlvbiA9IG51bGwsIC8vL1xuICAgICAgICAgICAgcmVjdXJzaXZlUnVsZU5hbWVzID0gbGVmdFJlY3Vyc2l2ZURlZmluaXRpb24uZ2V0UmVjdXJzaXZlUnVsZU5hbWVzKCksXG4gICAgICAgICAgICBsZWZ0UmVjdXJzaXZlUnVsZU5hbWVzID0gbGVmdFJlY3Vyc2l2ZURlZmluaXRpb24uZ2V0TGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lcygpO1xuXG4gICAgICBpbXBsaWNpdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24gPSBuZXcgSW1wbGljaXRseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uKHR5cGUsIHBhcnRzLCBydWxlTmFtZSwgZGVmaW5pdGlvbiwgcmVjdXJzaXZlUnVsZU5hbWVzLCBsZWZ0UmVjdXJzaXZlUnVsZU5hbWVzLCBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGltcGxpY2l0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbjtcbiAgfVxufVxuXG5mdW5jdGlvbiBmaW5kTGVmdFJlY3Vyc2l2ZURlZmluaXRpb24ocnVsZU5hbWUsIGxlZnRSZWN1cnNpdmVSdWxlTmFtZSwgcmVjdXJzaXZlRGVmaW5pdGlvbnMpIHtcbiAgbGV0IGxlZnRSZWN1cnNpdmVEZWZpbml0aW9uID0gbnVsbDtcblxuICBjb25zdCBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnNQYXRoID0gZmluZExlZnRSZWN1cnNpdmVEZWZpbml0aW9uc1BhdGgocnVsZU5hbWUsIGxlZnRSZWN1cnNpdmVSdWxlTmFtZSwgcmVjdXJzaXZlRGVmaW5pdGlvbnMpO1xuXG4gIGlmIChsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnNQYXRoICE9PSBudWxsKSB7XG4gICAgY29uc3QgZmlyc3RMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiA9IGZpcnN0KGxlZnRSZWN1cnNpdmVEZWZpbml0aW9uc1BhdGgpO1xuXG4gICAgbGVmdFJlY3Vyc2l2ZURlZmluaXRpb24gPSBmaXJzdExlZnRSZWN1cnNpdmVEZWZpbml0aW9uOyAvLy9cbiAgfVxuXG4gIHJldHVybiBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbjtcbn1cblxuZnVuY3Rpb24gZmluZFJlY3Vyc2l2ZURlZmluaXRpb25zUGF0aChydWxlTmFtZSwgcmVjdXJzaXZlUnVsZU5hbWUsIHJlY3Vyc2l2ZURlZmluaXRpb25zKSB7XG4gIGxldCByZWN1cnNpdmVEZWZpbml0aW9uc1BhdGggPSBudWxsO1xuXG4gIHJlY3Vyc2l2ZURlZmluaXRpb25zLnNvbWUoKHJlY3Vyc2l2ZURlZmluaXRpb24sIGluZGV4KSA9PiB7XG4gICAgY29uc3QgcmVjdXJzaXZlRGVmaW5pdGlvblJ1bGVOYW1lID0gcmVjdXJzaXZlRGVmaW5pdGlvbi5nZXRSdWxlTmFtZSgpLFxuICAgICAgICAgIHJlY3Vyc2l2ZURlZmluaXRpb25SdWxlTmFtZVJlY3Vyc2l2ZVJ1bGVOYW1lID0gKHJlY3Vyc2l2ZURlZmluaXRpb25SdWxlTmFtZSA9PT0gcmVjdXJzaXZlUnVsZU5hbWUpO1xuXG4gICAgaWYgKHJlY3Vyc2l2ZURlZmluaXRpb25SdWxlTmFtZVJlY3Vyc2l2ZVJ1bGVOYW1lKSB7XG4gICAgICByZWN1cnNpdmVEZWZpbml0aW9uc1BhdGggPSByZWN1cnNpdmVEZWZpbml0aW9ucy5zbGljZShpbmRleCk7XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHJlY3Vyc2l2ZURlZmluaXRpb25zUGF0aDtcbn1cblxuZnVuY3Rpb24gZmluZExlZnRSZWN1cnNpdmVEZWZpbml0aW9uc1BhdGgocnVsZU5hbWUsIGxlZnRSZWN1cnNpdmVSdWxlTmFtZSwgcmVjdXJzaXZlRGVmaW5pdGlvbnMpIHtcbiAgbGV0IGxlZnRSZWN1cnNpdmVEZWZpbml0aW9uc1BhdGggPSBudWxsO1xuXG4gIGNvbnN0IHJlY3Vyc2l2ZVJ1bGVOYW1lID0gbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lLCAgLy8vXG4gICAgICByZWN1cnNpdmVEZWZpbml0aW9uc1BhdGggPSBmaW5kUmVjdXJzaXZlRGVmaW5pdGlvbnNQYXRoKHJ1bGVOYW1lLCByZWN1cnNpdmVSdWxlTmFtZSwgcmVjdXJzaXZlRGVmaW5pdGlvbnMpO1xuXG4gIGlmIChyZWN1cnNpdmVEZWZpbml0aW9uc1BhdGggIT09IG51bGwpIHtcbiAgICBjb25zdCByZWN1cnNpdmVEZWZpbml0aW9uc1BhdGhMZWZ0UmVjdXJzaXZlID0gaXNSZWN1cnNpdmVEZWZpbml0aW9uc1BhdGhMZWZ0UmVjdXJzaXZlKHJ1bGVOYW1lLCByZWN1cnNpdmVEZWZpbml0aW9uc1BhdGgpO1xuXG4gICAgaWYgKHJlY3Vyc2l2ZURlZmluaXRpb25zUGF0aExlZnRSZWN1cnNpdmUpIHtcbiAgICAgIGxlZnRSZWN1cnNpdmVEZWZpbml0aW9uc1BhdGggPSByZWN1cnNpdmVEZWZpbml0aW9uc1BhdGg7ICAvLy9cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zUGF0aDtcbn1cblxuZnVuY3Rpb24gaXNSZWN1cnNpdmVEZWZpbml0aW9uc1BhdGhMZWZ0UmVjdXJzaXZlKHJ1bGVOYW1lLCByZWN1cnNpdmVEZWZpbml0aW9uc1BhdGgpIHtcbiAgY29uc3QgcnVsZU5hbWVzID0gcnVsZU5hbWVzRnJvbVJ1bGVOYW1lQW5kUmVjdXJzaXZlRGVmaW5pdGlvbnNQYXRoKHJ1bGVOYW1lLCByZWN1cnNpdmVEZWZpbml0aW9uc1BhdGgpLFxuICAgICAgICByZWN1cnNpdmVEZWZpbml0aW9uc1BhdGhMZWZ0UmVjdXJzaXZlID0gcmVjdXJzaXZlRGVmaW5pdGlvbnNQYXRoLmV2ZXJ5KChyZWN1cnNpdmVEZWZpbml0aW9uLCBpbmRleCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHR5cGUgPSByZWN1cnNpdmVEZWZpbml0aW9uLmdldFR5cGUoKTtcblxuICAgICAgICAgIGlmICh0eXBlID09PSBMRUZUX1JFQ1VSU0lWRV9UWVBFKSB7XG4gICAgICAgICAgICBjb25zdCBydWxlTmFtZSA9IHJ1bGVOYW1lc1tpbmRleF0sXG4gICAgICAgICAgICAgICAgICBsZWZ0UmVjdXJzaXZlUnVsZU5hbWVzID0gcmVjdXJzaXZlRGVmaW5pdGlvbi5nZXRMZWZ0UmVjdXJzaXZlUnVsZU5hbWVzKCksXG4gICAgICAgICAgICAgICAgICBsZWZ0UmVjdXJzaXZlUnVsZU5hbWVzSW5jbHVkZXNSdWxlTmFtZSA9IGxlZnRSZWN1cnNpdmVSdWxlTmFtZXMuaW5jbHVkZXMocnVsZU5hbWUpO1xuXG4gICAgICAgICAgICBpZiAobGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lc0luY2x1ZGVzUnVsZU5hbWUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICByZXR1cm4gcmVjdXJzaXZlRGVmaW5pdGlvbnNQYXRoTGVmdFJlY3Vyc2l2ZTtcbn1cblxuZnVuY3Rpb24gcnVsZU5hbWVzRnJvbVJ1bGVOYW1lQW5kUmVjdXJzaXZlRGVmaW5pdGlvbnNQYXRoKHJ1bGVOYW1lLCByZWN1cnNpdmVEZWZpbml0aW9uc1BhdGgpIHtcbiAgY29uc3QgcnVsZU5hbWVzID0gcmVjdXJzaXZlRGVmaW5pdGlvbnNQYXRoLm1hcCgocmVjdXJzaXZlRGVmaW5pdGlvbikgPT4gcmVjdXJzaXZlRGVmaW5pdGlvbi5nZXRSdWxlTmFtZSgpKTtcblxuICBydWxlTmFtZXMucHVzaChydWxlTmFtZSk7XG5cbiAgY29uc3QgZmlyc3RSdWxlTmFtZSA9IHJ1bGVOYW1lcy5zaGlmdCgpLFxuICAgICAgICBsYXN0UnVsZU5hbWUgPSBmaXJzdFJ1bGVOYW1lOyAvLy9cblxuICBydWxlTmFtZXMucHVzaChsYXN0UnVsZU5hbWUpO1xuXG4gIHJldHVybiBydWxlTmFtZXM7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IERlZmluaXRpb24gfSBmcm9tIFwib2NjYW0tcGFyc2Vyc1wiO1xuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmNvbnN0IHsgZmlyc3QgfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5pbXBvcnQgeyBjbG9uZVBhcnRzIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9wYXJ0c1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBVbmFyeURlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgc3RhdGljIGZyb21EZWZpbml0aW9uKGRlZmluaXRpb24pIHtcbiAgICBsZXQgcGFydHMgPSBkZWZpbml0aW9uLmdldFBhcnRzKCk7XG5cbiAgICBjb25zdCBmaXJzdFBhcnQgPSBmaXJzdChwYXJ0cyk7XG5cbiAgICBwYXJ0cyA9IFsgZmlyc3RQYXJ0IF07XG5cbiAgICBwYXJ0cyA9IGNsb25lUGFydHMocGFydHMpOyAgLy8vXG5cbiAgICBjb25zdCB1bmFyeURlZmluaXRpb24gPSBuZXcgVW5hcnlEZWZpbml0aW9uKHBhcnRzKTtcblxuICAgIHJldHVybiB1bmFyeURlZmluaXRpb247XG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IFJlZHVjZWRSdWxlIGZyb20gXCIuLi8uLi9ydWxlL3JlZHVjZWRcIjtcbmltcG9ydCBSZXBlYXRlZFJ1bGUgZnJvbSBcIi4uLy4uL3J1bGUvcmVwZWF0ZWRcIjtcbmltcG9ydCBSZXdyaXR0ZW5SdWxlIGZyb20gXCIuLi8uLi9ydWxlL3Jld3JpdHRlblwiO1xuaW1wb3J0IFJlcGVhdGVkRGVmaW5pdGlvbiBmcm9tIFwiLi4vLi4vZGVmaW5pdGlvbi9yZXBlYXRlZFwiO1xuaW1wb3J0IFJld3JpdHRlbkRlZmluaXRpb24gZnJvbSBcIi4uLy4uL2RlZmluaXRpb24vcmV3cml0dGVuXCI7XG5pbXBvcnQgTGVmdFJlY3Vyc2l2ZURlZmluaXRpb24gZnJvbSBcIi4uLy4uL2RlZmluaXRpb24vbGVmdFJlY3Vyc2l2ZVwiO1xuaW1wb3J0IEltcGxpY2l0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiBmcm9tIFwiLi4vLi4vZGVmaW5pdGlvbi9sZWZ0UmVjdXJzaXZlL2ltcGxpY2l0bHlcIjtcblxuaW1wb3J0IHsgSU5ESVJFQ1RMWV9MRUZUX1JFQ1VSU0lWRV9UWVBFIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5pbXBvcnQgeyByZWR1Y2VkUnVsZUZyb21SdWxlLCByZXBlYXRlZFJ1bGVGcm9tUnVsZSwgcmV3cml0dGVuUnVsZUZyb21SdWxlIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9ydWxlXCI7XG5pbXBvcnQgeyBpc0RlZmluaXRpb25VbmFyeSxcbiAgICAgICAgIGlzRGVmaW5pdGlvbkNvbXBsZXgsXG4gICAgICAgICBpc0RlZmluaXRpb25MZWZ0UmVjdXJzaXZlLFxuICAgICAgICAgdW5hcnlEZWZpbml0aW9uZnJvbURlZmluaXRpb24sXG4gICAgICAgICByZWN1cnNpdmVSdWxlTmFtZXNGcm9tRGVmaW5pdGlvbixcbiAgICAgICAgIGxlZnRSZWN1cnNpdmVSdWxlTmFtZXNGcm9tRGVmaW5pdGlvbiB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvZGVmaW5pdGlvblwiO1xuaW1wb3J0IFVuYXJ5RGVmaW5pdGlvbiBmcm9tIFwiLi4vdW5hcnlcIjtcblxuY29uc3QgeyBmaXJzdCB9ID0gYXJyYXlVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiBleHRlbmRzIExlZnRSZWN1cnNpdmVEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3IodHlwZSwgcGFydHMsIHJ1bGVOYW1lLCBkZWZpbml0aW9uLCByZWN1cnNpdmVSdWxlTmFtZXMsIGxlZnRSZWN1cnNpdmVSdWxlTmFtZXMsIGltcGxpY2l0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbikge1xuICAgIHN1cGVyKHR5cGUsIHBhcnRzLCBydWxlTmFtZSwgZGVmaW5pdGlvbiwgcmVjdXJzaXZlUnVsZU5hbWVzLCBsZWZ0UmVjdXJzaXZlUnVsZU5hbWVzKTtcblxuICAgIHRoaXMuaW1wbGljaXRseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uID0gaW1wbGljaXRseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uO1xuICB9XG5cbiAgZ2V0SW1wbGljaXRseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmltcGxpY2l0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbjtcbiAgfVxuXG4gIHJld3JpdGUocnVsZU1hcCkge1xuICAgIGNvbnN0IHJ1bGVOYW1lID0gdGhpcy5nZXRSdWxlTmFtZSgpLFxuICAgICAgICAgIHJ1bGUgPSBydWxlTWFwW3J1bGVOYW1lXSxcbiAgICAgICAgICBkZWZpbml0aW9uID0gdGhpcy5nZXREZWZpbml0aW9uKCksXG4gICAgICAgICAgZGVmaW5pdGlvblVuYXJ5ID0gaXNEZWZpbml0aW9uVW5hcnkoZGVmaW5pdGlvbiksXG4gICAgICAgICAgbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lcyA9IHRoaXMuZ2V0TGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lcygpLFxuICAgICAgICAgIGZpcnN0TGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lID0gZmlyc3QobGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lcyksXG4gICAgICAgICAgbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lID0gZmlyc3RMZWZ0UmVjdXJzaXZlUnVsZU5hbWUsIC8vL1xuICAgICAgICAgIGxlZnRSZWN1cnNpdmVSdWxlID0gcnVsZU1hcFtsZWZ0UmVjdXJzaXZlUnVsZU5hbWVdO1xuXG4gICAgY29uc3QgcmVkdWNlZFJ1bGUgPSByZWR1Y2VkUnVsZUZyb21SdWxlKGxlZnRSZWN1cnNpdmVSdWxlLCBydWxlTWFwLCBSZWR1Y2VkUnVsZSksXG4gICAgICAgICAgcmVkdWNlZFJ1bGVFbXB0eSA9IHJlZHVjZWRSdWxlLmlzRW1wdHkoKTtcblxuICAgIGlmIChyZWR1Y2VkUnVsZUVtcHR5KSB7XG4gICAgICBjb25zdCBkZWZpbml0aW9uU3RyaW5nID0gZGVmaW5pdGlvbi5hc1N0cmluZygpLFxuICAgICAgICAgICAgaW1wbGljaXRseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uID0gdGhpcy5nZXRJbXBsaWNpdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24oKSxcbiAgICAgICAgICAgIGltcGxpY2l0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvblN0cmluZyA9IGltcGxpY2l0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbi5hc1N0cmluZygpO1xuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSAnJHtpbXBsaWNpdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb25TdHJpbmd9JyBpbXBsaWNpdGx5IGxlZnQgcmVjdXJzaXZlIGRlZmluaXRpb24gb2YgdGhlICcke2xlZnRSZWN1cnNpdmVSdWxlTmFtZX0nIHJ1bGUgaGFzIG5vIHNpYmxpbmcgbm9uLWxlZnQgcmVjdXJzaXZlIGRlZmluaXRpb25zIGFuZCB0aGVyZWZvcmUgdGhlICcke2RlZmluaXRpb25TdHJpbmd9JyBpbmRpcmVjdGx5IGxlZnQgcmVjdXJzaXZlIGRlZmluaXRpb24gb2YgdGhlICcke3J1bGVOYW1lfScgcnVsZSBjYW5ub3QgYmUgcmV3cml0dGVuLmApO1xuICAgIH1cblxuICAgIGNvbnN0IHJlcGVhdGVkUnVsZSA9IHJlcGVhdGVkUnVsZUZyb21SdWxlKGxlZnRSZWN1cnNpdmVSdWxlLCBydWxlTWFwLCBSZXBlYXRlZFJ1bGUpLFxuICAgICAgICAgIHJlcGVhdGVkRGVmaW5pdGlvbiA9IGRlZmluaXRpb25VbmFyeSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXBlYXRlZERlZmluaXRpb24uZnJvbUltcGxpY2l0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbih0aGlzLmltcGxpY2l0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbikgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXBlYXRlZERlZmluaXRpb24uZnJvbURlZmluaXRpb24oZGVmaW5pdGlvbik7XG5cbiAgICByZXBlYXRlZFJ1bGUuYWRkRGVmaW5pdGlvbihyZXBlYXRlZERlZmluaXRpb24pO1xuXG4gICAgY29uc3QgcmV3cml0dGVuUnVsZSA9IHJld3JpdHRlblJ1bGVGcm9tUnVsZShsZWZ0UmVjdXJzaXZlUnVsZSwgcnVsZU1hcCwgUmV3cml0dGVuUnVsZSksXG4gICAgICAgICAgcmVwbGFjZWREZWZpbml0aW9uID0gdGhpcywgLy8vXG4gICAgICAgICAgcmV3cml0dGVuRGVmaW5pdGlvbiA9IGRlZmluaXRpb25VbmFyeSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmV3cml0dGVuRGVmaW5pdGlvbi5mcm9tRGVmaW5pdGlvbkxlZnRSZWN1cnNpdmVSdWxlTmFtZUFuZEltcGxpY2l0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbihkZWZpbml0aW9uLCBsZWZ0UmVjdXJzaXZlUnVsZU5hbWUsIHRoaXMuaW1wbGljaXRseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXdyaXR0ZW5EZWZpbml0aW9uLmZyb21EZWZpbml0aW9uQW5kTGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lKGRlZmluaXRpb24sIGxlZnRSZWN1cnNpdmVSdWxlTmFtZSksXG4gICAgICAgICAgcmVwbGFjZW1lbnREZWZpbml0aW9uID0gcmV3cml0dGVuRGVmaW5pdGlvbjsgIC8vL1xuXG4gICAgcnVsZS5yZXBsYWNlRGVmaW5pdGlvbihyZXBsYWNlZERlZmluaXRpb24sIHJlcGxhY2VtZW50RGVmaW5pdGlvbik7XG5cbiAgICBpZiAoZGVmaW5pdGlvblVuYXJ5KSB7XG4gICAgICBjb25zdCB1bmFyeUltcGxpY2l0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiA9IFVuYXJ5RGVmaW5pdGlvbi5mcm9tRGVmaW5pdGlvbih0aGlzLmltcGxpY2l0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiksXG4gICAgICAgICAgICByZXBsYWNlZERlZmluaXRpb24gPSB0aGlzLmltcGxpY2l0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiwgIC8vL1xuICAgICAgICAgICAgcmVwbGFjZW1lbnREZWZpbml0aW9uID0gdW5hcnlJbXBsaWNpdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb247IC8vL1xuXG4gICAgICByZXdyaXR0ZW5SdWxlLnJlcGxhY2VEZWZpbml0aW9uKHJlcGxhY2VkRGVmaW5pdGlvbiwgcmVwbGFjZW1lbnREZWZpbml0aW9uKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lRGVmaW5pdGlvbkFuZFJlY3Vyc2l2ZURlZmluaXRpb25zKHJ1bGVOYW1lLCBkZWZpbml0aW9uLCByZWN1cnNpdmVEZWZpbml0aW9ucykge1xuICAgIGxldCBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24gPSBudWxsO1xuXG4gICAgY29uc3QgZGVmaW5pdGlvbkxlZnRSZWN1cnNpdmUgPSBpc0RlZmluaXRpb25MZWZ0UmVjdXJzaXZlKGRlZmluaXRpb24pO1xuXG4gICAgaWYgKGRlZmluaXRpb25MZWZ0UmVjdXJzaXZlKSB7XG4gICAgICBjb25zdCBsZWZ0UmVjdXJzaXZlUnVsZU5hbWVzID0gbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lc0Zyb21EZWZpbml0aW9uKGRlZmluaXRpb24pO1xuXG4gICAgICBsZWZ0UmVjdXJzaXZlUnVsZU5hbWVzLnNvbWUoKGxlZnRSZWN1cnNpdmVSdWxlTmFtZSkgPT4ge1xuICAgICAgICBjb25zdCBydWxlTmFtZUxlZnRSZWN1cnNpdmVSdWxlTmFtZSA9IChydWxlTmFtZSA9PT0gbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lKTtcblxuICAgICAgICBpZiAoIXJ1bGVOYW1lTGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lKSB7XG4gICAgICAgICAgY29uc3QgaW1wbGljaXRseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uID0gSW1wbGljaXRseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uLmZyb21SdWxlTmFtZUxlZnRSZWN1cnNpdmVSdWxlTmFtZUFuZFJlY3Vyc2l2ZURlZmluaXRpb25zKHJ1bGVOYW1lLCBsZWZ0UmVjdXJzaXZlUnVsZU5hbWUsIHJlY3Vyc2l2ZURlZmluaXRpb25zKTtcblxuICAgICAgICAgIGlmIChpbXBsaWNpdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24gIT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnN0IGRlZmluaXRpb25Db21wbGV4ID0gaXNEZWZpbml0aW9uQ29tcGxleChkZWZpbml0aW9uKTtcblxuICAgICAgICAgICAgaWYgKGRlZmluaXRpb25Db21wbGV4KSB7XG4gICAgICAgICAgICAgIGNvbnN0IGRlZmluaXRpb25TdHJpbmcgPSBkZWZpbml0aW9uLmFzU3RyaW5nKCk7XG5cbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgJyR7ZGVmaW5pdGlvblN0cmluZ30nIGluZGlyZWN0bHkgbGVmdCByZWN1cnNpdmUgZGVmaW5pdGlvbiBvZiB0aGUgJyR7cnVsZU5hbWV9JyBydWxlIGlzIGNvbXBsZXggYW5kIHRoZXJlZm9yZSBjYW5ub3QgYmUgcmV3cml0dGVuLmApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBkZWZpbml0aW9uVW5hcnkgPSBpc0RlZmluaXRpb25VbmFyeShkZWZpbml0aW9uKSxcbiAgICAgICAgICAgICAgICAgIGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvblVuYXJ5ID0gZGVmaW5pdGlvblVuYXJ5LCAvLy9cbiAgICAgICAgICAgICAgICAgIGltcGxpY2l0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvblVuYXJ5ID0gaXNEZWZpbml0aW9uVW5hcnkoaW1wbGljaXRseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uKTtcblxuICAgICAgICAgICAgaWYgKGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvblVuYXJ5ICYmIGltcGxpY2l0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvblVuYXJ5KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGVmaW5pdGlvblN0cmluZyA9IGRlZmluaXRpb24uYXNTdHJpbmcoKSxcbiAgICAgICAgICAgICAgICAgICAgICBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb25TdHJpbmcgPSBkZWZpbml0aW9uU3RyaW5nLCAvLy9cbiAgICAgICAgICAgICAgICAgICAgICBpbXBsaWNpdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb25TdHJpbmcgPSBpbXBsaWNpdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24uYXNTdHJpbmcoKTtcblxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQm90aCB0aGUgJyR7aW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uU3RyaW5nfScgaW5kaXJlY3RseSBsZWZ0IHJlY3Vyc2l2ZSBkZWZpbml0aW9uIG9mIHRoZSAnJHtydWxlTmFtZX0nIHJ1bGUgYW5kIHRoZSBjb3JyZXNwb25kaW5nICcke2ltcGxpY2l0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvblN0cmluZ30nIGltcGxpY2l0bHkgbGVmdCByZWN1cnNpdmUgZGVmaW5pdGlvbiBvZiB0aGUgJyR7bGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lfScgcnVsZSBhcmUgdW5hcnkgYW5kIHRoZXJlZm9yZSBuZWl0aGVyIGNhbiBiZSByZXdyaXR0ZW4uYCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHR5cGUgPSBJTkRJUkVDVExZX0xFRlRfUkVDVVJTSVZFX1RZUEUsXG4gICAgICAgICAgICAgICAgICBwYXJ0cyA9IFtdLFxuICAgICAgICAgICAgICAgICAgcmVjdXJzaXZlUnVsZU5hbWVzID0gcmVjdXJzaXZlUnVsZU5hbWVzRnJvbURlZmluaXRpb24oZGVmaW5pdGlvbik7XG5cbiAgICAgICAgICAgIGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiA9IG5ldyBJbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24odHlwZSwgcGFydHMsIHJ1bGVOYW1lLCBkZWZpbml0aW9uLCByZWN1cnNpdmVSdWxlTmFtZXMsIGxlZnRSZWN1cnNpdmVSdWxlTmFtZXMsIGltcGxpY2l0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbik7XG5cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbjtcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSZWN1cnNpdmVEZWZpbml0aW9uIGZyb20gXCIuL2RlZmluaXRpb24vcmVjdXJzaXZlXCI7XG5pbXBvcnQgTGVmdFJlY3Vyc2l2ZURlZmluaXRpb24gZnJvbSBcIi4vZGVmaW5pdGlvbi9sZWZ0UmVjdXJzaXZlXCI7XG5pbXBvcnQgRGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiBmcm9tIFwiLi9kZWZpbml0aW9uL2xlZnRSZWN1cnNpdmUvZGlyZWN0bHlcIjtcbmltcG9ydCBJbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24gZnJvbSBcIi4vZGVmaW5pdGlvbi9sZWZ0UmVjdXJzaXZlL2luZGlyZWN0bHlcIjtcblxuaW1wb3J0IHsgaXNJbnN0YW5jZU9mIH0gZnJvbSBcIi4vdXRpbGl0aWVzL2NsYXNzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGVsaW1pbmF0ZUxlZnRSZWN1cnNpb24oc3RhcnRSdWxlLCBydWxlTWFwKSB7XG4gIGNvbnN0IHJ1bGUgPSBzdGFydFJ1bGUsIC8vL1xuICAgICAgICByZWN1cnNpdmVEZWZpbml0aW9ucyA9IFtdLFxuICAgICAgICBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMgPSBbXTtcblxuICByZXBsYWNlUmVjdXJzaXZlRGVmaW5pdGlvbnMocnVsZSwgcmVjdXJzaXZlRGVmaW5pdGlvbnMsIGxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucywgcnVsZU1hcCk7XG5cbiAgcmV3cml0ZUxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucyhsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMsIHJ1bGVNYXApO1xuXG4gIGNvbnN0IHN0YXJ0UnVsZU5hbWUgPSBzdGFydFJ1bGUuZ2V0TmFtZSgpO1xuXG4gIHN0YXJ0UnVsZSA9IHJ1bGVNYXBbc3RhcnRSdWxlTmFtZV07IC8vL1xuXG4gIHJldHVybiBzdGFydFJ1bGU7XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VSZWN1cnNpdmVEZWZpbml0aW9uKHJ1bGVOYW1lLCBkZWZpbml0aW9uLCByZWN1cnNpdmVEZWZpbml0aW9ucywgbGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zLCBydWxlTWFwKSB7XG4gIGxldCByZWN1cnNpdmVEZWZpbml0aW9uO1xuXG4gIGNvbnN0IGxlZnRSZWN1cnNpdmVEZWZpbml0aW9uID0gSW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uLmZyb21SdWxlTmFtZURlZmluaXRpb25BbmRSZWN1cnNpdmVEZWZpbml0aW9ucyhydWxlTmFtZSwgZGVmaW5pdGlvbiwgcmVjdXJzaXZlRGVmaW5pdGlvbnMpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbi5mcm9tUnVsZU5hbWVBbmREZWZpbml0aW9uKHJ1bGVOYW1lLCBkZWZpbml0aW9uKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExlZnRSZWN1cnNpdmVEZWZpbml0aW9uLmZyb21SdWxlTmFtZUFuZERlZmluaXRpb24ocnVsZU5hbWUsIGRlZmluaXRpb24pO1xuXG4gIGlmIChsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiA9PT0gbnVsbCkge1xuICAgIHJlY3Vyc2l2ZURlZmluaXRpb24gPSBSZWN1cnNpdmVEZWZpbml0aW9uLmZyb21SdWxlTmFtZUFuZERlZmluaXRpb24ocnVsZU5hbWUsIGRlZmluaXRpb24pO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGxlZnRSZWN1cnNpdmVEZWZpbml0aW9uSW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uID0gaXNJbnN0YW5jZU9mKGxlZnRSZWN1cnNpdmVEZWZpbml0aW9uLCBJbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24pO1xuXG4gICAgaWYgKGxlZnRSZWN1cnNpdmVEZWZpbml0aW9uSW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uKSB7XG4gICAgICBjb25zdCBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24gPSBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiwgIC8vL1xuICAgICAgICAgICAgaW1wbGljaXRseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uID0gaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uLmdldEltcGxpY2l0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbigpO1xuXG4gICAgICBpbXBsaWNpdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24ucmVwbGFjZShydWxlTWFwKTtcbiAgICB9XG5cbiAgICBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMucHVzaChsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbik7XG5cbiAgICByZWN1cnNpdmVEZWZpbml0aW9uID0gbGVmdFJlY3Vyc2l2ZURlZmluaXRpb247ICAvLy9cbiAgfVxuXG4gIGlmIChyZWN1cnNpdmVEZWZpbml0aW9uICE9PSBudWxsKSB7XG4gICAgcmVjdXJzaXZlRGVmaW5pdGlvbi5yZXBsYWNlKHJ1bGVNYXApO1xuICB9XG5cbiAgcmV0dXJuIHJlY3Vyc2l2ZURlZmluaXRpb247XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VSZWN1cnNpdmVEZWZpbml0aW9ucyhydWxlLCByZWN1cnNpdmVEZWZpbml0aW9ucywgbGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zLCBydWxlTWFwKSB7XG4gIGNvbnN0IHJ1bGVOYW1lID0gcnVsZS5nZXROYW1lKCksXG4gICAgICAgIGRlZmluaXRpb25zID0gcnVsZS5nZXREZWZpbml0aW9ucygpO1xuXG4gIGRlZmluaXRpb25zLmZvckVhY2goKGRlZmluaXRpb24pID0+IHtcbiAgICBjb25zdCBkZWZpbml0aW9uUmVjdXJzaXZlRGVmaW5pdGlvbiA9IGlzSW5zdGFuY2VPZihkZWZpbml0aW9uLCBSZWN1cnNpdmVEZWZpbml0aW9uKSxcbiAgICAgICAgICByZWN1cnNpdmVEZWZpbml0aW9uID0gZGVmaW5pdGlvblJlY3Vyc2l2ZURlZmluaXRpb24gP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluaXRpb24gOiAgLy8vXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBsYWNlUmVjdXJzaXZlRGVmaW5pdGlvbihydWxlTmFtZSwgZGVmaW5pdGlvbiwgcmVjdXJzaXZlRGVmaW5pdGlvbnMsIGxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucywgcnVsZU1hcCk7XG5cbiAgICBpZiAocmVjdXJzaXZlRGVmaW5pdGlvbiAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgcHJldmlvdXNSZWN1cnNpdmVEZWZpbml0aW9ucyA9IFsgLi4ucmVjdXJzaXZlRGVmaW5pdGlvbnMsIHJlY3Vyc2l2ZURlZmluaXRpb24gXSxcbiAgICAgICAgICAgIHByZXZpb3VzUmVjdXJzaXZlUnVsZU5hbWVzID0gcHJldmlvdXNSZWN1cnNpdmVEZWZpbml0aW9ucy5tYXAoKHByZXZpb3VzUmVjdXJzaXZlRGVmaW5pdGlvbikgPT4gcmVjdXJzaXZlUnVsZU5hbWVGcm9tUmVjdXJzaXZlRGVmaW5pdGlvbihwcmV2aW91c1JlY3Vyc2l2ZURlZmluaXRpb24pKSxcbiAgICAgICAgICAgIHJlY3Vyc2l2ZVJ1bGVOYW1lcyA9IHJlY3Vyc2l2ZURlZmluaXRpb24uZ2V0UmVjdXJzaXZlUnVsZU5hbWVzKCk7XG5cbiAgICAgIHJlY3Vyc2l2ZVJ1bGVOYW1lcy5mb3JFYWNoKChyZWN1cnNpdmVSdWxlTmFtZSkgPT4ge1xuICAgICAgICBjb25zdCBwcmV2aW91c1JlY3Vyc2l2ZVJ1bGVOYW1lc0luY2x1ZGVzUmVjdXJzaXZlUnVsZU5hbWUgPSBwcmV2aW91c1JlY3Vyc2l2ZVJ1bGVOYW1lcy5pbmNsdWRlcyhyZWN1cnNpdmVSdWxlTmFtZSk7XG5cbiAgICAgICAgaWYgKCFwcmV2aW91c1JlY3Vyc2l2ZVJ1bGVOYW1lc0luY2x1ZGVzUmVjdXJzaXZlUnVsZU5hbWUpIHtcbiAgICAgICAgICBjb25zdCBydWxlTmFtZSA9IHJlY3Vyc2l2ZVJ1bGVOYW1lLCAgLy8vXG4gICAgICAgICAgICAgICAgcnVsZSA9IHJ1bGVNYXBbcnVsZU5hbWVdIHx8IG51bGw7IC8vL1xuXG4gICAgICAgICAgaWYgKHJ1bGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlY3Vyc2l2ZURlZmluaXRpb25zID0gcHJldmlvdXNSZWN1cnNpdmVEZWZpbml0aW9uczsgIC8vL1xuXG4gICAgICAgICAgICByZXBsYWNlUmVjdXJzaXZlRGVmaW5pdGlvbnMocnVsZSwgcmVjdXJzaXZlRGVmaW5pdGlvbnMsIGxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucywgcnVsZU1hcCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiByZXdyaXRlTGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zKGxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucywgcnVsZU1hcCkge1xuICBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMuZm9yRWFjaCgobGVmdFJlY3Vyc2l2ZURlZmluaXRpb24pID0+IGxlZnRSZWN1cnNpdmVEZWZpbml0aW9uLnJld3JpdGUocnVsZU1hcCkpO1xufVxuXG5mdW5jdGlvbiByZWN1cnNpdmVSdWxlTmFtZUZyb21SZWN1cnNpdmVEZWZpbml0aW9uKHJlY3Vyc2l2ZURlZmluaXRpb24pIHtcbiAgY29uc3QgcmVjdXJzaXZlRGVmaW5pdGlvblJ1bGVOYW1lID0gcmVjdXJzaXZlRGVmaW5pdGlvbi5nZXRSdWxlTmFtZSgpLFxuICAgICAgICByZWN1cnNpdmVSdWxlTmFtZSA9IHJlY3Vyc2l2ZURlZmluaXRpb25SdWxlTmFtZTsgIC8vL1xuXG4gIHJldHVybiByZWN1cnNpdmVSdWxlTmFtZTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgQk5GTGV4ZXIgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5pbXBvcnQgeyBCTkZQYXJzZXIsIHJ1bGVzVXRpbGl0aWVzIH0gZnJvbSBcIm9jY2FtLXBhcnNlcnNcIjtcblxuaW1wb3J0IHsgc3RhcnRSdWxlRnJvbVJ1bGVzQW5kU3RhcnRSdWxlTmFtZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvcnVsZXNcIjtcblxuaW1wb3J0IGVsaW1pbmF0ZUxlZnRSZWN1cnNpb24gIGZyb20gXCIuLi9lbGltaW5hdGVMZWZ0UmVjdXJzaW9uXCI7XG5cbmNvbnN0IHsgcnVsZU1hcEZyb21SdWxlcywgc3RhcnRSdWxlRnJvbVJ1bGVzIH0gPSBydWxlc1V0aWxpdGllcztcblxuY29uc3QgYm5mTGV4ZXIgPSBCTkZMZXhlci5mcm9tTm90aGluZygpLFxuICAgICAgYm5mUGFyc2VyID0gQk5GUGFyc2VyLmZyb21Ob3RoaW5nKCk7XG5cbmV4cG9ydCBmdW5jdGlvbiBydWxlc0Zyb21CTkYoYm5mKSB7XG4gIGNvbnN0IHRva2VucyA9IGJuZkxleGVyLnRva2Vuc0Zyb21CTkYoYm5mKSxcbiAgICAgICAgcnVsZXMgPSBibmZQYXJzZXIucnVsZXNGcm9tVG9rZW5zKHRva2Vucyk7XG5cbiAgcmV0dXJuIHJ1bGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VyRnJvbVJ1bGVzKENsYXNzLCBydWxlcykge1xuICBjb25zdCBydWxlTWFwID0gcnVsZU1hcEZyb21SdWxlcyhydWxlcyk7XG5cbiAgbGV0IHN0YXJ0UnVsZSA9IHN0YXJ0UnVsZUZyb21SdWxlcyhydWxlcyk7XG5cbiAgc3RhcnRSdWxlID0gZWxpbWluYXRlTGVmdFJlY3Vyc2lvbihzdGFydFJ1bGUsIHJ1bGVNYXApO1xuXG4gIGNvbnN0IHBhcnNlciA9IG5ldyBDbGFzcyhzdGFydFJ1bGUsIHJ1bGVNYXApO1xuXG4gIHJldHVybiBwYXJzZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZXJGcm9tUnVsZXNBbmRTdGFydFJ1bGVOYW1lKENsYXNzLCBydWxlcywgc3RhcnRSdWxlTmFtZSkge1xuICBjb25zdCBydWxlTWFwID0gcnVsZU1hcEZyb21SdWxlcyhydWxlcyk7XG5cbiAgbGV0IHN0YXJ0UnVsZSA9IHN0YXJ0UnVsZUZyb21SdWxlc0FuZFN0YXJ0UnVsZU5hbWUocnVsZXMsIHN0YXJ0UnVsZU5hbWUpO1xuXG4gIHN0YXJ0UnVsZSA9IGVsaW1pbmF0ZUxlZnRSZWN1cnNpb24oc3RhcnRSdWxlLCBydWxlTWFwKTtcblxuICBjb25zdCBwYXJzZXIgPSBuZXcgQ2xhc3Moc3RhcnRSdWxlLCBydWxlTWFwKTtcblxuICByZXR1cm4gcGFyc2VyO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIHJ1bGVzRnJvbUJORixcbiAgcGFyc2VyRnJvbVJ1bGVzLFxuICBwYXJzZXJGcm9tUnVsZXNBbmRTdGFydFJ1bGVOYW1lXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUmVkdWNlZE5vZGUgZnJvbSBcIi4vbm9kZS9yZWR1Y2VkXCI7XG5pbXBvcnQgUmVwZWF0ZWROb2RlIGZyb20gXCIuL25vZGUvcmVwZWF0ZWRcIjtcblxuaW1wb3J0IHsgaXNJbnN0YW5jZU9mIH0gZnJvbSBcIi4vdXRpbGl0aWVzL2NsYXNzXCI7XG5pbXBvcnQgeyBydWxlTmFtZUZyb21SZWR1Y2VkUnVsZU5hbWUsIGNoZWNrUmVkdWNlZFJ1bGVOYW1lTWF0Y2hlc1J1bGVOYW1lIH0gZnJvbSBcIi4vdXRpbGl0aWVzL3J1bGVOYW1lXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlbW92ZU9yUmVuYW1lSW50ZXJtZWRpYXRlTm9kZXMobm9kZSkge1xuICByZW1vdmVPclJlbmFtZVJlZHVjZWROb2Rlcyhub2RlKTtcblxuICByZW1vdmVSZXBlYXRlZE5vZGVzKG5vZGUpO1xufVxuXG5mdW5jdGlvbiByZW1vdmVSZXBlYXRlZE5vZGVzKG5vZGUpIHtcbiAgY29uc3Qgbm9kZU5vblRlcm1pbmFsTm9kZSA9IG5vZGUuaXNOb25UZXJtaW5hbE5vZGUoKTtcblxuICBpZiAobm9kZU5vblRlcm1pbmFsTm9kZSkge1xuICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IG5vZGU7IC8vL1xuXG4gICAgbGV0IGNoaWxkTm9kZXMgPSBub25UZXJtaW5hbE5vZGUuZ2V0Q2hpbGROb2RlcygpO1xuXG4gICAgY2hpbGROb2RlcyA9IHJlbW92ZVJlcGVhdGVkQ2hpbGROb2RlcyhjaGlsZE5vZGVzKTtcblxuICAgIG5vblRlcm1pbmFsTm9kZS5zZXRDaGlsZE5vZGVzKGNoaWxkTm9kZXMpXG4gIH1cbn1cblxuZnVuY3Rpb24gcmVtb3ZlUmVwZWF0ZWRDaGlsZE5vZGVzKGNoaWxkTm9kZXMpIHtcbiAgY2hpbGROb2RlcyA9IGNoaWxkTm9kZXMucmVkdWNlKChjaGlsZE5vZGVzLCBjaGlsZE5vZGUpID0+IHtcbiAgICBjb25zdCBjaGlsZE5vZGVSZXBlYXRlZE5vZGUgPSBpc0luc3RhbmNlT2YoY2hpbGROb2RlLCBSZXBlYXRlZE5vZGUpO1xuXG4gICAgaWYgKGNoaWxkTm9kZVJlcGVhdGVkTm9kZSkge1xuICAgICAgbGV0IGNoaWxkTm9kZUNoaWxkTm9kZXMgPSBjaGlsZE5vZGUuZ2V0Q2hpbGROb2RlcygpO1xuXG4gICAgICBjaGlsZE5vZGVDaGlsZE5vZGVzID0gcmVtb3ZlUmVwZWF0ZWRDaGlsZE5vZGVzKGNoaWxkTm9kZUNoaWxkTm9kZXMpO1xuXG4gICAgICBjaGlsZE5vZGVzID0gY2hpbGROb2Rlcy5jb25jYXQoY2hpbGROb2RlQ2hpbGROb2Rlcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlbW92ZVJlcGVhdGVkTm9kZXMoY2hpbGROb2RlKTtcblxuICAgICAgY2hpbGROb2Rlcy5wdXNoKGNoaWxkTm9kZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNoaWxkTm9kZXM7XG4gIH0sIFtdKTtcblxuICByZXR1cm4gY2hpbGROb2Rlcztcbn1cblxuZnVuY3Rpb24gcmVtb3ZlT3JSZW5hbWVSZWR1Y2VkTm9kZXMobm9kZSkge1xuICBjb25zdCBub2RlTm9uVGVybWluYWxOb2RlID0gbm9kZS5pc05vblRlcm1pbmFsTm9kZSgpO1xuXG4gIGlmIChub2RlTm9uVGVybWluYWxOb2RlKSB7XG4gICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gbm9kZSwgLy8vXG4gICAgICAgICAgcnVsZU5hbWUgPSBub25UZXJtaW5hbE5vZGUuZ2V0UnVsZU5hbWUoKTtcblxuICAgIGxldCBjaGlsZE5vZGVzID0gbm9uVGVybWluYWxOb2RlLmdldENoaWxkTm9kZXMoKTtcblxuICAgIGNoaWxkTm9kZXMgPSByZW1vdmVPclJlbmFtZVJlZHVjZWRDaGlsZE5vZGVzKGNoaWxkTm9kZXMsIHJ1bGVOYW1lKTtcblxuICAgIG5vblRlcm1pbmFsTm9kZS5zZXRDaGlsZE5vZGVzKGNoaWxkTm9kZXMpXG4gIH1cbn1cblxuZnVuY3Rpb24gcmVtb3ZlT3JSZW5hbWVSZWR1Y2VkQ2hpbGROb2RlcyhjaGlsZE5vZGVzLCBydWxlTmFtZSkge1xuICBjb25zdCBjaGlsZE5vZGVzTGVuZ3RoID0gY2hpbGROb2Rlcy5sZW5ndGg7XG5cbiAgY2hpbGROb2RlcyA9IGNoaWxkTm9kZXMucmVkdWNlKChjaGlsZE5vZGVzLCBjaGlsZE5vZGUpID0+IHtcbiAgICBjb25zdCBjaGlsZE5vZGVSZWR1Y2VkTm9kZSA9IGlzSW5zdGFuY2VPZihjaGlsZE5vZGUsIFJlZHVjZWROb2RlKTtcblxuICAgIGlmIChjaGlsZE5vZGVSZWR1Y2VkTm9kZSkge1xuICAgICAgY29uc3QgcmVkdWNlZE5vZGUgPSBjaGlsZE5vZGUsIC8vL1xuICAgICAgICAgICAgcmVkdWNlZE5vZGVSdWxlTmFtZSA9IHJlZHVjZWROb2RlLmdldFJ1bGVOYW1lKCksXG4gICAgICAgICAgICByZWR1Y2VkUnVsZU5hbWUgPSByZWR1Y2VkTm9kZVJ1bGVOYW1lLCAgLy8vXG4gICAgICAgICAgICByZWR1Y2VkUnVsZU5hbWVNYXRjaGVzUnVsZU5hbWUgPSBjaGVja1JlZHVjZWRSdWxlTmFtZU1hdGNoZXNSdWxlTmFtZShyZWR1Y2VkUnVsZU5hbWUsIHJ1bGVOYW1lKTtcblxuICAgICAgaWYgKHJlZHVjZWRSdWxlTmFtZU1hdGNoZXNSdWxlTmFtZSkge1xuICAgICAgICBpZiAoY2hpbGROb2Rlc0xlbmd0aCA+IDEpIHtcbiAgICAgICAgICBjb25zdCBydWxlTmFtZSA9IHJ1bGVOYW1lRnJvbVJlZHVjZWRSdWxlTmFtZShyZWR1Y2VkUnVsZU5hbWUpO1xuXG4gICAgICAgICAgY2hpbGROb2RlLnNldFJ1bGVOYW1lKHJ1bGVOYW1lKTtcblxuICAgICAgICAgIHJlbW92ZU9yUmVuYW1lUmVkdWNlZE5vZGVzKGNoaWxkTm9kZSk7XG5cbiAgICAgICAgICBjaGlsZE5vZGVzLnB1c2goY2hpbGROb2RlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsZXQgY2hpbGROb2RlQ2hpbGROb2RlcyA9IGNoaWxkTm9kZS5nZXRDaGlsZE5vZGVzKCk7XG5cbiAgICAgICAgICBjaGlsZE5vZGVDaGlsZE5vZGVzID0gcmVtb3ZlT3JSZW5hbWVSZWR1Y2VkQ2hpbGROb2RlcyhjaGlsZE5vZGVDaGlsZE5vZGVzKTtcblxuICAgICAgICAgIGNoaWxkTm9kZXMgPSBjaGlsZE5vZGVzLmNvbmNhdChjaGlsZE5vZGVDaGlsZE5vZGVzKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcnVsZU5hbWUgPSBydWxlTmFtZUZyb21SZWR1Y2VkUnVsZU5hbWUocmVkdWNlZFJ1bGVOYW1lKTtcblxuICAgICAgICBjaGlsZE5vZGUuc2V0UnVsZU5hbWUocnVsZU5hbWUpO1xuXG4gICAgICAgIHJlbW92ZU9yUmVuYW1lUmVkdWNlZE5vZGVzKGNoaWxkTm9kZSk7XG5cbiAgICAgICAgY2hpbGROb2Rlcy5wdXNoKGNoaWxkTm9kZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlbW92ZU9yUmVuYW1lUmVkdWNlZE5vZGVzKGNoaWxkTm9kZSk7XG5cbiAgICAgIGNoaWxkTm9kZXMucHVzaChjaGlsZE5vZGUpO1xuICAgIH1cblxuICAgIHJldHVybiBjaGlsZE5vZGVzO1xuICB9LCBbXSk7XG5cbiAgcmV0dXJuIGNoaWxkTm9kZXM7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgcGFyc2VyVXRpbGl0aWVzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL3BhcnNlclwiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIGVsaW1pbmF0ZUxlZnRSZWN1cnNpb24gfSBmcm9tIFwiLi9lbGltaW5hdGVMZWZ0UmVjdXJzaW9uXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHJlbW92ZU9yUmVuYW1lSW50ZXJtZWRpYXRlTm9kZXMgfSBmcm9tIFwiLi9yZW1vdmVPclJlbmFtZUludGVybWVkaWF0ZU5vZGVzXCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IENvbW1vblBhcnNlciB9IGZyb20gXCJvY2NhbS1wYXJzZXJzXCI7XG5pbXBvcnQgeyBwYXJzZXJVdGlsaXRpZXMgfSBmcm9tIFwib2NjYW0tZ3JhbW1hci11dGlsaXRpZXNcIjtcblxuY29uc3QgeyBydWxlc0Zyb21CTkYsIHBhcnNlckZyb21SdWxlcyB9ID0gcGFyc2VyVXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBZYXBwUGFyc2VyIGV4dGVuZHMgQ29tbW9uUGFyc2VyIHtcbiAgc3RhdGljIGZyb21Ob3RoaW5nKENsYXNzKSB7XG4gICAgY29uc3QgeyBibmYgfSA9IENsYXNzLFxuICAgICAgICAgIHJ1bGVzID0gcnVsZXNGcm9tQk5GKGJuZiksXG4gICAgICAgICAgcGFyc2VyID0gcGFyc2VyRnJvbVJ1bGVzKENsYXNzLCBydWxlcyk7XG5cbiAgICByZXR1cm4gcGFyc2VyO1xuICB9XG5cbiAgc3RhdGljIGZyb21CTkYoQ2xhc3MsIGJuZikge1xuICAgIGNvbnN0IHJ1bGVzID0gcnVsZXNGcm9tQk5GKGJuZiksXG4gICAgICAgICAgcGFyc2VyID0gcGFyc2VyRnJvbVJ1bGVzKENsYXNzLCBydWxlcyk7XG5cbiAgICByZXR1cm4gcGFyc2VyO1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlcyhDbGFzcywgcnVsZXMpIHtcbiAgICBjb25zdCBwYXJzZXIgPSBwYXJzZXJGcm9tUnVsZXMoQ2xhc3MsIHJ1bGVzKTtcblxuICAgIHJldHVybiBwYXJzZXI7XG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgWWFwcFBhcnNlciBmcm9tIFwiLi95YXBwXCI7XG5cbmNvbnN0IGJuZiA9IGBcblxuICAgIGRvY3VtZW50ICAgICAgICAgICAgICAgICAgIDo6PSAgeG1sIGVycm9yKiB8IGVycm9yKyA7XG5cblxuICAgIHhtbCAgICAgICAgICAgICAgICAgICAgICAgIDo6PSAgKCBwcmVhbWJsZSBlbGVtZW50KiApIHwgZWxlbWVudCsgO1xuXG5cbiAgICBwcmVhbWJsZSAgICAgICAgICAgICAgICAgICA6Oj0gIFwiPD9cIjxOT19XSElURVNQQUNFPlwieG1sXCIgYXR0cmlidXRlKiBcIj8+XCIgO1xuXG5cbiAgICBlbGVtZW50ICAgICAgICAgICAgICAgICAgICA6Oj0gIGNvbW1lbnQgfCBjb21wbGV0ZVRhZyB8IHN0YXJ0VGFnICggZWxlbWVudCB8IHRleHQgKSogZW5kVGFnIDtcblxuXG4gICAgY29tbWVudCAgICAgICAgICAgICAgICAgICAgOjo9ICBcIjwhLS1cIiB0ZXh0KiBcIi0tPlwiIDtcblxuXG4gICAgY29tcGxldGVUYWcgICAgICAgICAgICAgICAgOjo9ICBcIjxcIjxOT19XSElURVNQQUNFPm5hbWUgYXR0cmlidXRlKiBcIi8+XCIgO1xuXG5cbiAgICBzdGFydFRhZyAgICAgICAgICAgICAgICAgICA6Oj0gIFwiPFwiPE5PX1dISVRFU1BBQ0U+bmFtZSBhdHRyaWJ1dGUqIFwiPlwiIDtcblxuXG4gICAgZW5kVGFnICAgICAgICAgICAgICAgICAgICAgOjo9ICBcIjwvXCI8Tk9fV0hJVEVTUEFDRT5uYW1lIFwiPlwiIDtcbiAgICBcblxuICAgIGF0dHJpYnV0ZSAgICAgICAgICAgICAgICAgIDo6PSAgW2lkZW50aWZpZXJdPE5PX1dISVRFU1BBQ0U+XCI9XCI8Tk9fV0hJVEVTUEFDRT5bc3RyaW5nLWxpdGVyYWxdIDtcblxuXG4gICAgdGV4dCAgICAgICAgICAgICAgICAgICAgICAgOjo9ICAoIFtpZGVudGlmaWVyXSB8IFtzdHJpbmctbGl0ZXJhbF18IFticm9rZW4tc3RyaW5nLWxpdGVyYWxdIHwgW3VuYXNzaWduZWRdICkrIDtcbiAgICBcbiAgICBcbiAgICBuYW1lICAgICAgICAgICAgICAgICAgICAgICA6Oj0gIFtpZGVudGlmaWVyXSA7XG5cblxuICAgIGVycm9yICAgICAgICAgICAgICAgICAgICAgIDo6PSAgLiA7XG5cbmA7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFhNTFBhcnNlciBleHRlbmRzIFlhcHBQYXJzZXIge1xuICBzdGF0aWMgYm5mID0gYm5mO1xuXG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHsgcmV0dXJuIFlhcHBQYXJzZXIuZnJvbU5vdGhpbmcoWE1MUGFyc2VyKTsgfVxuXG4gIHN0YXRpYyBmcm9tQk5GKGJuZikgeyByZXR1cm4gWWFwcFBhcnNlci5mcm9tQk5GKFhNTFBhcnNlciwgYm5mKTsgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZXMocnVsZXMpIHsgcmV0dXJuIFlhcHBQYXJzZXIuZnJvbVJ1bGVzKFhNTFBhcnNlciwgcnVsZXMpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IEpTWF9UT0tFTl9UWVBFID0gXCJqc3hcIjtcbmV4cG9ydCBjb25zdCBOQU1FX1RPS0VOX1RZUEUgPSBcIm5hbWVcIjtcbmV4cG9ydCBjb25zdCBFUlJPUl9UT0tFTl9UWVBFID0gXCJlcnJvclwiO1xuZXhwb3J0IGNvbnN0IENPTU1FTlRfVE9LRU5fVFlQRSA9IFwiY29tbWVudFwiO1xuZXhwb3J0IGNvbnN0IEFSR1VNRU5UX1RPS0VOX1RZUEUgPSBcImFyZ3VtZW50XCI7XG5leHBvcnQgY29uc3QgVkFSSUFCTEVfVE9LRU5fVFlQRSA9IFwidmFyaWFibGVcIjtcbmV4cG9ydCBjb25zdCBBVFRSSUJVVEVfVE9LRU5fVFlQRSA9IFwiYXR0cmlidXRlXCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IFNpZ25pZmljYW50VG9rZW4gfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCB7IEVSUk9SX1RPS0VOX1RZUEUgfSBmcm9tIFwiLi4vLi4vdG9rZW5UeXBlc1wiO1xuXG5jb25zdCB0eXBlID0gRVJST1JfVE9LRU5fVFlQRTsgIC8vL1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFcnJvclRva2VuIGV4dGVuZHMgU2lnbmlmaWNhbnRUb2tlbiB7XG4gIHN0YXRpYyBmcm9tQ29udGVudChjb250ZW50KSB7IHJldHVybiBTaWduaWZpY2FudFRva2VuLmZyb21Db250ZW50QW5kVHlwZShFcnJvclRva2VuLCBjb250ZW50LCB0eXBlKTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IFF1ZXJ5IH0gZnJvbSBcIm9jY2FtLWRvbVwiO1xuXG5pbXBvcnQgRXJyb3JUb2tlbiBmcm9tIFwiLi90b2tlbi9zaWduaWZpY2FudC9lcnJvclwiO1xuXG5jb25zdCB0ZXJtaW5hbE5vZGVRdWVyeSA9IFF1ZXJ5LmZyb21FeHByZXNzaW9uKFwiLy9AKlwiKSxcbiAgICAgIGVycm9yVGVybWluYWxOb2RlUXVlcnkgPSBRdWVyeS5mcm9tRXhwcmVzc2lvbihcIi8vZXJyb3IvQCpcIik7XG5cbmNsYXNzIFByb2Nlc3NvciB7XG4gIHByb2Nlc3ModG9rZW5zLCBub2RlKSB7XG4gICAgaWYgKG5vZGUgIT09IG51bGwpIHtcbiAgICAgIHRoaXMucmVwbGFjZVRlcm1pbmFsTm9kZXNTaWduaWZpY2FudFRva2VuKHRva2Vucywgbm9kZSwgKGNvbnRlbnQpID0+IEVycm9yVG9rZW4sIGVycm9yVGVybWluYWxOb2RlUXVlcnkpO1xuICAgIH1cbiAgfVxuXG4gIHJlcGxhY2VOb25UZXJtaW5hbE5vZGVzU2lnbmlmaWNhbnRUb2tlbnModG9rZW5zLCBub2RlLCBjYWxsYmFjaywgLi4ubm9uVGVybWluYWxOb2RlUXVlcmllcykge1xuICAgIG5vblRlcm1pbmFsTm9kZVF1ZXJpZXMuZm9yRWFjaCgobm9uVGVybWluYWxOb2RlUXVlcnkpID0+IHtcbiAgICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZXMgPSBub25UZXJtaW5hbE5vZGVRdWVyeS5leGVjdXRlKG5vZGUpO1xuXG4gICAgICBub25UZXJtaW5hbE5vZGVzLmZvckVhY2goKG5vblRlcm1pbmFsTm9kZSkgPT4gdGhpcy5yZXBsYWNlTm9uVGVybWluYWxOb2RlU2lnbmlmaWNhbnRUb2tlbnMobm9uVGVybWluYWxOb2RlLCB0b2tlbnMsIGNhbGxiYWNrKSk7XG4gICAgfSk7XG4gIH1cblxuICByZXBsYWNlVGVybWluYWxOb2Rlc1NpZ25pZmljYW50VG9rZW4odG9rZW5zLCBub2RlLCBjYWxsYmFjaywgLi4udGVybWluYWxOb2RlUXVlcmllcykge1xuICAgIGNvbnN0IGNvbnRlbnRzID0gW107XG5cbiAgICB0ZXJtaW5hbE5vZGVRdWVyaWVzLmZvckVhY2goKHRlcm1pbmFsTm9kZVF1ZXJ5KSA9PiB7XG4gICAgICBjb25zdCB0ZXJtaW5hbE5vZGVzID0gdGVybWluYWxOb2RlUXVlcnkuZXhlY3V0ZShub2RlKTtcblxuICAgICAgdGVybWluYWxOb2Rlcy5mb3JFYWNoKCh0ZXJtaW5hbE5vZGUpID0+IHtcbiAgICAgICAgY29uc3QgY29udGVudCA9IHRoaXMucmVwbGFjZVRlcm1pbmFsTm9kZVNpZ25pZmljYW50VG9rZW4odGVybWluYWxOb2RlLCB0b2tlbnMsIGNhbGxiYWNrKTtcblxuICAgICAgICBpZiAoY29udGVudCAhPT0gbnVsbCkge1xuICAgICAgICAgIGNvbnRlbnRzLnB1c2goY29udGVudCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGNvbnRlbnRzO1xuICB9XG5cbiAgcmVwbGFjZU5vblRlcm1pbmFsTm9kZVNpZ25pZmljYW50VG9rZW5zKG5vblRlcm1pbmFsTm9kZSwgdG9rZW5zLCBjYWxsYmFjaykge1xuICAgIGNvbnN0IHRlcm1pbmFsTm9kZXMgPSB0ZXJtaW5hbE5vZGVRdWVyeS5leGVjdXRlKG5vblRlcm1pbmFsTm9kZSk7XG5cbiAgICB0ZXJtaW5hbE5vZGVzLmZvckVhY2goKHRlcm1pbmFsTm9kZSkgPT4gdGhpcy5yZXBsYWNlVGVybWluYWxOb2RlU2lnbmlmaWNhbnRUb2tlbih0ZXJtaW5hbE5vZGUsIHRva2VucywgY2FsbGJhY2spKTtcbiAgfVxuXG4gIHJlcGxhY2VUZXJtaW5hbE5vZGVTaWduaWZpY2FudFRva2VuKHRlcm1pbmFsTm9kZSwgdG9rZW5zLCBjYWxsYmFjaykge1xuICAgIGxldCBzaWduaWZpY2FudFRva2VuO1xuXG4gICAgc2lnbmlmaWNhbnRUb2tlbiA9IHRlcm1pbmFsTm9kZS5nZXRTaWduaWZpY2FudFRva2VuKCk7XG5cbiAgICBpZiAoc2lnbmlmaWNhbnRUb2tlbiA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgZW5kT2ZMaW5lVG9rZW4gPSBzaWduaWZpY2FudFRva2VuLmlzRW5kT2ZMaW5lVG9rZW4oKTtcblxuICAgIGlmIChlbmRPZkxpbmVUb2tlbikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgY29udGVudCA9IHNpZ25pZmljYW50VG9rZW4uZ2V0Q29udGVudCgpLFxuICAgICAgICAgIGluZGV4ID0gdG9rZW5zLmluZGV4T2Yoc2lnbmlmaWNhbnRUb2tlbiksXG4gICAgICAgICAgVG9rZW4gPSBjYWxsYmFjayhjb250ZW50KTsgLy8vXG5cbiAgICBpZiAoVG9rZW4gPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHNpZ25pZmljYW50VG9rZW4gPSBUb2tlbi5mcm9tQ29udGVudChjb250ZW50KTtcblxuICAgIGNvbnN0IHN0YXJ0ID0gaW5kZXgsICAvLy9cbiAgICAgICAgICBkZWxldGVDb3VudCA9IDE7XG5cbiAgICB0b2tlbnMuc3BsaWNlKHN0YXJ0LCBkZWxldGVDb3VudCwgc2lnbmlmaWNhbnRUb2tlbik7XG5cbiAgICB0ZXJtaW5hbE5vZGUuc2V0U2lnbmlmaWNhbnRUb2tlbihzaWduaWZpY2FudFRva2VuKTtcblxuICAgIHJldHVybiBjb250ZW50O1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKENsYXNzKSB7IHJldHVybiBuZXcgQ2xhc3MoKTsgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBQcm9jZXNzb3I7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IFNpZ25pZmljYW50VG9rZW4gfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCB7IE5BTUVfVE9LRU5fVFlQRSB9IGZyb20gXCIuLi8uLi90b2tlblR5cGVzXCI7XG5cbmNvbnN0IHR5cGUgPSBOQU1FX1RPS0VOX1RZUEU7ICAvLy9cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTmFtZVRva2VuIGV4dGVuZHMgU2lnbmlmaWNhbnRUb2tlbiB7XG4gIHN0YXRpYyBmcm9tQ29udGVudChjb250ZW50KSB7IHJldHVybiBTaWduaWZpY2FudFRva2VuLmZyb21Db250ZW50QW5kVHlwZShOYW1lVG9rZW4sIGNvbnRlbnQsIHR5cGUpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgU2lnbmlmaWNhbnRUb2tlbiB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IHsgQ09NTUVOVF9UT0tFTl9UWVBFIH0gZnJvbSBcIi4uLy4uL3Rva2VuVHlwZXNcIjtcblxuY29uc3QgdHlwZSA9IENPTU1FTlRfVE9LRU5fVFlQRTsgIC8vL1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb21tZW50VG9rZW4gZXh0ZW5kcyBTaWduaWZpY2FudFRva2VuIHtcbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIFNpZ25pZmljYW50VG9rZW4uZnJvbUNvbnRlbnRBbmRUeXBlKENvbW1lbnRUb2tlbiwgY29udGVudCwgdHlwZSk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBTaWduaWZpY2FudFRva2VuIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgeyBBVFRSSUJVVEVfVE9LRU5fVFlQRSB9IGZyb20gXCIuLi8uLi90b2tlblR5cGVzXCI7XG5cbmNvbnN0IHR5cGUgPSBBVFRSSUJVVEVfVE9LRU5fVFlQRTsgIC8vL1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBdHRyaWJ1dGVUb2tlbiBleHRlbmRzIFNpZ25pZmljYW50VG9rZW4ge1xuICBzdGF0aWMgZnJvbUNvbnRlbnQoY29udGVudCkgeyByZXR1cm4gU2lnbmlmaWNhbnRUb2tlbi5mcm9tQ29udGVudEFuZFR5cGUoQXR0cmlidXRlVG9rZW4sIGNvbnRlbnQsIHR5cGUpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgUXVlcnkgfSBmcm9tIFwib2NjYW0tZG9tXCI7XG5cbmltcG9ydCBQcm9jZXNzb3IgZnJvbSBcIi4uL3Byb2Nlc3NvclwiO1xuaW1wb3J0IE5hbWVUb2tlbiBmcm9tIFwiLi4vdG9rZW4vc2lnbmlmaWNhbnQvbmFtZVwiO1xuaW1wb3J0IEVycm9yVG9rZW4gZnJvbSBcIi4uL3Rva2VuL3NpZ25pZmljYW50L2Vycm9yXCI7XG5pbXBvcnQgQ29tbWVudFRva2VuIGZyb20gXCIuLi90b2tlbi9zaWduaWZpY2FudC9jb21tZW50XCI7XG5pbXBvcnQgQXR0cmlidXRlVG9rZW4gZnJvbSBcIi4uL3Rva2VuL3NpZ25pZmljYW50L2F0dHJpYnV0ZVwiO1xuXG5jb25zdCBuYW1lVGVybWluYWxOb2RlUXVlcnkgPSBRdWVyeS5mcm9tRXhwcmVzc2lvbihcIi8vbmFtZS9AKlwiKSxcbiAgICAgIGVycm9yVGVybWluYWxOb2RlUXVlcnkgPSBRdWVyeS5mcm9tRXhwcmVzc2lvbihcIi8vZXJyb3IvQCpcIiksXG4gICAgICBhdHRyaWJ1dGVUZXJtaW5hbE5vZGVRdWVyeSA9IFF1ZXJ5LmZyb21FeHByZXNzaW9uKFwiLy9hdHRyaWJ1dGUvQGlkZW50aWZpZXJcIiksXG4gICAgICBjb21tZW50Tm9uVGVybWluYWxOb2RlUXVlcnkgPSBRdWVyeS5mcm9tRXhwcmVzc2lvbihcIi8vY29tbWVudFwiKTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgWE1MUHJvY2Vzc29yIGV4dGVuZHMgUHJvY2Vzc29yIHtcbiAgcHJvY2Vzcyh0b2tlbnMsIG5vZGUpIHtcbiAgICBpZiAobm9kZSAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5yZXBsYWNlVGVybWluYWxOb2Rlc1NpZ25pZmljYW50VG9rZW4odG9rZW5zLCBub2RlLCAoY29udGVudCkgPT4gRXJyb3JUb2tlbiwgZXJyb3JUZXJtaW5hbE5vZGVRdWVyeSk7XG5cbiAgICAgIHRoaXMucmVwbGFjZVRlcm1pbmFsTm9kZXNTaWduaWZpY2FudFRva2VuKHRva2Vucywgbm9kZSwgKGNvbnRlbnQpID0+IE5hbWVUb2tlbiwgbmFtZVRlcm1pbmFsTm9kZVF1ZXJ5KTtcblxuICAgICAgdGhpcy5yZXBsYWNlVGVybWluYWxOb2Rlc1NpZ25pZmljYW50VG9rZW4odG9rZW5zLCBub2RlLCAoY29udGVudCkgPT4gQXR0cmlidXRlVG9rZW4sIGF0dHJpYnV0ZVRlcm1pbmFsTm9kZVF1ZXJ5KTtcblxuICAgICAgdGhpcy5yZXBsYWNlTm9uVGVybWluYWxOb2Rlc1NpZ25pZmljYW50VG9rZW5zKHRva2Vucywgbm9kZSwgKGNvbnRlbnQpID0+IENvbW1lbnRUb2tlbiwgY29tbWVudE5vblRlcm1pbmFsTm9kZVF1ZXJ5KTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7IHJldHVybiBQcm9jZXNzb3IuZnJvbU5vdGhpbmcoWE1MUHJvY2Vzc29yKTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBYTUxfTEFOR1VBR0UgPSBcInhtbFwiO1xuZXhwb3J0IGNvbnN0IEpTT05fTEFOR1VBR0UgPSBcImpzb25cIjtcbmV4cG9ydCBjb25zdCBKQVZBU0NSSVBUX0xBTkdVQUdFID0gXCJqYXZhc2NyaXB0XCI7XG5leHBvcnQgY29uc3QgUExBSU5fVEVYVF9MQU5HVUFHRSA9IFwicGxhaW4tdGV4dFwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUGx1Z2luIGZyb20gXCIuLi9wbHVnaW5cIjtcbmltcG9ydCBYTUxMZXhlciBmcm9tIFwiLi4vbGV4ZXIveG1sXCI7XG5pbXBvcnQgWE1MUGFyc2VyIGZyb20gXCIuLi9wYXJzZXIveG1sXCI7XG5pbXBvcnQgWE1MUHJvY2Vzc29yIGZyb20gXCIuLi9wcm9jZXNzb3IveG1sXCI7XG5cbmltcG9ydCB7IFhNTF9MQU5HVUFHRSB9IGZyb20gXCIuLi9sYW5ndWFnZXNcIlxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBYTUxQbHVnaW4gZXh0ZW5kcyBQbHVnaW4ge1xuICBsYW5ndWFnZSA9IFhNTF9MQU5HVUFHRTtcblxuICBzdGF0aWMgTGV4ZXIgPSBYTUxMZXhlcjtcblxuICBzdGF0aWMgUGFyc2VyID0gWE1MUGFyc2VyO1xuXG4gIHN0YXRpYyBQcm9jZXNzb3IgPSBYTUxQcm9jZXNzb3I7XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkgeyByZXR1cm4gUGx1Z2luLmZyb21Ob3RoaW5nKFhNTFBsdWdpbik7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xyXG5cclxuaW1wb3J0IFlhcHBMZXhlciBmcm9tIFwiLi4vbGV4ZXIveWFwcFwiO1xyXG5pbXBvcnQgeyBXaGl0ZXNwYWNlVG9rZW4sIEVuZE9mTGluZU5vblNpZ25pZmljYW50VG9rZW4sIERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiwgRW5kT2ZMaW5lQ29tbWVudE5vblNpZ25pZmljYW50VG9rZW4gfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XHJcblxyXG5jb25zdCBlbnRyaWVzID0gW1xyXG4gIHtcclxuICAgIFwic3BlY2lhbFwiOiBcIl4oPzosfFxcXFw6fFxcXFx7fFxcXFx9fFxcXFxbfFxcXFxdKVwiXHJcbiAgfSxcclxuICB7XHJcbiAgICBcIm51bWJlclwiOiBcIl5cXFxcLT9bMS05XVswLTldKihcXFxcLlswLTldKyk/XCJcclxuICB9LFxyXG4gIHtcclxuICAgIFwia2V5d29yZFwiOiBcIl4oPzpudWxsfHRydWV8ZmFsc2UpXCJcclxuICB9LFxyXG4gIHtcclxuICAgIFwidW5hc3NpZ25lZFwiOiBcIl5bXlxcXFxzXStcIlxyXG4gIH1cclxuXTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEpTT05MZXhlciBleHRlbmRzIFlhcHBMZXhlciB7XHJcbiAgc3RhdGljIGVudHJpZXMgPSBlbnRyaWVzO1xyXG5cclxuICBzdGF0aWMgRW5kT2ZMaW5lVG9rZW4gPSBFbmRPZkxpbmVOb25TaWduaWZpY2FudFRva2VuOyAvLy9cclxuXHJcbiAgc3RhdGljIFdoaXRlc3BhY2VUb2tlbiA9IFdoaXRlc3BhY2VUb2tlbjtcclxuXHJcbiAgc3RhdGljIEVuZE9mTGluZUNvbW1lbnRUb2tlbiA9IEVuZE9mTGluZUNvbW1lbnROb25TaWduaWZpY2FudFRva2VuOyAvLy9cclxuXHJcbiAgc3RhdGljIFNpbmdsZUxpbmVDb21tZW50VG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgUmVndWxhckV4cHJlc3Npb25Ub2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIFNpbmdseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gPSBEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW47XHJcblxyXG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHsgcmV0dXJuIFlhcHBMZXhlci5mcm9tRW50cmllcyhKU09OTGV4ZXIsIGVudHJpZXMpOyB9XHJcblxyXG4gIHN0YXRpYyBmcm9tUnVsZXMocnVsZXMpIHsgcmV0dXJuIFlhcHBMZXhlci5mcm9tUnVsZXMoSlNPTkxleGVyLCBydWxlcyk7IH1cclxuXHJcbiAgc3RhdGljIGZyb21FbnRyaWVzKGVudHJpZXMpIHsgcmV0dXJuIFlhcHBMZXhlci5mcm9tRW50cmllcyhKU09OTGV4ZXIsIGVudHJpZXMpOyB9XHJcbn1cclxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBZYXBwUGFyc2VyIGZyb20gXCIuLi9wYXJzZXIveWFwcFwiO1xuXG5jb25zdCBibmYgPSBgXG5cbiAgICBkb2N1bWVudCAgICAgICAgICAgICAgICAgICA6Oj0gIGpzb24gZXJyb3IqIHwgZXJyb3IrIDtcblxuXG4gICAganNvbiAgICAgICAgICAgICAgICAgICAgICAgOjo9ICBhcnJheSB8IG9iamVjdCA7XG5cblxuICAgIGFycmF5ICAgICAgICAgICAgICAgICAgICAgIDo6PSAgXCJbXCIgKCBlbGVtZW50ICggXCIsXCIgZWxlbWVudCApKiApPyBcIl1cIiA7XG5cblxuICAgIG9iamVjdCAgICAgICAgICAgICAgICAgICAgIDo6PSAgXCJ7XCIgKCBbc3RyaW5nLWxpdGVyYWxdIFwiOlwiIGVsZW1lbnQgKCBcIixcIiBbc3RyaW5nLWxpdGVyYWxdIFwiOlwiIGVsZW1lbnQgKSogKT8gXCJ9XCIgO1xuXG4gICAgXG4gICAgZWxlbWVudCAgICAgICAgICAgICAgICAgICAgOjo9ICBqc29uIHwgIFtzdHJpbmctbGl0ZXJhbF0gfCBbbnVtYmVyXSB8IFwidHJ1ZVwiIHwgXCJmYWxzZVwiIHwgXCJudWxsXCIgO1xuXG5cbiAgICBlcnJvciAgICAgICAgICAgICAgICAgICAgICA6Oj0gIC4gO1xuXG5gO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBKU09OUGFyc2VyIGV4dGVuZHMgWWFwcFBhcnNlciB7XG4gIHN0YXRpYyBibmYgPSBibmY7XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkgeyByZXR1cm4gWWFwcFBhcnNlci5mcm9tTm90aGluZyhKU09OUGFyc2VyKTsgfVxuXG4gIHN0YXRpYyBmcm9tQk5GKGJuZikgeyByZXR1cm4gWWFwcFBhcnNlci5mcm9tQk5GKEpTT05QYXJzZXIsIGJuZik7IH1cblxuICBzdGF0aWMgZnJvbVJ1bGVzKHJ1bGVzKSB7IHJldHVybiBZYXBwUGFyc2VyLmZyb21SdWxlcyhKU09OUGFyc2VyLCBydWxlcyk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUHJvY2Vzc29yIGZyb20gXCIuLi9wcm9jZXNzb3JcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSlNPTlByb2Nlc3NvciBleHRlbmRzIFByb2Nlc3NvciB7XG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHsgcmV0dXJuIFByb2Nlc3Nvci5mcm9tTm90aGluZyhKU09OUHJvY2Vzc29yKTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBQbHVnaW4gZnJvbSBcIi4uL3BsdWdpblwiO1xuaW1wb3J0IEpTT05MZXhlciBmcm9tIFwiLi4vbGV4ZXIvanNvblwiO1xuaW1wb3J0IEpTT05QYXJzZXIgZnJvbSBcIi4uL3BhcnNlci9qc29uXCI7XG5pbXBvcnQgSlNPTlByb2Nlc3NvciBmcm9tIFwiLi4vcHJvY2Vzc29yL2pzb25cIjtcblxuaW1wb3J0IHsgSlNPTl9MQU5HVUFHRSB9IGZyb20gXCIuLi9sYW5ndWFnZXNcIlxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBKU09OUGx1Z2luIGV4dGVuZHMgUGx1Z2luIHtcbiAgbGFuZ3VhZ2UgPSBKU09OX0xBTkdVQUdFO1xuXG4gIHN0YXRpYyBMZXhlciA9IEpTT05MZXhlcjtcblxuICBzdGF0aWMgUGFyc2VyID0gSlNPTlBhcnNlcjtcblxuICBzdGF0aWMgUHJvY2Vzc29yID0gSlNPTlByb2Nlc3NvcjtcblxuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7IHJldHVybiBQbHVnaW4uZnJvbU5vdGhpbmcoSlNPTlBsdWdpbik7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xyXG5cclxuaW1wb3J0IHsgV2hpdGVzcGFjZVRva2VuLCBFbmRPZkxpbmVOb25TaWduaWZpY2FudFRva2VuLCBFbmRPZkxpbmVDb21tZW50Tm9uU2lnbmlmaWNhbnRUb2tlbiB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcclxuXHJcbmltcG9ydCBZYXBwTGV4ZXIgZnJvbSBcIi4uL2xleGVyL3lhcHBcIjtcclxuXHJcbmNvbnN0IGVudHJpZXMgPSBbXHJcbiAge1xyXG4gICAgXCJ1bmFzc2lnbmVkXCI6IFwiXlteXFxcXHNdK1wiXHJcbiAgfVxyXG5dO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGxhaW5UZXh0TGV4ZXIgZXh0ZW5kcyBZYXBwTGV4ZXIge1xyXG4gIHN0YXRpYyBlbnRyaWVzID0gZW50cmllcztcclxuXHJcbiAgc3RhdGljIEVuZE9mTGluZVRva2VuID0gRW5kT2ZMaW5lTm9uU2lnbmlmaWNhbnRUb2tlbjsgLy8vXHJcblxyXG4gIHN0YXRpYyBXaGl0ZXNwYWNlVG9rZW4gPSBXaGl0ZXNwYWNlVG9rZW47XHJcblxyXG4gIHN0YXRpYyBFbmRPZkxpbmVDb21tZW50VG9rZW4gPSBFbmRPZkxpbmVDb21tZW50Tm9uU2lnbmlmaWNhbnRUb2tlbjsgLy8vXHJcblxyXG4gIHN0YXRpYyBTaW5nbGVMaW5lQ29tbWVudFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIFJlZ3VsYXJFeHByZXNzaW9uVG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBTaW5nbHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgRG91Ymx5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkgeyByZXR1cm4gWWFwcExleGVyLmZyb21FbnRyaWVzKFBsYWluVGV4dExleGVyLCBlbnRyaWVzKTsgfVxyXG5cclxuICBzdGF0aWMgZnJvbVJ1bGVzKHJ1bGVzKSB7IHJldHVybiBZYXBwTGV4ZXIuZnJvbVJ1bGVzKFBsYWluVGV4dExleGVyLCBydWxlcyk7IH1cclxuXHJcbiAgc3RhdGljIGZyb21FbnRyaWVzKGVudHJpZXMpIHsgcmV0dXJuIFlhcHBMZXhlci5mcm9tRW50cmllcyhQbGFpblRleHRMZXhlciwgZW50cmllcyk7IH1cclxufVxyXG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFlhcHBQYXJzZXIgZnJvbSBcIi4veWFwcFwiO1xuXG5jb25zdCBibmYgPSBgXG5cbiAgICBkb2N1bWVudCAgICAgICAgICAgICAgICAgICA6Oj0gIC4rIDtcblxuYDtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGxhaW5UZXh0UGFyc2VyIGV4dGVuZHMgWWFwcFBhcnNlciB7XG4gIHN0YXRpYyBibmYgPSBibmY7XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkgeyByZXR1cm4gWWFwcFBhcnNlci5mcm9tTm90aGluZyhQbGFpblRleHRQYXJzZXIpOyB9XG5cbiAgc3RhdGljIGZyb21CTkYoYm5mKSB7IHJldHVybiBZYXBwUGFyc2VyLmZyb21CTkYoUGxhaW5UZXh0UGFyc2VyLCBibmYpOyB9XG5cbiAgc3RhdGljIGZyb21SdWxlcyhydWxlcykgeyByZXR1cm4gWWFwcFBhcnNlci5mcm9tUnVsZXMoUGxhaW5UZXh0UGFyc2VyLCBydWxlcyk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUHJvY2Vzc29yIGZyb20gXCIuLi9wcm9jZXNzb3JcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGxhaW5UZXh0UHJvY2Vzc29yIGV4dGVuZHMgUHJvY2Vzc29yIHtcbiAgcHJvY2Vzcyh0b2tlbnMsIG5vZGUpIHt9ICAvLy9cblxuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7IHJldHVybiBQcm9jZXNzb3IuZnJvbU5vdGhpbmcoUGxhaW5UZXh0UHJvY2Vzc29yKTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBQbHVnaW4gZnJvbSBcIi4uL3BsdWdpblwiO1xuaW1wb3J0IFBsYWluVGV4dExleGVyIGZyb20gXCIuLi9sZXhlci9wbGFpblRleHRcIjtcbmltcG9ydCBQbGFpblRleHRQYXJzZXIgZnJvbSBcIi4uL3BhcnNlci9wbGFpblRleHRcIjtcbmltcG9ydCBQbGFpblRleHRQcm9jZXNzb3IgZnJvbSBcIi4uL3Byb2Nlc3Nvci9wbGFpblRleHRcIjtcblxuaW1wb3J0IHsgUExBSU5fVEVYVF9MQU5HVUFHRSB9IGZyb20gXCIuLi9sYW5ndWFnZXNcIlxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQbGFpblRleHRQbHVnaW4gZXh0ZW5kcyBQbHVnaW4ge1xuICBsYW5ndWFnZSA9IFBMQUlOX1RFWFRfTEFOR1VBR0U7XG5cbiAgc3RhdGljIExleGVyID0gUGxhaW5UZXh0TGV4ZXI7XG5cbiAgc3RhdGljIFBhcnNlciA9IFBsYWluVGV4dFBhcnNlcjtcblxuICBzdGF0aWMgUHJvY2Vzc29yID0gUGxhaW5UZXh0UHJvY2Vzc29yO1xuXG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHsgcmV0dXJuIFBsdWdpbi5mcm9tTm90aGluZyhQbGFpblRleHRQbHVnaW4pOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmltcG9ydCB7IFdoaXRlc3BhY2VUb2tlbixcclxuICAgICAgICAgRW5kT2ZMaW5lTm9uU2lnbmlmaWNhbnRUb2tlbixcclxuICAgICAgICAgQ1N0eWxlU2luZ2xlTGluZUNvbW1lbnRUb2tlbixcclxuICAgICAgICAgU2luZ2x5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuLFxyXG4gICAgICAgICBEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4sXHJcbiAgICAgICAgIENTdHlsZUVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLFxyXG4gICAgICAgICBDU3R5bGVTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLFxyXG4gICAgICAgICBDU3R5bGVNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbixcclxuICAgICAgICAgRW5kT2ZMaW5lQ29tbWVudE5vblNpZ25pZmljYW50VG9rZW4gfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XHJcblxyXG5pbXBvcnQgWWFwcExleGVyIGZyb20gXCIuLi9sZXhlci95YXBwXCI7XHJcblxyXG5jb25zdCBlbnRyaWVzID0gW1xyXG4gIHtcclxuICAgIFwiZGVsaW1pdGVyXCI6IFwiXig/OmB8XFxcXCRcXFxce3w8XFxcXC98XFxcXC8+KVwiXHJcbiAgfSxcclxuICB7XHJcbiAgICBcIm51bWJlclwiOiBcIl5cXFxcLT9bMS05XVswLTldKihcXFxcLlswLTldKyk/XCJcclxuICB9LFxyXG4gIHtcclxuICAgIFwic3BlY2lhbFwiOiBcIl4oPzo7fDp8LHw9PnxcXFxcP3xcXFxce3xcXFxcfXxcXFxcW3xcXFxcXXxcXFxcKHxcXFxcKXxcXFxcOnxcXFxcXFxcXGApXCJcclxuICB9LFxyXG4gIHtcclxuICAgIFwib3BlcmF0b3JcIjogXCJeKD86Jj18Pj4+PXw+Pj18PDw9fFxcXFwuXFxcXC5cXFxcLnxcXFxcLnxcXFxcKlxcXFwqPXxcXFxcKj18XFxcXCs9fFxcXFwtPXxcXFxcLz18XFxcXF49fFxcXFx8PT09fD09fD18IT09fCU9fD49fDw9fD4+Pnw+Pnw8PHw+fDx8PXwlfCYmfCZ8fnwhfFxcXFxefFxcXFx8XFxcXHx8XFxcXHx8XFxcXCtcXFxcK3xcXFxcLVxcXFwtfFxcXFwqXFxcXCp8XFxcXCt8XFxcXC18XFxcXCp8XFxcXC8pXCJcclxuICB9LFxyXG4gIHtcclxuICAgIFwia2V5d29yZFwiOiBcIl4oPzppbXBvcnR8ZXhwb3J0fGRlZmF1bHR8dmFyfGxldHxjb25zdHxmdW5jdGlvbnxjbGFzc3xleHRlbmRzfGNvbnN0cnVjdG9yfHN0YXRpY3xicmVha3xyZXR1cm58Y29udGludWV8aWZ8ZWxzZXxzd2l0Y2h8Y2FzZXx0aHJvd3x0cnl8Y2F0Y2h8ZmluYWxseXxpbnN0YW5jZW9mfHR5cGVvZnxhc3luY3xhd2FpdHxkb3x3aGlsZXxmb3J8aW58b2Z8YXN8bmV3fHRoaXN8c3VwZXJ8ZGVsZXRlfHVuZGVmaW5lZHxudWxsfHRydWV8ZmFsc2V8dm9pZHxtZXRhfGRlYnVnZ2VyKVxcXFxiXCJcclxuICB9LFxyXG4gIHtcclxuICAgIFwiaWRlbnRpZmllclwiOiBcIl5bYS16QS1aXStcIlxyXG4gIH0sXHJcbiAge1xyXG4gICAgXCJ1bmFzc2lnbmVkXCI6IFwiXlteXFxcXHNdK1wiXHJcbiAgfVxyXG5dO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSmF2YVNjcmlwdExleGVyIGV4dGVuZHMgWWFwcExleGVyIHtcclxuICBzdGF0aWMgZW50cmllcyA9IGVudHJpZXM7XHJcblxyXG4gIHN0YXRpYyBFbmRPZkxpbmVUb2tlbiA9IEVuZE9mTGluZU5vblNpZ25pZmljYW50VG9rZW47IC8vL1xyXG5cclxuICBzdGF0aWMgV2hpdGVzcGFjZVRva2VuID0gV2hpdGVzcGFjZVRva2VuO1xyXG5cclxuICBzdGF0aWMgUmVndWxhckV4cHJlc3Npb25Ub2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBFbmRPZkxpbmVDb21tZW50VG9rZW4gPSBFbmRPZkxpbmVDb21tZW50Tm9uU2lnbmlmaWNhbnRUb2tlbjsgLy8vXHJcblxyXG4gIHN0YXRpYyBTaW5nbGVMaW5lQ29tbWVudFRva2VuID0gQ1N0eWxlU2luZ2xlTGluZUNvbW1lbnRUb2tlbjsgLy8vXHJcblxyXG4gIHN0YXRpYyBFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiA9IENTdHlsZUVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuOyAvLy9cclxuXHJcbiAgc3RhdGljIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBDU3R5bGVTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuOyAvLy9cclxuXHJcbiAgc3RhdGljIE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuID0gQ1N0eWxlTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW47IC8vL1xyXG5cclxuICBzdGF0aWMgU2luZ2x5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuID0gU2luZ2x5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuO1xyXG5cclxuICBzdGF0aWMgRG91Ymx5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuID0gRG91Ymx5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuO1xyXG5cclxuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7IHJldHVybiBZYXBwTGV4ZXIuZnJvbUVudHJpZXMoSmF2YVNjcmlwdExleGVyLCBlbnRyaWVzKTsgfVxyXG5cclxuICBzdGF0aWMgZnJvbVJ1bGVzKHJ1bGVzKSB7IHJldHVybiBZYXBwTGV4ZXIuZnJvbVJ1bGVzKEphdmFTY3JpcHRMZXhlciwgcnVsZXMpOyB9XHJcblxyXG4gIHN0YXRpYyBmcm9tRW50cmllcyhlbnRyaWVzKSB7IHJldHVybiBZYXBwTGV4ZXIuZnJvbUVudHJpZXMoSmF2YVNjcmlwdExleGVyLCBlbnRyaWVzKTsgfVxyXG59XHJcbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgWWFwcFBhcnNlciAgZnJvbSBcIi4uL3BhcnNlci95YXBwXCI7XG5cbmNvbnN0IGJuZiA9IGBcblxuICAgIGRvY3VtZW50ICAgICAgICAgICAgICAgICAgIDo6PSAgKCBwcmVhbWJsZSAoIHN0YXRlbWVudCB8IGVycm9yICkqICkgfCAoIHN0YXRlbWVudCB8IGVycm9yICkrIDtcblxuXG5cbiAgICBwcmVhbWJsZSAgICAgICAgICAgICAgICAgICA6Oj0gICggXCJcXFxcXCJ1c2Ugc3RyaWN0XFxcXFwiXCIgfCBcIid1c2Ugc3RyaWN0J1wiICkgXCI7XCIgO1xuXG5cblxuICAgIHN0YXRlbWVudCAgICAgICAgICAgICAgICAgIDo6PSAgY2xhc3NcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgZnVuY3Rpb25cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgZ2VuZXJhdG9yXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIFwiZXhwb3J0XCI/ICggKCBcInZhclwiIHZhciAoIFwiLFwiIHZhciApKiApXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICggXCJsZXRcIiBsZXQgKCBcIixcIiBsZXQgKSogKVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoIFwiY29uc3RcIiBjb25zdCAoIFwiLFwiIGNvbnN0ICkqIClcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgXCI7XCJcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgXCJleHBvcnRcIiBcImRlZmF1bHRcIiBleHByZXNzaW9uIFwiO1wiXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIFwiZXhwb3J0XCIgXCJkZWZhdWx0XCI/ICggY2xhc3MgfCBmdW5jdGlvbiB8IGdlbmVyYXRvciApXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIFwiZXhwb3J0XCIgXCJkZWZhdWx0XCIgKCBhbm9ueW1vdXNDbGFzcyB8IGFub255bW91c0Z1bmN0aW9uIHwgYW5vbnltb3VzR2VuZXJhdG9yIClcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgXCJleHBvcnRcIiAoICggXCJleHBvcnRcIiBcIntcIiBuYW1lcyBcIn1cIiAoIFwiZnJvbVwiIFtzdHJpbmctbGl0ZXJhbF0gKT8gKVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICggXCJleHBvcnRcIiBcImNvbnN0XCIgXCJ7XCIgZmllbGRzIFwifVwiIFwiPVwiIGV4cHJlc3Npb24gKVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICggXCJleHBvcnRcIiBcIntcIiBcImRlZmF1bHRcIiBcIn1cIiBcImZyb21cIiBbc3RyaW5nLWxpdGVyYWxdIClcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoIFwiZXhwb3J0XCIgXCIqXCIgKCBcImFzXCIgbmFtZSApPyBcImZyb21cIiBbc3RyaW5nLWxpdGVyYWxdIClcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSBcIjtcIlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBcImltcG9ydFwiICggW3N0cmluZy1saXRlcmFsXVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICggbmFtZSBcImZyb21cIiBbc3RyaW5nLWxpdGVyYWxdIClcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoIFwie1wiIG5hbWVzIFwifVwiIFwiZnJvbVwiIFtzdHJpbmctbGl0ZXJhbF0gKVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICggXCIqXCIgXCJhc1wiIG5hbWUgXCJmcm9tXCIgW3N0cmluZy1saXRlcmFsXSApXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgXCI7XCJcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgbGFiZWwgXCI6XCIgc3RhdGVtZW50XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIFwie1wiIHN0YXRlbWVudCogXCJ9XCJcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgXCJicmVha1wiIFwiO1wiXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIFwiY29udGludWVcIiBcIjtcIlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBcImlmXCIgXCIoXCIgZXhwcmVzc2lvbiBcIilcIiBzdGF0ZW1lbnQgKCBcImVsc2VcIiBzdGF0ZW1lbnQgKT9cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgXCJzd2l0Y2hcIiBcIihcIiBleHByZXNzaW9uIFwiKVwiIFwie1wiIGNhc2UqIGRlZmF1bHRDYXNlPyBcIn1cIlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBcInJldHVyblwiIGV4cHJlc3Npb24/IFwiO1wiXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIFwidGhyb3dcIiBleHByZXNzaW9uIFwiO1wiXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIFwiZGVsZXRlXCIgZXhwcmVzc2lvbiBcIjtcIlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBleHByZXNzaW9uLi4uIFwiO1wiXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIHRyeSAoICggY2F0Y2gqIGZpbmFsbHkgKSB8IGNhdGNoKyApXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIFwiZG9cIiBzdGF0ZW1lbnQgXCJ3aGlsZVwiIFwiKFwiIGV4cHJlc3Npb24gXCIpXCIgXCI7XCJcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgXCJmb3JcIiBcIihcIiBpbml0aWFsaXNlciAoIFwiO1wiIGV4cHJlc3Npb24gKT8gKCBcIjtcIiBleHByZXNzaW9uICk/IFwiKVwiIHN0YXRlbWVudFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBcImZvclwiIFwiKFwiIHZhcmlhYmxlIFwiaW5cIiBleHByZXNzaW9uIFwiKVwiIHN0YXRlbWVudFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBcImZvclwiIFwiYXdhaXRcIj8gXCIoXCIgdmFyaWFibGUgXCJvZlwiIGV4cHJlc3Npb24gXCIpXCIgc3RhdGVtZW50XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIFwid2hpbGVcIiBcIihcIiBleHByZXNzaW9uIFwiKVwiIHN0YXRlbWVudFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBcImRlYnVnZ2VyXCIgXCI7XCI/XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDtcblxuXG5cbiAgICBjbGFzcyAgICAgICAgICAgICAgICAgICAgICA6Oj0gIFwiY2xhc3NcIiBuYW1lIGNsYXNzQm9keSA7XG5cbiAgICBmdW5jdGlvbiAgICAgICAgICAgICAgICAgICA6Oj0gIFwiYXN5bmNcIj8gXCJmdW5jdGlvblwiIG5hbWUgZnVuY3Rpb25Cb2R5IDtcblxuICAgIGdlbmVyYXRvciAgICAgICAgICAgICAgICAgIDo6PSAgXCJhc3luY1wiPyBcImZ1bmN0aW9uXCIgPE5PX1dISVRFU1BBQ0U+XCIqXCIgbmFtZSBmdW5jdGlvbkJvZHkgO1xuXG4gICAgYW5vbnltb3VzQ2xhc3MgICAgICAgICAgICAgOjo9ICBcImNsYXNzXCIgY2xhc3NCb2R5IDtcblxuICAgIGFub255bW91c0Z1bmN0aW9uICAgICAgICAgIDo6PSAgXCJhc3luY1wiPyBcImZ1bmN0aW9uXCIgZnVuY3Rpb25Cb2R5IDtcblxuICAgIGFub255bW91c0dlbmVyYXRvciAgICAgICAgIDo6PSAgXCJhc3luY1wiPyBcImZ1bmN0aW9uXCIgPE5PX1dISVRFU1BBQ0U+XCIqXCIgZnVuY3Rpb25Cb2R5IDtcblxuICAgIGNvbnN0cnVjdG9yICAgICAgICAgICAgICAgIDo6PSAgXCJjb25zdHJ1Y3RvclwiIGZ1bmN0aW9uQm9keSA7XG5cbiAgICBtZXRob2QgICAgICAgICAgICAgICAgICAgICA6Oj0gIFwic3RhdGljXCI/IG5hbWUgZnVuY3Rpb25Cb2R5IDtcblxuICAgIGZpZWxkICAgICAgICAgICAgICAgICAgICAgIDo6PSAgXCJzdGF0aWNcIj8gbmFtZSBcIj1cIiBleHByZXNzaW9uIFwiO1wiIDtcblxuXG5cbiAgICBjbGFzc0JvZHkgICAgICAgICAgICAgICAgICA6Oj0gICggXCJleHRlbmRzXCIgbmFtZSApPyBcIntcIiAoIGNvbnN0cnVjdG9yIHwgbWV0aG9kIHwgZmllbGQgKSogXCJ9XCIgO1xuXG4gICAgZnVuY3Rpb25Cb2R5ICAgICAgICAgICAgICAgOjo9ICBcIihcIiBhcmd1bWVudHM/IFwiKVwiIFwie1wiIHN0YXRlbWVudCogXCJ9XCIgO1xuXG5cblxuICAgIGNhc2UgICAgICAgICAgICAgICAgICAgICAgIDo6PSAgXCJjYXNlXCIgZXhwcmVzc2lvbiBcIjpcIiBzdGF0ZW1lbnQgKCBcImJyZWFrXCIgXCI7XCIgKT8gO1xuXG4gICAgZGVmYXVsdENhc2UgICAgICAgICAgICAgICAgOjo9ICBcImRlZmF1bHRcIiBcIjpcIiBzdGF0ZW1lbnQgKCBcImJyZWFrXCIgXCI7XCIgKT8gO1xuXG4gICAgdHJ5ICAgICAgICAgICAgICAgICAgICAgICAgOjo9ICBcInRyeVwiIFwie1wiIHN0YXRlbWVudCsgXCJ9XCIgO1xuXG4gICAgY2F0Y2ggICAgICAgICAgICAgICAgICAgICAgOjo9ICBcImNhdGNoXCIgXCIoXCIgW2lkZW50aWZpZXJdIFwiKVwiIFwie1wiIHN0YXRlbWVudCsgXCJ9XCIgO1xuXG4gICAgZmluYWxseSAgICAgICAgICAgICAgICAgICAgOjo9ICBcImZpbmFsbHlcIiBcIntcIiBzdGF0ZW1lbnQrIFwifVwiIDtcblxuICAgIGluaXRpYWxpc2VyICAgICAgICAgICAgICAgIDo6PSAgZXhwcmVzc2lvbiB8IFwidmFyXCIgdmFyICggXCIsXCIgdmFyICkqIHwgXCJsZXRcIiBsZXQgKCBcIixcIiBsZXQgKSogO1xuXG5cblxuICAgIHZhciAgICAgICAgICAgICAgICAgICAgICAgIDo6PSAgdmFyaWFibGUgKCBcIj1cIiBleHByZXNzaW9uICk/IHwgZGVzdHJ1Y3R1cmUgXCI9XCIgZXhwcmVzc2lvbiA7XG5cbiAgICBsZXQgICAgICAgICAgICAgICAgICAgICAgICA6Oj0gIHZhcmlhYmxlICggXCI9XCIgZXhwcmVzc2lvbiApPyB8IGRlc3RydWN0dXJlIFwiPVwiIGV4cHJlc3Npb247XG5cbiAgICBjb25zdCAgICAgICAgICAgICAgICAgICAgICA6Oj0gICggdmFyaWFibGUgfCBkZXN0cnVjdHVyZSApIFwiPVwiIGV4cHJlc3Npb24gO1xuXG4gICAgZGVzdHJ1Y3R1cmUgICAgICAgICAgICAgICAgOjo9ICBcIltcIiB2YXJpYWJsZSAoIFwiPVwiIGV4cHJlc3Npb24gKT8gKCBcIixcIiB2YXJpYWJsZSAoIFwiPVwiIGV4cHJlc3Npb24gKT8gKSogXCJdXCJcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgXCJ7XCIgdmFyaWFibGUgKCBcIj1cIiBleHByZXNzaW9uICk/ICggXCIsXCIgdmFyaWFibGUgKCBcIj1cIiBleHByZXNzaW9uICk/ICkqIFwifVwiXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDtcblxuXG5cbiAgICBleHByZXNzaW9uICAgICAgICAgICAgICAgICA6Oj0gIGpzeFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBqc29uXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIGFycm93RnVuY3Rpb25cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgdGVtcGxhdGVMaXRlcmFsXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIGFub255bW91c0Z1bmN0aW9uXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIFwiKFwiIGV4cHJlc3Npb24gXCIpXCJcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgXCJ7XCIgKCBwcm9wZXJ0eSAoIFwiLFwiIHByb3BlcnR5ICkqICk/IFwifVwiXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIFwiW1wiICggZXhwcmVzc2lvbiAoIFwiLFwiIGV4cHJlc3Npb24gKSogXCIsXCI/ICk/IFwiXVwiXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIFwidHlwZW9mXCIgKCBleHByZXNzaW9uIHwgKCBcIihcIiBleHByZXNzaW9uIFwiKVwiKSApXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIFwidm9pZFwiICggZXhwcmVzc2lvbiB8ICggXCIoXCIgZXhwcmVzc2lvbiBcIilcIikgKVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBcIm5ld1wiIG5hbWU8Tk9fV0hJVEVTUEFDRT5cIihcIiBhcmd1bWVudHM/IFwiKVwiXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIFtvcGVyYXRvcl08Tk9fV0hJVEVTUEFDRT5leHByZXNzaW9uXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIGV4cHJlc3Npb248Tk9fV0hJVEVTUEFDRT4oICggXCIuXCI8Tk9fV0hJVEVTUEFDRT5uYW1lIClcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKCBcIltcIiBleHByZXNzaW9ucyBcIl1cIiApXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICggXCIoXCIgZXhwcmVzc2lvbnM/IFwiKVwiIClcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdGVtcGxhdGVMaXRlcmFsXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtvcGVyYXRvcl1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgZXhwcmVzc2lvbiAoICggW29wZXJhdG9yXSBleHByZXNzaW9uIClcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICggXCI/XCIgZXhwcmVzc2lvbiBcIjpcIiBleHByZXNzaW9uIClcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICggXCJpbnN0YW5jZW9mXCIgZXhwcmVzc2lvbiApXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoIFwiaW5cIiBleHByZXNzaW9uIClcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIFtudW1iZXJdXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIHZhcmlhYmxlXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIHByaW1pdGl2ZVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBpbXBvcnRNZXRhXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIFtzdHJpbmctbGl0ZXJhbF1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgXCJzdXBlclwiIHwgXCJ0aGlzXCIgfCBcInRydWVcIiB8IFwiZmFsc2VcIiB8IFwibnVsbFwiIHwgXCJ1bmRlZmluZWRcIlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7XG5cblxuXG4gICAganN4ICAgICAgICAgICAgICAgICAgICAgICAgOjo9ICBqc3hDb21wbGV0ZVRhZyB8IGpzeFN0YXJ0VGFnICgganN4IHwgKCBcIntcIiBleHByZXNzaW9uPyBcIn1cIiApIHwgc3RyaW5nICkqIGpzeEVuZFRhZyA7XG5cbiAgICBqc3hDb21wbGV0ZVRhZyAgICAgICAgICAgICA6Oj0gIFwiPFwiPE5PX1dISVRFU1BBQ0U+bmFtZSBqc3hBdHRyaWJ1dGUqIFwiLz5cIiA7XG5cbiAgICBqc3hTdGFydFRhZyAgICAgICAgICAgICAgICA6Oj0gIFwiPFwiPE5PX1dISVRFU1BBQ0U+bmFtZSBqc3hBdHRyaWJ1dGUqIFwiPlwiIDtcblxuICAgIGpzeEVuZFRhZyAgICAgICAgICAgICAgICAgIDo6PSAgXCI8L1wiPE5PX1dISVRFU1BBQ0U+bmFtZSBcIj5cIiA7XG5cbiAgICBqc3hBdHRyaWJ1dGUgICAgICAgICAgICAgICA6Oj0gIG5hbWUgKCA8Tk9fV0hJVEVTUEFDRT5cIj1cIiAoICggPE5PX1dISVRFU1BBQ0U+W3N0cmluZy1saXRlcmFsXSApIHwgKCA8Tk9fV0hJVEVTUEFDRT5cIntcIiBleHByZXNzaW9uIFwifVwiICkgKSApPyA7XG5cblxuXG4gICAganNvbiAgICAgICAgICAgICAgICAgICAgICAgOjo9ICBqc29uQXJyYXkgfCBqc29uT2JqZWN0IDtcblxuICAgIGpzb25BcnJheSAgICAgICAgICAgICAgICAgIDo6PSAgXCJbXCIgKCBqc29uRWxlbWVudCAoIFwiLFwiIGpzb25FbGVtZW50ICkqICk/IFwiXVwiIDtcblxuICAgIGpzb25PYmplY3QgICAgICAgICAgICAgICAgIDo6PSAgXCJ7XCIgKCBbc3RyaW5nLWxpdGVyYWxdIFwiOlwiIGpzb25FbGVtZW50ICggXCIsXCIgW3N0cmluZy1saXRlcmFsXSBcIjpcIiBqc29uRWxlbWVudCApKiApPyBcIn1cIiA7XG5cbiAgICBqc29uRWxlbWVudCAgICAgICAgICAgICAgICA6Oj0gIGpzb24gfCBbc3RyaW5nLWxpdGVyYWxdIHwgW251bWJlcl0gfCBcInRydWVcIiB8IFwiZmFsc2VcIiB8IFwibnVsbFwiIDtcblxuXG5cbiAgICBhcnJvd0Z1bmN0aW9uICAgICAgICAgICAgICA6Oj0gIHNpbXBsZUFycm93RnVuY3Rpb24gfCBjb21wbGV4QXJyb3dGdW5jdGlvbiA7XG5cbiAgICBhcnJvd0Z1bmN0aW9uQm9keSAgICAgICAgICA6Oj0gIGV4cHJlc3Npb24gfCAoIFwie1wiIHN0YXRlbWVudCogXCJ9XCIgKSA7XG5cbiAgICBzaW1wbGVBcnJvd0Z1bmN0aW9uICAgICAgICA6Oj0gIGFyZ3VtZW50IFwiPT5cIiBhcnJvd0Z1bmN0aW9uQm9keSA7XG5cbiAgICBjb21wbGV4QXJyb3dGdW5jdGlvbiAgICAgICA6Oj0gIFwiKFwiIGFyZ3VtZW50cz8gXCIpXCIgXCI9PlwiIGFycm93RnVuY3Rpb25Cb2R5IDtcblxuXG5cbiAgICB0ZW1wbGF0ZUxpdGVyYWwgICAgICAgICAgICA6Oj0gIFwiXFxgXCIgKCAoIFwiXFwke1wiIGV4cHJlc3Npb24/IFwifVwiICkgfCBzdHJpbmcgKSogXCJcXGBcIiA7XG5cblxuXG4gICAgc3RyaW5nICAgICAgICAgICAgICAgICAgICAgOjo9ICAoIFtudW1iZXJdIHwgW3NwZWNpYWxdIHwgW29wZXJhdG9yXXwgW2tleXdvcmRdIHwgW2lkZW50aWZpZXJdIHwgW3N0cmluZy1saXRlcmFsXXwgW2Jyb2tlbi1zdHJpbmctbGl0ZXJhbF0gfCBbdW5hc3NpZ25lZF0gKSsgO1xuXG4gICAgcHJvcGVydHkgICAgICAgICAgICAgICAgICAgOjo9ICAoICggKCBuYW1lIHwgW3N0cmluZy1saXRlcmFsXSApIFwiOlwiIGV4cHJlc3Npb24gKSB8IHZhcmlhYmxlICkgO1xuXG4gICAgaW1wb3J0TWV0YSAgICAgICAgICAgICAgICAgOjo9ICBcImltcG9ydFwiPE5PX1dISVRFU1BBQ0U+XCIuXCI8Tk9fV0hJVEVTUEFDRT5cIm1ldGFcIiA7XG5cblxuXG4gICAgZXhwcmVzc2lvbnMgICAgICAgICAgICAgICAgOjo9ICBleHByZXNzaW9uICggXCIsXCIgZXhwcmVzc2lvbiApKiA7XG5cbiAgICBhcmd1bWVudHMgICAgICAgICAgICAgICAgICA6Oj0gIHNwcmVhZEFyZ3VtZW50IHwgKCBhcmd1bWVudCAoIFwiLFwiIGFyZ3VtZW50ICkqICggXCIsXCIgc3ByZWFkQXJndW1lbnQgKT8gKSA7XG5cbiAgICBmaWVsZHMgICAgICAgICAgICAgICAgICAgICA6Oj0gIG5hbWUgKCBcIjpcIiBuYW1lICk/ICggXCIsXCIgbmFtZSAoIFwiOlwiIG5hbWUgKT8gKSogO1xuXG4gICAgbmFtZXMgICAgICAgICAgICAgICAgICAgICAgOjo9ICBuYW1lICggXCJhc1wiIG5hbWUgKT8gKCBcIixcIiBuYW1lICggXCJhc1wiIG5hbWUgKT8gKSogO1xuXG5cblxuICAgIHNwcmVhZEFyZ3VtZW50ICAgICAgICAgICAgIDo6PSAgXCIuLi5cIjxOT19XSElURVNQQUNFPltpZGVudGlmaWVyXSA7XG5cbiAgICBhcmd1bWVudCAgICAgICAgICAgICAgICAgICA6Oj0gIGV4cHJlc3Npb24gfCBbaWRlbnRpZmllcl0gKCBcIj1cIiBleHByZXNzaW9uICk/IDtcblxuICAgIHZhcmlhYmxlICAgICAgICAgICAgICAgICAgIDo6PSAgW2lkZW50aWZpZXJdIDtcblxuICAgIGxhYmVsICAgICAgICAgICAgICAgICAgICAgIDo6PSAgW2lkZW50aWZpZXJdIDtcblxuICAgIG5hbWUgICAgICAgICAgICAgICAgICAgICAgIDo6PSAgW2lkZW50aWZpZXJdIDtcblxuXG5cbiAgICBlcnJvciAgICAgICAgICAgICAgICAgICAgICA6Oj0gIC4gO1xuXG5gO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBKYXZhU2NyaXB0UGFyc2VyIGV4dGVuZHMgWWFwcFBhcnNlciB7XG4gIHN0YXRpYyBibmYgPSBibmY7XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkgeyByZXR1cm4gWWFwcFBhcnNlci5mcm9tTm90aGluZyhKYXZhU2NyaXB0UGFyc2VyKTsgfVxuXG4gIHN0YXRpYyBmcm9tQk5GKGJuZikgeyByZXR1cm4gWWFwcFBhcnNlci5mcm9tQk5GKEphdmFTY3JpcHRQYXJzZXIsIGJuZik7IH1cblxuICBzdGF0aWMgZnJvbVJ1bGVzKHJ1bGVzKSB7IHJldHVybiBZYXBwUGFyc2VyLmZyb21SdWxlcyhKYXZhU2NyaXB0UGFyc2VyLCBydWxlcyk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBTaWduaWZpY2FudFRva2VuIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgeyBKU1hfVE9LRU5fVFlQRSB9IGZyb20gXCIuLi8uLi90b2tlblR5cGVzXCI7XG5cbmNvbnN0IHR5cGUgPSBKU1hfVE9LRU5fVFlQRTsgIC8vL1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBKU1hUb2tlbiBleHRlbmRzIFNpZ25pZmljYW50VG9rZW4ge1xuICBzdGF0aWMgZnJvbUNvbnRlbnQoY29udGVudCkgeyByZXR1cm4gU2lnbmlmaWNhbnRUb2tlbi5mcm9tQ29udGVudEFuZFR5cGUoSlNYVG9rZW4sIGNvbnRlbnQsIHR5cGUpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgU2lnbmlmaWNhbnRUb2tlbiwgdHlwZXMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmNvbnN0IHsgc3RyaW5nTGl0ZXJhbFR5cGUgfSA9IHR5cGVzO1xuXG5jb25zdCB0eXBlID0gc3RyaW5nTGl0ZXJhbFR5cGU7IC8vL1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdHJpbmdUb2tlbiBleHRlbmRzIFNpZ25pZmljYW50VG9rZW4ge1xuICBzdGF0aWMgZnJvbUNvbnRlbnQoY29udGVudCkgeyByZXR1cm4gU2lnbmlmaWNhbnRUb2tlbi5mcm9tQ29udGVudEFuZFR5cGUoU3RyaW5nVG9rZW4sIGNvbnRlbnQsIHR5cGUpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgU2lnbmlmaWNhbnRUb2tlbiB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IHsgVkFSSUFCTEVfVE9LRU5fVFlQRSB9IGZyb20gXCIuLi8uLi90b2tlblR5cGVzXCI7XG5cbmNvbnN0IHR5cGUgPSBWQVJJQUJMRV9UT0tFTl9UWVBFOyAgLy8vXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZhcmlhYmxlVG9rZW4gZXh0ZW5kcyBTaWduaWZpY2FudFRva2VuIHtcbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIFNpZ25pZmljYW50VG9rZW4uZnJvbUNvbnRlbnRBbmRUeXBlKFZhcmlhYmxlVG9rZW4sIGNvbnRlbnQsIHR5cGUpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgU2lnbmlmaWNhbnRUb2tlbiB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IHsgQVJHVU1FTlRfVE9LRU5fVFlQRSB9IGZyb20gXCIuLi8uLi90b2tlblR5cGVzXCI7XG5cbmNvbnN0IHR5cGUgPSBBUkdVTUVOVF9UT0tFTl9UWVBFOyAgLy8vXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFyZ3VtZW50VG9rZW4gZXh0ZW5kcyBTaWduaWZpY2FudFRva2VuIHtcbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIFNpZ25pZmljYW50VG9rZW4uZnJvbUNvbnRlbnRBbmRUeXBlKEFyZ3VtZW50VG9rZW4sIGNvbnRlbnQsIHR5cGUpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgUXVlcnkgfSBmcm9tIFwib2NjYW0tZG9tXCI7XG5pbXBvcnQgeyBjaGFyYWN0ZXJzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5pbXBvcnQgUHJvY2Vzc29yIGZyb20gXCIuLi9wcm9jZXNzb3JcIjtcbmltcG9ydCBKU1hUb2tlbiBmcm9tIFwiLi4vdG9rZW4vc2lnbmlmaWNhbnQvanN4XCI7XG5pbXBvcnQgRXJyb3JUb2tlbiBmcm9tIFwiLi4vdG9rZW4vc2lnbmlmaWNhbnQvZXJyb3JcIjtcbmltcG9ydCBTdHJpbmdUb2tlbiBmcm9tIFwiLi4vdG9rZW4vc2lnbmlmaWNhbnQvc3RyaW5nXCI7XG5pbXBvcnQgVmFyaWFibGVUb2tlbiBmcm9tIFwiLi4vdG9rZW4vc2lnbmlmaWNhbnQvdmFyaWFibGVcIjtcbmltcG9ydCBBcmd1bWVudFRva2VuIGZyb20gXCIuLi90b2tlbi9zaWduaWZpY2FudC9hcmd1bWVudFwiO1xuXG5jb25zdCBlcnJvclRlcm1pbmFsTm9kZVF1ZXJ5ID0gUXVlcnkuZnJvbUV4cHJlc3Npb24oXCIvL2Vycm9yL0AqXCIpLFxuICAgICAganN4Tm9uVGVybWluYWxOb2RlUXVlcnkgPSBRdWVyeS5mcm9tRXhwcmVzc2lvbihcIi8vanN4XCIpLFxuICAgICAganN4VGFnVGVybWluYWxOb2RlUXVlcnkgPSBRdWVyeS5mcm9tRXhwcmVzc2lvbihcIi8vanN4Q29tcGxldGVUYWd8anN4U3RhcnRUYWd8anN4RW5kVGFnL0AqXCIpLFxuICAgICAgdmFyaWFibGVUZXJtaW5hbE5vZGVRdWVyeSA9IFF1ZXJ5LmZyb21FeHByZXNzaW9uKFwiLy92YXJpYWJsZS9AKlwiKSxcbiAgICAgIGpzeFRhZ05hbWVUZXJtaW5hbE5vZGVRdWVyeSA9IFF1ZXJ5LmZyb21FeHByZXNzaW9uKFwiLy9qc3hDb21wbGV0ZVRhZ3xqc3hTdGFydFRhZ3xqc3hFbmRUYWcvbmFtZS9AKlwiKSxcbiAgICAgIGZ1bmN0aW9uTm9uVGVybWluYWxOb2RlUXVlcnkgPSBRdWVyeS5mcm9tRXhwcmVzc2lvbihcIi8vZnVuY3Rpb25Cb2R5fGFycm93RnVuY3Rpb25cIiksXG4gICAgICBqc3hUYWdBdHRyaWJ1dGVUZXJtaW5hbE5vZGVRdWVyeSA9IFF1ZXJ5LmZyb21FeHByZXNzaW9uKFwiLy9qc3hBdHRyaWJ1dGUvQCpcIiksXG4gICAgICBhcmd1bWVudFZhcmlhYmxlVGVybWluYWxOb2RlUXVlcnkgPSBRdWVyeS5mcm9tRXhwcmVzc2lvbihcIi8vYXJndW1lbnQvL3ZhcmlhYmxlL0AqXCIpLFxuICAgICAganN4VGFnQXR0cmlidXRlTmFtZVRlcm1pbmFsTm9kZVF1ZXJ5ID0gUXVlcnkuZnJvbUV4cHJlc3Npb24oXCIvL2pzeEF0dHJpYnV0ZS9uYW1lL0AqXCIpLFxuICAgICAgdmFyaWFibGVEZWNsYXJhdGlvblRlcm1pbmFsTm9kZVF1ZXJ5ID0gUXVlcnkuZnJvbUV4cHJlc3Npb24oXCIvL3ZhcnxsZXR8Y29uc3QvdmFyaWFibGUvQCpcIiksXG4gICAgICB0ZW1wbGF0ZUxpdGVyYWxTdHJpbmdUZXJtaW5hbE5vZGVRdWVyeSA9IFF1ZXJ5LmZyb21FeHByZXNzaW9uKFwiLy90ZW1wbGF0ZUxpdGVyYWwvc3RyaW5nL0AqXCIpLFxuICAgICAgdGVtcGxhdGVMaXRlcmFsRGVsaW1pdGVyVGVybWluYWxOb2RlUXVlcnkgPSBRdWVyeS5mcm9tRXhwcmVzc2lvbihcIi8vdGVtcGxhdGVMaXRlcmFsL0BkZWxpbWl0ZXJcIiksXG4gICAgICBkZXN0cnVjdHVyZWRDb25zdERlY2xhcmF0aW9uVGVybWluYWxOb2RlUXVlcnkgPSBRdWVyeS5mcm9tRXhwcmVzc2lvbihcIi8vY29uc3QvZGVzdHJ1Y3R1cmUvdmFyaWFibGUvQCpcIik7XG5cbmNvbnN0IHsgQkFDS1RJQ0tfQ0hBUkFDVEVSIH0gPSBjaGFyYWN0ZXJzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBKYXZhU2NyaXB0UHJvY2Vzc29yIGV4dGVuZHMgUHJvY2Vzc29yIHtcbiAgcHJvY2Vzcyh0b2tlbnMsIG5vZGUpIHtcbiAgICBpZiAobm9kZSAhPT0gbnVsbCkge1xuICAgICAgY29uc3QganN4Tm9uVGVybWluYWxOb2RlcyA9IGpzeE5vblRlcm1pbmFsTm9kZVF1ZXJ5LmV4ZWN1dGUobm9kZSksXG4gICAgICAgICAgICBmdW5jdGlvbk5vblRlcm1pbmFsTm9kZXMgPSBmdW5jdGlvbk5vblRlcm1pbmFsTm9kZVF1ZXJ5LmV4ZWN1dGUobm9kZSk7XG5cbiAgICAgIHRoaXMucmVwbGFjZVRlcm1pbmFsTm9kZXNTaWduaWZpY2FudFRva2VuKHRva2Vucywgbm9kZSwgKGNvbnRlbnQpID0+IEVycm9yVG9rZW4sIGVycm9yVGVybWluYWxOb2RlUXVlcnkpO1xuXG4gICAgICB0aGlzLnJlcGxhY2VUZXJtaW5hbE5vZGVzU2lnbmlmaWNhbnRUb2tlbih0b2tlbnMsIG5vZGUsIChjb250ZW50KSA9PiBTdHJpbmdUb2tlbiwgdGVtcGxhdGVMaXRlcmFsU3RyaW5nVGVybWluYWxOb2RlUXVlcnkpO1xuXG4gICAgICB0aGlzLnJlcGxhY2VUZXJtaW5hbE5vZGVzU2lnbmlmaWNhbnRUb2tlbih0b2tlbnMsIG5vZGUsIChjb250ZW50KSA9PiAoY29udGVudCA9PT0gQkFDS1RJQ0tfQ0hBUkFDVEVSKSA/IFN0cmluZ1Rva2VuIDogbnVsbCwgdGVtcGxhdGVMaXRlcmFsRGVsaW1pdGVyVGVybWluYWxOb2RlUXVlcnkpO1xuXG4gICAgICBqc3hOb25UZXJtaW5hbE5vZGVzLmZvckVhY2goKGpzeE5vblRlcm1pbmFsTm9kZSkgPT4gdGhpcy5yZXBsYWNlVGVybWluYWxOb2Rlc1NpZ25pZmljYW50VG9rZW4odG9rZW5zLCBqc3hOb25UZXJtaW5hbE5vZGUsIChjb250ZW50KSA9PiBKU1hUb2tlbiwganN4VGFnVGVybWluYWxOb2RlUXVlcnksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganN4VGFnTmFtZVRlcm1pbmFsTm9kZVF1ZXJ5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzeFRhZ0F0dHJpYnV0ZVRlcm1pbmFsTm9kZVF1ZXJ5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzeFRhZ0F0dHJpYnV0ZU5hbWVUZXJtaW5hbE5vZGVRdWVyeSkpO1xuXG4gICAgICBmdW5jdGlvbk5vblRlcm1pbmFsTm9kZXMuZm9yRWFjaCgoZnVuY3Rpb25Ob25UZXJtaW5hbE5vZGUpID0+IHtcbiAgICAgICAgY29uc3QgYXJndW1lbnROYW1lcyA9IHRoaXMucmVwbGFjZVRlcm1pbmFsTm9kZXNTaWduaWZpY2FudFRva2VuKHRva2VucywgZnVuY3Rpb25Ob25UZXJtaW5hbE5vZGUsIChjb250ZW50KSA9PiBBcmd1bWVudFRva2VuLCBhcmd1bWVudFZhcmlhYmxlVGVybWluYWxOb2RlUXVlcnkpLFxuICAgICAgICAgICAgICB2YXJpYWJsZU5hbWVzID0gdGhpcy5yZXBsYWNlVGVybWluYWxOb2Rlc1NpZ25pZmljYW50VG9rZW4odG9rZW5zLCBmdW5jdGlvbk5vblRlcm1pbmFsTm9kZSwgKGNvbnRlbnQpID0+IFZhcmlhYmxlVG9rZW4sIHZhcmlhYmxlRGVjbGFyYXRpb25UZXJtaW5hbE5vZGVRdWVyeSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0cnVjdHVyZWRDb25zdERlY2xhcmF0aW9uVGVybWluYWxOb2RlUXVlcnkpO1xuXG4gICAgICAgIHRoaXMucmVwbGFjZVRlcm1pbmFsTm9kZXNTaWduaWZpY2FudFRva2VuKHRva2VucywgZnVuY3Rpb25Ob25UZXJtaW5hbE5vZGUsIChjb250ZW50KSA9PiB7XG4gICAgICAgICAgbGV0IFRva2VuID0gbnVsbDtcblxuICAgICAgICAgIGNvbnN0IHZhcmlhYmxlTmFtZSA9IGNvbnRlbnQsIC8vL1xuICAgICAgICAgICAgICAgIHZhcmlhYmxlTmFtZXNJbmNsdWRlc1ZhcmlhYmxlTmFtZSA9IHZhcmlhYmxlTmFtZXMuaW5jbHVkZXModmFyaWFibGVOYW1lKSxcbiAgICAgICAgICAgICAgICBhcmd1bWVudE5hbWVzSW5jbHVkZXNWYXJpYWJsZU5hbWUgPSBhcmd1bWVudE5hbWVzLmluY2x1ZGVzKHZhcmlhYmxlTmFtZSk7XG5cbiAgICAgICAgICBpZiAoZmFsc2UpIHtcbiAgICAgICAgICAgIC8vL1xuICAgICAgICAgIH0gZWxzZSBpZiAodmFyaWFibGVOYW1lc0luY2x1ZGVzVmFyaWFibGVOYW1lKSB7XG4gICAgICAgICAgICBUb2tlbiA9IFZhcmlhYmxlVG9rZW47XG4gICAgICAgICAgfSBlbHNlIGlmIChhcmd1bWVudE5hbWVzSW5jbHVkZXNWYXJpYWJsZU5hbWUpIHtcbiAgICAgICAgICAgIFRva2VuID0gQXJndW1lbnRUb2tlbjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gVG9rZW47XG4gICAgICAgIH0sIHZhcmlhYmxlVGVybWluYWxOb2RlUXVlcnkpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkgeyByZXR1cm4gUHJvY2Vzc29yLmZyb21Ob3RoaW5nKEphdmFTY3JpcHRQcm9jZXNzb3IpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFBsdWdpbiBmcm9tIFwiLi4vcGx1Z2luXCI7XG5pbXBvcnQgSmF2YVNjcmlwdExleGVyIGZyb20gXCIuLi9sZXhlci9qYXZhc2NyaXB0XCI7XG5pbXBvcnQgSmF2YVNjcmlwdFBhcnNlciBmcm9tIFwiLi4vcGFyc2VyL2phdmFzY3JpcHRcIjtcbmltcG9ydCBKYXZhU2NyaXB0UHJvY2Vzc29yIGZyb20gXCIuLi9wcm9jZXNzb3IvamF2YXNjcmlwdFwiO1xuXG5pbXBvcnQgeyBKQVZBU0NSSVBUX0xBTkdVQUdFIH0gZnJvbSBcIi4uL2xhbmd1YWdlc1wiXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEphdmFTY3JpcHRQbHVnaW4gZXh0ZW5kcyBQbHVnaW4ge1xuICBsYW5ndWFnZSA9IEpBVkFTQ1JJUFRfTEFOR1VBR0U7XG5cbiAgc3RhdGljIExleGVyID0gSmF2YVNjcmlwdExleGVyO1xuXG4gIHN0YXRpYyBQYXJzZXIgPSBKYXZhU2NyaXB0UGFyc2VyO1xuXG4gIHN0YXRpYyBQcm9jZXNzb3IgPSBKYXZhU2NyaXB0UHJvY2Vzc29yO1xuXG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHsgcmV0dXJuIFBsdWdpbi5mcm9tTm90aGluZyhKYXZhU2NyaXB0UGx1Z2luKTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBYTUxQbHVnaW4gZnJvbSBcIi4uL3BsdWdpbi94bWxcIjtcbmltcG9ydCBKU09OUGx1Z2luIGZyb20gXCIuLi9wbHVnaW4vanNvblwiO1xuaW1wb3J0IFBsYWluVGV4dFBsdWdpbiBmcm9tIFwiLi4vcGx1Z2luL3BsYWluVGV4dFwiO1xuaW1wb3J0IEphdmFTY3JpcHRQbHVnaW4gZnJvbSBcIi4uL3BsdWdpbi9qYXZhc2NyaXB0XCI7XG5cbmltcG9ydCB7IFhNTF9MQU5HVUFHRSwgSlNPTl9MQU5HVUFHRSwgUExBSU5fVEVYVF9MQU5HVUFHRSB9IGZyb20gXCIuLi9sYW5ndWFnZXNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHBsdWdpbkZyb21MYW5ndWFnZUFuZFBsdWdpbihsYW5ndWFnZSwgUGx1Z2luKSB7XG4gIGlmICghUGx1Z2luKSB7XG4gICAgc3dpdGNoIChsYW5ndWFnZSkge1xuICAgICAgY2FzZSBYTUxfTEFOR1VBR0U6IFBsdWdpbiA9IFhNTFBsdWdpbjsgYnJlYWs7XG4gICAgICBjYXNlIEpTT05fTEFOR1VBR0U6IFBsdWdpbiA9IEpTT05QbHVnaW47IGJyZWFrO1xuICAgICAgY2FzZSBQTEFJTl9URVhUX0xBTkdVQUdFOiBQbHVnaW4gPSBQbGFpblRleHRQbHVnaW47IGJyZWFrO1xuXG4gICAgICBkZWZhdWx0IDpcbiAgICAgICAgUGx1Z2luID0gSmF2YVNjcmlwdFBsdWdpbjtcblxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBjb25zdCBwbHVnaW4gPSBQbHVnaW4uZnJvbU5vdGhpbmcoKTtcblxuICByZXR1cm4gcGx1Z2luO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydGllc0Zyb21Db250ZW50TGFuZ3VhZ2VQbHVnaW5BbmRPcHRpb25zKGNvbnRlbnQsIGxhbmd1YWdlLCBQbHVnaW4sIG9wdGlvbnMpIHtcbiAgY29uc3QgdGV4dCA9IGNvbnRlbnQsIC8vL1xuICAgICAgICBjaGlsZEVsZW1lbnRzID0gW3tcbiAgICAgICAgICBnZXRUZXh0OiAoKSA9PiB0ZXh0LFxuICAgICAgICB9XSxcbiAgICAgICAgcHJvcGVydGllcyA9IE9iamVjdC5hc3NpZ24oe1xuICAgICAgICAgIGNoaWxkRWxlbWVudHMsXG4gICAgICAgICAgbGFuZ3VhZ2UsXG4gICAgICAgICAgUGx1Z2luXG4gICAgICAgIH0sIG9wdGlvbnMpO1xuXG4gIHJldHVybiBwcm9wZXJ0aWVzO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5jb25zdCB7IGZpcnN0IH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnRlbnRGcm9tQ2hpbGRFbGVtZW50cyhjaGlsZEVsZW1lbnRzKSB7XG4gIGxldCBjb250ZW50ID0gRU1QVFlfU1RSSU5HO1xuXG4gIGNvbnN0IGNoaWxkRWxlbWVudHNMZW5ndGggPSBjaGlsZEVsZW1lbnRzLmxlbmd0aDtcblxuICBpZiAoY2hpbGRFbGVtZW50c0xlbmd0aCA+IDApIHtcbiAgICBjb25zdCBmaXJzdENoaWxkRWxlbWVudCA9IGZpcnN0KGNoaWxkRWxlbWVudHMpLFxuICAgICAgICAgIGZpcnN0Q2hpbGRFbGVtZW50VGV4dCA9IGZpcnN0Q2hpbGRFbGVtZW50LmdldFRleHQoKTtcblxuICAgIGNvbnRlbnQgPSBmaXJzdENoaWxkRWxlbWVudFRleHQ7ICAvLy9cbiAgfVxuXG4gIHJldHVybiBjb250ZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGluZUNvdW50RnJvbUNvbnRlbnQoY29udGVudCkge1xuICBsZXQgbGluZUNvdW50O1xuXG4gIGNvbnN0IG1hdGNoZXMgPSBjb250ZW50Lm1hdGNoKC9cXHJcXG58XFxyfFxcbi9nKTtcblxuICBpZiAobWF0Y2hlcyA9PT0gbnVsbCkge1xuICAgIGxpbmVDb3VudCA9IDE7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgbWF0Y2hlc0xlbmd0aCA9IG1hdGNoZXMubGVuZ3RoO1xuXG4gICAgbGluZUNvdW50ID0gbWF0Y2hlc0xlbmd0aCArIDE7XG4gIH1cblxuICByZXR1cm4gbGluZUNvdW50O1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9IT1NUID0gXCJcIjtcbmV4cG9ydCBjb25zdCBERUZBVUxUX0VESVRBQkxFID0gZmFsc2U7XG5leHBvcnQgY29uc3QgREVGQVVMVF9GSVJBX0NPREUgPSBmYWxzZTtcbmV4cG9ydCBjb25zdCBERUZBVUxUX0RFRkVSX1JFTkRFUiA9IGZhbHNlO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfSElEREVOX0dVVFRFUiA9IGZhbHNlO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfRkFOQ1lfU0NST0xMQkFSUyA9IGZhbHNlO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfSElEREVOX1NDUk9MTEJBUlMgPSBmYWxzZTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHdpdGhTdHlsZSBmcm9tIFwiZWFzeS13aXRoLXN0eWxlXCI7ICAvLy9cblxuaW1wb3J0IHsgUmVhY3QsIEJvdW5kcywgRWxlbWVudCB9IGZyb20gXCJlYXN5XCI7XG5cbmltcG9ydCBzdHlsZU1peGlucyBmcm9tIFwiLi9taXhpbnMvc3R5bGVcIjtcbmltcG9ydCBSaWNoVGV4dGFyZWEgZnJvbSBcIi4vcmljaFRleHRhcmVhXCI7XG5pbXBvcnQgUHJldHR5UHJpbnRlciBmcm9tIFwiLi9wcmV0dHlQcmludGVyXCI7XG5cbmltcG9ydCB7IGdldFNjcm9sbGJhclRoaWNrbmVzcyB9IGZyb20gXCIuL3V0aWxpdGllcy9zY3JvbGxiYXJUaGlja25lc3NcIjtcbmltcG9ydCB7IHBsdWdpbkZyb21MYW5ndWFnZUFuZFBsdWdpbiB9IGZyb20gXCIuL3V0aWxpdGllcy9wbHVnaW5cIjtcbmltcG9ydCB7IHByb3BlcnRpZXNGcm9tQ29udGVudExhbmd1YWdlUGx1Z2luQW5kT3B0aW9ucyB9IGZyb20gXCIuL3V0aWxpdGllcy9wcm9wZXJ0aWVzXCI7XG5pbXBvcnQgeyBsaW5lQ291bnRGcm9tQ29udGVudCwgY29udGVudEZyb21DaGlsZEVsZW1lbnRzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL2NvbnRlbnRcIjtcbmltcG9ydCB7IGNvbG91ciwgY2FyZXRDb2xvdXIsIGJvcmRlckNvbG91ciwgYmFja2dyb3VuZENvbG91ciB9IGZyb20gXCIuL3NjaGVtZS9jb2xvdXJcIjtcbmltcG9ydCB7IERFRkFVTFRfRURJVEFCTEUsIERFRkFVTFRfRklSQV9DT0RFLCBERUZBVUxUX0RFRkVSX1JFTkRFUiwgREVGQVVMVF9ISURERU5fR1VUVEVSLCBERUZBVUxUX0hJRERFTl9TQ1JPTExCQVJTLCBERUZBVUxUX0ZBTkNZX1NDUk9MTEJBUlMgfSBmcm9tIFwiLi9kZWZhdWx0c1wiO1xuXG5jbGFzcyBZYXBwIGV4dGVuZHMgRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKHNlbGVjdG9yLCBwbHVnaW4pIHtcbiAgICBzdXBlcihzZWxlY3Rvcik7XG5cbiAgICB0aGlzLnBsdWdpbiA9IHBsdWdpbjtcbiAgfVxuXG4gIGdldFBsdWdpbigpIHtcbiAgICByZXR1cm4gdGhpcy5wbHVnaW47XG4gIH1cblxuICBnZXRDb250ZW50KCkge1xuICAgIGNvbnN0IHJpY2hUZXh0YXJlYUNvbnRlbnQgPSB0aGlzLmdldFJpY2hUZXh0YXJlYUNvbnRlbnQoKSxcbiAgICAgICAgICBjb250ZW50ID0gcmljaFRleHRhcmVhQ29udGVudDsgIC8vL1xuXG4gICAgcmV0dXJuIGNvbnRlbnQ7XG4gIH1cblxuICBnZXRJbm5lckJvdW5kcyhndXR0ZXJXaWR0aCkge1xuICAgIGxldCB0b3AsXG4gICAgICAgIGxlZnQsXG4gICAgICAgIHdpZHRoID0gdGhpcy5nZXRXaWR0aCgpLFxuICAgICAgICBoZWlnaHQgPSB0aGlzLmdldEhlaWdodCgpO1xuXG4gICAgY29uc3QgcGFkZGluZ1RvcCA9IHRoaXMuZ2V0UGFkZGluZ1RvcCgpLFxuICAgICAgICAgIHBhZGRpbmdMZWZ0ID0gdGhpcy5nZXRQYWRkaW5nTGVmdCgpLFxuICAgICAgICAgIHBhZGRpbmdSaWdodCA9IHRoaXMuZ2V0UGFkZGluZ1JpZ2h0KCksXG4gICAgICAgICAgcGFkZGluZ0JvdHRvbSA9IHRoaXMuZ2V0UGFkZGluZ0JvdHRvbSgpLFxuICAgICAgICAgIGJvcmRlclRvcFdpZHRoID0gdGhpcy5nZXRCb3JkZXJUb3BXaWR0aCgpLFxuICAgICAgICAgIGJvcmRlckxlZnRXaWR0aCA9IHRoaXMuZ2V0Qm9yZGVyTGVmdFdpZHRoKCksXG4gICAgICAgICAgYm9yZGVyUmlnaHRXaWR0aCA9IHRoaXMuZ2V0Qm9yZGVyUmlnaHRXaWR0aCgpLFxuICAgICAgICAgIGJvcmRlckJvdHRvbVdpZHRoID0gdGhpcy5nZXRCb3JkZXJCb3R0b21XaWR0aCgpO1xuXG4gICAgdG9wID0gYm9yZGVyVG9wV2lkdGggKyBwYWRkaW5nVG9wO1xuICAgIGxlZnQgPSBib3JkZXJMZWZ0V2lkdGggKyBwYWRkaW5nTGVmdDtcblxuICAgIHdpZHRoIC09ICggYm9yZGVyTGVmdFdpZHRoICsgcGFkZGluZ0xlZnQgKyBwYWRkaW5nUmlnaHQgKyBib3JkZXJSaWdodFdpZHRoICk7XG4gICAgaGVpZ2h0IC09ICggYm9yZGVyVG9wV2lkdGggKyBwYWRkaW5nVG9wICsgcGFkZGluZ0JvdHRvbSArIGJvcmRlckJvdHRvbVdpZHRoICk7XG5cbiAgICBpZiAoZ3V0dGVyV2lkdGggIT09IG51bGwpIHtcbiAgICAgIGxlZnQgKz0gZ3V0dGVyV2lkdGg7XG4gICAgICB3aWR0aCAtPSBndXR0ZXJXaWR0aDtcbiAgICB9XG5cbiAgICBjb25zdCBib3VuZHMgPSBCb3VuZHMuZnJvbVRvcExlZnRXaWR0aEFuZEhlaWdodCh0b3AsIGxlZnQsIHdpZHRoLCBoZWlnaHQpLFxuICAgICAgICAgIGlubmVyQm91bmRzID0gYm91bmRzOyAvLy9cblxuICAgIHJldHVybiBpbm5lckJvdW5kcztcbiAgfVxuXG4gIGdldEluaXRpYWxMaW5lQ291bnQoKSB7XG4gICAgY29uc3QgY29udGVudCA9IHRoaXMuZ2V0Q29udGVudCgpLFxuICAgICAgICAgIGxpbmVDb3VudCA9IGxpbmVDb3VudEZyb21Db250ZW50KGNvbnRlbnQpLFxuICAgICAgICAgIGluaXRpYWxMaW5lQ291bnQgPSBsaW5lQ291bnQ7IC8vL1xuXG4gICAgcmV0dXJuIGluaXRpYWxMaW5lQ291bnQ7XG4gIH1cblxuICBnZXRTY3JvbGxiYXJUaGlja25lc3MoKSB7XG4gICAgbGV0IHNjcm9sbGJhclRoaWNrbmVzcyA9IDA7XG5cbiAgICBjb25zdCB7IGhpZGRlblNjcm9sbGJhcnMgPSBERUZBVUxUX0hJRERFTl9TQ1JPTExCQVJTIH0gPSB0aGlzLnByb3BlcnRpZXM7XG5cbiAgICBpZiAoIWhpZGRlblNjcm9sbGJhcnMpIHtcbiAgICAgIGNvbnN0IHsgZmFuY3lTY3JvbGxiYXJzID0gREVGQVVMVF9GQU5DWV9TQ1JPTExCQVJTIH0gPSB0aGlzLnByb3BlcnRpZXM7XG5cbiAgICAgIHNjcm9sbGJhclRoaWNrbmVzcyA9IGdldFNjcm9sbGJhclRoaWNrbmVzcyhmYW5jeVNjcm9sbGJhcnMpO1xuICAgIH1cblxuICAgIHJldHVybiBzY3JvbGxiYXJUaGlja25lc3M7XG4gIH1cblxuICBzZXRMZXhlcihsZXhlcikgeyB0aGlzLnBsdWdpbi5zZXRMZXhlcihsZXhlcik7IH1cblxuICBzZXRQYXJzZXIocGFyc2VyKSB7IHRoaXMucGx1Z2luLnNldFBhcnNlcihwYXJzZXIpOyB9XG5cbiAgY2hhbmdlSGFuZGxlcihldmVudCwgZWxlbWVudCkge1xuICAgIGNvbnN0IHJpY2hUZXh0YXJlYSA9IGVsZW1lbnQsIC8vL1xuICAgICAgICAgIGNvbnRlbnRDaGFuZ2VkID0gcmljaFRleHRhcmVhLmhhc0NvbnRlbnRDaGFuZ2VkKCk7XG5cbiAgICBpZiAoY29udGVudENoYW5nZWQpIHtcbiAgICAgIGNvbnN0IHsgb25Db250ZW50Q2hhbmdlIH0gPSB0aGlzLnByb3BlcnRpZXMsXG4gICAgICAgICAgICBjb250ZW50Q2hhbmdlSGFuZGxlciA9IG9uQ29udGVudENoYW5nZTsgLy8vXG5cbiAgICAgIHRoaXMudXBkYXRlKCk7XG5cbiAgICAgIGVsZW1lbnQgPSB0aGlzOyAvLy9cblxuICAgICAgY29udGVudENoYW5nZUhhbmRsZXIgJiYgY29udGVudENoYW5nZUhhbmRsZXIoZXZlbnQsIGVsZW1lbnQpOyAvLy9cbiAgICB9XG4gIH1cblxuICBzY3JvbGxIYW5kbGVyKGV2ZW50LCBlbGVtZW50KSB7XG4gICAgY29uc3QgcmljaFRleHRhcmVhID0gZWxlbWVudCwgLy8vXG4gICAgICAgICAgc2Nyb2xsVG9wID0gcmljaFRleHRhcmVhLmdldFNjcm9sbFRvcCgpLFxuICAgICAgICAgIHNjcm9sbExlZnQgPSByaWNoVGV4dGFyZWEuZ2V0U2Nyb2xsTGVmdCgpO1xuXG4gICAgdGhpcy5zY3JvbGxQcmV0dHlQcmludGVyKHNjcm9sbFRvcCwgc2Nyb2xsTGVmdCk7XG4gIH1cblxuICB1cGRhdGUoKSB7XG4gICAgY29uc3QgY29udGVudCA9IHRoaXMuZ2V0Q29udGVudCgpO1xuXG4gICAgdGhpcy5wbHVnaW4udXBkYXRlKGNvbnRlbnQpO1xuXG4gICAgY29uc3QgdG9rZW5zID0gdGhpcy5wbHVnaW4uZ2V0VG9rZW5zKCksXG4gICAgICAgICAgZ3V0dGVyV2lkdGggPSB0aGlzLnVwZGF0ZVByZXR0eVByaW50ZXIodG9rZW5zKTtcblxuICAgIGlmIChndXR0ZXJXaWR0aCAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgaW5uZXJCb3VuZHMgPSB0aGlzLmdldElubmVyQm91bmRzKGd1dHRlcldpZHRoKSxcbiAgICAgICAgICAgIHJpY2hUZXh0YXJlYUJvdW5kcyA9IGlubmVyQm91bmRzOyAvLy9cblxuICAgICAgdGhpcy5zZXRSaWNoVGV4dGFyZWFCb3VuZHMocmljaFRleHRhcmVhQm91bmRzKTtcbiAgICB9XG4gIH1cblxuICByZXNpemUoKSB7XG4gICAgbGV0IGlubmVyQm91bmRzLFxuICAgICAgICBndXR0ZXJXaWR0aDtcblxuICAgIGd1dHRlcldpZHRoID0gbnVsbDtcblxuICAgIGlubmVyQm91bmRzID0gdGhpcy5nZXRJbm5lckJvdW5kcyhndXR0ZXJXaWR0aCk7XG5cbiAgICBjb25zdCBwcmV0dHlQcmludGVyQm91bmRzID0gaW5uZXJCb3VuZHM7ICAvLy9cblxuICAgIHRoaXMuc2V0UHJldHR5UHJpbnRlckJvdW5kcyhwcmV0dHlQcmludGVyQm91bmRzKTtcblxuICAgIGd1dHRlcldpZHRoID0gdGhpcy5yZXNpemVQcmV0dHlQcmludGVyKCk7XG5cbiAgICBpbm5lckJvdW5kcyA9IHRoaXMuZ2V0SW5uZXJCb3VuZHMoZ3V0dGVyV2lkdGgpO1xuXG4gICAgY29uc3QgcmljaFRleHRhcmVhQm91bmRzID0gaW5uZXJCb3VuZHM7IC8vL1xuXG4gICAgdGhpcy5zZXRSaWNoVGV4dGFyZWFCb3VuZHMocmljaFRleHRhcmVhQm91bmRzKTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCBsaW5lSGVpZ2h0ID0gdGhpcy5nZXRMaW5lSGVpZ2h0KCksXG4gICAgICAgICAgcGFkZGluZ1RvcCA9IHRoaXMuZ2V0UGFkZGluZ1RvcCgpLFxuICAgICAgICAgIHBhZGRpbmdCb3R0b20gPSB0aGlzLmdldFBhZGRpbmdCb3R0b20oKSxcbiAgICAgICAgICBib3JkZXJUb3BXaWR0aCA9IHRoaXMuZ2V0Qm9yZGVyVG9wV2lkdGgoKSxcbiAgICAgICAgICBpbml0aWFsTGluZUNvdW50ID0gdGhpcy5nZXRJbml0aWFsTGluZUNvdW50KCksXG4gICAgICAgICAgYm9yZGVyQm90dG9tV2lkdGggPSB0aGlzLmdldEJvcmRlckJvdHRvbVdpZHRoKCksXG4gICAgICAgICAgc2Nyb2xsYmFyVGhpY2tuZXNzID0gdGhpcy5nZXRTY3JvbGxiYXJUaGlja25lc3MoKSxcbiAgICAgICAgICBoZWlnaHQgPSBib3JkZXJUb3BXaWR0aCArIHBhZGRpbmdUb3AgKyBpbml0aWFsTGluZUNvdW50ICogbGluZUhlaWdodCArIHBhZGRpbmdCb3R0b20gKyBib3JkZXJCb3R0b21XaWR0aCArIHNjcm9sbGJhclRoaWNrbmVzcztcblxuICAgIHRoaXMuc2V0SGVpZ2h0KGhlaWdodCk7XG5cbiAgICB0aGlzLnJlc2l6ZSgpO1xuXG4gICAgdGhpcy51cGRhdGUoKTtcbiAgfVxuXG4gIGRpZE1vdW50KCkge1xuICAgIGNvbnN0IHsgZmlyYUNvZGUgPSBERUZBVUxUX0ZJUkFfQ09ERSwgZGVmZXJSZW5kZXIgPSBERUZBVUxUX0RFRkVSX1JFTkRFUiB9ID0gdGhpcy5wcm9wZXJ0aWVzO1xuXG4gICAgaWYgKGZpcmFDb2RlKSB7XG4gICAgICB0aGlzLmFkZENsYXNzKFwiZmlyYS1jb2RlXCIpO1xuICAgIH1cblxuICAgIGlmIChkZWZlclJlbmRlcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICB3aWxsVW5tb3VudCgpIHtcbiAgICBjb25zdCB7IGZpcmFDb2RlID0gREVGQVVMVF9GSVJBX0NPREUgfSA9IHRoaXMucHJvcGVydGllcztcblxuICAgIGlmIChmaXJhQ29kZSkge1xuICAgICAgdGhpcy5yZW1vdmVDbGFzcyhcImZpcmEtY29kZVwiKTtcbiAgICB9XG4gIH1cblxuICBjaGlsZEVsZW1lbnRzKCkge1xuICAgIGNvbnN0IHsgaGlkZGVuR3V0dGVyID0gREVGQVVMVF9ISURERU5fR1VUVEVSLCBoaWRkZW5TY3JvbGxiYXJzID0gREVGQVVMVF9ISURERU5fU0NST0xMQkFSUywgZmFuY3lTY3JvbGxiYXJzID0gREVGQVVMVF9GQU5DWV9TQ1JPTExCQVJTIH0gPSB0aGlzLnByb3BlcnRpZXMsXG4gICAgICAgICAgY2hhbmdlSGFuZGxlciA9IHRoaXMuY2hhbmdlSGFuZGxlci5iaW5kKHRoaXMpLFxuICAgICAgICAgIHNjcm9sbEhhbmRsZXIgPSB0aGlzLnNjcm9sbEhhbmRsZXIuYmluZCh0aGlzKSxcbiAgICAgICAgICBzY3JvbGxiYXJUaGlja25lc3MgPSB0aGlzLmdldFNjcm9sbGJhclRoaWNrbmVzcygpO1xuXG4gICAgcmV0dXJuIChbXG5cbiAgICAgIDxQcmV0dHlQcmludGVyIGhpZGRlbkd1dHRlcj17aGlkZGVuR3V0dGVyfSBzY3JvbGxiYXJUaGlja25lc3M9e3Njcm9sbGJhclRoaWNrbmVzc30gLz4sXG4gICAgICA8UmljaFRleHRhcmVhIG9uQ2hhbmdlPXtjaGFuZ2VIYW5kbGVyfSBvblNjcm9sbD17c2Nyb2xsSGFuZGxlcn0gaGlkZGVuU2Nyb2xsYmFycz17aGlkZGVuU2Nyb2xsYmFyc30gZmFuY3lTY3JvbGxiYXJzPXtmYW5jeVNjcm9sbGJhcnN9IGFjdGl2ZSAvPlxuXG4gICAgXSk7XG4gIH1cblxuICBwYXJlbnRDb250ZXh0KCkge1xuICAgIGNvbnN0IGdldFBsdWdpbiA9IHRoaXMuZ2V0UGx1Z2luLmJpbmQodGhpcyksXG4gICAgICAgICAgZ2V0Q29udGVudCA9IHRoaXMuZ2V0Q29udGVudC5iaW5kKHRoaXMpLFxuICAgICAgICAgIHVwZGF0ZVlhcHAgPSB0aGlzLnVwZGF0ZS5iaW5kKHRoaXMpLCAgLy8vXG4gICAgICAgICAgcmVzaXplWWFwcCA9IHRoaXMucmVzaXplLmJpbmQodGhpcyksICAvLy9cbiAgICAgICAgICBzZXRZYXBwV2lkdGggPSB0aGlzLnNldFdpZHRoLmJpbmQodGhpcyksICAvLy9cbiAgICAgICAgICBzZXRZYXBwSGVpZ2h0ID0gdGhpcy5zZXRIZWlnaHQuYmluZCh0aGlzKSwgIC8vL1xuICAgICAgICAgIHNldFlhcHBMZXhlciA9IHRoaXMuc2V0TGV4ZXIuYmluZCh0aGlzKSwgIC8vL1xuICAgICAgICAgIHNldFlhcHBQYXJzZXIgPSB0aGlzLnNldFBhcnNlci5iaW5kKHRoaXMpOyAgLy8vXG5cbiAgICByZXR1cm4gKHtcbiAgICAgIGdldFBsdWdpbixcbiAgICAgIGdldENvbnRlbnQsXG4gICAgICB1cGRhdGVZYXBwLFxuICAgICAgcmVzaXplWWFwcCxcbiAgICAgIHNldFlhcHBXaWR0aCxcbiAgICAgIHNldFlhcHBIZWlnaHQsXG4gICAgICBzZXRZYXBwTGV4ZXIsXG4gICAgICBzZXRZYXBwUGFyc2VyXG4gICAgfSk7XG4gIH1cblxuICBpbml0aWFsaXNlKCkge1xuICAgIHRoaXMuYXNzaWduQ29udGV4dCgpO1xuXG4gICAgY29uc3QgeyBjaGlsZEVsZW1lbnRzLCBlZGl0YWJsZSA9IERFRkFVTFRfRURJVEFCTEUgfSA9IHRoaXMucHJvcGVydGllcyxcbiAgICAgICAgICBsYW5ndWFnZSA9IHRoaXMucGx1Z2luLmdldExhbmd1YWdlKCksXG4gICAgICAgICAgY29udGVudCA9IGNvbnRlbnRGcm9tQ2hpbGRFbGVtZW50cyhjaGlsZEVsZW1lbnRzKSxcbiAgICAgICAgICByZWFkT25seSA9ICFlZGl0YWJsZSxcbiAgICAgICAgICBzY3JvbGxUb3AgPSAwLCAgLy8vXG4gICAgICAgICAgc2Nyb2xsTGVmdCA9IDA7IC8vL1xuXG4gICAgdGhpcy5zZXRMYW5ndWFnZShsYW5ndWFnZSk7XG5cbiAgICB0aGlzLnNjcm9sbFByZXR0eVByaW50ZXIoc2Nyb2xsVG9wLCBzY3JvbGxMZWZ0KTtcblxuICAgIHRoaXMuc2V0UmljaFRleHRhcmVhQ29udGVudChjb250ZW50KTtcblxuICAgIHRoaXMuc2V0UmljaFRleHRhcmVhUmVhZE9ubHkocmVhZE9ubHkpO1xuXG4gICAgdGhpcy5vblJlc2l6ZSgoZXZlbnQsIGVsZW1lbnQpID0+IHRoaXMucmVzaXplKCkpO1xuICB9XG5cbiAgc3RhdGljIHRhZ05hbWUgPSBcImRpdlwiO1xuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcGVydGllcyA9IHtcbiAgICBjbGFzc05hbWU6IFwieWFwcFwiXG4gIH07XG5cbiAgc3RhdGljIGlnbm9yZWRQcm9wZXJ0aWVzID0gW1xuICAgIFwiUGx1Z2luXCIsXG4gICAgXCJsYW5ndWFnZVwiLFxuICAgIFwiZmlyYUNvZGVcIixcbiAgICBcImVkaXRhYmxlXCIsXG4gICAgXCJkZWZlclJlbmRlclwiLFxuICAgIFwiaGlkZGVuR3V0dGVyXCIsXG4gICAgXCJub1Njcm9sbGJhcnNcIixcbiAgICBcImZhbmN5U2Nyb2xsYmFyc1wiXG4gIF07XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQsIGxhbmd1YWdlLCBQbHVnaW4sIG9wdGlvbnMpIHtcbiAgICBjb25zdCBDbGFzcyA9IFlhcHAsXG4gICAgICAgICAgcHJvcGVydGllcyA9IHByb3BlcnRpZXNGcm9tQ29udGVudExhbmd1YWdlUGx1Z2luQW5kT3B0aW9ucyhjb250ZW50LCBsYW5ndWFnZSwgUGx1Z2luLCBvcHRpb25zKSxcbiAgICAgICAgICBwbHVnaW4gPSBwbHVnaW5Gcm9tTGFuZ3VhZ2VBbmRQbHVnaW4obGFuZ3VhZ2UsIFBsdWdpbiksXG4gICAgICAgICAgeWFwcCA9IEVsZW1lbnQuZnJvbUNsYXNzKENsYXNzLCBwcm9wZXJ0aWVzLCBwbHVnaW4pO1xuXG4gICAgcmV0dXJuIHlhcHA7XG4gIH1cblxuICBzdGF0aWMgZnJvbUNsYXNzKENsYXNzLCBwcm9wZXJ0aWVzKSB7XG4gICAgY29uc3QgeyBsYW5ndWFnZSwgUGx1Z2luIH0gPSBwcm9wZXJ0aWVzLFxuICAgICAgICAgIHBsdWdpbiA9IHBsdWdpbkZyb21MYW5ndWFnZUFuZFBsdWdpbihsYW5ndWFnZSwgUGx1Z2luKSxcbiAgICAgICAgICB5YXBwID0gRWxlbWVudC5mcm9tQ2xhc3MoQ2xhc3MsIHByb3BlcnRpZXMsIHBsdWdpbik7XG5cbiAgICByZXR1cm4geWFwcDtcbiAgfVxufVxuXG5PYmplY3QuYXNzaWduKFlhcHAucHJvdG90eXBlLCBzdHlsZU1peGlucyk7XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhTdHlsZShZYXBwKWBcblxuICB3aWR0aDogMTAwJTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gIGJvcmRlcjogMXB4IHNvbGlkO1xuICBcbiAgY29sb3I6ICR7Y29sb3VyfTtcbiAgY2FyZXQtY29sb3I6ICR7Y2FyZXRDb2xvdXJ9O1xuICBib3JkZXItY29sb3I6ICR7Ym9yZGVyQ29sb3VyfTtcbiAgYmFja2dyb3VuZC1jb2xvcjogJHtiYWNrZ3JvdW5kQ29sb3VyfTtcblxuICBmb250LXNpemU6IDEzcHg7XG4gIGxpbmUtaGVpZ2h0OiAyMHB4O1xuICBmb250LWZhbWlseTogXCJNZW5sb1wiLCBcIkx1Y2lkYSBTYW5zIFR5cGV3cml0ZXJcIiwgbW9ub3NwYWNlO1xuICB0ZXh0LXJlbmRlcmluZzogb3B0aW1pemVMZWdpYmlsaXR5O1xuICBmb250LWZlYXR1cmUtc2V0dGluZ3M6IG5vcm1hbDtcblxuICAuZmlyYS1jb2RlIHtcblxuICAgIGZvbnQtc2l6ZTogMTNweDtcbiAgICBsaW5lLWhlaWdodDogMjBweDtcbiAgICBmb250LWZhbWlseTogXCJGaXJhIENvZGVcIjtcbiAgICB0ZXh0LXJlbmRlcmluZzogb3B0aW1pemVMZWdpYmlsaXR5O1xuICAgIGZvbnQtZmVhdHVyZS1zZXR0aW5nczogXCJjYWx0XCIgMTtcbiAgICBcbiAgfVxuXG5gO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBjYWRldEJsdWUsIGNpdHJvbiB9IGZyb20gXCIuLi8uLi9jb2xvdXJzXCI7XG5cbmV4cG9ydCBjb25zdCBuYW1lQ29sb3VyID0gY2FkZXRCbHVlO1xuXG5leHBvcnQgY29uc3QgYXR0cmlidXRlQ29sb3VyID0gY2l0cm9uO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBuYW1lQ29sb3VyLCBhdHRyaWJ1dGVDb2xvdXIgfSBmcm9tIFwiLi4vLi4vc2NoZW1lL3N5bnRheC94bWxcIjtcblxuY29uc3QgeG1sU3ludGF4U3R5bGUgPSBgXG5cbiAgLnhtbC5zeW50YXggPiAubmFtZSB7IGNvbG9yOiAke25hbWVDb2xvdXJ9OyB9XG5cbiAgLnhtbC5zeW50YXggPiAuYXR0cmlidXRlIHsgY29sb3I6ICR7YXR0cmlidXRlQ29sb3VyfTsgfVxuXG5gO1xuXG5leHBvcnQgZGVmYXVsdCB4bWxTeW50YXhTdHlsZTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgY2FkZXRCbHVlIH0gZnJvbSBcIi4uLy4uL2NvbG91cnNcIjtcblxuZXhwb3J0IGNvbnN0IG51bWJlckNvbG91ciA9IGNhZGV0Qmx1ZTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgbnVtYmVyQ29sb3VyIH0gZnJvbSBcIi4uLy4uL3NjaGVtZS9zeW50YXgvanNvblwiO1xuXG5jb25zdCBqc29uU3ludGF4U3R5bGUgPSBgXG5cbiAgLmpzb24uc3ludGF4ID4gLm51bWJlciB7IGNvbG9yOiAke251bWJlckNvbG91cn07IH1cblxuYDtcblxuZXhwb3J0IGRlZmF1bHQganNvblN5bnRheFN0eWxlO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcHJpbmdXb29kLCByYXp6bWF0YXp6LCBodXJyaWNhbmUsIHBvcnRpY2EgfSBmcm9tIFwiLi4vLi4vY29sb3Vyc1wiO1xuXG5leHBvcnQgY29uc3QgY29sb3VyID0gc3ByaW5nV29vZDtcblxuZXhwb3J0IGNvbnN0IGtleXdvcmRDb2xvdXIgPSByYXp6bWF0YXp6O1xuXG5leHBvcnQgY29uc3QgY29tbWVudENvbG91ciA9IGh1cnJpY2FuZTtcblxuZXhwb3J0IGNvbnN0IHN0cmluZ0xpdGVyYWxDb2xvdXIgPSBwb3J0aWNhO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBwb21lZ3JhbmF0ZSB9IGZyb20gXCIuLi8uLi9jb2xvdXJzXCI7XG5pbXBvcnQgeyBjb2xvdXIsIGtleXdvcmRDb2xvdXIsIGNvbW1lbnRDb2xvdXIsIHN0cmluZ0xpdGVyYWxDb2xvdXIgfSBmcm9tIFwiLi4vLi4vc2NoZW1lL3N5bnRheC9kZWZhdWx0XCI7XG5cbmNvbnN0IGRlZmF1bHRTeW50YXhTdHlsZSA9IGBcblxuICAuc3ludGF4ICogeyBcbiAgICBmb250LXNpemU6IGluaGVyaXQ7XG4gICAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7XG4gICAgZm9udC1mYW1pbHk6IGluaGVyaXQ7XG4gICAgdGV4dC1yZW5kZXJpbmc6IGluaGVyaXQ7XG4gICAgZm9udC1mZWF0dXJlLXNldHRpbmdzOiBpbmhlcml0O1xuICB9XG4gIFxuICAuc3ludGF4LCBcbiAgLnN5bnRheCA+ICogeyBcbiAgICBjb2xvcjogJHtjb2xvdXJ9OyBcbiAgfVxuICAgIFxuICAuc3ludGF4ID4gLmtleXdvcmQgeyBjb2xvcjogJHtrZXl3b3JkQ29sb3VyfTsgfVxuICBcbiAgLnN5bnRheCA+IC5jb21tZW50IHsgY29sb3I6ICR7Y29tbWVudENvbG91cn07IH1cbiAgXG4gIC5zeW50YXggPiAuc3RyaW5nLWxpdGVyYWwgeyBjb2xvcjogJHtzdHJpbmdMaXRlcmFsQ29sb3VyfTsgfSBcbiAgXG4gIC5zeW50YXggPiAuZXJyb3Ige1xuICAgIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBib3R0b207XG4gICAgdGV4dC1kZWNvcmF0aW9uLWxpbmU6IHVuZGVybGluZTtcbiAgICB0ZXh0LWRlY29yYXRpb24tY29sb3I6ICR7cG9tZWdyYW5hdGV9O1xuICB9IFxuXG5gO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZhdWx0U3ludGF4U3R5bGU7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwcmluZ1dvb2QsIGNhZGV0Qmx1ZSwgdGFoaXRpIH0gZnJvbSBcIi4uLy4uL2NvbG91cnNcIjtcblxuZXhwb3J0IGNvbnN0IGpzeENvbG91ciA9IHNwcmluZ1dvb2Q7XG5cbmV4cG9ydCBjb25zdCBhcmd1bWVudENvbG91ciA9IHRhaGl0aTtcblxuZXhwb3J0IGNvbnN0IHZhcmlhYmxlQ29sb3VyID0gY2FkZXRCbHVlO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBqc3hDb2xvdXIsIGFyZ3VtZW50Q29sb3VyLCB2YXJpYWJsZUNvbG91ciB9IGZyb20gXCIuLi8uLi9zY2hlbWUvc3ludGF4L2phdmFTY3JpcHRcIjtcblxuY29uc3QgamF2YVNjcmlwdFN5bnRheFN0eWxlID0gYFxuXG4gIC5qYXZhc2NyaXB0LnN5bnRheCA+IC5qc3ggeyBcbiAgICBjb2xvcjogJHtqc3hDb2xvdXJ9O1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkOyBcbiAgfVxuXG4gIC5qYXZhc2NyaXB0LnN5bnRheCA+IC52YXJpYWJsZSB7IGNvbG9yOiAke3ZhcmlhYmxlQ29sb3VyfTsgfVxuXG4gIC5qYXZhc2NyaXB0LnN5bnRheCA+IC5hcmd1bWVudCB7IGNvbG9yOiAke2FyZ3VtZW50Q29sb3VyfTsgfVxuXG5gO1xuXG5leHBvcnQgZGVmYXVsdCBqYXZhU2NyaXB0U3ludGF4U3R5bGU7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB4bWxTeW50YXhTdHlsZSBmcm9tIFwiLi4vc3R5bGUvc3ludGF4L3htbFwiO1xuaW1wb3J0IGpzb25TeW50YXhTdHlsZSBmcm9tIFwiLi4vc3R5bGUvc3ludGF4L2pzb25cIjtcbmltcG9ydCBkZWZhdWx0U3ludGF4U3R5bGUgZnJvbSBcIi4uL3N0eWxlL3N5bnRheC9kZWZhdWx0XCI7XG5pbXBvcnQgamF2YVNjcmlwdFN5bnRheFN0eWxlIGZyb20gXCIuLi9zdHlsZS9zeW50YXgvamF2YVNjcmlwdFwiO1xuXG5jb25zdCBzeW50YXhTdHlsZSA9IGBcbiAgICBcbiAgJHtkZWZhdWx0U3ludGF4U3R5bGV9XG4gIFxuICAke3htbFN5bnRheFN0eWxlfVxuICBcbiAgJHtqc29uU3ludGF4U3R5bGV9XG4gIFxuICAke2phdmFTY3JpcHRTeW50YXhTdHlsZX1cblxuYDtcblxuZXhwb3J0IGRlZmF1bHQgc3ludGF4U3R5bGU7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGZpcmFDb2RlU3R5bGUgPSAoaG9zdCkgPT4gYFxuXG4gIEBmb250LWZhY2Uge1xuICAgIGZvbnQtZmFtaWx5OiBcIkZpcmEgQ29kZVwiO1xuICAgIHNyYzogdXJsKFwiJHtob3N0fS9jc3Mvd29mZjIvRmlyYUNvZGUtTGlnaHQud29mZjJcIikgZm9ybWF0KFwid29mZjJcIiksXG4gICAgdXJsKFwiJHtob3N0fS9jc3Mvd29mZjIvRmlyYUNvZGUtTGlnaHQud29mZlwiKSBmb3JtYXQoXCJ3b2ZmXCIpO1xuICAgIGZvbnQtd2VpZ2h0OiAzMDA7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICB9XG4gIFxuICBAZm9udC1mYWNlIHtcbiAgICBmb250LWZhbWlseTogXCJGaXJhIENvZGVcIjtcbiAgICBzcmM6IHVybChcIiR7aG9zdH0vY3NzL3dvZmYyL0ZpcmFDb2RlLVJlZ3VsYXIud29mZjJcIikgZm9ybWF0KFwid29mZjJcIiksXG4gICAgdXJsKFwiJHtob3N0fS9jc3Mvd29mZjIvRmlyYUNvZGUtUmVndWxhci53b2ZmXCIpIGZvcm1hdChcIndvZmZcIik7XG4gICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gIH1cbiAgXG4gIEBmb250LWZhY2Uge1xuICAgIGZvbnQtZmFtaWx5OiBcIkZpcmEgQ29kZVwiO1xuICAgIHNyYzogdXJsKFwiJHtob3N0fS9jc3Mvd29mZjIvRmlyYUNvZGUtTWVkaXVtLndvZmYyXCIpIGZvcm1hdChcIndvZmYyXCIpLFxuICAgIHVybChcIiR7aG9zdH0vY3NzL3dvZmYyL0ZpcmFDb2RlLU1lZGl1bS53b2ZmXCIpIGZvcm1hdChcIndvZmZcIik7XG4gICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gIH1cbiAgXG4gIEBmb250LWZhY2Uge1xuICAgIGZvbnQtZmFtaWx5OiBcIkZpcmEgQ29kZVwiO1xuICAgIHNyYzogdXJsKFwiJHtob3N0fS9jc3Mvd29mZjIvRmlyYUNvZGUtQm9sZC53b2ZmMlwiKSBmb3JtYXQoXCJ3b2ZmMlwiKSxcbiAgICB1cmwoXCIke2hvc3R9L2Nzcy93b2ZmMi9GaXJhQ29kZS1Cb2xkLndvZmZcIikgZm9ybWF0KFwid29mZlwiKTtcbiAgICBmb250LXdlaWdodDogNzAwO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgfVxuXG5gO1xuXG5leHBvcnQgZGVmYXVsdCBmaXJhQ29kZVN0eWxlO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgd2l0aFN0eWxlIGZyb20gXCJlYXN5LXdpdGgtc3R5bGVcIjsgIC8vL1xuXG5pbXBvcnQgc3ludGF4U3R5bGUgZnJvbSBcIi4vc3R5bGUvc3ludGF4XCJcbmltcG9ydCBmaXJhQ29kZVN0eWxlIGZyb20gXCIuL3N0eWxlL2ZpcmFDb2RlXCJcblxuaW1wb3J0IHsgREVGQVVMVF9IT1NUIH0gZnJvbSBcIi4vZGVmYXVsdHNcIjtcblxuY29uc3QgeyByZW5kZXJTdHlsZSwgcmVuZGVyU3R5bGVzIH0gPSB3aXRoU3R5bGU7XG5cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJZYXBwU3R5bGVzKGhvc3QgPSBERUZBVUxUX0hPU1QpIHtcbiAgcmVuZGVyU3R5bGVzKCk7XG5cbiAgcmVuZGVyU3R5bGUoc3ludGF4U3R5bGUpO1xuXG4gIHJlbmRlclN0eWxlKGZpcmFDb2RlU3R5bGUoaG9zdCkpO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IFlhcHAgZnJvbSBcIi4veWFwcFwiO1xuXG5leHBvcnQgZGVmYXVsdCBZYXBwO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIFlhcHBMZXhlciB9IGZyb20gXCIuL2xleGVyL3lhcHBcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgWWFwcFBhcnNlciB9IGZyb20gXCIuL3BhcnNlci95YXBwXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHN5bnRheFN0eWxlIH0gZnJvbSBcIi4vc3R5bGUvc3ludGF4XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGNvbG91clNjaGVtZSB9IGZyb20gXCIuL3NjaGVtZS9jb2xvdXJcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZmlyYUNvZGVTdHlsZSB9IGZyb20gXCIuL3N0eWxlL2ZpcmFDb2RlXCI7XG5cbmV4cG9ydCB7IHJlbmRlcllhcHBTdHlsZXMgfSBmcm9tIFwiLi9yZW5kZXJZYXBwU3R5bGVzXCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBDVVJTT1IgPSBcImN1cnNvclwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgQVVUT19DVVJTT1IgPSBcImF1dG9cIjtcbmV4cG9ydCBjb25zdCBQT0lOVEVSX0NVUlNPUiA9IFwicG9pbnRlclwiO1xuZXhwb3J0IGNvbnN0IENPTF9SRVNJWkVfQ1VSU09SID0gXCJjb2wtcmVzaXplXCI7XG5leHBvcnQgY29uc3QgUk9XX1JFU0laRV9DVVJTT1IgPSBcInJvdy1yZXNpemVcIjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgQm9keSB9IGZyb20gXCJlYXN5XCI7XG5cbmltcG9ydCB7IENVUlNPUiB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgQVVUT19DVVJTT1IsIFBPSU5URVJfQ1VSU09SLCBDT0xfUkVTSVpFX0NVUlNPUiwgUk9XX1JFU0laRV9DVVJTT1IgfSBmcm9tIFwiLi9jdXJzb3JzXCI7XG5cbmNvbnN0IGJvZHkgPSBuZXcgQm9keSgpO1xuXG5sZXQgcHJldmlvdXNDdXJzb3I7ICAvLy9cblxuZXhwb3J0IGZ1bmN0aW9uIHJlc2V0Q3Vyc29yKCkge1xuICBzZXRDdXJzb3IocHJldmlvdXNDdXJzb3IpOyAvLy9cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBvaW50ZXJDdXJzb3IoKSB7XG4gIGNvbnN0IGN1cnJlbnRDdXJzb3IgPSBnZXRDdXJyZW50Q3Vyc29yKCk7XG5cbiAgaWYgKGN1cnJlbnRDdXJzb3IgIT09IFBPSU5URVJfQ1VSU09SKSB7XG4gICAgcHJldmlvdXNDdXJzb3IgPSBjdXJyZW50Q3Vyc29yOyAvLy9cblxuICAgIHNldEN1cnNvcihQT0lOVEVSX0NVUlNPUik7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJvd1Jlc2l6ZUN1cnNvcigpIHtcbiAgY29uc3QgY3VycmVudEN1cnNvciA9IGdldEN1cnJlbnRDdXJzb3IoKTtcblxuICBpZiAoY3VycmVudEN1cnNvciAhPT0gUk9XX1JFU0laRV9DVVJTT1IpIHtcbiAgICBwcmV2aW91c0N1cnNvciA9IGN1cnJlbnRDdXJzb3I7IC8vL1xuXG4gICAgc2V0Q3Vyc29yKFJPV19SRVNJWkVfQ1VSU09SKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY29sdW1uUmVzaXplQ3Vyc29yKCkge1xuICBjb25zdCBjdXJyZW50Q3Vyc29yID0gZ2V0Q3VycmVudEN1cnNvcigpO1xuXG4gIGlmIChjdXJyZW50Q3Vyc29yICE9PSBDT0xfUkVTSVpFX0NVUlNPUikge1xuICAgIHByZXZpb3VzQ3Vyc29yID0gY3VycmVudEN1cnNvcjsgLy8vXG5cbiAgICBzZXRDdXJzb3IoQ09MX1JFU0laRV9DVVJTT1IpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgcmVzZXRDdXJzb3IsXG4gIHBvaW50ZXJDdXJzb3IsXG4gIHJvd1Jlc2l6ZUN1cnNvcixcbiAgY29sdW1uUmVzaXplQ3Vyc29yXG59XG5cbmZ1bmN0aW9uIHNldEN1cnNvcihjdXJzb3IpIHtcbiAgY29uc3QgY3NzID0ge1xuICAgIGN1cnNvclxuICB9O1xuXG4gIGJvZHkuY3NzKGNzcyk7XG59XG5cbmZ1bmN0aW9uIGdldEN1cnJlbnRDdXJzb3IoKSB7XG4gIGNvbnN0IGN1cnJlbnRDdXJzb3IgPSBib2R5LmNzcyhDVVJTT1IpIHx8IEFVVE9fQ1VSU09SO1xuXG4gIHJldHVybiBjdXJyZW50Q3Vyc29yO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgd2l0aFN0eWxlIGZyb20gXCJlYXN5LXdpdGgtc3R5bGVcIjsgIC8vL1xuXG5pbXBvcnQgeyBFbGVtZW50IH0gZnJvbSBcImVhc3lcIjtcblxuY2xhc3MgUm93RGl2IGV4dGVuZHMgRWxlbWVudCB7XG4gIHN0YXRpYyB0YWdOYW1lID0gXCJkaXZcIjtcblxuICBzdGF0aWMgZGVmYXVsdFByb3BlcnRpZXMgPSB7XG4gICAgY2xhc3NOYW1lOiBcInJvd1wiXG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhTdHlsZShSb3dEaXYpYFxuXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZ3JvdzogMTtcblxuYDtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHdpdGhTdHlsZSBmcm9tIFwiZWFzeS13aXRoLXN0eWxlXCI7ICAvLy9cblxuaW1wb3J0IHsgRWxlbWVudCB9IGZyb20gXCJlYXN5XCI7XG5cbmNsYXNzIFJvd3NEaXYgZXh0ZW5kcyBFbGVtZW50IHtcbiAgc3RhdGljIHRhZ05hbWUgPSBcImRpdlwiO1xuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcGVydGllcyA9IHtcbiAgICBjbGFzc05hbWU6IFwicm93c1wiXG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhTdHlsZShSb3dzRGl2KWBcblxuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWdyb3c6IDE7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cbmA7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB3aXRoU3R5bGUgZnJvbSBcImVhc3ktd2l0aC1zdHlsZVwiOyAgLy8vXG5cbmltcG9ydCB7IEVsZW1lbnQgfSBmcm9tIFwiZWFzeVwiO1xuXG5jbGFzcyBDb2x1bW5EaXYgZXh0ZW5kcyBFbGVtZW50IHtcbiAgc3RhdGljIHRhZ05hbWUgPSBcImRpdlwiO1xuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcGVydGllcyA9IHtcbiAgICBjbGFzc05hbWU6IFwiY29sdW1uXCJcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgd2l0aFN0eWxlKENvbHVtbkRpdilgXG5cbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1ncm93OiAxO1xuXG5gO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgd2l0aFN0eWxlIGZyb20gXCJlYXN5LXdpdGgtc3R5bGVcIjsgIC8vL1xuXG5pbXBvcnQgeyBFbGVtZW50IH0gZnJvbSBcImVhc3lcIjtcblxuY2xhc3MgQ29sdW1uc0RpdiBleHRlbmRzIEVsZW1lbnQge1xuICBzdGF0aWMgdGFnTmFtZSA9IFwiZGl2XCI7XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIGNsYXNzTmFtZTogXCJjb2x1bW5zXCJcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgd2l0aFN0eWxlKENvbHVtbnNEaXYpYFxuXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZ3JvdzogMTtcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcblxuYDtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IFNUQVJUX0RSQUdHSU5HX0RFTEFZID0gMTc1O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gbW91c2VUb3BGcm9tRXZlbnQoZXZlbnQpIHtcbiAgY29uc3QgeyBwYWdlWSB9ID0gZXZlbnQsXG4gICAgICAgIG1vdXNlVG9wID0gcGFnZVk7IC8vL1xuXG4gIHJldHVybiBtb3VzZVRvcDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1vdXNlTGVmdEZyb21FdmVudChldmVudCkge1xuICBjb25zdCB7IHBhZ2VYIH0gPSBldmVudCxcbiAgICAgICAgbW91c2VMZWZ0ID0gcGFnZVg7ICAvLy9cblxuICByZXR1cm4gbW91c2VMZWZ0O1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyB3aW5kb3csIGJ1dHRvbnMsIGV2ZW50VHlwZXMgfSBmcm9tIFwiZWFzeVwiO1xuaW1wb3J0IHsga2V5Q29kZXMsIGFzeW5jaHJvbm91c1V0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIiA7XG5cbmltcG9ydCB7IFNUQVJUX0RSQUdHSU5HX0RFTEFZIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgbW91c2VUb3BGcm9tRXZlbnQsIG1vdXNlTGVmdEZyb21FdmVudCB9IGZyb20gXCIuLi91dGlsaXRpZXMvZXZlbnRcIjtcblxuY29uc3QgeyBmb3JFYWNoIH0gPSBhc3luY2hyb25vdXNVdGlsaXRpZXMsXG4gICAgICB7IEVTQ0FQRV9LRVlDT0RFIH0gPSBrZXlDb2RlcyxcbiAgICAgIHsgTEVGVF9NT1VTRV9CVVRUT04gfSA9IGJ1dHRvbnMsXG4gICAgICB7IEJMVVJfRVZFTlRfVFlQRSwgRFJBR19FVkVOVF9UWVBFLCBTVE9QX0RSQUdfRVZFTlRfVFlQRSwgU1RBUlRfRFJBR19FVkVOVF9UWVBFIH0gPSBldmVudFR5cGVzXG5cbmNvbnN0IGRyYWdFbGVtZW50ID0gbnVsbDtcblxuT2JqZWN0LmFzc2lnbihnbG9iYWxUaGlzLCB7XG4gIGRyYWdFbGVtZW50XG59KTtcblxuZnVuY3Rpb24gb25EcmFnKGRyYWdIYW5kbGVyLCBlbGVtZW50KSB7XG4gIGNvbnN0IGV2ZW50VHlwZSA9IERSQUdfRVZFTlRfVFlQRSxcbiAgICAgICAgaGFuZGxlciA9IGRyYWdIYW5kbGVyOyAgLy8vXG5cbiAgdGhpcy5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgZWxlbWVudCk7XG59XG5cbmZ1bmN0aW9uIG9mZkRyYWcoZHJhZ0hhbmRsZXIsIGVsZW1lbnQpIHtcbiAgY29uc3QgZXZlbnRUeXBlID0gRFJBR19FVkVOVF9UWVBFLFxuICAgICAgICBoYW5kbGVyID0gZHJhZ0hhbmRsZXI7ICAvLy9cblxuICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KTtcbn1cblxuZnVuY3Rpb24gb25TdG9wRHJhZyhzdG9wRHJhZ0hhbmRsZXIsIGVsZW1lbnQpIHtcbiAgY29uc3QgZXZlbnRUeXBlID0gU1RPUF9EUkFHX0VWRU5UX1RZUEUsXG4gICAgICAgIGhhbmRsZXIgPSBzdG9wRHJhZ0hhbmRsZXI7ICAvLy9cblxuICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KTtcbn1cblxuZnVuY3Rpb24gb2ZmU3RvcERyYWcoc3RvcERyYWdIYW5kbGVyLCBlbGVtZW50KSB7XG4gIGNvbnN0IGV2ZW50VHlwZSA9IFNUT1BfRFJBR19FVkVOVF9UWVBFLFxuICAgICAgICBoYW5kbGVyID0gc3RvcERyYWdIYW5kbGVyOyAgLy8vXG5cbiAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgZWxlbWVudCk7XG59XG5cbmZ1bmN0aW9uIG9uU3RhcnREcmFnKHN0YXJ0RHJhZ0hhbmRsZXIsIGVsZW1lbnQpIHtcbiAgY29uc3QgZXZlbnRUeXBlID0gU1RBUlRfRFJBR19FVkVOVF9UWVBFLFxuICAgICAgICBoYW5kbGVyID0gc3RhcnREcmFnSGFuZGxlcjsgIC8vL1xuXG4gIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpO1xufVxuXG5mdW5jdGlvbiBvZmZTdGFydERyYWcoc3RhcnREcmFnSGFuZGxlciwgZWxlbWVudCkge1xuICBjb25zdCBldmVudFR5cGUgPSBTVEFSVF9EUkFHX0VWRU5UX1RZUEUsXG4gICAgICAgIGhhbmRsZXIgPSBzdGFydERyYWdIYW5kbGVyOyAgLy8vXG5cbiAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgZWxlbWVudCk7XG59XG5cbmZ1bmN0aW9uIGVuYWJsZURyYWcoKSB7XG4gIGNvbnN0IHsgb25EcmFnLCBvblN0b3BEcmFnLCBvblN0YXJ0RHJhZyB9ID0gdGhpcy5wcm9wZXJ0aWVzLFxuICAgICAgICBkcmFnSGFuZGxlciA9IG9uRHJhZywgLy8vXG4gICAgICAgIHN0b3BEcmFnSGFuZGxlciA9IG9uU3RvcERyYWcsIC8vL1xuICAgICAgICBzdGFydERyYWdIYW5kbGVyID0gb25TdGFydERyYWcsIC8vL1xuICAgICAgICB0aW1lb3V0ID0gbnVsbCxcbiAgICAgICAgdG9wT2Zmc2V0ID0gbnVsbCxcbiAgICAgICAgbGVmdE9mZnNldCA9IG51bGwsXG4gICAgICAgIHN0YXJ0TW91c2VUb3AgPSBudWxsLFxuICAgICAgICBzdGFydE1vdXNlTGVmdCA9IG51bGw7XG5cbiAgZHJhZ0hhbmRsZXIgJiYgdGhpcy5vbkRyYWcoZHJhZ0hhbmRsZXIpO1xuICBzdG9wRHJhZ0hhbmRsZXIgJiYgdGhpcy5vblN0b3BEcmFnKHN0b3BEcmFnSGFuZGxlcik7XG4gIHN0YXJ0RHJhZ0hhbmRsZXIgJiYgdGhpcy5vblN0YXJ0RHJhZyhzdGFydERyYWdIYW5kbGVyKTtcblxuICB0aGlzLm9uTW91c2VEb3duKG1vdXNlRG93bkhhbmRsZXIsIHRoaXMpO1xuXG4gIHRoaXMuc2V0U3RhdGUoe1xuICAgIHRpbWVvdXQsXG4gICAgdG9wT2Zmc2V0LFxuICAgIGxlZnRPZmZzZXQsXG4gICAgc3RhcnRNb3VzZVRvcCxcbiAgICBzdGFydE1vdXNlTGVmdFxuICB9KTtcbn1cblxuZnVuY3Rpb24gZGlzYWJsZURyYWcoKSB7XG4gIGNvbnN0IHsgb25EcmFnLCBvblN0b3BEcmFnLCBvblN0YXJ0RHJhZyB9ID0gdGhpcy5wcm9wZXJ0aWVzLFxuICAgICAgICBkcmFnSGFuZGxlciA9IG9uRHJhZywgLy8vXG4gICAgICAgIHN0b3BEcmFnSGFuZGxlciA9IG9uU3RvcERyYWcsIC8vL1xuICAgICAgICBzdGFydERyYWdIYW5kbGVyID0gb25TdGFydERyYWc7IC8vL1xuXG4gIGRyYWdIYW5kbGVyICYmIHRoaXMub2ZmRHJhZyhkcmFnSGFuZGxlcik7XG4gIHN0b3BEcmFnSGFuZGxlciAmJiB0aGlzLm9mZlN0b3BEcmFnKHN0b3BEcmFnSGFuZGxlcik7XG4gIHN0YXJ0RHJhZ0hhbmRsZXIgJiYgdGhpcy5vZmZTdGFydERyYWcoc3RhcnREcmFnSGFuZGxlcik7XG5cbiAgdGhpcy5vZmZNb3VzZURvd24obW91c2VEb3duSGFuZGxlciwgdGhpcyk7XG59XG5cbmZ1bmN0aW9uIGlzRHJhZ2dpbmcoKSB7XG4gIGNvbnN0IGRyYWdnaW5nID0gdGhpcy5oYXNDbGFzcyhcImRyYWdnaW5nXCIpO1xuXG4gIHJldHVybiBkcmFnZ2luZztcbn1cblxuZnVuY3Rpb24gc3RhcnRXYWl0aW5nVG9EcmFnKG1vdXNlVG9wLCBtb3VzZUxlZnQpIHtcbiAgbGV0IHRpbWVvdXQgPSB0aGlzLmdldFRpbWVvdXQoKTtcblxuICBpZiAodGltZW91dCA9PT0gbnVsbCkge1xuICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMucmVzZXRUaW1lb3V0KCk7XG5cbiAgICAgIHRoaXMuc3RhcnREcmFnKG1vdXNlVG9wLCBtb3VzZUxlZnQpO1xuICAgIH0sIFNUQVJUX0RSQUdHSU5HX0RFTEFZKTtcblxuICAgIHRoaXMudXBkYXRlVGltZW91dCh0aW1lb3V0KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzdG9wV2FpdGluZ1RvRHJhZygpIHtcbiAgY29uc3QgdGltZW91dCA9IHRoaXMuZ2V0VGltZW91dCgpO1xuXG4gIGlmICh0aW1lb3V0ICE9PSBudWxsKSB7XG4gICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuXG4gICAgdGhpcy5yZXNldFRpbWVvdXQoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzdGFydERyYWcobW91c2VUb3AsIG1vdXNlTGVmdCkge1xuICBjb25zdCBib3VuZHMgPSB0aGlzLmdldEJvdW5kcygpLFxuICAgICAgICBldmVudFR5cGUgPSBTVEFSVF9EUkFHX0VWRU5UX1RZUEUsXG4gICAgICAgIGJvdW5kc1RvcCA9IGJvdW5kcy5nZXRUb3AoKSxcbiAgICAgICAgYm91bmRzTGVmdCA9IGJvdW5kcy5nZXRMZWZ0KCksXG4gICAgICAgIGJvdW5kc1JpZ2h0ID0gYm91bmRzLmdldFJpZ2h0KCksXG4gICAgICAgIGJvdW5kc0JvdHRvbSA9IGJvdW5kcy5nZXRCb3R0b20oKSxcbiAgICAgICAgYm91bmRzV2lkdGggPSBib3VuZHNSaWdodCAtIGJvdW5kc0xlZnQsXG4gICAgICAgIGJvdW5kc0hlaWdodCA9IGJvdW5kc0JvdHRvbSAtIGJvdW5kc1RvcCxcbiAgICAgICAgdG9wT2Zmc2V0ID0gTWF0aC5mbG9vcihib3VuZHNIZWlnaHQgLyAyKSxcbiAgICAgICAgbGVmdE9mZnNldCA9IE1hdGguZmxvb3IoYm91bmRzV2lkdGggLyAyKSxcbiAgICAgICAgZHJhZ0VsZW1lbnQgPSB0aGlzLCAvLy9cbiAgICAgICAgc3RhcnRNb3VzZVRvcCA9IG1vdXNlVG9wLCAvLy9cbiAgICAgICAgc3RhcnRNb3VzZUxlZnQgPSBtb3VzZUxlZnQ7IC8vL1xuXG4gIHdpbmRvdy5vbktleURvd24oa2V5RG93bkhhbmRsZXIsIHRoaXMpO1xuXG4gIHdpbmRvdy5vbk1vdXNlTW92ZShtb3VzZU1vdmVIYW5kbGVyLCB0aGlzKTtcblxuICB0aGlzLmFkZENsYXNzKFwiZHJhZ2dpbmdcIik7XG5cbiAgT2JqZWN0LmFzc2lnbihnbG9iYWxUaGlzLCB7XG4gICAgZHJhZ0VsZW1lbnRcbiAgfSk7XG5cbiAgdGhpcy5zZXRUb3BPZmZzZXQodG9wT2Zmc2V0KTtcblxuICB0aGlzLnNldExlZnRPZmZzZXQobGVmdE9mZnNldCk7XG5cbiAgdGhpcy5zZXRTdGFydE1vdXNlVG9wKHN0YXJ0TW91c2VUb3ApO1xuXG4gIHRoaXMuc2V0U3RhcnRNb3VzZUxlZnQoc3RhcnRNb3VzZUxlZnQpO1xuXG4gIHRoaXMuY2FsbEhhbmRsZXJzKGV2ZW50VHlwZSk7XG5cbiAgdGhpcy5kcmFnKG1vdXNlVG9wLCBtb3VzZUxlZnQpO1xufVxuXG5mdW5jdGlvbiBzdG9wRHJhZyhhYm9ydGVkKSB7XG4gIGNvbnN0IHsgZHJvcEVsZW1lbnQgfSA9IGdsb2JhbFRoaXMsXG4gICAgICAgIGV2ZW50VHlwZSA9IFNUT1BfRFJBR19FVkVOVF9UWVBFO1xuXG4gIHdpbmRvdy5vZmZLZXlEb3duKGtleURvd25IYW5kbGVyLCB0aGlzKTtcblxuICB3aW5kb3cub2ZmTW91c2VNb3ZlKG1vdXNlTW92ZUhhbmRsZXIsIHRoaXMpO1xuXG4gIGNvbnN0IGRvbmUgPSAoKSA9PiB7XG4gICAgdGhpcy5jYWxsSGFuZGxlcnNBc3luYyhldmVudFR5cGUsIGRyb3BFbGVtZW50LCBhYm9ydGVkLCAoKSA9PiB7XG4gICAgICBjb25zdCBkcmFnRWxlbWVudCA9IG51bGw7XG5cbiAgICAgIE9iamVjdC5hc3NpZ24oZ2xvYmFsVGhpcywge1xuICAgICAgICBkcmFnRWxlbWVudFxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMucmVtb3ZlQ2xhc3MoXCJkcmFnZ2luZ1wiKTtcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChkcm9wRWxlbWVudCAhPT0gbnVsbCkge1xuICAgIGNvbnN0IGRyYWdFbGVtZW50ID0gdGhpczsgLy8vXG5cbiAgICBkcm9wRWxlbWVudC5kcm9wKGRyYWdFbGVtZW50LCBhYm9ydGVkLCBkb25lKTtcbiAgfSBlbHNlIHtcbiAgICBkb25lKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZHJhZyhtb3VzZVRvcCwgbW91c2VMZWZ0KSB7XG4gIGNvbnN0IGV2ZW50VHlwZSA9IERSQUdfRVZFTlRfVFlQRSxcbiAgICAgICAgc2Nyb2xsVG9wID0gd2luZG93LmdldFNjcm9sbFRvcCgpLFxuICAgICAgICBzY3JvbGxMZWZ0ID0gd2luZG93LmdldFNjcm9sbExlZnQoKSxcbiAgICAgICAgdG9wT2Zmc2V0ID0gdGhpcy5nZXRUb3BPZmZzZXQoKSxcbiAgICAgICAgbGVmdE9mZnNldCA9IHRoaXMuZ2V0TGVmdE9mZnNldCgpLFxuICAgICAgICBzdGFydE1vdXNlVG9wID0gdGhpcy5nZXRTdGFydE1vdXNlVG9wKCksXG4gICAgICAgIHN0YXJ0TW91c2VMZWZ0ID0gdGhpcy5nZXRTdGFydE1vdXNlTGVmdCgpLFxuICAgICAgICByZWxhdGl2ZU1vdXNlVG9wID0gbW91c2VUb3AgLSBzdGFydE1vdXNlVG9wLFxuICAgICAgICByZWxhdGl2ZU1vdXNlTGVmdCA9IG1vdXNlTGVmdCAtIHN0YXJ0TW91c2VMZWZ0O1xuXG4gIGxldCB0b3AgPSBzdGFydE1vdXNlVG9wICsgcmVsYXRpdmVNb3VzZVRvcCAtIHRvcE9mZnNldCAtIHNjcm9sbFRvcCxcbiAgICAgIGxlZnQgPSBzdGFydE1vdXNlTGVmdCArIHJlbGF0aXZlTW91c2VMZWZ0IC0gbGVmdE9mZnNldCAtIHNjcm9sbExlZnQ7XG5cbiAgdG9wID0gYCR7dG9wfXB4YDsgLy8vXG4gIGxlZnQgPSBgJHtsZWZ0fXB4YDsgLy8vXG5cbiAgY29uc3QgY3NzID0ge1xuICAgIHRvcCxcbiAgICBsZWZ0XG4gIH07XG5cbiAgdGhpcy5jc3MoY3NzKTtcblxuICB0aGlzLmNhbGxIYW5kbGVycyhldmVudFR5cGUsIHJlbGF0aXZlTW91c2VUb3AsIHJlbGF0aXZlTW91c2VMZWZ0KTtcbn1cblxuZnVuY3Rpb24gZ2V0VGltZW91dCgpIHtcbiAgY29uc3Qgc3RhdGUgPSB0aGlzLmdldFN0YXRlKCksXG4gICAgICAgIHsgdGltZW91dCB9ID0gc3RhdGU7XG5cbiAgcmV0dXJuIHRpbWVvdXQ7XG59XG5cbmZ1bmN0aW9uIHJlc2V0VGltZW91dCgpIHtcbiAgY29uc3QgdGltZW91dCA9IG51bGw7XG5cbiAgdGhpcy51cGRhdGVUaW1lb3V0KHRpbWVvdXQpO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVUaW1lb3V0KHRpbWVvdXQpIHtcbiAgdGhpcy51cGRhdGVTdGF0ZSh7XG4gICAgdGltZW91dFxuICB9KTtcbn1cblxuZnVuY3Rpb24gZ2V0VG9wT2Zmc2V0KCkge1xuICBjb25zdCBzdGF0ZSA9IHRoaXMuZ2V0U3RhdGUoKSxcbiAgICAgICAgeyB0b3BPZmZzZXQgfSA9IHN0YXRlO1xuXG4gIHJldHVybiB0b3BPZmZzZXQ7XG59XG5cbmZ1bmN0aW9uIGdldExlZnRPZmZzZXQoKSB7XG4gIGNvbnN0IHN0YXRlID0gdGhpcy5nZXRTdGF0ZSgpLFxuICAgICAgICB7IGxlZnRPZmZzZXQgfSA9IHN0YXRlO1xuXG4gIHJldHVybiBsZWZ0T2Zmc2V0O1xufVxuXG5mdW5jdGlvbiBnZXRTdGFydE1vdXNlVG9wKCkge1xuICBjb25zdCBzdGF0ZSA9IHRoaXMuZ2V0U3RhdGUoKSxcbiAgICAgIHsgc3RhcnRNb3VzZVRvcCB9ID0gc3RhdGU7XG5cbiAgcmV0dXJuIHN0YXJ0TW91c2VUb3A7XG59XG5cbmZ1bmN0aW9uIGdldFN0YXJ0TW91c2VMZWZ0KCkge1xuICBjb25zdCBzdGF0ZSA9IHRoaXMuZ2V0U3RhdGUoKSxcbiAgICAgIHsgc3RhcnRNb3VzZUxlZnQgfSA9IHN0YXRlO1xuXG4gIHJldHVybiBzdGFydE1vdXNlTGVmdDtcbn1cblxuZnVuY3Rpb24gc2V0VG9wT2Zmc2V0KHRvcE9mZnNldCkge1xuICB0aGlzLnVwZGF0ZVN0YXRlKHtcbiAgICB0b3BPZmZzZXRcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHNldExlZnRPZmZzZXQobGVmdE9mZnNldCkge1xuICB0aGlzLnVwZGF0ZVN0YXRlKHtcbiAgICBsZWZ0T2Zmc2V0XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBzZXRTdGFydE1vdXNlVG9wKHN0YXJ0TW91c2VUb3ApIHtcbiAgdGhpcy51cGRhdGVTdGF0ZSh7XG4gICAgc3RhcnRNb3VzZVRvcFxuICB9KTtcbn1cblxuZnVuY3Rpb24gc2V0U3RhcnRNb3VzZUxlZnQoc3RhcnRNb3VzZUxlZnQpIHtcbiAgdGhpcy51cGRhdGVTdGF0ZSh7XG4gICAgc3RhcnRNb3VzZUxlZnRcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGNhbGxIYW5kbGVycyhldmVudFR5cGUsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cykge1xuICBjb25zdCBldmVudExpc3RlbmVycyA9IHRoaXMuZmluZEV2ZW50TGlzdGVuZXJzKGV2ZW50VHlwZSk7XG5cbiAgZXZlbnRMaXN0ZW5lcnMuZm9yRWFjaCgoZXZlbnRMaXN0ZW5lcikgPT4ge1xuICAgIGNvbnN0IHsgaGFuZGxlciwgZWxlbWVudDogaGFuZGxlckVsZW1lbnQgfSA9IGV2ZW50TGlzdGVuZXIsXG4gICAgICAgICAgZWxlbWVudCA9IHRoaXM7IC8vL1xuXG4gICAgaGFuZGxlci5jYWxsKGhhbmRsZXJFbGVtZW50LCAuLi5yZW1haW5pbmdBcmd1bWVudHMsIGVsZW1lbnQpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gY2FsbEhhbmRsZXJzQXN5bmMoZXZlbnRUeXBlLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHtcbiAgY29uc3QgZG9uZSA9IHJlbWFpbmluZ0FyZ3VtZW50cy5wb3AoKSwgIC8vL1xuICAgICAgICBldmVudExpc3RlbmVycyA9IHRoaXMuZmluZEV2ZW50TGlzdGVuZXJzKGV2ZW50VHlwZSk7XG5cbiAgZm9yRWFjaChldmVudExpc3RlbmVycywgKGV2ZW50TGlzdGVuZXIsIG5leHQpID0+IHtcbiAgICBjb25zdCB7IGhhbmRsZXIsIGVsZW1lbnQ6IGhhbmRsZXJFbGVtZW50IH0gPSBldmVudExpc3RlbmVyLFxuICAgICAgICAgIGVsZW1lbnQgPSB0aGlzLCAvLy9cbiAgICAgICAgICBkb25lID0gbmV4dDsgIC8vL1xuXG4gICAgaGFuZGxlci5jYWxsKGhhbmRsZXJFbGVtZW50LCAuLi5yZW1haW5pbmdBcmd1bWVudHMsIGVsZW1lbnQsIGRvbmUpO1xuICB9LCBkb25lKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBvbkRyYWcsXG4gIG9mZkRyYWcsXG4gIG9uU3RvcERyYWcsXG4gIG9mZlN0b3BEcmFnLFxuICBvblN0YXJ0RHJhZyxcbiAgb2ZmU3RhcnREcmFnLFxuICBlbmFibGVEcmFnLFxuICBkaXNhYmxlRHJhZyxcbiAgaXNEcmFnZ2luZyxcbiAgc3RhcnRXYWl0aW5nVG9EcmFnLFxuICBzdG9wV2FpdGluZ1RvRHJhZyxcbiAgc3RhcnREcmFnLFxuICBzdG9wRHJhZyxcbiAgZHJhZyxcbiAgZ2V0VGltZW91dCxcbiAgcmVzZXRUaW1lb3V0LFxuICB1cGRhdGVUaW1lb3V0LFxuICBnZXRUb3BPZmZzZXQsXG4gIGdldExlZnRPZmZzZXQsXG4gIGdldFN0YXJ0TW91c2VUb3AsXG4gIGdldFN0YXJ0TW91c2VMZWZ0LFxuICBzZXRUb3BPZmZzZXQsXG4gIHNldExlZnRPZmZzZXQsXG4gIHNldFN0YXJ0TW91c2VUb3AsXG4gIHNldFN0YXJ0TW91c2VMZWZ0LFxuICBjYWxsSGFuZGxlcnMsXG4gIGNhbGxIYW5kbGVyc0FzeW5jXG59O1xuXG5mdW5jdGlvbiBrZXlEb3duSGFuZGxlcihldmVudCwgZWxlbWVudCkge1xuICBjb25zdCB7IGtleUNvZGUgfSA9IGV2ZW50LFxuICAgICAgICBlc2NhcGVLZXkgPSAoa2V5Q29kZSA9PT0gRVNDQVBFX0tFWUNPREUpLFxuICAgICAgICBhYm9ydGVkID0gdHJ1ZTtcblxuICBpZiAoZXNjYXBlS2V5KSB7XG4gICAgdGhpcy5zdG9wRHJhZyhhYm9ydGVkKTtcblxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1vdXNlVXBIYW5kbGVyKGV2ZW50LCBlbGVtZW50KSB7XG4gIGNvbnN0IGRyYWdnaW5nID0gdGhpcy5pc0RyYWdnaW5nKCksXG4gICAgICAgIGFib3J0ZWQgPSBmYWxzZTtcblxuICBkcmFnZ2luZyA/XG4gICAgdGhpcy5zdG9wRHJhZyhhYm9ydGVkKSA6XG4gICAgICB0aGlzLnN0b3BXYWl0aW5nVG9EcmFnKCk7XG5cbiAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgd2luZG93Lm9mZihCTFVSX0VWRU5UX1RZUEUsIG1vdXNlVXBIYW5kbGVyLCB0aGlzKTsgIC8vL1xuXG4gIHdpbmRvdy5vZmZNb3VzZVVwKG1vdXNlVXBIYW5kbGVyLCB0aGlzKTtcbn1cblxuZnVuY3Rpb24gbW91c2VEb3duSGFuZGxlcihldmVudCwgZWxlbWVudCkge1xuICBjb25zdCB7IGJ1dHRvbiB9ID0gZXZlbnQ7XG5cbiAgaWYgKGJ1dHRvbiA9PT0gTEVGVF9NT1VTRV9CVVRUT04pIHtcbiAgICBjb25zdCBkcmFnZ2luZyA9IHRoaXMuaXNEcmFnZ2luZygpO1xuXG4gICAgaWYgKCFkcmFnZ2luZykge1xuICAgICAgY29uc3QgbW91c2VUb3AgPSBtb3VzZVRvcEZyb21FdmVudChldmVudCksXG4gICAgICAgICAgICBtb3VzZUxlZnQgPSBtb3VzZUxlZnRGcm9tRXZlbnQoZXZlbnQpO1xuXG4gICAgICB0aGlzLnN0YXJ0V2FpdGluZ1RvRHJhZyhtb3VzZVRvcCwgbW91c2VMZWZ0KTtcbiAgICB9XG4gIH1cblxuICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICB3aW5kb3cub24oQkxVUl9FVkVOVF9UWVBFLCBtb3VzZVVwSGFuZGxlciwgdGhpcyk7IC8vL1xuXG4gIHdpbmRvdy5vbk1vdXNlVXAobW91c2VVcEhhbmRsZXIsIHRoaXMpO1xufVxuXG5mdW5jdGlvbiBtb3VzZU1vdmVIYW5kbGVyKGV2ZW50LCBlbGVtZW50KSB7XG4gIGNvbnN0IGRyYWdnaW5nID0gdGhpcy5pc0RyYWdnaW5nKCk7XG5cbiAgaWYgKGRyYWdnaW5nKSB7XG4gICAgY29uc3QgbW91c2VUb3AgPSBtb3VzZVRvcEZyb21FdmVudChldmVudCksXG4gICAgICAgICAgbW91c2VMZWZ0ID0gbW91c2VMZWZ0RnJvbUV2ZW50KGV2ZW50KTtcblxuICAgIHRoaXMuZHJhZyhtb3VzZVRvcCwgbW91c2VMZWZ0KTtcbiAgfVxuXG4gIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgU1RBUlRfRFJBR0dJTkdfREVMQVkgPSAxNzU7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGV2ZW50VHlwZXMgfSBmcm9tIFwiZWFzeVwiO1xuaW1wb3J0IHsgYXN5bmNocm9ub3VzVXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiIDtcblxuY29uc3QgeyBmb3JFYWNoIH0gPSBhc3luY2hyb25vdXNVdGlsaXRpZXMsXG4gICAgICB7IERST1BfRVZFTlRfVFlQRSwgRFJBR19PVVRfRVZFTlRfVFlQRSwgRFJBR19PVkVSX0VWRU5UX1RZUEUgfSA9IGV2ZW50VHlwZXM7XG5cbmNvbnN0IGRyb3BFbGVtZW50ID0gbnVsbDtcblxuT2JqZWN0LmFzc2lnbihnbG9iYWxUaGlzLCB7XG4gIGRyb3BFbGVtZW50XG59KTtcblxuZnVuY3Rpb24gZHJvcChkcmFnRWxlbWVudCwgYWJvcnRlZCwgZG9uZSkge1xuICBjb25zdCBldmVudFR5cGUgPSBEUk9QX0VWRU5UX1RZUEU7XG5cbiAgdGhpcy5jYWxsSGFuZGxlcnNBc3luYyhldmVudFR5cGUsIGRyYWdFbGVtZW50LCBhYm9ydGVkLCBkb25lKTtcbn1cblxuZnVuY3Rpb24gZHJhZ091dChkcmFnRWxlbWVudCkge1xuICBjb25zdCBldmVudFR5cGUgPSBEUkFHX09VVF9FVkVOVF9UWVBFO1xuXG4gIHRoaXMuY2FsbEhhbmRsZXJzKGV2ZW50VHlwZSwgZHJhZ0VsZW1lbnQpO1xufVxuXG5mdW5jdGlvbiBkcmFnT3ZlcigpIHtcbiAgY29uc3QgZXZlbnRUeXBlID0gRFJBR19PVkVSX0VWRU5UX1RZUEU7XG5cbiAgdGhpcy5jYWxsSGFuZGxlcnMoZXZlbnRUeXBlLCBkcmFnRWxlbWVudCk7XG59XG5cbmZ1bmN0aW9uIG9uRHJvcChkcm9wSGFuZGxlciwgZWxlbWVudCkge1xuICBjb25zdCBldmVudFR5cGUgPSBEUk9QX0VWRU5UX1RZUEUsXG4gICAgICAgIGhhbmRsZXIgPSBkcm9wSGFuZGxlcjsgIC8vL1xuXG4gIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpO1xufVxuXG5mdW5jdGlvbiBvZmZEcm9wKGRyb3BIYW5kbGVyLCBlbGVtZW50KSB7XG4gIGNvbnN0IGV2ZW50VHlwZSA9IERST1BfRVZFTlRfVFlQRSxcbiAgICAgICAgaGFuZGxlciA9IGRyb3BIYW5kbGVyOyAgLy8vXG5cbiAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgZWxlbWVudCk7XG59XG5cbmZ1bmN0aW9uIG9uRHJhZ091dChkcmFnT3V0SGFuZGxlciwgZWxlbWVudCkge1xuICBjb25zdCBldmVudFR5cGUgPSBEUkFHX09VVF9FVkVOVF9UWVBFLFxuICAgICAgICBoYW5kbGVyID0gZHJhZ091dEhhbmRsZXI7ICAvLy9cblxuICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KTtcbn1cblxuZnVuY3Rpb24gb2ZmRHJhZ091dChkcmFnT3V0SGFuZGxlciwgZWxlbWVudCkge1xuICBjb25zdCBldmVudFR5cGUgPSBEUkFHX09VVF9FVkVOVF9UWVBFLFxuICAgICAgICBoYW5kbGVyID0gZHJhZ091dEhhbmRsZXI7ICAvLy9cblxuICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KTtcbn1cblxuZnVuY3Rpb24gb25EcmFnT3ZlcihkcmFnT3ZlckhhbmRsZXIsIGVsZW1lbnQpIHtcbiAgY29uc3QgZXZlbnRUeXBlID0gRFJBR19PVkVSX0VWRU5UX1RZUEUsXG4gICAgICAgIGhhbmRsZXIgPSBkcmFnT3ZlckhhbmRsZXI7ICAvLy9cblxuICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KTtcbn1cblxuZnVuY3Rpb24gb2ZmRHJhZ092ZXIoZHJhZ092ZXJIYW5kbGVyLCBlbGVtZW50KSB7XG4gIGNvbnN0IGV2ZW50VHlwZSA9IERSQUdfT1ZFUl9FVkVOVF9UWVBFLFxuICAgICAgICBoYW5kbGVyID0gZHJhZ092ZXJIYW5kbGVyOyAgLy8vXG5cbiAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgZWxlbWVudCk7XG59XG5cbmZ1bmN0aW9uIGVuYWJsZURyb3AoKSB7XG4gIGNvbnN0IHsgb25Ecm9wLCBvbkRyYWdPdXQsIG9uRHJhZ092ZXIgfSA9IHRoaXMucHJvcGVydGllcyxcbiAgICAgICAgZHJvcEhhbmRsZXIgPSBvbkRyb3AsIC8vL1xuICAgICAgICBkcmFnT3V0SGFuZGxlciA9IG9uRHJhZ091dCwgLy8vXG4gICAgICAgIGRyYWdPdmVySGFuZGxlciA9IG9uRHJhZ092ZXI7IC8vL1xuXG4gIGRyb3BIYW5kbGVyICYmIHRoaXMub25Ecm9wKGRyb3BIYW5kbGVyKTtcbiAgZHJhZ091dEhhbmRsZXIgJiYgdGhpcy5vbkRyYWdPdXQoZHJhZ091dEhhbmRsZXIpO1xuICBkcmFnT3ZlckhhbmRsZXIgJiYgdGhpcy5vbkRyYWdPdmVyKGRyYWdPdmVySGFuZGxlcik7XG5cbiAgdGhpcy5vbk1vdXNlT3V0KG1vdXNlT3V0SGFuZGxlciwgdGhpcyk7XG4gIHRoaXMub25Nb3VzZU92ZXIobW91c2VPdmVySGFuZGxlciwgdGhpcyk7XG59XG5cbmZ1bmN0aW9uIGRpc2FibGVEcm9wKCkge1xuICBjb25zdCB7IG9uRHJvcCwgb25EcmFnT3V0LCBvbkRyYWdPdmVyIH0gPSB0aGlzLnByb3BlcnRpZXMsXG4gICAgICAgIGRyb3BIYW5kbGVyID0gb25Ecm9wLCAvLy9cbiAgICAgICAgZHJhZ091dEhhbmRsZXIgPSBvbkRyYWdPdXQsIC8vL1xuICAgICAgICBkcmFnT3ZlckhhbmRsZXIgPSBvbkRyYWdPdmVyOyAvLy9cblxuICBkcm9wSGFuZGxlciAmJiB0aGlzLm9mZkRyb3AoZHJvcEhhbmRsZXIpO1xuICBkcmFnT3V0SGFuZGxlciAmJiB0aGlzLm9mZkRyYWdPdXQoZHJhZ091dEhhbmRsZXIpO1xuICBkcmFnT3ZlckhhbmRsZXIgJiYgdGhpcy5vZmZEcmFnT3ZlcihkcmFnT3ZlckhhbmRsZXIpO1xuXG4gIHRoaXMub2ZmTW91c2VPdXQobW91c2VPdXRIYW5kbGVyLCB0aGlzKTtcbiAgdGhpcy5vZmZNb3VzZU92ZXIobW91c2VPdmVySGFuZGxlciwgdGhpcyk7XG59XG5cbmZ1bmN0aW9uIGNhbGxIYW5kbGVycyhldmVudFR5cGUsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cykge1xuICBjb25zdCBldmVudExpc3RlbmVycyA9IHRoaXMuZmluZEV2ZW50TGlzdGVuZXJzKGV2ZW50VHlwZSk7XG5cbiAgZXZlbnRMaXN0ZW5lcnMuZm9yRWFjaCgoZXZlbnRMaXN0ZW5lcikgPT4ge1xuICAgIGNvbnN0IHsgaGFuZGxlciwgZWxlbWVudDogaGFuZGxlckVsZW1lbnQgfSA9IGV2ZW50TGlzdGVuZXIsXG4gICAgICAgICAgZWxlbWVudCA9IHRoaXM7IC8vL1xuXG4gICAgaGFuZGxlci5jYWxsKGhhbmRsZXJFbGVtZW50LCAuLi5yZW1haW5pbmdBcmd1bWVudHMsIGVsZW1lbnQpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gY2FsbEhhbmRsZXJzQXN5bmMoZXZlbnRUeXBlLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHtcbiAgY29uc3QgZG9uZSA9IHJlbWFpbmluZ0FyZ3VtZW50cy5wb3AoKSwgIC8vL1xuICAgICAgICBldmVudExpc3RlbmVycyA9IHRoaXMuZmluZEV2ZW50TGlzdGVuZXJzKGV2ZW50VHlwZSk7XG5cbiAgZm9yRWFjaChldmVudExpc3RlbmVycywgKGV2ZW50TGlzdGVuZXIsIG5leHQpID0+IHtcbiAgICBjb25zdCB7IGhhbmRsZXIsIGVsZW1lbnQ6IGhhbmRsZXJFbGVtZW50IH0gPSBldmVudExpc3RlbmVyLFxuICAgICAgICAgIGVsZW1lbnQgPSB0aGlzLCAvLy9cbiAgICAgICAgICBkb25lID0gbmV4dDsgIC8vL1xuXG4gICAgaGFuZGxlci5jYWxsKGhhbmRsZXJFbGVtZW50LCAuLi5yZW1haW5pbmdBcmd1bWVudHMsIGVsZW1lbnQsIGRvbmUpO1xuICB9LCBkb25lKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBkcm9wLFxuICBkcmFnT3V0LFxuICBkcmFnT3ZlcixcbiAgb25Ecm9wLFxuICBvZmZEcm9wLFxuICBvbkRyYWdPdXQsXG4gIG9mZkRyYWdPdXQsXG4gIG9uRHJhZ092ZXIsXG4gIG9mZkRyYWdPdmVyLFxuICBlbmFibGVEcm9wLFxuICBkaXNhYmxlRHJvcCxcbiAgY2FsbEhhbmRsZXJzLFxuICBjYWxsSGFuZGxlcnNBc3luY1xufVxuXG5mdW5jdGlvbiBtb3VzZU91dEhhbmRsZXIoZXZlbnQsIGVsZW1lbnQpIHtcbiAgY29uc3QgeyBkcmFnRWxlbWVudCB9ID0gZ2xvYmFsVGhpcztcblxuICBpZiAoZHJhZ0VsZW1lbnQgIT09IG51bGwpIHtcbiAgICBjb25zdCBkcm9wRWxlbWVudCA9IG51bGw7IC8vL1xuXG4gICAgT2JqZWN0LmFzc2lnbihnbG9iYWxUaGlzLCB7XG4gICAgICBkcm9wRWxlbWVudFxuICAgIH0pO1xuXG4gICAgdGhpcy5kcmFnT3V0KGRyYWdFbGVtZW50KTtcbiAgfVxuXG4gIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xufVxuXG5mdW5jdGlvbiBtb3VzZU92ZXJIYW5kbGVyKGV2ZW50LCBlbGVtZW50KSB7XG4gIGNvbnN0IHsgZHJhZ0VsZW1lbnQgfSA9IGdsb2JhbFRoaXM7XG5cbiAgaWYgKGRyYWdFbGVtZW50ICE9PSBudWxsKSB7XG4gICAgY29uc3QgZHJvcEVsZW1lbnQgPSB0aGlzOyAvLy9cblxuICAgIE9iamVjdC5hc3NpZ24oZ2xvYmFsVGhpcywge1xuICAgICAgZHJvcEVsZW1lbnRcbiAgICB9KTtcblxuICAgIHRoaXMuZHJhZ092ZXIoZHJhZ0VsZW1lbnQpO1xuICB9XG5cbiAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBTVEFSVF9EUkFHR0lOR19ERUxBWSA9IDE3NTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHdpdGhTdHlsZSBmcm9tIFwiZWFzeS13aXRoLXN0eWxlXCI7XG5cbmltcG9ydCB7IEVsZW1lbnQgfSBmcm9tIFwiZWFzeVwiO1xuXG5pbXBvcnQgZHJhZ01peGlucyBmcm9tIFwiLi4vbWl4aW5zL2RyYWdcIjtcblxuY2xhc3MgRHJhZ0VsZW1lbnQgZXh0ZW5kcyBFbGVtZW50IHtcbiAgZGlkTW91bnQoKSB7XG4gICAgdGhpcy5lbmFibGVEcmFnKCk7XG4gIH1cblxuICB3aWxsVW5tb3VudCgpIHtcbiAgICB0aGlzLmRpc2FibGVEcmFnKCk7XG4gIH1cblxuICBzdGF0aWMgaWdub3JlZFByb3BlcnRpZXMgPSBbXG4gICAgXCJvbkRyYWdcIixcbiAgICBcIm9uU3RhcnREcmFnXCIsXG4gICAgXCJvZmZTdGFydERyYWdcIlxuICBdO1xufVxuXG5PYmplY3QuYXNzaWduKERyYWdFbGVtZW50LnByb3RvdHlwZSwgZHJhZ01peGlucyk7XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhTdHlsZShEcmFnRWxlbWVudClgXG5cbiAgLmRyYWdnaW5nIHtcbiAgICB6LWluZGV4OiAxO1xuICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgfVxuICBcbmA7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEVsZW1lbnQgfSBmcm9tIFwiZWFzeVwiO1xuXG5pbXBvcnQgZHJvcE1peGlucyBmcm9tIFwiLi4vbWl4aW5zL2Ryb3BcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRHJvcEVsZW1lbnQgZXh0ZW5kcyBFbGVtZW50IHtcbiAgZGlkTW91bnQoKSB7XG4gICAgdGhpcy5lbmFibGVEcm9wKCk7XG4gIH1cblxuICB3aWxsVW5tb3VudCgpIHtcbiAgICB0aGlzLmRpc2FibGVEcm9wKCk7XG4gIH1cblxuICBzdGF0aWMgaWdub3JlZFByb3BlcnRpZXMgPSBbXG4gICAgXCJvbkRyb3BcIixcbiAgICBcIm9uRHJhZ091dFwiLFxuICAgIFwib25EcmFnT3ZlclwiXG4gIF07XG59XG5cbk9iamVjdC5hc3NpZ24oRHJvcEVsZW1lbnQucHJvdG90eXBlLCBkcm9wTWl4aW5zKTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBkcmFnTWl4aW5zIH0gZnJvbSBcIi4vbWl4aW5zL2RyYWdcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZHJvcE1peGlucyB9IGZyb20gXCIuL21peGlucy9kcm9wXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIERyYWdFbGVtZW50IH0gZnJvbSBcIi4vZWxlbWVudC9kcmFnXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIERyb3BFbGVtZW50IH0gZnJvbSBcIi4vZWxlbWVudC9kcm9wXCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB3aXRoU3R5bGUgZnJvbSBcImVhc3ktd2l0aC1zdHlsZVwiOyAgLy8vXG5cbmltcG9ydCB7IEVsZW1lbnQgfSBmcm9tIFwiZWFzeVwiO1xuXG5jbGFzcyBTaXplYWJsZURpdiBleHRlbmRzIEVsZW1lbnQge1xuICBzdGF0aWMgdGFnTmFtZSA9IFwiZGl2XCI7XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIGNsYXNzTmFtZTogXCJzaXplYWJsZVwiXG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhTdHlsZShTaXplYWJsZURpdilgXG5cbiAgZGlzcGxheTogZmxleDtcbiAgXG5gO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgd2l0aFN0eWxlIGZyb20gXCJlYXN5LXdpdGgtc3R5bGVcIjsgIC8vL1xuXG5pbXBvcnQgeyBFbGVtZW50IH0gZnJvbSBcImVhc3lcIjtcblxuY2xhc3MgU2l6ZWFibGVTZWN0aW9uIGV4dGVuZHMgRWxlbWVudCB7XG4gIHN0YXRpYyB0YWdOYW1lID0gXCJzZWN0aW9uXCI7XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIGNsYXNzTmFtZTogXCJzaXplYWJsZVwiXG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhTdHlsZShTaXplYWJsZVNlY3Rpb24pYFxuXG4gIGRpc3BsYXk6IGZsZXg7XG4gIFxuYDtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHdpdGhTdHlsZSBmcm9tIFwiZWFzeS13aXRoLXN0eWxlXCI7ICAvLy9cblxuaW1wb3J0IHsgRWxlbWVudCB9IGZyb20gXCJlYXN5XCI7XG5pbXBvcnQgeyBkcmFnTWl4aW5zIH0gZnJvbSBcImVhc3ktZHJhZy1hbmQtZHJvcFwiO1xuXG5pbXBvcnQgU2l6ZWFibGVEaXYgZnJvbSBcIi4uL2Rpdi9zaXplYWJsZVwiO1xuaW1wb3J0IFNpemVhYmxlU2VjdGlvbiBmcm9tIFwiLi4vc2VjdGlvbi9zaXplYWJsZVwiO1xuXG5pbXBvcnQgeyByZXNldEN1cnNvciB9IGZyb20gXCIuLi9jdXJzb3JcIjtcblxuY2xhc3MgU3BsaXR0ZXJEaXYgZXh0ZW5kcyBFbGVtZW50IHtcbiAgbW91c2VPdXRIYW5kbGVyKGV2ZW50LCBlbGVtZW50KSB7XG4gICAgcmVzZXRDdXJzb3IoKTtcbiAgfVxuXG4gIHN0b3BEcmFnSGFuZGxlcihkcm9wRWxlbWVudCwgYWJvcnRlZCwgZWxlbWVudCwgZG9uZSkge1xuICAgIHJlc2V0Q3Vyc29yKCk7XG5cbiAgICBkb25lKCk7XG4gIH1cblxuICBnZXRTaXplYWJsZUVsZW1lbnQoKSB7XG4gICAgbGV0IHNpemVhYmxlRWxlbWVudDtcblxuICAgIGNvbnN0IG5leHRTaWJsaW5nRWxlbWVudCA9IHRoaXMuZ2V0TmV4dFNpYmxpbmdFbGVtZW50KCksXG4gICAgICAgICAgcHJldmlvdXNTaWJsaW5nRWxlbWVudCA9IHRoaXMuZ2V0UHJldmlvdXNTaWJsaW5nRWxlbWVudCgpLFxuICAgICAgICAgIG5leHRTaWJsaW5nRWxlbWVudFNpemVhYmxlRWxlbWVudCA9IGlzRWxlbWVudFNpemVhYmxlRWxlbWVudChuZXh0U2libGluZ0VsZW1lbnQpLFxuICAgICAgICAgIHByZXZpb3VzU2libGluZ0VsZW1lbnRTaXplYWJsZUVsZW1lbnQgPSBpc0VsZW1lbnRTaXplYWJsZUVsZW1lbnQocHJldmlvdXNTaWJsaW5nRWxlbWVudCk7XG5cbiAgICBpZiAobmV4dFNpYmxpbmdFbGVtZW50U2l6ZWFibGVFbGVtZW50KSB7XG4gICAgICBzaXplYWJsZUVsZW1lbnQgPSBuZXh0U2libGluZ0VsZW1lbnQ7IC8vL1xuICAgIH1cblxuICAgIGlmIChwcmV2aW91c1NpYmxpbmdFbGVtZW50U2l6ZWFibGVFbGVtZW50KSB7XG4gICAgICBzaXplYWJsZUVsZW1lbnQgPSBwcmV2aW91c1NpYmxpbmdFbGVtZW50OyAvLy9cbiAgICB9XG5cbiAgICByZXR1cm4gc2l6ZWFibGVFbGVtZW50O1xuICB9XG5cbiAgZ2V0RGlyZWN0aW9uKCkge1xuICAgIGxldCBkaXJlY3Rpb247XG5cbiAgICBjb25zdCBuZXh0U2libGluZ0VsZW1lbnQgPSB0aGlzLmdldE5leHRTaWJsaW5nRWxlbWVudCgpLFxuICAgICAgICAgIHByZXZpb3VzU2libGluZ0VsZW1lbnQgPSB0aGlzLmdldFByZXZpb3VzU2libGluZ0VsZW1lbnQoKSxcbiAgICAgICAgICBuZXh0U2libGluZ0VsZW1lbnRTaXplYWJsZUVsZW1lbnQgPSBpc0VsZW1lbnRTaXplYWJsZUVsZW1lbnQobmV4dFNpYmxpbmdFbGVtZW50KSxcbiAgICAgICAgICBwcmV2aW91c1NpYmxpbmdFbGVtZW50U2l6ZWFibGVFbGVtZW50ID0gaXNFbGVtZW50U2l6ZWFibGVFbGVtZW50KHByZXZpb3VzU2libGluZ0VsZW1lbnQpO1xuXG4gICAgaWYgKG5leHRTaWJsaW5nRWxlbWVudFNpemVhYmxlRWxlbWVudCkge1xuICAgICAgZGlyZWN0aW9uID0gKzE7XG4gICAgfVxuXG4gICAgaWYgKHByZXZpb3VzU2libGluZ0VsZW1lbnRTaXplYWJsZUVsZW1lbnQpIHtcbiAgICAgIGRpcmVjdGlvbiA9IC0xO1xuICAgIH1cblxuICAgIHJldHVybiBkaXJlY3Rpb247XG4gIH1cblxuICBlbmFibGUoKSB7XG4gICAgdGhpcy5yZW1vdmVDbGFzcyhcImRpc2FibGVkXCIpO1xuICB9XG5cbiAgZGlzYWJsZSgpIHtcbiAgICB0aGlzLmFkZENsYXNzKFwiZGlzYWJsZWRcIik7XG4gIH1cblxuICBpc0Rpc2FibGVkKCkge1xuICAgIGNvbnN0IGRpc2FibGVkID0gdGhpcy5oYXNDbGFzcyhcImRpc2FibGVkXCIpO1xuXG4gICAgcmV0dXJuIGRpc2FibGVkO1xuICB9XG5cbiAgZGlkTW91bnQoKSB7XG4gICAgdGhpcy5lbmFibGVEcmFnKCk7XG5cbiAgICB0aGlzLm9uRHJhZyh0aGlzLmRyYWdIYW5kbGVyLCB0aGlzKTtcblxuICAgIHRoaXMub25TdG9wRHJhZyh0aGlzLnN0b3BEcmFnSGFuZGxlciwgdGhpcyk7XG5cbiAgICB0aGlzLm9uU3RhcnREcmFnKHRoaXMuc3RhcnREcmFnSGFuZGxlciwgdGhpcyk7XG5cbiAgICB0aGlzLm9uTW91c2VPdmVyKHRoaXMubW91c2VPdmVySGFuZGxlciwgdGhpcyk7XG5cbiAgICB0aGlzLm9uTW91c2VPdXQodGhpcy5tb3VzZU91dEhhbmRsZXIsIHRoaXMpO1xuICB9XG5cbiAgd2lsbFVubW91bnQoKSB7XG4gICAgdGhpcy5vZmZNb3VzZU91dCh0aGlzLm1vdXNlT3V0SGFuZGxlciwgdGhpcyk7XG5cbiAgICB0aGlzLm9mZk1vdXNlT3Zlcih0aGlzLm1vdXNlT3ZlckhhbmRsZXIsIHRoaXMpO1xuXG4gICAgdGhpcy5vZmZTdGFydERyYWcodGhpcy5zdGFydERyYWdIYW5kbGVyLCB0aGlzKTtcblxuICAgIHRoaXMub2ZmU3RvcERyYWcodGhpcy5zdG9wRHJhZ0hhbmRsZXIsIHRoaXMpO1xuXG4gICAgdGhpcy5vZmZEcmFnKHRoaXMuZHJhZ0hhbmRsZXIsIHRoaXMpO1xuXG4gICAgdGhpcy5kaXNhYmxlRHJhZygpO1xuICB9XG5cbiAgaW5pdGlhbGlzZSgpIHtcbiAgICB0aGlzLnNldEluaXRpYWxTdGF0ZSgpO1xuICB9XG5cbiAgc3RhdGljIHRhZ05hbWUgPSBcImRpdlwiO1xuXG4gIHN0YXRpYyBpZ25vcmVkUHJvcGVydGllcyA9IFtcbiAgICBcIm9uRHJhZ1wiLFxuICAgIFwiZGlzYWJsZWRcIixcbiAgICBcIm9uU3RvcERyYWdcIixcbiAgICBcIm9uU3RhcnREcmFnXCJcbiAgXTtcblxuICBzdGF0aWMgZGVmYXVsdFByb3BlcnRpZXMgPSB7XG4gICAgY2xhc3NOYW1lOiBcInNwbGl0dGVyXCJcbiAgfTtcblxuICBzdGF0aWMgZnJvbUNsYXNzKENsYXNzLCBwcm9wZXJ0aWVzKSB7XG4gICAgY29uc3Qgc3BsaXR0ZXJEaXYgPSBFbGVtZW50LmZyb21DbGFzcyhDbGFzcywgcHJvcGVydGllcyk7XG5cbiAgICByZXR1cm4gc3BsaXR0ZXJEaXY7XG4gIH1cbn1cblxuT2JqZWN0LmFzc2lnbihTcGxpdHRlckRpdi5wcm90b3R5cGUsIGRyYWdNaXhpbnMpO1xuXG5leHBvcnQgZGVmYXVsdCB3aXRoU3R5bGUoU3BsaXR0ZXJEaXYpYFxuXG4gIGZsZXgtc2hyaW5rOiAwO1xuXG5gO1xuXG5mdW5jdGlvbiBpc0VsZW1lbnRTaXplYWJsZUVsZW1lbnQoZWxlbWVudCkge1xuICBjb25zdCBlbGVtZW50U2l6ZWFibGVFbGVtZW50ID0gKGVsZW1lbnQgaW5zdGFuY2VvZiBTaXplYWJsZURpdikgfHwgKGVsZW1lbnQgaW5zdGFuY2VvZiBTaXplYWJsZVNlY3Rpb24pO1xuXG4gIHJldHVybiBlbGVtZW50U2l6ZWFibGVFbGVtZW50O1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgd2l0aFN0eWxlIGZyb20gXCJlYXN5LXdpdGgtc3R5bGVcIjsgIC8vL1xuXG5pbXBvcnQgU3BsaXR0ZXIgZnJvbSBcIi4uL3NwbGl0dGVyXCI7XG5cbmltcG9ydCB7IGNvbHVtblJlc2l6ZUN1cnNvciB9IGZyb20gXCIuLi8uLi9jdXJzb3JcIjtcblxuY2xhc3MgVmVydGljYWxTcGxpdHRlciBleHRlbmRzIFNwbGl0dGVyIHtcbiAgc2V0Q3Vyc29yKCkge1xuICAgIGNvbnN0IGRpc2FibGVkID0gdGhpcy5pc0Rpc2FibGVkKCk7XG5cbiAgICBpZiAoIWRpc2FibGVkKSB7XG4gICAgICBjb2x1bW5SZXNpemVDdXJzb3IoKTtcbiAgICB9XG4gIH1cblxuICBtb3VzZU92ZXJIYW5kbGVyKGV2ZW50LCBlbGVtZW50KSB7XG4gICAgdGhpcy5zZXRDdXJzb3IoKTtcbiAgfVxuXG4gIHN0YXJ0RHJhZ0hhbmRsZXIoZWxlbWVudCkge1xuICAgIGNvbnN0IGRpc2FibGVkID0gdGhpcy5pc0Rpc2FibGVkKCk7XG5cbiAgICBpZiAoIWRpc2FibGVkKSB7XG4gICAgICBjb25zdCBzaXplYWJsZUVsZW1lbnQgPSB0aGlzLmdldFNpemVhYmxlRWxlbWVudCgpLFxuICAgICAgICAgICAgc2l6ZWFibGVFbGVtZW50V2lkdGggPSBzaXplYWJsZUVsZW1lbnQuZ2V0V2lkdGgoKSxcbiAgICAgICAgICAgIHByZXZpb3VzU2l6ZWFibGVFbGVtZW50V2lkdGggPSBzaXplYWJsZUVsZW1lbnRXaWR0aDsgIC8vL1xuXG4gICAgICB0aGlzLnNldFByZXZpb3VzU2l6ZWFibGVFbGVtZW50V2lkdGgocHJldmlvdXNTaXplYWJsZUVsZW1lbnRXaWR0aCk7XG4gICAgfVxuXG4gICAgdGhpcy5zZXRDdXJzb3IoKTtcbiAgfVxuXG4gIGRyYWdIYW5kbGVyKHJlbGF0aXZlTW91c2VUb3AsIHJlbGF0aXZlTW91c2VMZWZ0KSB7XG4gICAgY29uc3QgZGlzYWJsZWQgPSB0aGlzLmlzRGlzYWJsZWQoKTtcblxuICAgIGlmICghZGlzYWJsZWQpIHtcbiAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IHRoaXMuZ2V0RGlyZWN0aW9uKCksXG4gICAgICAgICAgICBzaXplYWJsZUVsZW1lbnQgPSB0aGlzLmdldFNpemVhYmxlRWxlbWVudCgpLFxuICAgICAgICAgICAgcHJldmlvdXNTaXplYWJsZUVsZW1lbnRXaWR0aCA9IHRoaXMuZ2V0UHJldmlvdXNTaXplYWJsZUVsZW1lbnRXaWR0aCgpLFxuICAgICAgICAgICAgc2l6ZWFibGVFbGVtZW50V2lkdGggPSBwcmV2aW91c1NpemVhYmxlRWxlbWVudFdpZHRoIC0gZGlyZWN0aW9uICogcmVsYXRpdmVNb3VzZUxlZnQsXG4gICAgICAgICAgICB3aWR0aCA9IHNpemVhYmxlRWxlbWVudFdpZHRoOyAvLy9cblxuICAgICAgc2l6ZWFibGVFbGVtZW50LnNldFdpZHRoKHdpZHRoKTtcbiAgICB9XG4gIH1cblxuICBnZXRQcmV2aW91c1NpemVhYmxlRWxlbWVudFdpZHRoKCkge1xuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5nZXRTdGF0ZSgpLFxuICAgICAgICAgIHsgcHJldmlvdXNTaXplYWJsZUVsZW1lbnRXaWR0aCB9ID0gc3RhdGU7XG5cbiAgICByZXR1cm4gcHJldmlvdXNTaXplYWJsZUVsZW1lbnRXaWR0aDtcbiAgfVxuXG4gIHNldFByZXZpb3VzU2l6ZWFibGVFbGVtZW50V2lkdGgocHJldmlvdXNTaXplYWJsZUVsZW1lbnRXaWR0aCkge1xuICAgIHRoaXMudXBkYXRlU3RhdGUoe1xuICAgICAgcHJldmlvdXNTaXplYWJsZUVsZW1lbnRXaWR0aFxuICAgIH0pO1xuICB9XG5cbiAgc2V0SW5pdGlhbFN0YXRlKCkge1xuICAgIGNvbnN0IHByZXZpb3VzU2l6ZWFibGVFbGVtZW50V2lkdGggPSBudWxsO1xuXG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBwcmV2aW91c1NpemVhYmxlRWxlbWVudFdpZHRoXG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgZGVmYXVsdFByb3BlcnRpZXMgPSB7XG4gICAgY2xhc3NOYW1lOiBcInZlcnRpY2FsXCJcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgd2l0aFN0eWxlKFZlcnRpY2FsU3BsaXR0ZXIpYFxuXG4gIHdpZHRoOiAxcmVtO1xuXG5gO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgd2l0aFN0eWxlIGZyb20gXCJlYXN5LXdpdGgtc3R5bGVcIjsgIC8vL1xuXG5pbXBvcnQgU3BsaXR0ZXIgZnJvbSBcIi4uL3NwbGl0dGVyXCI7XG5cbmltcG9ydCB7IHJvd1Jlc2l6ZUN1cnNvciB9IGZyb20gXCIuLi8uLi9jdXJzb3JcIjtcblxuY2xhc3MgSG9yaXpvbnRhbFNwbGl0dGVyIGV4dGVuZHMgU3BsaXR0ZXIge1xuICBzZXRDdXJzb3IoKSB7XG4gICAgY29uc3QgZGlzYWJsZWQgPSB0aGlzLmlzRGlzYWJsZWQoKTtcblxuICAgIGlmICghZGlzYWJsZWQpIHtcbiAgICAgIHJvd1Jlc2l6ZUN1cnNvcigpO1xuICAgIH1cbiAgfVxuXG4gIG1vdXNlT3ZlckhhbmRsZXIoZXZlbnQsIGVsZW1lbnQpIHtcbiAgICB0aGlzLnNldEN1cnNvcigpO1xuICB9XG5cbiAgc3RhcnREcmFnSGFuZGxlcihlbGVtZW50KSB7XG4gICAgY29uc3QgZGlzYWJsZWQgPSB0aGlzLmlzRGlzYWJsZWQoKTtcblxuICAgIGlmICghZGlzYWJsZWQpIHtcbiAgICAgIGNvbnN0IHNpemVhYmxlRWxlbWVudCA9IHRoaXMuZ2V0U2l6ZWFibGVFbGVtZW50KCksXG4gICAgICAgICAgICBzaXplYWJsZUVsZW1lbnRIZWlnaHQgPSBzaXplYWJsZUVsZW1lbnQuZ2V0SGVpZ2h0KCksXG4gICAgICAgICAgICBwcmV2aW91c1NpemVhYmxlRWxlbWVudEhlaWdodCA9IHNpemVhYmxlRWxlbWVudEhlaWdodDsgIC8vL1xuXG4gICAgICB0aGlzLnNldFByZXZpb3VzU2l6ZWFibGVFbGVtZW50SGVpZ2h0KHByZXZpb3VzU2l6ZWFibGVFbGVtZW50SGVpZ2h0KTtcbiAgICB9XG5cbiAgICB0aGlzLnNldEN1cnNvcigpO1xuICB9XG5cbiAgZHJhZ0hhbmRsZXIocmVsYXRpdmVNb3VzZVRvcCwgcmVsYXRpdmVNb3VzZUxlZnQpIHtcbiAgICBjb25zdCBkaXNhYmxlZCA9IHRoaXMuaXNEaXNhYmxlZCgpO1xuXG4gICAgaWYgKCFkaXNhYmxlZCkge1xuICAgICAgY29uc3QgZGlyZWN0aW9uID0gdGhpcy5nZXREaXJlY3Rpb24oKSxcbiAgICAgICAgICAgIHNpemVhYmxlRWxlbWVudCA9IHRoaXMuZ2V0U2l6ZWFibGVFbGVtZW50KCksXG4gICAgICAgICAgICBwcmV2aW91c1NpemVhYmxlRWxlbWVudEhlaWdodCA9IHRoaXMuZ2V0UHJldmlvdXNTaXplYWJsZUVsZW1lbnRIZWlnaHQoKSxcbiAgICAgICAgICAgIHNpemVhYmxlRWxlbWVudEhlaWdodCA9IHByZXZpb3VzU2l6ZWFibGVFbGVtZW50SGVpZ2h0IC0gZGlyZWN0aW9uICogcmVsYXRpdmVNb3VzZVRvcCxcbiAgICAgICAgICAgIGhlaWdodCA9IHNpemVhYmxlRWxlbWVudEhlaWdodDsgLy8vXG5cbiAgICAgIHNpemVhYmxlRWxlbWVudC5zZXRIZWlnaHQoaGVpZ2h0KTtcbiAgICB9XG4gIH1cblxuICBnZXRQcmV2aW91c1NpemVhYmxlRWxlbWVudEhlaWdodCgpIHtcbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuZ2V0U3RhdGUoKSxcbiAgICAgICAgICB7IHByZXZpb3VzU2l6ZWFibGVFbGVtZW50SGVpZ2h0IH0gPSBzdGF0ZTtcblxuICAgIHJldHVybiBwcmV2aW91c1NpemVhYmxlRWxlbWVudEhlaWdodDtcbiAgfVxuXG4gIHNldFByZXZpb3VzU2l6ZWFibGVFbGVtZW50SGVpZ2h0KHByZXZpb3VzU2l6ZWFibGVFbGVtZW50SGVpZ2h0KSB7XG4gICAgdGhpcy51cGRhdGVTdGF0ZSh7XG4gICAgICBwcmV2aW91c1NpemVhYmxlRWxlbWVudEhlaWdodFxuICAgIH0pO1xuICB9XG5cbiAgc2V0SW5pdGlhbFN0YXRlKCkge1xuICAgIGNvbnN0IHByZXZpb3VzU2l6ZWFibGVFbGVtZW50SGVpZ2h0ID0gbnVsbDtcblxuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgcHJldmlvdXNTaXplYWJsZUVsZW1lbnRIZWlnaHRcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcGVydGllcyA9IHtcbiAgICBjbGFzc05hbWU6IFwiaG9yaXpvbnRhbFwiXG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhTdHlsZShIb3Jpem9udGFsU3BsaXR0ZXIpYFxuXG4gIGhlaWdodDogMXJlbTtcblxuYDtcbiIsICIndXNlIHN0cmljdCc7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgY3Vyc29yIH0gZnJvbSBcIi4vY3Vyc29yXCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgUm93RGl2IH0gZnJvbSBcIi4vZGl2L3Jvd1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBSb3dzRGl2IH0gZnJvbSBcIi4vZGl2L3Jvd3NcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ29sdW1uRGl2IH0gZnJvbSBcIi4vZGl2L2NvbHVtblwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDb2x1bW5zRGl2IH0gZnJvbSBcIi4vZGl2L2NvbHVtbnNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgU3BsaXR0ZXJEaXYgfSBmcm9tIFwiLi9kaXYvc3BsaXR0ZXJcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgU2l6ZWFibGVEaXYgfSBmcm9tIFwiLi9kaXYvc2l6ZWFibGVcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgU2l6ZWFibGVTZWN0aW9uIH0gZnJvbSBcIi4vc2VjdGlvbi9zaXplYWJsZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBWZXJ0aWNhbFNwbGl0dGVyRGl2IH0gZnJvbSBcIi4vZGl2L3NwbGl0dGVyL3ZlcnRpY2FsXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEhvcml6b250YWxTcGxpdHRlckRpdiB9IGZyb20gXCIuL2Rpdi9zcGxpdHRlci9ob3Jpem9udGFsXCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB3aXRoU3R5bGUgZnJvbSBcImVhc3ktd2l0aC1zdHlsZVwiOyAgLy8vXG5cbmltcG9ydCBZYXBwIGZyb20gXCIuLi9pbmRleFwiOyAgLy8vXG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhTdHlsZShjbGFzcyBleHRlbmRzIFlhcHAge1xuICBzdGF0aWMgZGVmYXVsdFByb3BlcnRpZXMgPSB7XG4gICAgZWRpdGFibGU6IHRydWVcbiAgfTtcbn0pYFxuXG4gIGJvcmRlcjogMXB4IHNvbGlkO1xuICBib3JkZXItY29sb3I6ICM2NjY7XG4gIFxuYDtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHdpdGhTdHlsZSBmcm9tIFwiZWFzeS13aXRoLXN0eWxlXCI7ICAvLy9cblxuY29uc3QgU3ViSGVhZGluZyA9IHdpdGhTdHlsZS5oMmBcblxuICBtYXJnaW46IDFyZW0gMCAwLjVyZW0gMDtcbiAgZm9udC1zaXplOiAycmVtO1xuICBcbiAgOmZpcnN0LW9mLXR5cGUge1xuICAgIG1hcmdpbi10b3A6IDA7XG4gIH1cblxuYDtcblxuZXhwb3J0IGRlZmF1bHQgU3ViSGVhZGluZztcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHdpdGhTdHlsZSBmcm9tIFwiZWFzeS13aXRoLXN0eWxlXCI7ICAvLy9cblxuaW1wb3J0IHsgVGV4dGFyZWEgfSBmcm9tIFwiZWFzeVwiO1xuXG5leHBvcnQgZGVmYXVsdCB3aXRoU3R5bGUoVGV4dGFyZWEpYFxuXG4gIGJvcmRlcjogMXB4IHNvbGlkIGRhcmtncmV5O1xuICByZXNpemU6IG5vbmU7XG4gIHBhZGRpbmc6IDAuMjVyZW07XG4gIGZsZXgtZ3JvdzogMTtcbiAgZm9udC1zaXplOiAxLjJyZW07XG4gIHdoaXRlLXNwYWNlOiBwcmU7XG4gIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7XG5cbmA7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBUZXh0YXJlYSBmcm9tIFwiLi4vdGV4dGFyZWFcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQk5GVGV4dGFyZWEgZXh0ZW5kcyBUZXh0YXJlYSB7XG4gIGdldEJORigpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0VmFsdWUoKSxcbiAgICAgICAgICBibmYgPSB2YWx1ZTsgLy8vXG5cbiAgICByZXR1cm4gYm5mO1xuICB9XG5cbiAgc2V0Qk5GKGJuZikge1xuICAgIGNvbnN0IHZhbHVlID0gYm5mO1xuXG4gICAgdGhpcy5zZXRWYWx1ZSh2YWx1ZSk7XG4gIH1cblxuICBwYXJlbnRDb250ZXh0KCkge1xuICAgIGNvbnN0IGdldEJORiA9IHRoaXMuZ2V0Qk5GLmJpbmQodGhpcyksXG4gICAgICAgICAgc2V0Qk5GID0gdGhpcy5zZXRCTkYuYmluZCh0aGlzKTtcblxuICAgIHJldHVybiAoe1xuICAgICAgZ2V0Qk5GLFxuICAgICAgc2V0Qk5GXG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgZGVmYXVsdFByb3BlcnRpZXMgPSB7XG4gICAgY2xhc3NOYW1lOiBcImJuZlwiLFxuICAgIHNwZWxsQ2hlY2s6IFwiZmFsc2VcIlxuICB9O1xufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBFTVBUWV9TVFJJTkcgPSBcIlwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVGV4dGFyZWEgZnJvbSBcIi4uL3RleHRhcmVhXCI7XG5cbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVG9rZW5zVGV4dGFyZWEgZXh0ZW5kcyBUZXh0YXJlYSB7XG4gIHNldFRva2Vucyh0b2tlbnMpIHtcbiAgICBpZiAodG9rZW5zICE9PSBudWxsKSB7XG4gICAgICBsZXQgbGluZU51bWJlciA9IDEsXG4gICAgICAgICAgcHJldmlvdXNUb2tlbiA9IG51bGw7XG5cbiAgICAgIGNvbnN0IGh0bWwgPSB0b2tlbnMucmVkdWNlKChodG1sLCB0b2tlbikgPT4ge1xuICAgICAgICBjb25zdCB0b2tlbkhUTUwgPSB0b2tlbi5hc0hUTUwoKTtcblxuICAgICAgICBpZiAocHJldmlvdXNUb2tlbiA9PT0gbnVsbCkge1xuICAgICAgICAgIGh0bWwgKz0gYCR7bGluZU51bWJlcisrfTogYDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBwcmV2aW91c1Rva2VuRW5kT2ZMaW5lVG9rZW4gPSBwcmV2aW91c1Rva2VuLmlzRW5kT2ZMaW5lVG9rZW4oKTtcblxuICAgICAgICAgIGlmIChwcmV2aW91c1Rva2VuRW5kT2ZMaW5lVG9rZW4pIHtcbiAgICAgICAgICAgIGh0bWwgKz0gYCR7bGluZU51bWJlcisrfTogYDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBodG1sICs9IHRva2VuSFRNTDtcblxuICAgICAgICBwcmV2aW91c1Rva2VuID0gdG9rZW47XG5cbiAgICAgICAgcmV0dXJuIGh0bWw7XG4gICAgICB9LCBFTVBUWV9TVFJJTkcpO1xuXG4gICAgICB0aGlzLmh0bWwoaHRtbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2xlYXJUb2tlbnMoKTtcbiAgICB9XG4gIH1cblxuICBjbGVhclRva2VucygpIHtcbiAgICBjb25zdCBodG1sID0gRU1QVFlfU1RSSU5HO1xuXG4gICAgdGhpcy5odG1sKGh0bWwpO1xuICB9XG5cbiAgcGFyZW50Q29udGV4dCgpIHtcbiAgICBjb25zdCBzZXRUb2tlbnMgPSB0aGlzLnNldFRva2Vucy5iaW5kKHRoaXMpLFxuICAgICAgICAgIGNsZWFyVG9rZW5zID0gdGhpcy5jbGVhclRva2Vucy5iaW5kKHRoaXMpO1xuXG4gICAgcmV0dXJuICh7XG4gICAgICBzZXRUb2tlbnMsXG4gICAgICBjbGVhclRva2Vuc1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIGNsYXNzTmFtZTogXCJ0b2tlbnNcIixcbiAgICBzcGVsbENoZWNrOiBcImZhbHNlXCIsXG4gICAgcmVhZE9ubHk6IHRydWVcbiAgfTtcbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgd2l0aFN0eWxlIGZyb20gXCJlYXN5LXdpdGgtc3R5bGVcIjsgIC8vL1xuXG5pbXBvcnQgeyBTaXplYWJsZURpdiB9IGZyb20gXCJlYXN5LWxheW91dFwiO1xuXG5jbGFzcyBUb3BTaXplYWJsZURpdiBleHRlbmRzIFNpemVhYmxlRGl2IHtcbiAgcGFyZW50Q29udGV4dCgpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgZ2V0VG9wU2l6ZWFibGVEaXZIZWlnaHQgPSB0aGlzLmdldEhlaWdodC5iaW5kKHRoaXMpLFxuICAgICAgICAgIHBhcmVudENvbnRleHQgPSBPYmplY3QuYXNzaWduKGNvbnRleHQsIHtcbiAgICAgICAgICAgIGdldFRvcFNpemVhYmxlRGl2SGVpZ2h0XG4gICAgICAgICAgfSk7XG5cbiAgICByZXR1cm4gcGFyZW50Q29udGV4dDtcbiAgfVxuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcGVydGllcyA9IHtcbiAgICBjbGFzc05hbWU6IFwidG9wXCJcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgd2l0aFN0eWxlKFRvcFNpemVhYmxlRGl2KWBcblxuICBoZWlnaHQ6IDQ4cmVtO1xuICBtaW4taGVpZ2h0OiAxMnJlbTtcbiAgXG5gO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgd2l0aFN0eWxlIGZyb20gXCJlYXN5LXdpdGgtc3R5bGVcIjsgIC8vL1xuXG5pbXBvcnQgeyBTaXplYWJsZURpdiB9IGZyb20gXCJlYXN5LWxheW91dFwiO1xuXG5jbGFzcyBMZWZ0U2l6ZWFibGVEaXYgZXh0ZW5kcyBTaXplYWJsZURpdiB7XG4gIHBhcmVudENvbnRleHQoKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGdldExlZnRTaXplYWJsZURpdldpZHRoID0gdGhpcy5nZXRXaWR0aC5iaW5kKHRoaXMpLFxuICAgICAgICAgIHBhcmVudENvbnRleHQgPSBPYmplY3QuYXNzaWduKGNvbnRleHQsIHtcbiAgICAgICAgICAgIGdldExlZnRTaXplYWJsZURpdldpZHRoXG4gICAgICAgICAgfSk7XG5cbiAgICByZXR1cm4gcGFyZW50Q29udGV4dDtcbiAgfVxuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcGVydGllcyA9IHtcbiAgICBjbGFzc05hbWU6IFwibGVmdFwiXG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhTdHlsZShMZWZ0U2l6ZWFibGVEaXYpYFxuXG4gIHdpZHRoOiA2MHJlbTtcbiAgbWluLXdpZHRoOiAyNHJlbTtcbiAgXG5gO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgd2l0aFN0eWxlIGZyb20gXCJlYXN5LXdpdGgtc3R5bGVcIjsgIC8vL1xuXG5pbXBvcnQgeyBTaXplYWJsZURpdiB9IGZyb20gXCJlYXN5LWxheW91dFwiO1xuXG5jbGFzcyBSaWdodFNpemVhYmxlRGl2IGV4dGVuZHMgU2l6ZWFibGVEaXYge1xuICBzdGF0aWMgZGVmYXVsdFByb3BlcnRpZXMgPSB7XG4gICAgY2xhc3NOYW1lOiBcInJpZ2h0XCJcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgd2l0aFN0eWxlKFJpZ2h0U2l6ZWFibGVEaXYpYFxuXG4gIGhlaWdodDogMjRyZW07XG4gIG1pbi1oZWlnaHQ6IDEycmVtO1xuICBcbmA7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB3aXRoU3R5bGUgZnJvbSBcImVhc3ktd2l0aC1zdHlsZVwiOyAgLy8vXG5cbmltcG9ydCB7IFNpemVhYmxlRGl2IH0gZnJvbSBcImVhc3ktbGF5b3V0XCI7XG5cbmNsYXNzIE1pZGRsZVNpemVhYmxlRGl2IGV4dGVuZHMgU2l6ZWFibGVEaXYge1xuICBzdGF0aWMgZGVmYXVsdFByb3BlcnRpZXMgPSB7XG4gICAgY2xhc3NOYW1lOiBcIm1pZGRsZVwiXG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhTdHlsZShNaWRkbGVTaXplYWJsZURpdilgXG5cbiAgaGVpZ2h0OiAxMnJlbTtcbiAgbWluLWhlaWdodDogNnJlbTtcbiAgXG5gO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVGV4dGFyZWEgZnJvbSBcIi4uL3RleHRhcmVhXCI7XG5cbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGFyc2VUcmVlVGV4dGFyZWEgZXh0ZW5kcyBUZXh0YXJlYSB7XG4gIHNldFBhcnNlVHJlZShwYXJzZVRyZWUpIHtcbiAgICBpZiAocGFyc2VUcmVlICE9PSBudWxsKSB7XG4gICAgICBwYXJzZVRyZWUuc2hpZnRMaW5lKCk7ICAvL1xuXG4gICAgICBjb25zdCBwYXJzZVRyZWVTdHJpbmcgPSBwYXJzZVRyZWUuYXNTdHJpbmcoKSxcbiAgICAgICAgICAgIHZhbHVlID0gcGFyc2VUcmVlU3RyaW5nOyAgLy8vXG5cbiAgICAgIHRoaXMuc2V0VmFsdWUodmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNsZWFyUGFyc2VUcmVlKCk7XG4gICAgfVxuICB9XG5cbiAgY2xlYXJQYXJzZVRyZWUoKSB7XG4gICAgY29uc3QgdmFsdWUgPSBFTVBUWV9TVFJJTkc7XG5cbiAgICB0aGlzLnNldFZhbHVlKHZhbHVlKTtcbiAgfVxuXG4gIHBhcmVudENvbnRleHQoKSB7XG4gICAgY29uc3Qgc2V0UGFyc2VUcmVlID0gdGhpcy5zZXRQYXJzZVRyZWUuYmluZCh0aGlzKSxcbiAgICAgICAgICBjbGVhclBhcnNlVHJlZSA9IHRoaXMuY2xlYXJQYXJzZVRyZWUuYmluZCh0aGlzKTtcblxuICAgIHJldHVybiAoe1xuICAgICAgc2V0UGFyc2VUcmVlLFxuICAgICAgY2xlYXJQYXJzZVRyZWVcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcGVydGllcyA9IHtcbiAgICBjbGFzc05hbWU6IFwidG9rZW5zXCIsXG4gICAgc3BlbGxDaGVjazogXCJmYWxzZVwiLFxuICAgIHJlYWRPbmx5OiB0cnVlXG4gIH07XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFRleHRhcmVhIGZyb20gXCIuLi90ZXh0YXJlYVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMZXhpY2FsRW50cmllc1RleHRhcmVhIGV4dGVuZHMgVGV4dGFyZWEge1xuICBnZXRMZXhpY2FsRW50cmllcygpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0VmFsdWUoKSxcbiAgICAgICAgICBsZXhpY2FsRW50cmllcyA9IEpTT04ucGFyc2UodmFsdWUpO1xuXG4gICAgcmV0dXJuIGxleGljYWxFbnRyaWVzO1xuICB9XG5cbiAgc2V0TGV4aWNhbEVudHJpZXMobGV4aWNhbEVudHJpZXMpIHtcbiAgICBjb25zdCB2YWx1ZSA9IEpTT04uc3RyaW5naWZ5KGxleGljYWxFbnRyaWVzLCBudWxsLCBcIiAgXCIpO1xuXG4gICAgdGhpcy5zZXRWYWx1ZSh2YWx1ZSk7XG4gIH1cblxuICBwYXJlbnRDb250ZXh0KCkge1xuICAgIGNvbnN0IGdldExleGljYWxFbnRyaWVzID0gdGhpcy5nZXRMZXhpY2FsRW50cmllcy5iaW5kKHRoaXMpLFxuICAgICAgICAgIHNldExleGljYWxFbnRyaWVzID0gdGhpcy5zZXRMZXhpY2FsRW50cmllcy5iaW5kKHRoaXMpO1xuXG4gICAgcmV0dXJuICh7XG4gICAgICBnZXRMZXhpY2FsRW50cmllcyxcbiAgICAgIHNldExleGljYWxFbnRyaWVzXG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgZGVmYXVsdFByb3BlcnRpZXMgPSB7XG4gICAgY2xhc3NOYW1lOiBcImxleGljYWwtZW50cmllc1wiLFxuICAgIHNwZWxsQ2hlY2s6IFwiZmFsc2VcIlxuICB9O1xufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5jb25zdCB7IGZpcnN0IH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0UnVsZUZyb21SdWxlcyhydWxlcykge1xuICBjb25zdCBmaXJzdFJ1bGUgPSBmaXJzdChydWxlcyksXG4gICAgICAgIHN0YXJ0UnVsZSA9IGZpcnN0UnVsZTsgIC8vL1xuXG4gIHJldHVybiBzdGFydFJ1bGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBydWxlTWFwRnJvbVJ1bGVzKHJ1bGVzKSB7XG4gIGNvbnN0IHJ1bGVNYXAgPSBydWxlcy5yZWR1Y2UoKHJ1bGVNYXAsIHJ1bGUpID0+IHtcbiAgICBjb25zdCBydWxlTmFtZSA9IHJ1bGUuZ2V0TmFtZSgpO1xuXG4gICAgcnVsZU1hcFtydWxlTmFtZV0gPSBydWxlO1xuXG4gICAgcmV0dXJuIHJ1bGVNYXA7XG4gIH0sIHt9KTtcblxuICByZXR1cm4gcnVsZU1hcDtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHdpdGhTdHlsZSBmcm9tIFwiZWFzeS13aXRoLXN0eWxlXCI7ICAvLy9cblxuaW1wb3J0IHsgRWxlbWVudCB9IGZyb20gXCJlYXN5XCI7XG5pbXBvcnQgeyBCTkZMZXhlciB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcbmltcG9ydCB7IEJORlBhcnNlciB9IGZyb20gXCJvY2NhbS1wYXJzZXJzXCI7XG5pbXBvcnQgeyBlbGltaW5hdGVMZWZ0UmVjdXJzaW9uLCByZW1vdmVPclJlbmFtZUludGVybWVkaWF0ZU5vZGVzIH0gZnJvbSBcIm9jY2FtLWdyYW1tYXItdXRpbGl0aWVzXCI7XG5pbXBvcnQgeyBSb3dEaXYsIFJvd3NEaXYsIENvbHVtbkRpdiwgQ29sdW1uc0RpdiwgVmVydGljYWxTcGxpdHRlckRpdiwgSG9yaXpvbnRhbFNwbGl0dGVyRGl2IH0gZnJvbSBcImVhc3ktbGF5b3V0XCI7XG5cbmltcG9ydCBZYXBwIGZyb20gXCIuL3lhcHBcIjtcbmltcG9ydCBTdWJIZWFkaW5nIGZyb20gXCIuL3N1YkhlYWRpbmdcIjtcbmltcG9ydCBCTkZUZXh0YXJlYSBmcm9tIFwiLi90ZXh0YXJlYS9ibmZcIjtcbmltcG9ydCBUb2tlbnNUZXh0YXJlYSBmcm9tIFwiLi90ZXh0YXJlYS90b2tlbnNcIjtcbmltcG9ydCBUb3BTaXplYWJsZURpdiBmcm9tIFwiLi9kaXYvc2l6ZWFibGUvdG9wXCI7XG5pbXBvcnQgTGVmdFNpemVhYmxlRGl2IGZyb20gXCIuL2Rpdi9zaXplYWJsZS9sZWZ0XCI7XG5pbXBvcnQgUmlnaHRTaXplYWJsZURpdiBmcm9tIFwiLi9kaXYvc2l6ZWFibGUvcmlnaHRcIjtcbmltcG9ydCBNaWRkbGVTaXplYWJsZURpdiBmcm9tIFwiLi9kaXYvc2l6ZWFibGUvbWlkZGxlXCI7XG5pbXBvcnQgUGFyc2VUcmVlVGV4dGFyZWEgZnJvbSBcIi4vdGV4dGFyZWEvcGFyc2VUcmVlXCI7XG5pbXBvcnQgTGV4aWNhbEVudHJpZXNUZXh0YXJlYSBmcm9tIFwiLi90ZXh0YXJlYS9sZXhpY2FsRW50cmllc1wiO1xuXG5pbXBvcnQgeyBydWxlTWFwRnJvbVJ1bGVzLCBzdGFydFJ1bGVGcm9tUnVsZXMgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3J1bGVzXCI7XG5cbmNvbnN0IGJuZkxleGVyID0gQk5GTGV4ZXIuZnJvbU5vdGhpbmcoKSxcbiAgICAgIGJuZlBhcnNlciA9IEJORlBhcnNlci5mcm9tTm90aGluZygpO1xuXG5jbGFzcyBWaWV3IGV4dGVuZHMgRWxlbWVudCB7XG4gIGNvbnRlbnRDaGFuZ2VIYW5kbGVyKGV2ZW50LCBlbGVtZW50KSB7XG4gICAgdGhpcy51cGRhdGUoKTtcbiAgfVxuXG4gIGtleVVwSGFuZGxlcihldmVudCwgZWxlbWVudCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBsZXhpY2FsRW50cmllcyA9IHRoaXMuZ2V0TGV4aWNhbEVudHJpZXMoKSxcbiAgICAgICAgICAgIGVudHJpZXMgPSBsZXhpY2FsRW50cmllcywgLy8vXG4gICAgICAgICAgICBibmYgPSB0aGlzLmdldEJORigpLFxuICAgICAgICAgICAgdG9rZW5zID0gYm5mTGV4ZXIudG9rZW5zRnJvbUJORihibmYpLFxuICAgICAgICAgICAgcnVsZXMgPSBibmZQYXJzZXIucnVsZXNGcm9tVG9rZW5zKHRva2VucyksXG4gICAgICAgICAgICBydWxlTWFwID0gcnVsZU1hcEZyb21SdWxlcyhydWxlcyk7XG5cbiAgICAgIGxldCBzdGFydFJ1bGUgPSBzdGFydFJ1bGVGcm9tUnVsZXMocnVsZXMpO1xuXG4gICAgICBzdGFydFJ1bGUgPSBlbGltaW5hdGVMZWZ0UmVjdXJzaW9uKHN0YXJ0UnVsZSwgcnVsZU1hcCk7XG5cbiAgICAgIGNvbnN0IHsgUGx1Z2luIH0gPSB0aGlzLmNvbnN0cnVjdG9yLFxuICAgICAgICAgICAgeyBMZXhlciwgUGFyc2VyIH0gPSBQbHVnaW4sXG4gICAgICAgICAgICBsZXhlciA9IExleGVyLmZyb21FbnRyaWVzKGVudHJpZXMpLFxuICAgICAgICAgICAgcGFyc2VyID0gbmV3IFBhcnNlcihzdGFydFJ1bGUsIHJ1bGVNYXApLCAgLy8vXG4gICAgICAgICAgICB5YXBwTGV4ZXIgPSBsZXhlciwgIC8vL1xuICAgICAgICAgICAgeWFwcFBhcnNlciA9IHBhcnNlcjsgIC8vL1xuXG4gICAgICB0aGlzLnNldFlhcHBMZXhlcih5YXBwTGV4ZXIpO1xuXG4gICAgICB0aGlzLnNldFlhcHBQYXJzZXIoeWFwcFBhcnNlcik7XG5cbiAgICAgIHRoaXMudXBkYXRlWWFwcCgpO1xuXG4gICAgICB0aGlzLnVwZGF0ZSgpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmxvZyhlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgZHJhZ0hhbmRsZXIoKSB7XG4gICAgY29uc3QgbGVmdFNpemVhYmxlRGl2V2lkdGggPSB0aGlzLmdldExlZnRTaXplYWJsZURpdldpZHRoKCksXG4gICAgICAgICAgdG9wU2l6ZWFibGVEaXZIZWlnaHQgPSB0aGlzLmdldFRvcFNpemVhYmxlRGl2SGVpZ2h0KCksXG4gICAgICAgICAgeWFwcFdpZHRoID0gbGVmdFNpemVhYmxlRGl2V2lkdGgsIC8vL1xuICAgICAgICAgIHlhcHBIZWlnaHQgPSB0b3BTaXplYWJsZURpdkhlaWdodDsgIC8vL1xuXG4gICAgdGhpcy5zZXRZYXBwV2lkdGgoeWFwcFdpZHRoKTtcbiAgICB0aGlzLnNldFlhcHBIZWlnaHQoeWFwcEhlaWdodCk7XG5cbiAgICB0aGlzLnJlc2l6ZVlhcHAoKTtcbiAgfVxuXG4gIHVwZGF0ZSgpIHtcbiAgICB0cnkge1xuICAgICAgbGV0IHBhcnNlVHJlZSA9IG51bGw7XG5cbiAgICAgIGNvbnN0IHBsdWdpbiA9IHRoaXMuZ2V0UGx1Z2luKCksXG4gICAgICAgICAgICB0b2tlbnMgPSBwbHVnaW4uZ2V0VG9rZW5zKCksXG4gICAgICAgICAgICBub2RlID0gcGx1Z2luLmdldE5vZGUoKTtcblxuICAgICAgaWYgKG5vZGUgIT09IG51bGwpIHtcbiAgICAgICAgcmVtb3ZlT3JSZW5hbWVJbnRlcm1lZGlhdGVOb2Rlcyhub2RlKTtcblxuICAgICAgICBwYXJzZVRyZWUgPSBub2RlLmFzUGFyc2VUcmVlKHRva2Vucyk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc2V0VG9rZW5zKHRva2Vucyk7XG5cbiAgICAgIHRoaXMuc2V0UGFyc2VUcmVlKHBhcnNlVHJlZSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcblxuICAgICAgdGhpcy5jbGVhclRva2VucygpO1xuXG4gICAgICB0aGlzLmNsZWFyUGFyc2VUcmVlKCk7XG4gICAgfVxuICB9XG5cbiAgZGlkTW91bnQoKSB7XG4gICAgdGhpcy51cGRhdGUoKTtcblxuICAgIHRoaXMuZHJhZ0hhbmRsZXIoKTsgLy8vXG5cbiAgICB0aGlzLnJlc2l6ZVlhcHAoKTsgIC8vL1xuICB9XG5cbiAgd2lsbFVubW91bnQoKSB7XG4gICAgLy8vXG4gIH1cblxuICBjaGlsZEVsZW1lbnRzKCkge1xuICAgIGNvbnN0IHsgUGx1Z2luLCBmaXJhQ29kZSwgaW5pdGlhbENvbnRlbnQgfSA9IHRoaXMuY29uc3RydWN0b3IsXG4gICAgICAgICAgZHJhZ0hhbmRsZXIgPSB0aGlzLmRyYWdIYW5kbGVyLmJpbmQodGhpcyksXG4gICAgICAgICAga2V5VXBIYW5kbGVyID0gdGhpcy5rZXlVcEhhbmRsZXIuYmluZCh0aGlzKSxcbiAgICAgICAgICBjb250ZW50Q2hhbmdlSGFuZGxlciA9IHRoaXMuY29udGVudENoYW5nZUhhbmRsZXIuYmluZCh0aGlzKTtcblxuICAgIHJldHVybiAoW1xuXG4gICAgICA8Q29sdW1uc0Rpdj5cbiAgICAgICAgPExlZnRTaXplYWJsZURpdj5cbiAgICAgICAgICA8Um93c0Rpdj5cbiAgICAgICAgICAgIDxUb3BTaXplYWJsZURpdj5cbiAgICAgICAgICAgICAgPFlhcHAgUGx1Z2luPXtQbHVnaW59IGZpcmFDb2RlPXtmaXJhQ29kZX0gb25Db250ZW50Q2hhbmdlPXtjb250ZW50Q2hhbmdlSGFuZGxlcn0gPlxuICAgICAgICAgICAgICAgIHtpbml0aWFsQ29udGVudH1cbiAgICAgICAgICAgICAgPC9ZYXBwPlxuICAgICAgICAgICAgPC9Ub3BTaXplYWJsZURpdj5cbiAgICAgICAgICAgIDxIb3Jpem9udGFsU3BsaXR0ZXJEaXYgb25EcmFnPXtkcmFnSGFuZGxlcn0vPlxuICAgICAgICAgICAgPFJvd0Rpdj5cbiAgICAgICAgICAgICAgPFJvd3NEaXY+XG4gICAgICAgICAgICAgICAgPE1pZGRsZVNpemVhYmxlRGl2PlxuICAgICAgICAgICAgICAgICAgPFJvd3NEaXY+XG4gICAgICAgICAgICAgICAgICAgIDxTdWJIZWFkaW5nPlxuICAgICAgICAgICAgICAgICAgICAgIFRva2Vuc1xuICAgICAgICAgICAgICAgICAgICA8L1N1YkhlYWRpbmc+XG4gICAgICAgICAgICAgICAgICAgIDxUb2tlbnNUZXh0YXJlYSAvPlxuICAgICAgICAgICAgICAgICAgPC9Sb3dzRGl2PlxuICAgICAgICAgICAgICAgIDwvTWlkZGxlU2l6ZWFibGVEaXY+XG4gICAgICAgICAgICAgICAgPEhvcml6b250YWxTcGxpdHRlckRpdiAvPlxuICAgICAgICAgICAgICAgIDxSb3dzRGl2PlxuICAgICAgICAgICAgICAgICAgPFN1YkhlYWRpbmc+XG4gICAgICAgICAgICAgICAgICAgIFBhcnNlIHRyZWVcbiAgICAgICAgICAgICAgICAgIDwvU3ViSGVhZGluZz5cbiAgICAgICAgICAgICAgICAgIDxQYXJzZVRyZWVUZXh0YXJlYSAvPlxuICAgICAgICAgICAgICAgIDwvUm93c0Rpdj5cbiAgICAgICAgICAgICAgPC9Sb3dzRGl2PlxuICAgICAgICAgICAgPC9Sb3dEaXY+XG4gICAgICAgICAgPC9Sb3dzRGl2PlxuICAgICAgICA8L0xlZnRTaXplYWJsZURpdj5cbiAgICAgICAgPFZlcnRpY2FsU3BsaXR0ZXJEaXYgb25EcmFnPXtkcmFnSGFuZGxlcn0vPlxuICAgICAgICA8Q29sdW1uRGl2PlxuICAgICAgICAgIDxSb3dzRGl2PlxuICAgICAgICAgICAgPFJpZ2h0U2l6ZWFibGVEaXY+XG4gICAgICAgICAgICAgIDxSb3dzRGl2PlxuICAgICAgICAgICAgICAgIDxTdWJIZWFkaW5nPlxuICAgICAgICAgICAgICAgICAgTGV4aWNhbCBlbnRyaWVzXG4gICAgICAgICAgICAgICAgPC9TdWJIZWFkaW5nPlxuICAgICAgICAgICAgICAgIDxMZXhpY2FsRW50cmllc1RleHRhcmVhIG9uS2V5VXA9e2tleVVwSGFuZGxlcn0gLz5cbiAgICAgICAgICAgICAgPC9Sb3dzRGl2PlxuICAgICAgICAgICAgPC9SaWdodFNpemVhYmxlRGl2PlxuICAgICAgICAgICAgPEhvcml6b250YWxTcGxpdHRlckRpdiAvPlxuICAgICAgICAgICAgPFJvd0Rpdj5cbiAgICAgICAgICAgICAgPFJvd3NEaXY+XG4gICAgICAgICAgICAgICAgPFN1YkhlYWRpbmc+XG4gICAgICAgICAgICAgICAgICBCTkZcbiAgICAgICAgICAgICAgICA8L1N1YkhlYWRpbmc+XG4gICAgICAgICAgICAgICAgPEJORlRleHRhcmVhIG9uS2V5VXA9e2tleVVwSGFuZGxlcn0gLz5cbiAgICAgICAgICAgICAgPC9Sb3dzRGl2PlxuICAgICAgICAgICAgPC9Sb3dEaXY+XG4gICAgICAgICAgPC9Sb3dzRGl2PlxuICAgICAgICA8L0NvbHVtbkRpdj5cbiAgICAgIDwvQ29sdW1uc0Rpdj5cblxuICAgIF0pO1xuICB9XG5cbiAgaW5pdGlhbGlzZSgpIHtcbiAgICB0aGlzLmFzc2lnbkNvbnRleHQoKTtcblxuICAgIGNvbnN0IHsgUGx1Z2luIH0gPSB0aGlzLmNvbnN0cnVjdG9yLFxuICAgICAgICAgIHsgTGV4ZXIsIFBhcnNlciB9ID0gUGx1Z2luLFxuICAgICAgICAgIHsgYm5mIH0gPSBQYXJzZXIsXG4gICAgICAgICAgeyBlbnRyaWVzIH0gPSBMZXhlcixcbiAgICAgICAgICBsZXhpY2FsRW50cmllcyA9IGVudHJpZXM7IC8vL1xuXG4gICAgdGhpcy5zZXRCTkYoYm5mKTtcblxuICAgIHRoaXMuc2V0TGV4aWNhbEVudHJpZXMobGV4aWNhbEVudHJpZXMpO1xuICB9XG5cbiAgc3RhdGljIHRhZ05hbWUgPSBcImRpdlwiO1xuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcGVydGllcyA9IHtcbiAgICBjbGFzc05hbWU6IFwidmlld1wiXG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhTdHlsZShWaWV3KWBcblxuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDB2aDtcbiAgZGlzcGxheTogZmxleDtcbiAgcGFkZGluZzogMXJlbTtcbiAgXG5gO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVmlldyBmcm9tIFwiLi4vdmlld1wiO1xuXG5pbXBvcnQgWE1MUGx1Z2luIGZyb20gXCIuLi8uLi9wbHVnaW4veG1sXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFhNTFZpZXcgZXh0ZW5kcyBWaWV3IHtcbiAgc3RhdGljIFBsdWdpbiA9IFhNTFBsdWdpbjtcblxuICBzdGF0aWMgZmlyYUNvZGUgPSBmYWxzZTtcblxuICBzdGF0aWMgaW5pdGlhbENvbnRlbnQgPSBgPD94bWwgdmVyc2lvbj1cIjEuMFwiIGVuY29kaW5nPVwiVVRGLThcIj8+XG48IS0tIExvb2sgdG8gV2luZHdhcmQgYnkgSWFpbiBNLiBCYW5rcyAtLT5cbjxib29rPlxuICA8bmFtZT5cbiAgICBMb29rIHRvIFdpbmR3YXJkXG4gIDwvbmFtZT5cbiAgPGF1dGhvcj5cbiAgICBJYWluIE0uIEJhbmtzXG4gIDwvYXV0aG9yPlxuICA8bGFuZ3VhZ2U+XG4gICAgRW5nbGlzaFxuICA8L2xhbmd1YWdlPlxuICA8Z2VucmU+XG4gICAgU2NpZW5jZSBmaWN0aW9uXG4gIDwvZ2VucmU+XG48L2Jvb2s+YDtcblxuICBzdGF0aWMgZGVmYXVsdFByb3BlcnRpZXMgPSB7XG4gICAgY2xhc3NOYW1lOiBcInhtbFwiXG4gIH07XG59O1xuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBWaWV3IGZyb20gXCIuLi92aWV3XCI7XG5cbmltcG9ydCBKU09OUGx1Z2luIGZyb20gXCIuLi8uLi9wbHVnaW4vanNvblwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBKU09OVmlldyBleHRlbmRzIFZpZXcge1xuICBzdGF0aWMgUGx1Z2luID0gSlNPTlBsdWdpbjtcblxuICBzdGF0aWMgZmlyYUNvZGUgPSB0cnVlO1xuXG4gIHN0YXRpYyBpbml0aWFsQ29udGVudCA9IGB7ICBcbiAgXCJ0eXBlXCI6IFwiYm9va1wiLFxuICBcInRpdGxlXCI6IFwiTG9vayB0byBXaW5kd2FyZFwiLFxuICBcImF1dGhvclwiOiBcIkxvb2sgdG8gV2luZHdhcmRcIixcbiAgXCJzdG9yZXNcIiA6IFt7XG4gICAgXCJpZGVudGlmaWVyXCI6IDEyM1xuICB9XSxcbiAgXCJkZXRhaWxzXCIgOiB7XG4gICAgXCJpbi1wcmludFwiOiB0cnVlLFxuICAgIFwic3RvY2stY291bnRcIjogMTIzXG4gIH1cbn1gO1xuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcGVydGllcyA9IHtcbiAgICBjbGFzc05hbWU6IFwianNvblwiXG4gIH07XG59O1xuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBWaWV3IGZyb20gXCIuLi92aWV3XCI7XG5cbmltcG9ydCBKYXZhU2NyaXB0UGx1Z2luIGZyb20gXCIuLi8uLi9wbHVnaW4vamF2YXNjcmlwdFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBKYXZhU2NyaXB0VmlldyBleHRlbmRzIFZpZXcge1xuICBzdGF0aWMgUGx1Z2luID0gSmF2YVNjcmlwdFBsdWdpbjtcblxuICBzdGF0aWMgZmlyYUNvZGUgPSB0cnVlO1xuXG4gIHN0YXRpYyBpbml0aWFsQ29udGVudCA9IGBcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFwianV4dGFwb3NlXCI7XG5cbmltcG9ydCB3aXRoU3R5bGUgZnJvbSBcImVhc3ktd2l0aC1zdHlsZVwiOyAvLy9cblxuaW1wb3J0IHsgQm9keSB9IGZyb20gXCJlYXN5XCI7XG5cbmZ1bmN0aW9uIHNpbXBsZUFwcGxpY2F0aW9uKHNlbGVjdG9yKSB7XG4gIGNvbnN0IGJvZHkgPSBuZXcgQm9keShzZWxlY3Rvcik7XG5cbiAgYm9keS5tb3VudChcblxuICAgIDxwPlxuICAgICAgQSBzaW1wbGUgYXBwbGljYXRpb24uXG4gICAgPC9wPlxuXG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhTdHlsZShzaW1wbGVBcHBsaWNhdGlvbilcXGBcblxuICBjb2xvcjogIzMzMztcblxuXFxgO2A7XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIGNsYXNzTmFtZTogXCJqYXZhc2NyaXB0XCJcbiAgfTtcbn07XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFwianV4dGFwb3NlXCI7XG5cbmltcG9ydCB7IEJvZHkgfSBmcm9tIFwiZWFzeVwiO1xuXG5pbXBvcnQgeyByZW5kZXJZYXBwU3R5bGVzIH0gZnJvbSBcIi4vaW5kZXhcIjsgLy8vXG5cbmltcG9ydCBYTUxWaWV3IGZyb20gXCIuL2V4YW1wbGUvdmlldy94bWxcIjtcbmltcG9ydCBKU09OVmlldyBmcm9tIFwiLi9leGFtcGxlL3ZpZXcvanNvblwiO1xuaW1wb3J0IEphdmFTY3JpcHRWaWV3IGZyb20gXCIuL2V4YW1wbGUvdmlldy9qYXZhc2NyaXB0XCI7XG5cbmxldCBWaWV3O1xuXG5jb25zdCBib2R5ID0gbmV3IEJvZHkoKSxcbiAgICAgIGV4YW1wbGUgPSB3aW5kb3cubG9jYXRpb24uc2VhcmNoLnN1YnN0cmluZygxKTsgIC8vL1xuXG5zd2l0Y2ggKGV4YW1wbGUpIHtcbiAgY2FzZSBcInhtbFwiOiBWaWV3ID0gWE1MVmlldzsgYnJlYWs7XG4gIGNhc2UgXCJqc29uXCI6IFZpZXcgPSBKU09OVmlldzsgYnJlYWs7XG4gIGNhc2UgXCJqYXZhc2NyaXB0XCI6IFZpZXcgPSBKYXZhU2NyaXB0VmlldzsgYnJlYWs7XG59XG5cbnJlbmRlcllhcHBTdHlsZXMoKTtcblxuYm9keS5tb3VudChcblxuICA8VmlldyAvPlxuXG4pO1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7O0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRWUsVUFBTSxTQUFOLDJCQUFBO3lCQUNELEtBQUssTUFBSTs7QUFDbkIsZUFBSyxNQUFNO0FBQ1gsZUFBSyxPQUFPOzs7O1lBR2QsS0FBQTttQkFBQSxrQkFBUztBQUNQLHFCQUFPLEtBQUs7Ozs7WUFHZCxLQUFBO21CQUFBLG1CQUFVO0FBQ1IscUJBQU8sS0FBSzs7Ozs7O3dCQVhLOzs7OztBRUZyQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFZSxVQUFNLFNBQU4sMkJBQUE7eUJBQ0QsS0FBSyxNQUFNLE9BQU8sUUFBTTs7QUFDbEMsZUFBSyxNQUFNO0FBQ1gsZUFBSyxPQUFPO0FBQ1osZUFBSyxRQUFRO0FBQ2IsZUFBSyxTQUFTOzs7O1lBR2hCLEtBQUE7bUJBQUEsa0JBQVM7QUFDUCxxQkFBTyxLQUFLOzs7O1lBR2Qs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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFOUIsVUFBTSxTQUFOLHlCQUFBLFNBQUE7OzsyQkFBWTs7Ozs7UUFNWCxpQkFOb0IsT0FBTztBQUMxQixzQkFESSxRQUNHLFdBQVU7QUFFakIsc0JBSEksUUFHRyxxQkFBb0I7UUFDekIsV0FBVzs7cUJBSUEsSUFBQSxnQkFBaUIsUUFBUCxRQUFPOzs7Ozs7QUNkaEM7Ozs7Ozs7QUFFc0IsVUFBQSxpQkFBaUIsd0JBQUE7QUFFZixVQUFBLFNBQU07Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFOUIsVUFBTSxVQUFOLHlCQUFBLFNBQUE7Ozs0QkFBYTs7Ozs7UUFNWixpQkFOcUIsT0FBTztBQUMzQixzQkFESSxTQUNHLFdBQVU7QUFFakIsc0JBSEksU0FHRyxxQkFBb0I7UUFDekIsV0FBVzs7cUJBSUEsSUFBQSxnQkFBa0IsUUFBUixTQUFROzs7Ozs7QUNkakM7Ozs7Ozs7QUFFc0IsVUFBQSxpQkFBaUIsd0JBQUE7QUFFZixVQUFBLFNBQU07Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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
|